62 lines
1.4 KiB
TypeScript
62 lines
1.4 KiB
TypeScript
import { System } from "$/common/ecs/mod.ts";
|
|
import { ClientWorld } from "$/client/client_world.ts";
|
|
import { DebugUI } from "$/client/debug_ui.ts";
|
|
|
|
export class DebugSystem extends System {
|
|
constructor() {
|
|
super();
|
|
}
|
|
|
|
update(world: ClientWorld, _delta: number): void {
|
|
if (!world.debugging) {
|
|
return;
|
|
}
|
|
|
|
DebugUI.ctx.save();
|
|
DebugUI.ctx.resetTransform();
|
|
|
|
DebugUI.begin("Entities", 10, 10, 300);
|
|
|
|
for (const entity of world.get_entities()) {
|
|
if (DebugUI.collapsing_header("Entity - " + entity.id)) {
|
|
for (const component of entity.get_all()) {
|
|
if (DebugUI.collapsing_header(`${component.constructor.name}##${entity.id}`)) {
|
|
this.render_component(component);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
DebugUI.end();
|
|
DebugUI.ctx.restore();
|
|
}
|
|
|
|
// deno-lint-ignore no-explicit-any
|
|
render_component(component: any) {
|
|
for (const key in component) {
|
|
if (key === "__component") {
|
|
continue;
|
|
}
|
|
if (typeof component[key] === "number") {
|
|
component[key] = DebugUI.float_input(
|
|
key,
|
|
component[key],
|
|
);
|
|
} else if (typeof component[key] === "string") {
|
|
component[key] = DebugUI.text_input(
|
|
key,
|
|
component[key],
|
|
);
|
|
} else if (typeof component[key] === "boolean") {
|
|
component[key] = DebugUI.checkbox(
|
|
key,
|
|
component[key],
|
|
);
|
|
} else {
|
|
DebugUI.text(`${key}: ${JSON.stringify(component[key])}`);
|
|
}
|
|
DebugUI.separator();
|
|
}
|
|
}
|
|
}
|