Up-in-the-Air – commitdiff

You can use Git to clone the repository via the web URL. Download snapshot (zip)
Rotate letters around their center instead of their corner
authorJulian Fietkau <git@fietkau.software>
Sat, 21 Sep 2024 15:51:56 +0000 (17:51 +0200)
committerJulian Fietkau <git@fietkau.software>
Sat, 21 Sep 2024 15:51:56 +0000 (17:51 +0200)
main.js

diff --git a/main.js b/main.js
index 12ad538d584169d8ec8e8023761084afbc2df70b..1882a1efe9c520402bdeb3d2d508b20af0ff32b7 100644 (file)
--- a/main.js
+++ b/main.js
@@ -210,9 +210,17 @@ function init(game, canvas) {
           curveSegments: 2,
           bevelEnabled: false,
         });
+        game.assets.fonts.geometry[letter].computeBoundingBox();
+        let bbox = game.assets.fonts.geometry[letter].boundingBox;
+        // Add these to local 0,0 later to get the letter's center rotation point
+        game.assets.fonts.geometry[letter].dx = (bbox.max.x - bbox.min.x) / 2;
+        game.assets.fonts.geometry[letter].dy = (bbox.max.y - bbox.min.y) / 2;
       }
       let mesh = new THREE.Mesh(game.assets.fonts.geometry[letter], letterMaterial);
-      word.add(mesh);
+      let container = new THREE.Group();
+      mesh.position.set(-game.assets.fonts.geometry[letter].dx, -game.assets.fonts.geometry[letter].dy, 0);
+      container.add(mesh);
+      word.add(container);
     }
     word.randomAnimOffset = Math.random();
     const vFOV = THREE.MathUtils.degToRad(game.view.camera.fov);
@@ -389,7 +397,7 @@ function init(game, canvas) {
     game.objects.pinwheel.position.x = game.view.camera.position.x + game.objects.pinwheel.cameraX;
     game.objects.pinwheel.position.y = game.view.camera.position.y + game.objects.pinwheel.cameraY;
 
-    let collectedScale = lerp(0.5, 0.2, game.objects.words.collectedCount / game.objects.words.length);
+    let collectedScale = lerp(0.6, 0.3, 1 - Math.pow(1 - game.objects.words.collectedCount / game.objects.words.length, 2));
     for(let i = 0; i < game.objects.words.length; i++) {
       let word = game.objects.words[i];
       if(!word.collected &&