No more ecs
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
import type { Client } from "$/client/client.ts";
|
||||
import { DebugUI } from "$/client/debug_ui.ts";
|
||||
|
||||
// f3: every entity's fields, editable
|
||||
export class DebugOverlay {
|
||||
render(client: Client) {
|
||||
DebugUI.begin("Entities", 10, 10, 300);
|
||||
|
||||
for (const entity of client.level.entities.values()) {
|
||||
if (DebugUI.collapsing_header(`${entity.constructor.name} - ${entity.id}`)) {
|
||||
this.#render_fields(entity);
|
||||
}
|
||||
}
|
||||
if (DebugUI.collapsing_header("Camera")) {
|
||||
this.#render_fields(client.camera);
|
||||
}
|
||||
if (DebugUI.collapsing_header("Options")) {
|
||||
this.#render_fields(client.options);
|
||||
}
|
||||
|
||||
DebugUI.end();
|
||||
}
|
||||
|
||||
// deno-lint-ignore no-explicit-any
|
||||
#render_fields(object: any) {
|
||||
for (const key in object) {
|
||||
const value = object[key];
|
||||
if (typeof value === "number") {
|
||||
object[key] = DebugUI.float_input(key, value);
|
||||
} else if (typeof value === "string") {
|
||||
object[key] = DebugUI.text_input(key, value);
|
||||
} else if (typeof value === "boolean") {
|
||||
object[key] = DebugUI.checkbox(key, value);
|
||||
} else if (Array.isArray(value)) {
|
||||
DebugUI.text(`${key}: ${JSON.stringify(value.slice(0, 10))}`);
|
||||
} else if (value && typeof value === "object" && value.constructor !== Object) {
|
||||
// other objects like the level point back at this one, only name them
|
||||
DebugUI.text(`${key}: ${value.constructor.name}`);
|
||||
} else {
|
||||
DebugUI.text(`${key}: ${JSON.stringify(value)}`);
|
||||
}
|
||||
DebugUI.separator();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user