@needle-tools/engine
Version:
Needle Engine is a web-based runtime for 3D apps. It runs on your machine for development with great integrations into editors like Unity or Blender - and can be deployed onto any device! It is flexible, extensible and networking and XR are built-in.
59 lines • 2.54 kB
JavaScript
import { Gizmos } from "../engine/engine_gizmos.js";
import { syncDestroy } from "../engine/engine_networking_instantiate.js";
import { getParam } from "../engine/engine_utils.js";
import { BoxHelperComponent } from "./BoxHelperComponent.js";
import { Behaviour, GameObject } from "./Component.js";
import { UsageMarker } from "./Interactable.js";
const debug = getParam("debugdeletable");
/**
* A box-shaped area that can be used to delete objects that get into it. Useful for sandbox-style builders or physics simulations.
* @category Interactivity
* @group Components
*/
export class DeleteBox extends BoxHelperComponent {
static _instances = [];
onEnable() {
DeleteBox._instances.push(this);
}
onDisable() {
const idx = DeleteBox._instances.indexOf(this);
if (idx >= 0)
DeleteBox._instances.splice(idx, 1);
}
}
/** Objects with this component can be destroyed by the {@link DeleteBox} component.
* @category Interactivity
* @group Components
*/
export class Deletable extends Behaviour {
update() {
for (const box of DeleteBox._instances) {
const obj = this.gameObject;
const res = box.isInBox(obj);
if (res === true) {
const marker = GameObject.getComponentInParent(this.gameObject, UsageMarker);
if (!marker) {
if (debug) {
try {
if (box["box"]) {
const deleteBoxArea = box["box"];
const deletedObjectArea = BoxHelperComponent["testBox"];
Gizmos.DrawWireBox3(deleteBoxArea, 0xff0000, 5);
Gizmos.DrawWireBox3(deletedObjectArea, 0x0000ff, 5);
console.log("DeleteBox: Destroying", this.gameObject, { deleteBoxArea, deletedObjectArea });
}
else {
console.log("DeleteBox: Destroying", this.gameObject);
}
}
catch (_e) { }
}
syncDestroy(this.gameObject, this.context.connection);
}
else if (debug)
console.warn("DeleteBox: Not deleting object with usage marker", this.guid, marker);
}
}
}
}
//# sourceMappingURL=DeleteBox.js.map