mylingo3d
Version:
Lingo3D is a React/Vue 3d game development framework that ships with a complete visual editor
41 lines (35 loc) • 1.23 kB
text/typescript
import { Point3d } from "@lincode/math"
import { Object3D } from "three"
import getWorldPosition from "../../display/utils/getWorldPosition"
import { vec2Point } from "../../display/utils/vec2Point"
import { scaleUp, scaleDown } from "../../engine/constants"
import IPositioned from "../../interface/IPositioned"
import EventLoopItem from "./EventLoopItem"
export default abstract class PositionedItem<T extends Object3D = Object3D>
extends EventLoopItem<T>
implements IPositioned
{
public get x() {
return this.outerObject3d.position.x * scaleUp
}
public set x(val) {
this.outerObject3d.position.x = val * scaleDown
}
public get y() {
return this.outerObject3d.position.y * scaleUp
}
public set y(val) {
this.outerObject3d.position.y = val * scaleDown
}
public get z() {
return this.outerObject3d.position.z * scaleUp
}
public set z(val) {
this.outerObject3d.position.z = val * scaleDown
}
public getWorldPosition(): Point3d {
return vec2Point(getWorldPosition(this.nativeObject3d))
}
}
export const isPositionedItem = (item: any): item is PositionedItem =>
item instanceof EventLoopItem && "x" in item