lingo3d
Version:
Lingo3D is a React/Vue 3d game development framework that ships with a complete visual editor
34 lines • 1.63 kB
JavaScript
import { mapRange } from "@lincode/math";
import { physxPtr } from "../pointers/physxPtr";
import { assignPxVec, assignPxVec_ } from "../engine/physx/pxMath";
import fpsAlpha from "../display/utils/fpsAlpha";
import getWorldDirection from "../memo/getWorldDirection";
import getWorldPosition from "../memo/getWorldPosition";
import getWorldQuaternion from "../memo/getWorldQuaternion";
import { vector3_ } from "../display/utils/reusables";
import { managerActorPtrMap } from "../collections/pxCollections";
import { fpsPtr } from "../pointers/fpsPtr";
import createInternalSystem from "./utils/createInternalSystem";
export const thirdPersonCameraSystem = createInternalSystem("thirdPersonCameraSystem", {
data: {},
update: (self, data) => {
const cam = self.$camera;
const { innerZ } = self;
self.innerZ = 0;
const origin = self.object3d.getWorldPosition(vector3_);
self.innerZ = innerZ;
const position = getWorldPosition(self.object3d);
const pxHit = physxPtr[0].pxRaycast?.(assignPxVec(origin), assignPxVec_(getWorldDirection(self.object3d)), position.distanceTo(origin), managerActorPtrMap.get(data.found));
if (pxHit) {
cam.position.lerp(pxHit.position, fpsAlpha(0.2));
data.lerpCount = fpsPtr[0];
}
else {
cam.position.lerp(position, fpsAlpha(mapRange(data.lerpCount, fpsPtr[0], 0, 0.2, 1)));
if (data.lerpCount)
data.lerpCount--;
}
cam.quaternion.copy(getWorldQuaternion(self.object3d));
}
});
//# sourceMappingURL=thirdPersonCameraSystem.js.map