option to disable all speech

This commit is contained in:
Mathias Panzenböck
2013-07-10 23:44:05 +02:00
parent 5b7654649a
commit f9ab915880
7 changed files with 75 additions and 40 deletions

View File

@@ -202,8 +202,8 @@ var BrowserPonies = (function () {
switch (m[6]) {
case 'd': s += padd(parseInt(arguments[argind++]).toFixed(0),fill,padding,right); break;
case 'f': s += padd(parseFloat(arguments[argind++]).toFixed(decimal),fill,padding,right); break;
case 'e': s += padd(parseFloat(arguments[argind++]).toExponential(decimal),fill,padding,right); break;
case 'f': s += padd(Number(arguments[argind++]).toFixed(decimal),fill,padding,right); break;
case 'e': s += padd(Number(arguments[argind++]).toExponential(decimal),fill,padding,right); break;
case 's': s += padd(String(arguments[argind++]),fill,' ',right); break;
case 'j': s += padd(JSON.stringify(arguments[argind++]),fill,' ',right); break;
case '%': s += padd('%',fill,' ',right);
@@ -387,7 +387,7 @@ var BrowserPonies = (function () {
element.style.styleFloat = cssValue;
}
else if (name === 'opacity') {
setOpacity(element, parseFloat(cssValue));
setOpacity(element, Number(cssValue));
}
else {
try {
@@ -611,7 +611,7 @@ var BrowserPonies = (function () {
};
var randomSelect = function (list) {
return list[Math.round((list.length - 1) * Math.random())];
return list[Math.floor(list.length * Math.random())];
};
var Movements = {
@@ -1769,6 +1769,7 @@ var BrowserPonies = (function () {
this.interaction_targets = targets;
},
speak: function (currentTime,speech) {
if (dontSpeak) return;
if (speech.text) {
var duration = Math.max(speech.text.length * 150, 1000);
var remove = {at: currentTime + duration};
@@ -2715,6 +2716,7 @@ var BrowserPonies = (function () {
var globalBaseUrl = URL.abs('');
var globalSpeed = 3; // why is it too slow otherwise?
var speakProbability = 0.1;
var dontSpeak = false;
var interval = 40;
var interactionInterval = 500;
var ponies = {};
@@ -2801,10 +2803,10 @@ var BrowserPonies = (function () {
case "behavior":
var behavior = {
name: row[1],
probability: parseFloat(row[2]),
maxduration: parseFloat(row[3]),
minduration: parseFloat(row[4]),
speed: parseFloat(row[5]),
probability: Number(row[2]),
maxduration: Number(row[3]),
minduration: Number(row[4]),
speed: Number(row[5]),
rightimage: encodeURIComponent(row[6]),
leftimage: encodeURIComponent(row[7]),
movement: row[8],
@@ -2819,8 +2821,8 @@ var BrowserPonies = (function () {
var speakend = (row[11] || '').trim();
if (speakend) behavior.speakend = speakend;
behavior.skip = parseBoolean(row[12]);
behavior.x = parseFloat(row[13]);
behavior.y = parseFloat(row[14]);
behavior.x = Number(row[13]);
behavior.y = Number(row[14]);
if (row[15]) behavior.follow = row[15];
if (row.length > 16) {
@@ -2861,8 +2863,8 @@ var BrowserPonies = (function () {
behavior: row[2],
rightimage: encodeURIComponent(row[3]),
leftimage: encodeURIComponent(row[4]),
duration: parseFloat(row[5]),
delay: parseFloat(row[6]),
duration: Number(row[5]),
delay: Number(row[6]),
rightloc: row[7].trim(),
rightcenter: row[8].trim(),
leftloc: row[9].trim(),
@@ -2995,16 +2997,16 @@ var BrowserPonies = (function () {
}
var proximity = row[3].trim().toLowerCase();
if (proximity !== "default") proximity = parseFloat(proximity);
if (proximity !== "default") proximity = Number(proximity);
interactions.push({
name: row[0],
pony: row[1],
probability: parseFloat(row[2]),
probability: Number(row[2]),
proximity: proximity,
targets: row[4],
activate: activate,
behaviors: row[6],
delay: row.length > 7 ? parseFloat(row[7].trim()) : 0
delay: row.length > 7 ? Number(row[7].trim()) : 0
});
}
@@ -3270,13 +3272,13 @@ var BrowserPonies = (function () {
return interval;
},
setFps: function (fps) {
this.setInterval(1000 / parseFloat(fps));
this.setInterval(1000 / Number(fps));
},
getFps: function () {
return 1000 / interval;
},
setInteractionInterval: function (ms) {
ms = parseFloat(ms);
ms = Number(ms);
if (isNaN(ms)) {
console.error("unexpected NaN value for interaction interval");
}
@@ -3288,7 +3290,7 @@ var BrowserPonies = (function () {
return interactionInterval;
},
setSpeakProbability: function (probability) {
probability = parseFloat(probability);
probability = Number(probability);
if (isNaN(probability)) {
console.error("unexpected NaN value for speak probability");
}
@@ -3299,8 +3301,14 @@ var BrowserPonies = (function () {
getSpeakProbability: function () {
return speakProbability;
},
setDontSpeak: function (value) {
dontSpeak = !!value;
},
isDontSpeak: function () {
return dontSpeak;
},
setVolume: function (value) {
value = parseFloat(value);
value = Number(value);
if (isNaN(value)) {
console.error("unexpected NaN value for volume");
}
@@ -3322,7 +3330,7 @@ var BrowserPonies = (function () {
return globalBaseUrl;
},
setSpeed: function (speed) {
globalSpeed = parseFloat(speed);
globalSpeed = Number(speed);
},
getSpeed: function () {
return globalSpeed;
@@ -3417,7 +3425,7 @@ var BrowserPonies = (function () {
return fadeDuration;
},
setFadeDuration: function (ms) {
fadeDuration = parseFloat(ms);
fadeDuration = Number(ms);
},
running: function () {
return timer !== null;
@@ -3435,6 +3443,9 @@ var BrowserPonies = (function () {
if ('speakProbability' in config) {
this.setSpeakProbability(config.speakProbability);
}
if ('dontSpeak' in config) {
this.setDontSpeak(config.dontSpeak);
}
if ('volume' in config) {
this.setVolume(config.volume);
}
@@ -3496,6 +3507,7 @@ var BrowserPonies = (function () {
config.baseurl = this.getBaseUrl();
config.speed = this.getSpeed();
config.speakProbability = this.getSpeakProbability();
config.dontSpeak = this.isDontSpeak();
config.volume = this.getVolume();
config.interval = this.getInterval();
config.fps = this.getFps();

View File

@@ -100,10 +100,16 @@ form {
<td><input type="checkbox" id="showfps" onchange="updateConfig();"/></td>
<td><label for="showfps">Show Frames per Second</label></td>
</tr>
<tr>
<td><input type="checkbox" id="progressbar" onchange="updateConfig();" checked/></td>
<td><label for="progressbar">Show Progress Bar</label></td>
</tr>
<tr>
<td><input type="checkbox" id="dontspeak" onchange="updateDontSpeak(this.checked);"/></td>
<td><label for="dontspeak">Never Speak</label></td>
</tr>
</tbody>
</table>
@@ -123,8 +129,8 @@ form {
</td>
</tr>
<tr>
<td><label for="speak">Speak Probability:</label></td>
<tr title="Even if this is 0% ponies will speak if an animation requires it.">
<td><label for="speak">Random Speak Probability:</label></td>
<td>
<input type="text" class="number" id="speak" value="15"
data-value="15" data-min="0" data-max="100" data-decimals="0" size="3"

View File

@@ -42,6 +42,7 @@ function setSimpleConfig (config) {
if ('showFps' in config) BrowserPonies.setShowFps(config.showFps);
if ('showLoadProgress' in config) BrowserPonies.setShowLoadProgress(config.showLoadProgress);
if ('speakProbability' in config) BrowserPonies.setSpeakProbability(config.speakProbability);
if ('dontSpeak' in config) BrowserPonies.setDontSpeak(config.dontSpeak);
}
function updateConfig () {
@@ -113,6 +114,7 @@ function loadConfig () {
$('progressbar').checked = BrowserPonies.isShowLoadProgress();
$('enableaudio').checked = BrowserPonies.isAudioEnabled();
$('showfps').checked = BrowserPonies.isShowFps();
$('dontspeak').checked = BrowserPonies.isDontSpeak();
BrowserPonies.unspawnAll();
var ponies = BrowserPonies.ponies();

View File

@@ -34,6 +34,7 @@ function init () {
setNumberFieldValue($('speed'), BrowserPonies.getSpeed());
$('progressbar').checked = BrowserPonies.isShowLoadProgress();
$('enableaudio').checked = BrowserPonies.isAudioEnabled();
$('dontspeak').checked = BrowserPonies.isDontSpeak();
$('showfps').checked = BrowserPonies.isShowFps();
var list = $('ponylist');
@@ -329,6 +330,7 @@ function dumpConfig (dontSkip) {
config.fps = getNumberFieldValue($('fps'));
config.speed = getNumberFieldValue($('speed'));
config.audioEnabled = $('enableaudio').checked;
if ($('dontspeak').checked) config.dontSpeak = true;
config.showFps = $('showfps').checked;
config.showLoadProgress = $('progressbar').checked;
config.speakProbability = getNumberFieldValue($('speak')) / 100;
@@ -372,3 +374,16 @@ function configToQueryString (config) {
}
return buf.join("&");
}
function updateDontSpeak (checked) {
var speak = $('speak');
var tr = speak.parentNode.parentNode;
tr.className = checked ? 'disabled' : '';
speak.disabled = checked;
var buttons = tr.getElementsByTagName('button');
for (var i = 0; i < buttons.length; ++ i) {
buttons[i].disabled = checked;
}
updateConfig();
}

23
gui.css
View File

@@ -18,21 +18,6 @@ background: linear-gradient(top, #2d96c6 0%,#c9e6f4 100%);
body, option {
color: #294256;
}
#share {
position: absolute;
left: -100px;
width: 100px;
opacity: 0.5;
*zoom: 1;
filter: alpha(opacity=50);
padding-bottom: 20px;
overflow: hidden;
}
#share:hover {
opacity: 1;
filter: alpha(opacity=100);
overflow: visible;
}
h1 {
text-align: center;
margin: 0;
@@ -102,6 +87,14 @@ a.button:visited {
inset 20px 20px 40px -20px #4c92c4,
inset -20px -20px 40px -20px #b1dbed;
}
.button.disabled, button:disabled, select:disabled {
cursor: default;
border-color: #8A8A8A;
background: #D3DBE1;
box-shadow:
inset -20px -20px 40px -20px #999FA3,
inset 20px 20px 40px -20px #D3DBE1;
}
#bookmarklet {
padding: 10px 30px;
font-size: 1.2em;

1
gui.js
View File

@@ -104,6 +104,7 @@ function updateConfig () {
BrowserPonies.setShowFps(config.showFps);
BrowserPonies.setShowLoadProgress(config.showLoadProgress);
BrowserPonies.setSpeakProbability(config.speakProbability);
BrowserPonies.setDontSpeak(config.dontSpeak);
var random = config.spawnRandom || 0;
var ponies = BrowserPonies.ponies();

View File

@@ -201,10 +201,16 @@ you can use this embed code to confine the ponies into an iframe:</label>
<td><input type="checkbox" id="showfps" onchange="updateConfig();"/></td>
<td><label for="showfps">Show Frames per Second</label></td>
</tr>
<tr>
<td><input type="checkbox" id="progressbar" onchange="updateConfig();" checked/></td>
<td><label for="progressbar">Show Progress Bar</label></td>
</tr>
<tr>
<td><input type="checkbox" id="dontspeak" onchange="updateDontSpeak(this.checked);"/></td>
<td><label for="dontspeak">Never Speak</label></td>
</tr>
</tbody>
</table>
@@ -224,8 +230,8 @@ you can use this embed code to confine the ponies into an iframe:</label>
</td>
</tr>
<tr>
<td><label for="speak">Speak Probability:</label></td>
<tr title="Even if this is 0% ponies will speak if an animation requires it.">
<td><label for="speak">Random Speak Probability:</label></td>
<td>
<input type="text" class="number" id="speak" value="15"
data-value="15" data-min="0" data-max="100" data-decimals="0" size="3"