-- Leo's gemini proxy

-- Connecting to git.thebackupbox.net:1965...

-- Connected

-- Sending request

-- Meta line: 20 text/gemini

repo: janusweb
action: commit
revision:
path_from:
revision_from: 34f217b3773f7d61f757565f35355257b9d88029:
path_to:
revision_to:

git.thebackupbox.net

janusweb

git://git.thebackupbox.net/janusweb

commit 34f217b3773f7d61f757565f35355257b9d88029
Author: James Baicoianu <james_github@baicoianu.com>
Date:   Wed Apr 1 13:19:55 2020 -0700

    Billboard efficiency improvements

diff --git a/scripts/janusbase.js b/scripts/janusbase.js

index 97cc42e148b8435d6c71b3cac58413e5c93e0370..

index ..19d5ca7dc9c377665a4c4638e073154a9961494e 100644

--- a/scripts/janusbase.js
+++ b/scripts/janusbase.js
@@ -545,13 +545,17 @@ elation.require(['engine.things.generic', 'utils.template', 'janusweb.parts'], f
           dir = new THREE.Vector3(),
           up = new THREE.Vector3();
       return function(ev) {
-        if (this.billboard) {
-          player.camera.localToWorld(playerpos.set(0,0,0));
-          this.localToWorld(objpos.set(0,0,0));
+        let parent = this.parent;
+        let billboard = this.properties.billboard;
+        if (billboard && parent) {
+          //player.camera.localToWorld(playerpos.set(0,0,0));
+          //this.localToWorld(objpos.set(0,0,0));
+          /*
+          player.camera.getWorldPosition(playerpos);
+          this.getWorldPosition(objpos);
           dir.subVectors(playerpos, objpos);

-          let billboard = this.billboard;
-
+          let billboard = this.properties.billboard;
           if (billboard == 'x') {
             up.set(1,0,0);
             dir.x = 0;
@@ -565,8 +569,17 @@ elation.require(['engine.things.generic', 'utils.template', 'janusweb.parts'], f
             player.camera.localToWorld(up.set(0,1,0)).sub(playerpos).normalize();
           }
           dir.normalize();
-          this.zdir = dir;
-          this.ydir = up;
+          this.zdir.copy(this.parent.worldToLocal(dir).sub(this.parent.worldToLocal(objpos.set(0,0,0))).normalize());
+          this.ydir.copy(up);
+          */
+          // TODO - Simple trig makes this much faster, but to get the same functionality as before we'll need to implement each dimension
+          //        For now, we only support billboarding with the Y axis locked (eg, doom sprites)
+          parent.worldToLocal(player.camera.getWorldPosition(playerpos));
+          dir.copy(playerpos).normalize();
+          if (billboard == 'y') {
+            this.rotation.set(0, Math.atan2(dir.x, dir.z) * THREE.Math.RAD2DEG, 0);
+            this.frameupdates['rotation'] = true;
+          }
         }

         if (this.hasScriptChangedDirvecs()) {

-----END OF PAGE-----

-- Response ended

-- Page fetched on Sun Jun 2 19:04:06 2024