lingo3d
Version:
Lingo3D is a React/Vue 3d game development framework that ships with a complete visual editor
44 lines • 1.76 kB
JavaScript
import { Object3D, PerspectiveCamera } from "three";
import scene from "../../engine/scene";
import { characterCameraDefaults, characterCameraSchema } from "../../interface/ICharacterCamera";
import { FAR, NEAR } from "../../globals";
import CameraBase from "./CameraBase";
import MeshAppendable from "./MeshAppendable";
import { addCharacterCameraTransformEditSystem } from "../../systems/eventSystems/characterCameraTransformEditSystem";
import { characterCameraFollowSystem } from "../../systems/characterCameraFollowSystem";
class CharacterCamera extends CameraBase {
static defaults = characterCameraDefaults;
static schema = characterCameraSchema;
constructor() {
super(new PerspectiveCamera(75, 1, NEAR, FAR));
const midObject3d = (this.midObject3d = new Object3D());
this.outerObject3d.add(midObject3d);
midObject3d.add(this.object3d);
scene.attach(this.$camera);
this.createEffect(() => {
const found = this.firstChildState.get();
if (!(found instanceof MeshAppendable))
return;
characterCameraFollowSystem.add(this, { found });
return () => {
characterCameraFollowSystem.delete(this);
};
}, [this.firstChildState.get]);
addCharacterCameraTransformEditSystem(this);
}
disposeNode() {
super.disposeNode();
scene.remove(this.$camera);
}
lockTargetRotation = true;
append(object) {
this.$appendNode(object);
object.outerObject3d.parent !== scene &&
scene.attach(object.outerObject3d);
}
attach(object) {
this.append(object);
}
}
export default CharacterCamera;
//# sourceMappingURL=CharacterCamera.js.map