vertecs
Version:
A typescript entity-component-system framework
56 lines (47 loc) • 1.74 kB
text/typescript
import { Mesh, MeshBasicMaterial, SphereGeometry } from "three";
import { vec3 } from "ts-gl-matrix";
import { Component, Entity } from "../core";
import { ThreeObject3D } from "../threejs";
import { Transform } from "../math";
import SphereBody from "./bodies/SphereBody";
export default class BodyDebugger extends Component {
public constructor() {
super();
}
public onAddedToEntity(entity: Entity) {
const sphereBody = entity.getComponent(SphereBody);
const boundingBoxDebugEntity = entity.ecsManager?.createEntity({
name: "bounding-box-debugger",
});
if (!boundingBoxDebugEntity) {
return;
}
const boundingBox = sphereBody?.getBoundingBox();
const boundingBoxSize = vec3.subtract(
vec3.create(),
boundingBox?.maximum || [0, 0, 0],
boundingBox?.minimum || [0, 0, 0]
);
boundingBoxDebugEntity.addComponent(
new ThreeObject3D(
new Mesh(
new SphereGeometry(sphereBody?.radius || 1, 32, 32),
new MeshBasicMaterial({ color: 0xff0000 })
)
)
);
const inverseScale = vec3.create();
vec3.inverse(
inverseScale,
entity.getComponent(Transform)?.getWorldScale() || [1, 1, 1]
);
boundingBoxDebugEntity.addComponent(
new Transform(undefined, undefined, inverseScale)
);
entity.addChild(boundingBoxDebugEntity);
}
public onRemovedFromEntity(entity: Entity) {
entity.findChildByName("body-debugger")?.destroy();
entity.findChildByName("bounding-box-debugger")?.destroy();
}
}