Safety Trigger funktioniert wieder, JSON Tool ist im Assets Ordner
This commit is contained in:
parent
008efafae0
commit
31806de9ac
381
Assets/JSon Tool/index.html
Normal file
381
Assets/JSon Tool/index.html
Normal file
@ -0,0 +1,381 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>JSON Question Creator</title>
|
||||||
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||||
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||||
|
<link href="https://fonts.googleapis.com/css2?family=Open+Sans&display=swap" rel="stylesheet">
|
||||||
|
<style>
|
||||||
|
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
color: #FF6900;
|
||||||
|
font-weight: lighter;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
width: 30%;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
font-family: 'Open Sans', Arial, sans-serif;
|
||||||
|
background-color: #fff;
|
||||||
|
color: #434F4F;
|
||||||
|
margin: 0;
|
||||||
|
padding: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container {
|
||||||
|
max-width: 800px;
|
||||||
|
margin: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.question-block {
|
||||||
|
border: 2px solid #FF6900;
|
||||||
|
padding: 1rem;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
border-radius: 8px;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.data-block {
|
||||||
|
padding: 1rem;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
border-radius: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="text"] {
|
||||||
|
width: 100%;
|
||||||
|
padding: 0.5rem;
|
||||||
|
margin: 0.25rem 0;
|
||||||
|
box-sizing: border-box;
|
||||||
|
border-radius:4px;
|
||||||
|
border:1px solid #D9DCDC;
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
background-color: #FF6900;
|
||||||
|
color: white;
|
||||||
|
border: none;
|
||||||
|
padding: 0.75rem 1.5rem;
|
||||||
|
margin-top: 1rem;
|
||||||
|
cursor: pointer;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
background: #f4f4f4;
|
||||||
|
padding: 1rem;
|
||||||
|
white-space: pre-wrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.upload-btn {
|
||||||
|
background-color: #FF6900;
|
||||||
|
color: white;
|
||||||
|
margin-top: 1rem;
|
||||||
|
padding: 0.75rem 1.5rem;
|
||||||
|
border: none;
|
||||||
|
border-radius: 4px;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 0.8rem;
|
||||||
|
line-height: 1.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* place near your other button styles */
|
||||||
|
.delete-question {
|
||||||
|
background-color: #FF6900;
|
||||||
|
color: #fff;
|
||||||
|
border: none;
|
||||||
|
padding: 0.5rem 0.9rem;
|
||||||
|
border-radius: 4px;
|
||||||
|
cursor: pointer;
|
||||||
|
position: absolute;
|
||||||
|
right: 0.75rem;
|
||||||
|
bottom: 0.75rem;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.smallLabel {
|
||||||
|
font-size: 0.9rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="container">
|
||||||
|
<img src="iwm_logo.svg" alt="IWM Logo">
|
||||||
|
<h1>Question Creator</h1>
|
||||||
|
|
||||||
|
<div class="data-block">
|
||||||
|
<label for="gameTitle">Titel des Spiels:</label>
|
||||||
|
<input type="text" id="gameTitle" placeholder="Bitte den Titel des Fragespiels angeben">
|
||||||
|
<br><br>
|
||||||
|
<label for="targetAge">Alter:</label>
|
||||||
|
<input type="text" id="targetAge" placeholder="Bitte das Zielalter der Schüler:innen eingeben">
|
||||||
|
<br><br>
|
||||||
|
<label for="subject">Fach:</label>
|
||||||
|
<input type="text" id="subject" placeholder="Bitte das Fach eingeben">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<div id="questionList"></div>
|
||||||
|
<button id="addQuestion">Add Question</button>
|
||||||
|
<button id="generateJson">Generate JSON</button>
|
||||||
|
<label for="importJson" class="upload-btn" style="float: right;">Import JSON</label>
|
||||||
|
<input type="file" id="importJson" accept=".json" style="display: none;">
|
||||||
|
<pre id="output"></pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script>
|
||||||
|
const questionList = document.getElementById('questionList');
|
||||||
|
const addQuestionButton = document.getElementById('addQuestion');
|
||||||
|
const generateJsonButton = document.getElementById('generateJson');
|
||||||
|
const output = document.getElementById('output');
|
||||||
|
|
||||||
|
questionList.addEventListener('click', (e) => {
|
||||||
|
if (e.target.classList.contains('delete-question')) {
|
||||||
|
const block = e.target.closest('.question-block');
|
||||||
|
if (block && confirm('Diese Frage wirklich löschen?')) {
|
||||||
|
block.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
//makes sure the browser remembers the name links for files and doesn't overwrite them with null
|
||||||
|
function bindFileInput(input, type, initialName = "") {
|
||||||
|
const span = input.nextElementSibling; // the “Linked:” label
|
||||||
|
// persist current filename on the input element
|
||||||
|
input.dataset.linkedName = initialName || "";
|
||||||
|
// set initial label
|
||||||
|
span.textContent = initialName ? `Linked: ${initialName}` : `No ${type} linked`;
|
||||||
|
|
||||||
|
// live updates when user picks/clears a file
|
||||||
|
input.addEventListener('change', function () {
|
||||||
|
const name = this.files && this.files[0] ? this.files[0].name : "";
|
||||||
|
this.dataset.linkedName = name;
|
||||||
|
span.textContent = name ? `Linked: ${name}` : `No ${type} linked`;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function createQuestionBlock() {
|
||||||
|
const div = document.createElement('div');
|
||||||
|
div.className = 'question-block';
|
||||||
|
|
||||||
|
div.innerHTML = `
|
||||||
|
<label>Frage:</label>
|
||||||
|
<input type="text" class="questionText" placeholder="Bitte die Frage eingeben">
|
||||||
|
<br><br>
|
||||||
|
|
||||||
|
<label class="smallLabel">Fragen-Bild (optional):</label>
|
||||||
|
<input type="file" class="questionImage" accept="image/*">
|
||||||
|
<span class="linked-filename" style="font-size:0.8rem; color:#666; margin-left:0.5rem;">Kein Bild eingebunden</span>
|
||||||
|
<br><br>
|
||||||
|
|
||||||
|
<label class="smallLabel">Fragen-Audio (optional):</label>
|
||||||
|
<input type="file" class="questionSound" accept="audio/*">
|
||||||
|
<span class="linked-filename" style="font-size:0.8rem; color:#666; margin-left:0.5rem;">Kein Audio eingebunden</span>
|
||||||
|
<br><br>
|
||||||
|
<br><br>
|
||||||
|
|
||||||
|
<label>Antworten:</label>
|
||||||
|
${[1, 2, 3, 4, 5].map(i => `
|
||||||
|
<div style="margin-bottom: 0.75rem;">
|
||||||
|
<input type="text" class="answerText" placeholder="Antwort ${i}${i === 1 ? ' (korrekte Antwort hier einfügen)' : ''}">
|
||||||
|
<br>
|
||||||
|
<input type="file" class="answerImage" accept="image/*">
|
||||||
|
<span class="linked-filename" style="font-size:0.8rem; color:#666; margin-left:0.5rem;">Kein Bild eingebunden</span>
|
||||||
|
</div>
|
||||||
|
`).join('')}
|
||||||
|
|
||||||
|
<button type="button" class="delete-question">Frage löschen</button>
|
||||||
|
`;
|
||||||
|
|
||||||
|
bindFileInput(div.querySelector('.questionImage'), 'image', "");
|
||||||
|
bindFileInput(div.querySelector('.questionSound'), 'sound', "");
|
||||||
|
div.querySelectorAll('.answerImage').forEach(el => bindFileInput(el, 'image', ""));
|
||||||
|
|
||||||
|
questionList.appendChild(div);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
addQuestionButton.addEventListener('click', createQuestionBlock);
|
||||||
|
|
||||||
|
function download(filename, text) {
|
||||||
|
const element = document.createElement('a');
|
||||||
|
element.setAttribute('href', 'data:text/json;charset=utf-8,' + encodeURIComponent(text));
|
||||||
|
element.setAttribute('download', filename);
|
||||||
|
element.style.display = 'none';
|
||||||
|
document.body.appendChild(element);
|
||||||
|
element.click();
|
||||||
|
document.body.removeChild(element);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// export handler (generate file)
|
||||||
|
generateJsonButton.addEventListener('click', () => {
|
||||||
|
const questions = [];
|
||||||
|
const blocks = document.querySelectorAll('.question-block');
|
||||||
|
|
||||||
|
blocks.forEach(block => {
|
||||||
|
const questionText = (block.querySelector('.questionText')?.value || "").trim();
|
||||||
|
|
||||||
|
// collect question media (preserve linked filenames even after reload)
|
||||||
|
const qImgEl = block.querySelector('.questionImage');
|
||||||
|
const qSndEl = block.querySelector('.questionSound');
|
||||||
|
const questionImage = (qImgEl?.files?.[0]?.name || qImgEl?.dataset?.linkedName || "").trim();
|
||||||
|
const questionSound = (qSndEl?.files?.[0]?.name || qSndEl?.dataset?.linkedName || "").trim();
|
||||||
|
|
||||||
|
// collect answers (up to 5), then FILTER OUT empties
|
||||||
|
const answerTexts = block.querySelectorAll('.answerText');
|
||||||
|
const answerImages = block.querySelectorAll('.answerImage');
|
||||||
|
|
||||||
|
const collected = [];
|
||||||
|
for (let i = 0; i < 5; i++) {
|
||||||
|
const text = (answerTexts[i]?.value || "").trim();
|
||||||
|
const aImgEl = answerImages[i];
|
||||||
|
const image = (aImgEl?.files?.[0]?.name || aImgEl?.dataset?.linkedName || "").trim();
|
||||||
|
collected.push({ text, image });
|
||||||
|
}
|
||||||
|
|
||||||
|
// keep only answers that actually have text
|
||||||
|
const answers = collected.filter(a => a.text.length > 0);
|
||||||
|
|
||||||
|
// only include this question if it has a prompt AND at least one answer
|
||||||
|
if (questionText && answers.length > 0) {
|
||||||
|
questions.push({
|
||||||
|
questionText,
|
||||||
|
questionImage,
|
||||||
|
questionSound,
|
||||||
|
answers, // variable length (1..5)
|
||||||
|
correctAnswerIndex: 0 // first provided answer remains the correct one
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// else: skip empty/unfinished question blocks entirely
|
||||||
|
});
|
||||||
|
|
||||||
|
const metadata = {
|
||||||
|
title: (document.getElementById('gameTitle').value || "").trim(),
|
||||||
|
age: (document.getElementById('targetAge').value || "").trim(),
|
||||||
|
subject: (document.getElementById('subject').value || "").trim()
|
||||||
|
};
|
||||||
|
|
||||||
|
const jsonOutput = JSON.stringify({
|
||||||
|
title: metadata.title,
|
||||||
|
age: metadata.age,
|
||||||
|
subject: metadata.subject,
|
||||||
|
questions
|
||||||
|
}, null, 2);
|
||||||
|
|
||||||
|
output.textContent = jsonOutput;
|
||||||
|
|
||||||
|
let filename = metadata.title || "questions";
|
||||||
|
filename = filename.replace(/[^a-z0-9_\-]/gi, "_");
|
||||||
|
download(filename + ".json", jsonOutput);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//import handler
|
||||||
|
document.getElementById('importJson').addEventListener('change', function(event) {
|
||||||
|
const file = event.target.files[0];
|
||||||
|
if (!file) return;
|
||||||
|
|
||||||
|
const reader = new FileReader();
|
||||||
|
reader.onload = function(e) {
|
||||||
|
try {
|
||||||
|
const data = JSON.parse(e.target.result);
|
||||||
|
|
||||||
|
// metadata
|
||||||
|
if (data.title) document.getElementById('gameTitle').value = data.title;
|
||||||
|
if (data.age) document.getElementById('targetAge').value = data.age;
|
||||||
|
if (data.subject) document.getElementById('subject').value = data.subject;
|
||||||
|
|
||||||
|
// questions
|
||||||
|
questionList.innerHTML = '';
|
||||||
|
if (Array.isArray(data.questions)) {
|
||||||
|
data.questions.forEach(q => {
|
||||||
|
const div = document.createElement('div');
|
||||||
|
div.className = 'question-block';
|
||||||
|
|
||||||
|
// backward-compat answers (strings -> objects)
|
||||||
|
let importedAnswers = (q.answers || []).map(a =>
|
||||||
|
(typeof a === 'string') ? { text: a, image: "" } : {
|
||||||
|
text: a.text || "",
|
||||||
|
image: a.image || ""
|
||||||
|
}
|
||||||
|
);
|
||||||
|
while (importedAnswers.length < 5) {
|
||||||
|
importedAnswers.push({ text: "", image: "" });
|
||||||
|
}
|
||||||
|
importedAnswers = importedAnswers.slice(0, 5);
|
||||||
|
|
||||||
|
const answersHTML = importedAnswers.map(a => `
|
||||||
|
<div style="margin-bottom: 0.75rem;">
|
||||||
|
<input type="text" class="answerText" value="${a.text}">
|
||||||
|
<br>
|
||||||
|
<input type="file" class="answerImage" accept="image/*">
|
||||||
|
<span class="linked-filename" style="font-size:0.8rem; color:#666; margin-left:0.5rem;">
|
||||||
|
${a.image ? `Linked: ${a.image}` : 'Kein Bild eingebunden'}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
`).join('');
|
||||||
|
|
||||||
|
|
||||||
|
div.innerHTML = `
|
||||||
|
<label>Question:</label>
|
||||||
|
<input type="text" class="questionText" value="${q.questionText || ''}">
|
||||||
|
<br><br>
|
||||||
|
|
||||||
|
<label>Fragen-Bild (optional):</label>
|
||||||
|
<input type="file" class="questionImage" accept="image/*">
|
||||||
|
<span class="linked-filename" style="font-size:0.8rem; color:#666; margin-left:0.5rem;">
|
||||||
|
${q.questionImage ? `Linked: ${q.questionImage}` : 'Kein Bild eingebunden'}
|
||||||
|
</span>
|
||||||
|
<br><br>
|
||||||
|
|
||||||
|
<label>Fragen-Audio (optional):</label>
|
||||||
|
<input type="file" class="questionSound" accept="audio/*">
|
||||||
|
<span class="linked-filename" style="font-size:0.8rem; color:#666; margin-left:0.5rem;">
|
||||||
|
${q.questionSound ? `Linked: ${q.questionSound}` : 'Kein Audio eingebunden'}
|
||||||
|
</span>
|
||||||
|
<br><br>
|
||||||
|
|
||||||
|
<label>Antworten (die erste Antwort ist die korrekte):</label>
|
||||||
|
${answersHTML}
|
||||||
|
|
||||||
|
<button type="button" class="delete-question">Frage löschen</button>
|
||||||
|
`;
|
||||||
|
|
||||||
|
questionList.appendChild(div);
|
||||||
|
|
||||||
|
// bind datasets + live labels using imported names
|
||||||
|
bindFileInput(div.querySelector('.questionImage'), 'image', q.questionImage || "");
|
||||||
|
bindFileInput(div.querySelector('.questionSound'), 'sound', q.questionSound || "");
|
||||||
|
|
||||||
|
const aImgEls = div.querySelectorAll('.answerImage');
|
||||||
|
importedAnswers.forEach((a, i) => {
|
||||||
|
bindFileInput(aImgEls[i], 'image', a.image || "");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
alert('Invalid JSON file.');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
reader.readAsText(file);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
43
Assets/JSon Tool/iwm_logo.svg
Normal file
43
Assets/JSon Tool/iwm_logo.svg
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 16.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="388.566px" height="142.229px" viewBox="0 0 388.566 142.229" enable-background="new 0 0 388.566 142.229" xml:space="preserve">
|
||||||
|
<g>
|
||||||
|
<path fill="#FF6900" d="M205.716,99.278c0.316,0,0.59,0.113,0.823,0.339c0.233,0.226,0.35,0.512,0.35,0.857v12.564h5.888 c0.346,0,0.62,0.109,0.823,0.327s0.305,0.485,0.305,0.801c0,0.331-0.102,0.605-0.305,0.823s-0.478,0.327-0.823,0.327h-6.835 c-0.391,0-0.726-0.136-1.004-0.406c-0.278-0.271-0.417-0.594-0.417-0.97v-13.467c0-0.346,0.113-0.632,0.338-0.857 S205.37,99.278,205.716,99.278z"/>
|
||||||
|
<path fill="#FF6900" d="M219.882,103.655c0.691,0,1.315,0.109,1.872,0.327c0.556,0.218,1.034,0.526,1.433,0.925 c0.398,0.398,0.703,0.876,0.914,1.433c0.21,0.556,0.315,1.173,0.315,1.85v1.105c0,0.33-0.124,0.643-0.372,0.936 s-0.598,0.44-1.049,0.44h-5.346v0.428c0,0.302,0.037,0.591,0.113,0.869c0.075,0.278,0.203,0.522,0.383,0.732 c0.181,0.211,0.414,0.384,0.699,0.52c0.286,0.135,0.632,0.203,1.038,0.203c0.496,0,0.925-0.049,1.286-0.146 s0.691-0.207,0.993-0.327c0.331-0.136,0.594-0.203,0.79-0.203c0.3,0,0.552,0.102,0.755,0.305c0.203,0.202,0.305,0.454,0.305,0.755 c0,0.211-0.049,0.399-0.146,0.564c-0.098,0.165-0.252,0.301-0.462,0.406c-0.256,0.135-0.542,0.248-0.857,0.338 c-0.316,0.091-0.636,0.169-0.958,0.237c-0.324,0.067-0.636,0.116-0.937,0.146c-0.301,0.029-0.556,0.045-0.767,0.045 c-0.722,0-1.369-0.113-1.94-0.338c-0.572-0.226-1.049-0.542-1.433-0.948c-0.383-0.405-0.677-0.887-0.88-1.443 s-0.304-1.158-0.304-1.805v-2.819c0-0.677,0.105-1.298,0.315-1.861c0.21-0.564,0.515-1.041,0.914-1.433 c0.398-0.391,0.876-0.695,1.433-0.913C218.543,103.765,219.175,103.655,219.882,103.655z M219.882,105.798 c-0.782,0-1.35,0.207-1.703,0.62c-0.354,0.414-0.53,0.981-0.53,1.703v0.406h4.444v-0.338c0-0.768-0.173-1.357-0.519-1.771 C221.228,106.005,220.664,105.798,219.882,105.798z"/>
|
||||||
|
<path fill="#FF6900" d="M228.679,99.278c0.376,0,0.695,0.132,0.959,0.396c0.264,0.263,0.395,0.583,0.395,0.958 c0,0.392-0.131,0.719-0.395,0.981c-0.264,0.264-0.583,0.395-0.959,0.395s-0.695-0.131-0.958-0.395 c-0.263-0.263-0.395-0.59-0.395-0.981c0-0.375,0.131-0.695,0.395-0.958C227.984,99.41,228.303,99.278,228.679,99.278z M228.679,103.655c0.346,0,0.624,0.105,0.835,0.315c0.21,0.211,0.315,0.489,0.315,0.835v9.587c0,0.346-0.105,0.624-0.315,0.835 c-0.211,0.21-0.489,0.315-0.835,0.315s-0.628-0.105-0.846-0.315c-0.218-0.211-0.327-0.489-0.327-0.835v-9.587 c0-0.346,0.109-0.624,0.327-0.835C228.051,103.761,228.333,103.655,228.679,103.655z"/>
|
||||||
|
<path fill="#FF6900" d="M234.522,99.278c0.331,0,0.604,0.105,0.823,0.316c0.218,0.211,0.327,0.488,0.327,0.835v3.88 c0.376-0.211,0.79-0.373,1.241-0.485c0.451-0.113,0.856-0.169,1.217-0.169c0.633,0,1.215,0.094,1.749,0.281 c0.534,0.188,0.992,0.471,1.376,0.847c0.383,0.376,0.68,0.846,0.891,1.409c0.211,0.564,0.316,1.215,0.316,1.951v2.888 c0,1.504-0.406,2.632-1.219,3.384c-0.812,0.752-1.925,1.128-3.338,1.128c-1.248,0-2.444-0.195-3.587-0.587 c-0.302-0.104-0.538-0.277-0.71-0.519c-0.174-0.24-0.26-0.511-0.26-0.812V100.43c0-0.347,0.108-0.624,0.326-0.835 C233.894,99.384,234.175,99.278,234.522,99.278z M237.906,105.798c-0.422,0-0.816,0.067-1.185,0.203s-0.718,0.323-1.049,0.564 v6.541c0.722,0.211,1.466,0.316,2.233,0.316c0.722,0,1.274-0.195,1.658-0.587c0.383-0.391,0.574-0.947,0.574-1.669v-3.158 C240.138,106.535,239.394,105.798,237.906,105.798z"/>
|
||||||
|
<path fill="#FF6900" d="M250.222,103.655c1.519,0,2.658,0.376,3.417,1.128s1.14,1.857,1.14,3.315v6.294 c0,0.346-0.109,0.624-0.328,0.835c-0.217,0.21-0.492,0.315-0.822,0.315c-0.347,0-0.629-0.105-0.846-0.315 c-0.219-0.211-0.328-0.489-0.328-0.835v-6.384c0-0.722-0.188-1.271-0.563-1.646s-0.933-0.564-1.669-0.564 c-0.752,0-1.489,0.105-2.211,0.316v8.278c0,0.346-0.109,0.624-0.327,0.835c-0.218,0.21-0.493,0.315-0.823,0.315 c-0.346,0-0.629-0.105-0.846-0.315c-0.219-0.211-0.328-0.489-0.328-0.835v-8.82c0-0.315,0.087-0.59,0.26-0.823 s0.425-0.402,0.756-0.508c0.557-0.18,1.124-0.323,1.703-0.429C248.984,103.708,249.59,103.655,250.222,103.655z"/>
|
||||||
|
<path fill="#FF6900" d="M259.357,99.278c0.376,0,0.695,0.132,0.959,0.396c0.264,0.263,0.395,0.583,0.395,0.958 c0,0.392-0.131,0.719-0.395,0.981c-0.264,0.264-0.583,0.395-0.959,0.395s-0.695-0.131-0.959-0.395 c-0.263-0.263-0.395-0.59-0.395-0.981c0-0.375,0.132-0.695,0.395-0.958C258.662,99.41,258.981,99.278,259.357,99.278z M259.357,103.655c0.346,0,0.624,0.105,0.835,0.315c0.21,0.211,0.315,0.489,0.315,0.835v9.587c0,0.346-0.105,0.624-0.315,0.835 c-0.211,0.21-0.489,0.315-0.835,0.315s-0.628-0.105-0.846-0.315c-0.219-0.211-0.327-0.489-0.327-0.835v-9.587 c0-0.346,0.108-0.624,0.327-0.835C258.729,103.761,259.011,103.655,259.357,103.655z"/>
|
||||||
|
<path fill="#FF6900" d="M270.591,103.881c0.346,0,0.635,0.12,0.868,0.36c0.233,0.241,0.35,0.534,0.35,0.88 c0,0.256-0.091,0.512-0.271,0.768l-5.144,7.218h4.376c0.331,0,0.598,0.109,0.801,0.327c0.203,0.219,0.305,0.478,0.305,0.778 c0,0.316-0.102,0.579-0.305,0.79c-0.203,0.21-0.47,0.315-0.801,0.315h-6.383c-0.347,0-0.637-0.12-0.869-0.361 c-0.233-0.24-0.35-0.533-0.35-0.879c0-0.256,0.098-0.52,0.293-0.79l5.144-7.196h-4.241c-0.346,0-0.617-0.104-0.813-0.315 c-0.195-0.21-0.293-0.474-0.293-0.789c0-0.301,0.098-0.561,0.293-0.778s0.467-0.327,0.813-0.327H270.591z"/>
|
||||||
|
<path fill="#FF6900" d="M280.539,107.513c0.33,0,0.594,0.105,0.789,0.315c0.195,0.211,0.294,0.467,0.294,0.767 c0,0.316-0.099,0.579-0.294,0.79s-0.459,0.315-0.789,0.315h-5.121c-0.33,0-0.594-0.104-0.789-0.315s-0.293-0.474-0.293-0.79 c0-0.3,0.098-0.556,0.293-0.767c0.195-0.21,0.459-0.315,0.789-0.315H280.539z"/>
|
||||||
|
<path fill="#FF6900" d="M286.246,99.278c0.316,0,0.59,0.105,0.823,0.316s0.35,0.488,0.35,0.835v13.94 c0,0.346-0.116,0.628-0.35,0.846s-0.507,0.327-0.823,0.327c-0.331,0-0.613-0.109-0.846-0.327c-0.234-0.218-0.35-0.5-0.35-0.846 v-13.94c0-0.347,0.115-0.624,0.35-0.835C285.632,99.384,285.915,99.278,286.246,99.278z"/>
|
||||||
|
<path fill="#FF6900" d="M295.583,103.655c1.52,0,2.658,0.376,3.418,1.128s1.139,1.857,1.139,3.315v6.294 c0,0.346-0.109,0.624-0.326,0.835c-0.219,0.21-0.493,0.315-0.824,0.315c-0.346,0-0.627-0.105-0.846-0.315 c-0.218-0.211-0.326-0.489-0.326-0.835v-6.384c0-0.722-0.189-1.271-0.564-1.646c-0.376-0.376-0.933-0.564-1.67-0.564 c-0.752,0-1.488,0.105-2.21,0.316v8.278c0,0.346-0.109,0.624-0.327,0.835c-0.219,0.21-0.492,0.315-0.823,0.315 c-0.347,0-0.628-0.105-0.847-0.315c-0.218-0.211-0.326-0.489-0.326-0.835v-8.82c0-0.315,0.086-0.59,0.26-0.823 c0.172-0.233,0.424-0.402,0.755-0.508c0.556-0.18,1.124-0.323,1.703-0.429C294.347,103.708,294.953,103.655,295.583,103.655z"/>
|
||||||
|
<path fill="#FF6900" d="M306.931,103.655c0.541,0,1.09,0.06,1.646,0.181c0.557,0.12,1.029,0.278,1.421,0.474 c0.406,0.21,0.608,0.526,0.608,0.947c0,0.331-0.104,0.59-0.314,0.778c-0.211,0.188-0.451,0.281-0.723,0.281 c-0.121,0-0.233-0.015-0.338-0.045l-0.316-0.09c-0.301-0.105-0.594-0.199-0.879-0.282c-0.287-0.082-0.641-0.124-1.061-0.124 c-0.482,0-0.884,0.105-1.207,0.315c-0.324,0.211-0.484,0.505-0.484,0.88c0,0.196,0.045,0.361,0.135,0.496 c0.09,0.136,0.199,0.257,0.327,0.361c0.128,0.105,0.267,0.191,0.417,0.26c0.15,0.067,0.293,0.124,0.429,0.169l1.985,0.744 c0.736,0.271,1.309,0.647,1.715,1.128c0.405,0.481,0.608,1.136,0.608,1.963c0,0.481-0.087,0.933-0.259,1.354 c-0.174,0.421-0.426,0.786-0.756,1.094c-0.332,0.309-0.745,0.553-1.241,0.733s-1.067,0.271-1.714,0.271 c-0.678,0-1.294-0.067-1.85-0.203c-0.557-0.135-1.031-0.301-1.422-0.496c-0.421-0.195-0.631-0.511-0.631-0.947 c0-0.316,0.094-0.571,0.281-0.768c0.188-0.195,0.439-0.293,0.756-0.293c0.075,0,0.161,0.016,0.26,0.045 c0.098,0.03,0.199,0.061,0.305,0.091c0.255,0.09,0.56,0.188,0.913,0.293c0.353,0.105,0.778,0.158,1.274,0.158 c0.571,0,1.019-0.12,1.342-0.361c0.324-0.24,0.485-0.556,0.485-0.947c0-0.346-0.161-0.632-0.485-0.857 c-0.323-0.226-0.673-0.413-1.049-0.563l-1.85-0.723c-0.24-0.09-0.492-0.206-0.756-0.35c-0.264-0.143-0.504-0.33-0.722-0.563 s-0.398-0.519-0.541-0.857c-0.144-0.338-0.214-0.756-0.214-1.252c0-1.037,0.363-1.846,1.094-2.425 C304.851,103.944,305.788,103.655,306.931,103.655z"/>
|
||||||
|
<path fill="#FF6900" d="M315.074,99.278c0.331,0,0.605,0.105,0.824,0.316c0.217,0.211,0.326,0.488,0.326,0.835v3.451h2.211 c0.376,0,0.662,0.105,0.857,0.315c0.195,0.211,0.293,0.474,0.293,0.79c0,0.315-0.098,0.579-0.293,0.789 c-0.195,0.211-0.481,0.315-0.857,0.315h-2.211v5.956c0,0.451,0.102,0.785,0.305,1.004c0.203,0.218,0.485,0.326,0.846,0.326 c0.286,0,0.5-0.019,0.643-0.056c0.144-0.038,0.305-0.057,0.486-0.057c0.3,0,0.556,0.09,0.766,0.271 c0.211,0.181,0.316,0.444,0.316,0.79c0,0.301-0.09,0.541-0.271,0.722s-0.414,0.301-0.699,0.36c-0.226,0.046-0.44,0.079-0.644,0.102 s-0.424,0.034-0.665,0.034c-0.481,0-0.929-0.075-1.343-0.226c-0.413-0.15-0.773-0.376-1.082-0.677s-0.549-0.673-0.722-1.116 s-0.26-0.959-0.26-1.546V100.43c0-0.347,0.108-0.624,0.327-0.835C314.446,99.384,314.728,99.278,315.074,99.278z"/>
|
||||||
|
<path fill="#FF6900" d="M323.082,99.278c0.376,0,0.695,0.132,0.959,0.396c0.264,0.263,0.395,0.583,0.395,0.958 c0,0.392-0.131,0.719-0.395,0.981c-0.264,0.264-0.583,0.395-0.959,0.395s-0.695-0.131-0.959-0.395 c-0.263-0.263-0.395-0.59-0.395-0.981c0-0.375,0.132-0.695,0.395-0.958C322.386,99.41,322.706,99.278,323.082,99.278z M323.082,103.655c0.346,0,0.624,0.105,0.835,0.315c0.21,0.211,0.315,0.489,0.315,0.835v9.587c0,0.346-0.105,0.624-0.315,0.835 c-0.211,0.21-0.489,0.315-0.835,0.315s-0.628-0.105-0.846-0.315c-0.219-0.211-0.327-0.489-0.327-0.835v-9.587 c0-0.346,0.108-0.624,0.327-0.835C322.454,103.761,322.736,103.655,323.082,103.655z"/>
|
||||||
|
<path fill="#FF6900" d="M328.902,99.278c0.33,0,0.605,0.105,0.823,0.316s0.327,0.488,0.327,0.835v3.451h2.211 c0.375,0,0.661,0.105,0.857,0.315c0.195,0.211,0.293,0.474,0.293,0.79c0,0.315-0.098,0.579-0.293,0.789 c-0.196,0.211-0.482,0.315-0.857,0.315h-2.211v5.956c0,0.451,0.102,0.785,0.305,1.004c0.203,0.218,0.484,0.326,0.846,0.326 c0.285,0,0.5-0.019,0.643-0.056c0.143-0.038,0.305-0.057,0.485-0.057c0.3,0,0.556,0.09,0.767,0.271s0.316,0.444,0.316,0.79 c0,0.301-0.091,0.541-0.271,0.722c-0.18,0.181-0.414,0.301-0.699,0.36c-0.225,0.046-0.439,0.079-0.643,0.102 s-0.425,0.034-0.666,0.034c-0.48,0-0.928-0.075-1.342-0.226s-0.774-0.376-1.082-0.677c-0.309-0.301-0.55-0.673-0.723-1.116 s-0.26-0.959-0.26-1.546V100.43c0-0.347,0.109-0.624,0.328-0.835C328.273,99.384,328.556,99.278,328.902,99.278z"/>
|
||||||
|
<path fill="#FF6900" d="M343.542,103.655c0.346,0,0.628,0.105,0.846,0.315c0.218,0.211,0.327,0.489,0.327,0.835v8.843 c0,0.301-0.09,0.567-0.271,0.801s-0.429,0.402-0.745,0.507c-0.556,0.181-1.123,0.324-1.703,0.429 c-0.578,0.105-1.184,0.158-1.815,0.158c-3.038,0-4.557-1.481-4.557-4.444v-6.293c0-0.346,0.108-0.624,0.327-0.835 c0.218-0.21,0.492-0.315,0.823-0.315c0.347,0,0.628,0.105,0.847,0.315c0.217,0.211,0.326,0.489,0.326,0.835v6.384 c0,0.722,0.185,1.274,0.553,1.658c0.369,0.383,0.929,0.575,1.681,0.575c0.392,0,0.767-0.03,1.128-0.091 c0.361-0.06,0.723-0.135,1.083-0.226v-8.301c0-0.346,0.108-0.624,0.327-0.835C342.936,103.761,343.21,103.655,343.542,103.655z"/>
|
||||||
|
<path fill="#FF6900" d="M349.406,99.278c0.331,0,0.605,0.105,0.824,0.316c0.217,0.211,0.326,0.488,0.326,0.835v3.451h2.211 c0.376,0,0.662,0.105,0.857,0.315c0.195,0.211,0.293,0.474,0.293,0.79c0,0.315-0.098,0.579-0.293,0.789 c-0.195,0.211-0.481,0.315-0.857,0.315h-2.211v5.956c0,0.451,0.102,0.785,0.305,1.004c0.203,0.218,0.485,0.326,0.846,0.326 c0.286,0,0.5-0.019,0.643-0.056c0.144-0.038,0.305-0.057,0.486-0.057c0.3,0,0.556,0.09,0.766,0.271 c0.211,0.181,0.316,0.444,0.316,0.79c0,0.301-0.09,0.541-0.271,0.722s-0.414,0.301-0.699,0.36c-0.226,0.046-0.44,0.079-0.644,0.102 s-0.424,0.034-0.665,0.034c-0.481,0-0.929-0.075-1.343-0.226c-0.413-0.15-0.773-0.376-1.082-0.677s-0.549-0.673-0.722-1.116 s-0.26-0.959-0.26-1.546V100.43c0-0.347,0.108-0.624,0.327-0.835C348.778,99.384,349.06,99.278,349.406,99.278z"/>
|
||||||
|
<path fill="#FF6900" d="M365.714,99.278c0.256,0,0.486,0.012,0.688,0.034c0.203,0.022,0.425,0.057,0.665,0.102 c0.271,0.061,0.497,0.173,0.678,0.339c0.18,0.165,0.27,0.391,0.27,0.677c0,0.301-0.101,0.541-0.304,0.722s-0.44,0.271-0.71,0.271 c-0.196,0-0.369-0.019-0.52-0.057c-0.15-0.037-0.361-0.057-0.632-0.057c-0.392,0-0.692,0.117-0.902,0.35 c-0.21,0.233-0.315,0.508-0.315,0.824v1.398h2.232c0.361,0,0.644,0.105,0.847,0.315c0.203,0.211,0.304,0.474,0.304,0.79 c0,0.315-0.101,0.579-0.304,0.789c-0.203,0.211-0.485,0.315-0.847,0.315h-2.232v8.302c0,0.346-0.113,0.624-0.338,0.835 c-0.227,0.21-0.497,0.315-0.813,0.315c-0.346,0-0.629-0.105-0.846-0.315c-0.219-0.211-0.328-0.489-0.328-0.835v-11.685 c0-1.098,0.309-1.944,0.926-2.538C363.85,99.576,364.677,99.278,365.714,99.278z"/>
|
||||||
|
<path fill="#FF6900" d="M377.874,103.655c0.346,0,0.628,0.105,0.846,0.315c0.218,0.211,0.327,0.489,0.327,0.835v8.843 c0,0.301-0.09,0.567-0.271,0.801s-0.429,0.402-0.745,0.507c-0.556,0.181-1.123,0.324-1.703,0.429 c-0.578,0.105-1.184,0.158-1.815,0.158c-3.038,0-4.557-1.481-4.557-4.444v-6.293c0-0.346,0.108-0.624,0.327-0.835 c0.218-0.21,0.492-0.315,0.823-0.315c0.347,0,0.628,0.105,0.847,0.315c0.217,0.211,0.326,0.489,0.326,0.835v6.384 c0,0.722,0.185,1.274,0.553,1.658c0.369,0.383,0.929,0.575,1.681,0.575c0.392,0,0.767-0.03,1.128-0.091 c0.361-0.06,0.723-0.135,1.083-0.226v-8.301c0-0.346,0.108-0.624,0.327-0.835C377.268,103.761,377.542,103.655,377.874,103.655z M372.392,99.278c0.375,0,0.695,0.136,0.959,0.406c0.263,0.271,0.395,0.587,0.395,0.947c0,0.392-0.132,0.719-0.395,0.981 c-0.264,0.264-0.584,0.395-0.959,0.395c-0.376,0-0.695-0.131-0.959-0.395c-0.264-0.263-0.395-0.59-0.395-0.981 c0-0.36,0.131-0.677,0.395-0.947S372.016,99.278,372.392,99.278z M376.632,99.278c0.392,0,0.719,0.136,0.982,0.406 c0.262,0.271,0.395,0.587,0.395,0.947c0,0.392-0.133,0.719-0.395,0.981c-0.264,0.264-0.591,0.395-0.982,0.395 c-0.375,0-0.695-0.131-0.958-0.395c-0.264-0.263-0.396-0.59-0.396-0.981c0-0.36,0.132-0.677,0.396-0.947 C375.937,99.414,376.257,99.278,376.632,99.278z"/>
|
||||||
|
<path fill="#FF6900" d="M385.949,103.655c0.33,0,0.643,0.015,0.936,0.045c0.294,0.03,0.545,0.067,0.756,0.112 c0.617,0.121,0.926,0.489,0.926,1.105c0,0.302-0.102,0.553-0.305,0.756s-0.471,0.305-0.801,0.305c-0.166,0-0.361-0.022-0.587-0.067 c-0.226-0.046-0.481-0.068-0.767-0.068c-0.361,0-0.654,0.117-0.88,0.35c-0.226,0.233-0.339,0.546-0.339,0.937v7.264 c0,0.346-0.109,0.624-0.326,0.835c-0.219,0.21-0.493,0.315-0.824,0.315c-0.346,0-0.628-0.105-0.846-0.315 c-0.219-0.211-0.327-0.489-0.327-0.835v-7.331c0-1.053,0.305-1.884,0.913-2.493C384.087,103.96,384.912,103.655,385.949,103.655z"/>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<path fill="#FF6900" d="M219.341,125.965c0.331,0,0.609,0.105,0.834,0.316s0.338,0.466,0.338,0.767 c0,0.091-0.008,0.181-0.022,0.271c-0.015,0.091-0.038,0.188-0.068,0.294l-3.248,13.377c-0.105,0.391-0.29,0.695-0.553,0.913 c-0.264,0.218-0.575,0.327-0.937,0.327c-0.376,0-0.699-0.109-0.97-0.327s-0.451-0.53-0.542-0.937l-2.301-9.97l-2.301,9.97 c-0.09,0.406-0.267,0.719-0.53,0.937s-0.583,0.327-0.958,0.327c-0.376,0-0.696-0.109-0.959-0.327s-0.44-0.522-0.53-0.913 l-3.249-13.377c-0.03-0.105-0.053-0.203-0.068-0.294c-0.015-0.09-0.022-0.18-0.022-0.271c0-0.301,0.109-0.556,0.327-0.767 c0.218-0.211,0.492-0.316,0.823-0.316c0.286,0,0.53,0.079,0.733,0.237s0.334,0.357,0.395,0.598l2.526,10.558l2.301-10.129 c0.09-0.406,0.271-0.718,0.541-0.937c0.271-0.218,0.594-0.327,0.97-0.327c0.391,0,0.718,0.109,0.981,0.327 c0.263,0.219,0.439,0.53,0.53,0.937l2.324,10.129l2.504-10.558c0.06-0.24,0.191-0.439,0.395-0.598S219.055,125.965,219.341,125.965 z"/>
|
||||||
|
<path fill="#FF6900" d="M224.01,125.965c0.375,0,0.695,0.132,0.958,0.396c0.263,0.263,0.395,0.583,0.395,0.958 c0,0.392-0.132,0.719-0.395,0.981c-0.263,0.264-0.583,0.395-0.958,0.395c-0.376,0-0.696-0.131-0.959-0.395 c-0.263-0.263-0.395-0.59-0.395-0.981c0-0.375,0.131-0.695,0.395-0.958C223.314,126.097,223.634,125.965,224.01,125.965z M224.01,130.342c0.346,0,0.624,0.105,0.834,0.315c0.21,0.211,0.316,0.489,0.316,0.835v9.587c0,0.346-0.105,0.624-0.316,0.835 c-0.211,0.21-0.489,0.315-0.834,0.315c-0.346,0-0.628-0.105-0.846-0.315c-0.218-0.211-0.327-0.489-0.327-0.835v-9.587 c0-0.346,0.109-0.624,0.327-0.835C223.382,130.447,223.664,130.342,224.01,130.342z"/>
|
||||||
|
<path fill="#FF6900" d="M232.063,130.342c0.542,0,1.091,0.06,1.647,0.181c0.556,0.12,1.029,0.278,1.42,0.474 c0.406,0.21,0.609,0.526,0.609,0.947c0,0.331-0.105,0.59-0.315,0.778c-0.211,0.188-0.451,0.281-0.722,0.281 c-0.121,0-0.234-0.015-0.339-0.045l-0.315-0.09c-0.301-0.105-0.595-0.199-0.88-0.282c-0.286-0.082-0.64-0.124-1.061-0.124 c-0.481,0-0.884,0.105-1.206,0.315c-0.324,0.211-0.485,0.505-0.485,0.88c0,0.196,0.045,0.361,0.136,0.496 c0.09,0.136,0.199,0.257,0.326,0.361c0.128,0.105,0.268,0.191,0.418,0.26c0.15,0.067,0.293,0.124,0.428,0.169l1.986,0.744 c0.736,0.271,1.308,0.647,1.714,1.128c0.405,0.481,0.608,1.136,0.608,1.963c0,0.481-0.086,0.933-0.259,1.354 s-0.425,0.786-0.756,1.094c-0.331,0.309-0.745,0.553-1.241,0.733s-1.067,0.271-1.714,0.271c-0.677,0-1.294-0.067-1.85-0.203 c-0.557-0.135-1.03-0.301-1.421-0.496c-0.422-0.195-0.632-0.511-0.632-0.947c0-0.316,0.094-0.571,0.282-0.768 c0.188-0.195,0.439-0.293,0.756-0.293c0.074,0,0.16,0.016,0.259,0.045c0.098,0.03,0.199,0.061,0.305,0.091 c0.255,0.09,0.56,0.188,0.913,0.293s0.779,0.158,1.275,0.158c0.57,0,1.018-0.12,1.342-0.361c0.323-0.24,0.484-0.556,0.484-0.947 c0-0.346-0.161-0.632-0.484-0.857c-0.324-0.226-0.674-0.413-1.049-0.563l-1.85-0.723c-0.241-0.09-0.493-0.206-0.756-0.35 c-0.264-0.143-0.504-0.33-0.723-0.563c-0.217-0.233-0.398-0.519-0.541-0.857c-0.143-0.338-0.214-0.756-0.214-1.252 c0-1.037,0.364-1.846,1.094-2.425S230.919,130.342,232.063,130.342z"/>
|
||||||
|
<path fill="#FF6900" d="M242.417,130.342c0.541,0,1.09,0.06,1.646,0.181c0.557,0.12,1.029,0.278,1.421,0.474 c0.406,0.21,0.608,0.526,0.608,0.947c0,0.331-0.104,0.59-0.314,0.778c-0.211,0.188-0.451,0.281-0.723,0.281 c-0.121,0-0.233-0.015-0.338-0.045l-0.316-0.09c-0.301-0.105-0.594-0.199-0.879-0.282c-0.287-0.082-0.641-0.124-1.061-0.124 c-0.482,0-0.884,0.105-1.207,0.315c-0.324,0.211-0.484,0.505-0.484,0.88c0,0.196,0.045,0.361,0.135,0.496 c0.09,0.136,0.199,0.257,0.327,0.361c0.128,0.105,0.267,0.191,0.417,0.26c0.15,0.067,0.293,0.124,0.429,0.169l1.985,0.744 c0.736,0.271,1.309,0.647,1.715,1.128c0.405,0.481,0.608,1.136,0.608,1.963c0,0.481-0.087,0.933-0.259,1.354 c-0.174,0.421-0.426,0.786-0.756,1.094c-0.332,0.309-0.745,0.553-1.241,0.733s-1.067,0.271-1.714,0.271 c-0.678,0-1.294-0.067-1.85-0.203c-0.557-0.135-1.031-0.301-1.422-0.496c-0.421-0.195-0.631-0.511-0.631-0.947 c0-0.316,0.094-0.571,0.281-0.768c0.188-0.195,0.439-0.293,0.756-0.293c0.075,0,0.161,0.016,0.26,0.045 c0.098,0.03,0.199,0.061,0.305,0.091c0.255,0.09,0.56,0.188,0.913,0.293c0.353,0.105,0.778,0.158,1.274,0.158 c0.571,0,1.019-0.12,1.342-0.361c0.324-0.24,0.485-0.556,0.485-0.947c0-0.346-0.161-0.632-0.485-0.857 c-0.323-0.226-0.673-0.413-1.049-0.563l-1.85-0.723c-0.24-0.09-0.492-0.206-0.756-0.35c-0.264-0.143-0.504-0.33-0.722-0.563 s-0.398-0.519-0.541-0.857c-0.144-0.338-0.214-0.756-0.214-1.252c0-1.037,0.363-1.846,1.094-2.425 C240.337,130.631,241.274,130.342,242.417,130.342z"/>
|
||||||
|
<path fill="#FF6900" d="M253.515,130.342c0.691,0,1.315,0.109,1.872,0.327c0.556,0.218,1.034,0.526,1.433,0.925 s0.703,0.876,0.914,1.433c0.21,0.556,0.314,1.173,0.314,1.85v1.105c0,0.33-0.123,0.643-0.371,0.936s-0.598,0.44-1.049,0.44h-5.347 v0.428c0,0.302,0.037,0.591,0.112,0.869c0.076,0.278,0.203,0.522,0.384,0.732c0.181,0.211,0.413,0.384,0.699,0.52 c0.286,0.135,0.632,0.203,1.038,0.203c0.496,0,0.925-0.049,1.285-0.146c0.361-0.098,0.691-0.207,0.993-0.327 c0.331-0.136,0.594-0.203,0.79-0.203c0.3,0,0.552,0.102,0.755,0.305c0.203,0.202,0.305,0.454,0.305,0.755 c0,0.211-0.049,0.399-0.146,0.564c-0.099,0.165-0.253,0.301-0.462,0.406c-0.257,0.135-0.542,0.248-0.857,0.338 c-0.316,0.091-0.637,0.169-0.959,0.237c-0.324,0.067-0.636,0.116-0.937,0.146c-0.301,0.029-0.556,0.045-0.767,0.045 c-0.723,0-1.369-0.113-1.939-0.338c-0.572-0.226-1.05-0.542-1.434-0.948c-0.383-0.405-0.676-0.887-0.879-1.443 s-0.305-1.158-0.305-1.805v-2.819c0-0.677,0.105-1.298,0.315-1.861c0.21-0.564,0.515-1.041,0.913-1.433 c0.398-0.391,0.877-0.695,1.434-0.913C252.176,130.451,252.808,130.342,253.515,130.342z M253.515,132.484 c-0.782,0-1.35,0.207-1.703,0.62c-0.354,0.414-0.53,0.981-0.53,1.703v0.406h4.444v-0.338c0-0.768-0.174-1.357-0.52-1.771 C254.861,132.691,254.296,132.484,253.515,132.484z"/>
|
||||||
|
<path fill="#FF6900" d="M265.697,130.342c1.519,0,2.658,0.376,3.417,1.128s1.14,1.857,1.14,3.315v6.294 c0,0.346-0.109,0.624-0.328,0.835c-0.217,0.21-0.492,0.315-0.822,0.315c-0.347,0-0.629-0.105-0.846-0.315 c-0.219-0.211-0.328-0.489-0.328-0.835v-6.384c0-0.722-0.188-1.271-0.563-1.646s-0.933-0.564-1.669-0.564 c-0.752,0-1.489,0.105-2.211,0.316v8.278c0,0.346-0.109,0.624-0.327,0.835c-0.218,0.21-0.493,0.315-0.823,0.315 c-0.346,0-0.629-0.105-0.846-0.315c-0.219-0.211-0.328-0.489-0.328-0.835v-8.82c0-0.315,0.087-0.59,0.26-0.823 s0.425-0.402,0.756-0.508c0.557-0.18,1.124-0.323,1.703-0.429C264.458,130.395,265.065,130.342,265.697,130.342z"/>
|
||||||
|
<path fill="#FF6900" d="M277.042,130.342c0.541,0,1.09,0.06,1.646,0.181c0.557,0.12,1.03,0.278,1.422,0.474 c0.406,0.21,0.608,0.526,0.608,0.947c0,0.331-0.104,0.59-0.315,0.778c-0.211,0.188-0.451,0.281-0.723,0.281 c-0.12,0-0.232-0.015-0.338-0.045l-0.316-0.09c-0.301-0.105-0.594-0.199-0.879-0.282c-0.286-0.082-0.64-0.124-1.061-0.124 c-0.481,0-0.883,0.105-1.207,0.315c-0.323,0.211-0.484,0.505-0.484,0.88c0,0.196,0.045,0.361,0.135,0.496 c0.091,0.136,0.199,0.257,0.328,0.361c0.127,0.105,0.266,0.191,0.416,0.26c0.15,0.067,0.294,0.124,0.43,0.169l1.984,0.744 c0.736,0.271,1.309,0.647,1.715,1.128c0.406,0.481,0.609,1.136,0.609,1.963c0,0.481-0.088,0.933-0.26,1.354 c-0.174,0.421-0.426,0.786-0.756,1.094c-0.331,0.309-0.744,0.553-1.24,0.733s-1.068,0.271-1.715,0.271 c-0.677,0-1.293-0.067-1.85-0.203c-0.557-0.135-1.03-0.301-1.422-0.496c-0.42-0.195-0.631-0.511-0.631-0.947 c0-0.316,0.094-0.571,0.281-0.768c0.188-0.195,0.44-0.293,0.756-0.293c0.076,0,0.162,0.016,0.26,0.045 c0.098,0.03,0.199,0.061,0.305,0.091c0.256,0.09,0.561,0.188,0.914,0.293c0.353,0.105,0.777,0.158,1.273,0.158 c0.572,0,1.02-0.12,1.343-0.361c0.323-0.24,0.485-0.556,0.485-0.947c0-0.346-0.162-0.632-0.485-0.857s-0.673-0.413-1.049-0.563 l-1.851-0.723c-0.24-0.09-0.492-0.206-0.755-0.35c-0.264-0.143-0.505-0.33-0.722-0.563c-0.219-0.233-0.398-0.519-0.541-0.857 c-0.144-0.338-0.215-0.756-0.215-1.252c0-1.037,0.364-1.846,1.094-2.425S275.9,130.342,277.042,130.342z"/>
|
||||||
|
<path fill="#FF6900" d="M294.502,130.342c1.368,0,2.433,0.376,3.192,1.128c0.758,0.752,1.139,1.805,1.139,3.158v6.429 c0,0.346-0.105,0.628-0.316,0.846s-0.488,0.327-0.834,0.327s-0.629-0.109-0.846-0.327c-0.219-0.218-0.328-0.5-0.328-0.846v-6.52 c0-0.677-0.188-1.188-0.563-1.534c-0.376-0.346-0.85-0.519-1.421-0.519c-0.361,0-0.699,0.057-1.016,0.169 c-0.315,0.113-0.624,0.268-0.924,0.463v7.94c0,0.346-0.105,0.628-0.316,0.846s-0.488,0.327-0.834,0.327 c-0.347,0-0.629-0.109-0.847-0.327s-0.327-0.5-0.327-0.846v-7.174c0-0.301-0.067-0.541-0.203-0.722 c-0.135-0.181-0.293-0.323-0.474-0.429c-0.286-0.165-0.661-0.248-1.128-0.248c-0.391,0-0.756,0.026-1.094,0.079 s-0.681,0.132-1.026,0.237v8.256c0,0.346-0.105,0.628-0.315,0.846c-0.211,0.218-0.489,0.327-0.835,0.327 c-0.347,0-0.628-0.109-0.847-0.327c-0.218-0.218-0.326-0.5-0.326-0.846v-8.798c0-0.315,0.09-0.59,0.271-0.823 s0.429-0.402,0.744-0.508c0.556-0.18,1.128-0.323,1.714-0.429c0.587-0.104,1.188-0.157,1.805-0.157c1.158,0,2.105,0.323,2.843,0.97 c0.451-0.301,0.955-0.537,1.511-0.711C293.457,130.429,293.991,130.342,294.502,130.342z"/>
|
||||||
|
<path fill="#FF6900" d="M306.368,130.342c0.691,0,1.315,0.109,1.872,0.327s1.033,0.526,1.433,0.925 c0.397,0.398,0.702,0.876,0.913,1.433c0.211,0.556,0.316,1.173,0.316,1.85v1.105c0,0.33-0.125,0.643-0.373,0.936 s-0.598,0.44-1.049,0.44h-5.346v0.428c0,0.302,0.037,0.591,0.113,0.869c0.074,0.278,0.203,0.522,0.383,0.732 c0.181,0.211,0.414,0.384,0.699,0.52c0.285,0.135,0.632,0.203,1.038,0.203c0.496,0,0.925-0.049,1.286-0.146 c0.36-0.098,0.691-0.207,0.992-0.327c0.33-0.136,0.594-0.203,0.789-0.203c0.301,0,0.553,0.102,0.756,0.305 c0.203,0.202,0.305,0.454,0.305,0.755c0,0.211-0.049,0.399-0.146,0.564s-0.252,0.301-0.463,0.406 c-0.256,0.135-0.541,0.248-0.857,0.338c-0.315,0.091-0.635,0.169-0.958,0.237c-0.323,0.067-0.636,0.116-0.937,0.146 c-0.301,0.029-0.557,0.045-0.767,0.045c-0.722,0-1.368-0.113-1.94-0.338c-0.571-0.226-1.049-0.542-1.432-0.948 c-0.384-0.405-0.678-0.887-0.881-1.443s-0.304-1.158-0.304-1.805v-2.819c0-0.677,0.104-1.298,0.315-1.861 c0.211-0.564,0.516-1.041,0.914-1.433c0.398-0.391,0.875-0.695,1.432-0.913S305.661,130.342,306.368,130.342z M306.368,132.484 c-0.782,0-1.351,0.207-1.703,0.62c-0.354,0.414-0.53,0.981-0.53,1.703v0.406h4.443v-0.338c0-0.768-0.172-1.357-0.519-1.771 C307.713,132.691,307.15,132.484,306.368,132.484z"/>
|
||||||
|
<path fill="#FF6900" d="M321.662,125.965c0.346,0,0.627,0.105,0.846,0.316c0.218,0.211,0.327,0.488,0.327,0.835v13.196 c0,0.301-0.087,0.571-0.259,0.812c-0.174,0.241-0.41,0.414-0.711,0.519c-1.144,0.392-2.339,0.587-3.587,0.587 c-1.414,0-2.526-0.372-3.339-1.116c-0.813-0.745-1.218-1.869-1.218-3.373v-2.91c0-0.736,0.104-1.387,0.315-1.951 c0.211-0.563,0.508-1.033,0.891-1.409c0.385-0.376,0.839-0.658,1.365-0.847c0.526-0.188,1.113-0.281,1.76-0.281 c0.361,0,0.764,0.056,1.207,0.169c0.443,0.112,0.86,0.274,1.252,0.485v-3.88c0-0.347,0.108-0.624,0.326-0.835 C321.056,126.07,321.331,125.965,321.662,125.965z M318.278,132.484c-1.489,0-2.233,0.737-2.233,2.211v3.181 c0,0.722,0.191,1.274,0.575,1.658c0.384,0.383,0.937,0.575,1.658,0.575c0.767,0,1.511-0.105,2.233-0.316v-6.541 c-0.331-0.241-0.681-0.429-1.049-0.564C319.093,132.552,318.699,132.484,318.278,132.484z"/>
|
||||||
|
<path fill="#FF6900" d="M327.527,125.965c0.375,0,0.695,0.132,0.958,0.396c0.263,0.263,0.396,0.583,0.396,0.958 c0,0.392-0.133,0.719-0.396,0.981c-0.263,0.264-0.583,0.395-0.958,0.395c-0.377,0-0.696-0.131-0.959-0.395 c-0.264-0.263-0.395-0.59-0.395-0.981c0-0.375,0.131-0.695,0.395-0.958C326.831,126.097,327.15,125.965,327.527,125.965z M327.527,130.342c0.346,0,0.623,0.105,0.834,0.315c0.211,0.211,0.316,0.489,0.316,0.835v9.587c0,0.346-0.105,0.624-0.316,0.835 c-0.211,0.21-0.488,0.315-0.834,0.315c-0.347,0-0.629-0.105-0.847-0.315c-0.218-0.211-0.327-0.489-0.327-0.835v-9.587 c0-0.346,0.109-0.624,0.327-0.835C326.898,130.447,327.18,130.342,327.527,130.342z"/>
|
||||||
|
<path fill="#FF6900" d="M336.301,130.342c0.691,0,1.315,0.109,1.872,0.327s1.033,0.526,1.433,0.925 c0.397,0.398,0.702,0.876,0.913,1.433c0.211,0.556,0.316,1.173,0.316,1.85v1.105c0,0.33-0.125,0.643-0.373,0.936 s-0.598,0.44-1.049,0.44h-5.346v0.428c0,0.302,0.037,0.591,0.113,0.869c0.074,0.278,0.203,0.522,0.383,0.732 c0.181,0.211,0.414,0.384,0.699,0.52c0.285,0.135,0.632,0.203,1.038,0.203c0.496,0,0.925-0.049,1.286-0.146 c0.36-0.098,0.691-0.207,0.992-0.327c0.33-0.136,0.594-0.203,0.789-0.203c0.301,0,0.553,0.102,0.756,0.305 c0.203,0.202,0.305,0.454,0.305,0.755c0,0.211-0.049,0.399-0.146,0.564s-0.252,0.301-0.463,0.406 c-0.256,0.135-0.541,0.248-0.857,0.338c-0.315,0.091-0.635,0.169-0.958,0.237c-0.323,0.067-0.636,0.116-0.937,0.146 c-0.301,0.029-0.557,0.045-0.767,0.045c-0.722,0-1.368-0.113-1.94-0.338c-0.571-0.226-1.049-0.542-1.432-0.948 c-0.384-0.405-0.678-0.887-0.881-1.443s-0.304-1.158-0.304-1.805v-2.819c0-0.677,0.104-1.298,0.315-1.861 c0.211-0.564,0.516-1.041,0.914-1.433c0.398-0.391,0.875-0.695,1.432-0.913S335.594,130.342,336.301,130.342z M336.301,132.484 c-0.782,0-1.351,0.207-1.703,0.62c-0.354,0.414-0.53,0.981-0.53,1.703v0.406h4.443v-0.338c0-0.768-0.172-1.357-0.519-1.771 C337.647,132.691,337.083,132.484,336.301,132.484z"/>
|
||||||
|
<path fill="#FF6900" d="M348.482,130.342c1.52,0,2.658,0.376,3.418,1.128c0.759,0.752,1.139,1.857,1.139,3.315v6.294 c0,0.346-0.109,0.624-0.327,0.835c-0.218,0.21-0.493,0.315-0.823,0.315c-0.346,0-0.628-0.105-0.846-0.315 c-0.219-0.211-0.327-0.489-0.327-0.835v-6.384c0-0.722-0.188-1.271-0.563-1.646c-0.377-0.376-0.934-0.564-1.67-0.564 c-0.752,0-1.488,0.105-2.211,0.316v8.278c0,0.346-0.109,0.624-0.326,0.835c-0.219,0.21-0.493,0.315-0.824,0.315 c-0.346,0-0.628-0.105-0.846-0.315c-0.219-0.211-0.327-0.489-0.327-0.835v-8.82c0-0.315,0.087-0.59,0.26-0.823 s0.425-0.402,0.755-0.508c0.557-0.18,1.125-0.323,1.703-0.429C347.245,130.395,347.851,130.342,348.482,130.342z"/>
|
||||||
|
</g>
|
||||||
|
<path fill="#FF6900" d="M89.414,115.623c-4.544,0-8.65-2.717-10.424-6.904L39.587,15.743C37.147,9.986,39.836,3.34,45.594,0.9 c5.758-2.439,12.404,0.249,14.843,6.007l28.824,68.016l27.95-67.907c1.74-4.227,5.85-6.993,10.421-7.013c0.017,0,0.033,0,0.05,0 c4.551,0,8.662,2.726,10.432,6.922l28.813,68.307l29.143-68.348c1.59-3.729,5.051-6.323,9.077-6.802 c4.022-0.478,7.999,1.229,10.42,4.481l29.803,40.026l30.165-40.074c2.403-3.194,6.323-4.885,10.284-4.445 c3.973,0.437,7.421,2.937,9.072,6.576l23.668,52.157c2.584,5.694,0.063,12.405-5.632,14.989c-5.695,2.583-12.405,0.062-14.989-5.632 l-15.784-34.785l-27.788,36.916c-2.145,2.85-5.483,4.505-9.075,4.513c-3.567-0.009-6.922-1.699-9.053-4.561L209.17,33.892 l-31.885,74.78c-1.779,4.174-5.879,6.882-10.415,6.882c-0.007,0-0.015,0-0.022,0c-4.545-0.009-8.644-2.734-10.41-6.922 l-28.628-67.87L99.884,108.61c-1.738,4.224-5.844,6.989-10.412,7.013C89.454,115.623,89.433,115.623,89.414,115.623z"/>
|
||||||
|
<path fill="#FF6900" d="M11.322,115.648C5.069,115.648,0,110.579,0,104.326V11.399C0,5.146,5.069,0.077,11.322,0.077 s11.322,5.069,11.322,11.322v92.927C22.645,110.579,17.576,115.648,11.322,115.648z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 29 KiB |
@ -63,6 +63,7 @@ public class GateSpawner : MonoBehaviour
|
|||||||
public System.Action<bool> OnTutorialQuestionAnswered;
|
public System.Action<bool> OnTutorialQuestionAnswered;
|
||||||
public System.Action OnTutorialSequenceFinished;
|
public System.Action OnTutorialSequenceFinished;
|
||||||
|
|
||||||
|
|
||||||
private void Awake()
|
private void Awake()
|
||||||
{
|
{
|
||||||
// Fragebild initial aus
|
// Fragebild initial aus
|
||||||
@ -455,10 +456,10 @@ public class GateSpawner : MonoBehaviour
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// === Hilfen ===
|
// === Positionierung des SafetyTriggers > triggert falls Spieler durch kein Gate gefahren ist. Gilt als inkorrekte Antwort. ===
|
||||||
private void PlaceSkipTrigger(Transform basis, Vector3 fwd, Vector3 right)
|
private void PlaceSkipTrigger(Transform basis, Vector3 fwd, Vector3 right)
|
||||||
{
|
{
|
||||||
// Finde weitestes Gate (entlang fwd)
|
// === 1) Find farthest gate along 'fwd' ===
|
||||||
float maxAlong = float.NegativeInfinity;
|
float maxAlong = float.NegativeInfinity;
|
||||||
Vector3 farthestPos = Vector3.zero;
|
Vector3 farthestPos = Vector3.zero;
|
||||||
|
|
||||||
@ -474,27 +475,51 @@ public class GateSpawner : MonoBehaviour
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// === 2) Pick trigger position a bit after farthest gate ===
|
||||||
Vector3 triggerPos = farthestPos + fwd * skipTriggerOffset;
|
Vector3 triggerPos = farthestPos + fwd * skipTriggerOffset;
|
||||||
triggerPos = SnapToGround(triggerPos, fallbackGroundY);
|
|
||||||
|
// Height: use ship height if available, otherwise ground
|
||||||
|
float shipY = player ? player.position.y : fallbackGroundY;
|
||||||
|
triggerPos.y = shipY;
|
||||||
|
|
||||||
if (activeSkipTrigger != null) { Destroy(activeSkipTrigger); activeSkipTrigger = null; }
|
if (activeSkipTrigger != null) { Destroy(activeSkipTrigger); activeSkipTrigger = null; }
|
||||||
|
|
||||||
activeSkipTrigger = new GameObject("Safety Trigger");
|
activeSkipTrigger = new GameObject("Safety Trigger");
|
||||||
activeSkipTrigger.layer = gameObject.layer;
|
|
||||||
|
// === 3) Safe layer that collides with the ship ===
|
||||||
|
int layer = LayerMask.NameToLayer("Default");
|
||||||
|
activeSkipTrigger.layer = layer;
|
||||||
|
|
||||||
activeSkipTrigger.transform.position = triggerPos;
|
activeSkipTrigger.transform.position = triggerPos;
|
||||||
activeSkipTrigger.transform.rotation = Quaternion.LookRotation(fwd, Vector3.up);
|
activeSkipTrigger.transform.rotation = Quaternion.LookRotation(fwd, Vector3.up);
|
||||||
|
|
||||||
var box = activeSkipTrigger.AddComponent<BoxCollider>();
|
var box = activeSkipTrigger.AddComponent<BoxCollider>();
|
||||||
box.isTrigger = true;
|
box.isTrigger = true;
|
||||||
box.size = new Vector3(skipTriggerSize.x, skipTriggerSize.y, skipTriggerThickness);
|
|
||||||
|
// === 4) Size it to cover the whole road (and then some) ===
|
||||||
|
float roadWidth = roadHalfWidth * 2f;
|
||||||
|
float lateralMargin = 300f; // catch off-road flyers
|
||||||
|
float height = 120f; // tall enough regardless of altitude
|
||||||
|
float thickness = Mathf.Max(skipTriggerThickness, 50f); // thick band
|
||||||
|
|
||||||
|
box.size = new Vector3(roadWidth + lateralMargin * 2f, height, thickness);
|
||||||
|
|
||||||
|
// Center vertically on ship height
|
||||||
|
box.center = Vector3.zero; // since we set transform.y to shipY already
|
||||||
|
|
||||||
var rb = activeSkipTrigger.AddComponent<Rigidbody>();
|
var rb = activeSkipTrigger.AddComponent<Rigidbody>();
|
||||||
rb.isKinematic = true; rb.useGravity = false;
|
rb.isKinematic = true; rb.useGravity = false;
|
||||||
|
|
||||||
var logic = activeSkipTrigger.AddComponent<SafetyTrigger>();
|
var logic = activeSkipTrigger.AddComponent<SafetyTrigger>();
|
||||||
logic.spawner = this;
|
logic.spawner = this;
|
||||||
|
|
||||||
|
// Optional: visual gizmo for sanity (editor only)
|
||||||
|
#if UNITY_EDITOR
|
||||||
|
Debug.Log($"[GateSpawner] Safety Trigger @ {triggerPos} size {box.size}");
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private Vector3 SnapToGround(Vector3 pos, float fallbackY)
|
private Vector3 SnapToGround(Vector3 pos, float fallbackY)
|
||||||
{
|
{
|
||||||
if (groundLayer.value != 0)
|
if (groundLayer.value != 0)
|
||||||
|
|||||||
@ -1,14 +1,23 @@
|
|||||||
// SafetyTrigger.cs
|
// SafetyTrigger.cs
|
||||||
// Zweck: Sicherheits-Netz: wenn Spieler alle Gates überspringt, wird „falsch“ gezählt und weitergemacht.
|
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
public class SafetyTrigger : MonoBehaviour
|
public class SafetyTrigger : MonoBehaviour
|
||||||
{
|
{
|
||||||
|
[SerializeField] private string playerTag = "Player";
|
||||||
public GateSpawner spawner;
|
public GateSpawner spawner;
|
||||||
|
|
||||||
private void OnTriggerEnter(Collider other)
|
private void OnTriggerEnter(Collider other)
|
||||||
{
|
{
|
||||||
if (!other.CompareTag("Player")) return;
|
// Robust root detection (matches GateAnswer approach)
|
||||||
|
Transform root = other.attachedRigidbody
|
||||||
|
? other.attachedRigidbody.transform
|
||||||
|
: other.transform.root;
|
||||||
|
|
||||||
|
if (!root.CompareTag(playerTag)) return;
|
||||||
|
|
||||||
|
// Uncomment while debugging:
|
||||||
|
// Debug.Log($"[SafetyTrigger] Hit by {root.name} (tag {root.tag})");
|
||||||
|
|
||||||
spawner?.HandleGateAnswered(false);
|
spawner?.HandleGateAnswered(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user