game.view.camera.position.set(-5, -game.courseRadius, game.view.camera.position.z);
game.view.scene = scene;
-
+
reset(game);
function pinwheelPositionUpdate(game, viewportX, viewportY) {
if(game.ui.currentPage == 'pause') {
return;
}
- let delta = Math.min(game.view.clock.getDeltaTime(), 1 / 12);
+ let delta = Math.min(game.view.clock.getDeltaTime(), 1 / 12) * (game.settings['difficulty']['speed'] / 100);
game.timeProgress = (game.timeProgress + delta);
game.objects.pinwheel.rotation.z -= 5 * delta;
game.ui.moveToPage('endingcutscene', true);
}
+ if(game.settings.audio.music > 0.0 && game.view.music && !game.view.music.isPlaying) {
+ const remainingRealTime = (game.timeTotal - game.timeProgress) / (game.settings['difficulty']['speed'] / 100);
+ if(remainingRealTime >= game.assets.audio.music.duration - 2) {
+ game.view.music.offset = 0;
+ game.view.music.play();
+ }
+ }
+
const angle = 2 * Math.PI * (game.timeProgress / game.timeTotal);
game.view.camera.position.x = game.courseRadius * Math.sin(angle);
game.view.camera.position.y = - game.courseRadius * Math.cos(angle);
if(game.objects.feather.speed.y > -1) {
applyForceToFeather(game, tiltedGravity);
}
- game.objects.feather.speed.multiplyScalar(1 - delta);
- game.objects.feather.rotation.z = -0.1 * game.objects.feather.speed.x;
- game.objects.feather.position.addScaledVector(game.objects.feather.speed, delta);
+ game.objects.feather.rotation.z = -0.1 * game.objects.feather.speed.x * game.settings['difficulty']['speed'] / 100;
+ game.objects.feather.position.addScaledVector(game.objects.feather.speed, delta * game.settings['difficulty']['speed'] / 100);
if(pinwheelForce > 0.2) {
if(game.objects.feather.twistSpeed < 0.0001) {
}
}
- game.objects.feather.twistSpeed = Math.min(0.13, game.objects.feather.twistSpeed);
+ game.objects.feather.twistSpeed = Math.min(0.13, game.objects.feather.twistSpeed) * game.settings['difficulty']['speed'] / 100;
game.objects.feather.rotation.x = (game.objects.feather.rotation.x + game.objects.feather.twistSpeed) % (2 * Math.PI);
- let collectedScale = lerp(0.6, 0.3, 1 - Math.pow(1 - game.objects.words.collectedCount / game.objects.words.length, 2));
+ const collectedScale = lerp(0.6, 0.3, 1 - Math.pow(1 - game.objects.words.collectedCount / game.objects.words.length, 2));
+ const collectingRadius = - 0.5 + 1.5 * game.settings['difficulty']['collectingradius'];
for(let i = 0; i < game.objects.words.length; i++) {
let word = game.objects.words[i];
if(!word.collected &&
game.objects.feather.speed.length() < 10.0 &&
- new THREE.Vector3().subVectors(word.mapPos, game.objects.feather.position).length() < 1) {
+ new THREE.Vector3().subVectors(word.mapPos, game.objects.feather.position).length() < collectingRadius) {
word.collected = game.view.clock.getElapsedTime();
game.objects.words.collectedCount += 1;
}
game.ui.moveToPage(Array.from(target.classList).filter(c => c != 'goto')[0]);
});
});
-game.ui.root.querySelectorAll('.options .controls input, .options .graphics input, .options .feather input, .options .accessibility input').forEach((radioOrCb) => {
- radioOrCb.addEventListener('change', () => applySettings(game));
+game.ui.root.querySelectorAll('.options .controls input, .options .graphics input, .options .feather input, .options .accessibility input, .options .accessibility select').forEach((elem) => {
+ elem.addEventListener('change', () => applySettings(game));
});
game.ui.root.querySelectorAll('.ui-page .audio input[type=range]').forEach((elem) => {
elem.addEventListener('input', (e) => {
game.ui.root.querySelectorAll('.options input[name=upInTheAirGame-font]').forEach((radio) => {
radio.addEventListener('change', () => applySettings(game));
});
+game.ui.root.querySelector('.options .keyboard button[value="reset"]').addEventListener('click', applySettings(game));
game.ui.root.querySelectorAll('.ui-page .areatabs button').forEach((btn) => {
btn.addEventListener('click', (e) => {
btn.parentNode.querySelectorAll('button').forEach((otherBtn) => {
if(target == 'pause') {
game.view.music.stop();
} else if(game.ui.currentPage == 'pause' && target == 'gameplay') {
- game.view.music.offset = game.timeProgress;
+ game.view.music.offset = (game.timeProgress / (game.settings['difficulty']['speed'] / 100)) % game.assets.audio.music.duration;
game.view.music.play();
}
game.ui.currentPage = target;