docs: public void onDrawFrame(float frameTime)
      {
          if (!isEnabled() || (owner == null) || (getFloat("enabled") <= 0.0f))
          {
              return;
          }
          float[] odir = getVec3("world_direction");
          float[] opos = getVec3("world_position");
          GVRSceneObject parent = owner;
          Matrix4f worldmtx = parent.getTransform().getModelMatrix4f();
  
          mOldDir.x = odir[0];
          mOldDir.y = odir[1];
          mOldDir.z = odir[2];
          mOldPos.x = opos[0];
          mOldPos.y = opos[1];
          mOldPos.z = opos[2];
          mNewDir.x = 0.0f;
          mNewDir.y = 0.0f;
          mNewDir.z = -1.0f;
          worldmtx.getTranslation(mNewPos);
          worldmtx.mul(mLightRot);
          worldmtx.transformDirection(mNewDir);
          if ((mOldDir.x != mNewDir.x) || (mOldDir.y != mNewDir.y) || (mOldDir.z != mNewDir.z))
          {
              setVec4("world_direction", mNewDir.x, mNewDir.y, mNewDir.z, 0);
          }
          if ((mOldPos.x != mNewPos.x) || (mOldPos.y != mNewPos.y) || (mOldPos.z != mNewPos.z))
          {
              setPosition(mNewPos.x, mNewPos.y, mNewPos.z);
          }
      }