UNPKG

lingo3d

Version:

Lingo3D is a React/Vue 3d game development framework that ships with a complete visual editor

53 lines 1.94 kB
import fpsAlpha from "../display/utils/fpsAlpha"; import { euler, quaternion } from "../display/utils/reusables"; import { PI } from "../globals"; import { positionChangedXZ } from "../memo/positionChangedXZ"; import createInternalSystem from "./utils/createInternalSystem"; import { gyrateResetSystem } from "./configSystems/gyrateResetSystem"; const followTargetRotation = (self, target, slerp) => { euler.setFromQuaternion(target.quaternion); euler.y += PI; if (slerp) { quaternion.setFromEuler(euler); self.midObject3d.quaternion.slerp(quaternion, fpsAlpha(0.1)); } else self.midObject3d.setRotationFromEuler(euler); gyrateResetSystem.add(self); }; const rotateTarget = (self, target, slerp) => { euler.setFromQuaternion(self.midObject3d.quaternion); euler.x = 0; euler.z = 0; euler.y += PI; if (slerp) { quaternion.setFromEuler(euler); target.quaternion.slerp(quaternion, fpsAlpha(0.1)); return; } target.outerObject3d.setRotationFromEuler(euler); }; export const characterCameraFollowSystem = createInternalSystem("characterCameraFollowSystem", { data: {}, update: (self, { found }) => { self.position.copy(found.position); if (!self.lockTargetRotation) return; if (self.lockTargetRotation === "follow") { followTargetRotation(self, found, false); return; } if (self.lockTargetRotation === "dynamic-lock") { positionChangedXZ(found.outerObject3d) && rotateTarget(self, found, true); return; } if (self.lockTargetRotation === "dynamic-follow") { positionChangedXZ(found.outerObject3d) && followTargetRotation(self, found, true); return; } rotateTarget(self, found, false); } }); //# sourceMappingURL=characterCameraFollowSystem.js.map