mirror of
https://github.com/storytold/storyteller-bevy.git
synced 2026-10-14 23:53:14 +00:00
c9904a5293
This PR begins fleshing out the front-end UI for inspecting the selected entity's components. ### Implemented * Support for the `Name` component * Placeholder/WIP support for the `Transform` component ### To-do * Support for sending changes made in the inspector back to Bevy * A slider/field combo widget for numeric values (can be adapted from [this StackBlitz](https://stackblitz.com/edit/angular-wfikuy?file=src%2Ffloat-input%2Ffloat-input.component.ts)) * Quat -> Euler angles conversion ([example math here](https://github.com/dannymcgee/3DGameMath/blob/5cb7a8ff9310565329e57751cd8b9c33e9bd4cb7/libs/Math/include/math/quat.inl.hpp#L56-L78), or use a 3rd-party math library) ### Known issues * Selecting entities from the hierarchy doesn't always update the components list. I suspect this is the same issue as #39
46 lines
1.3 KiB
TypeScript
46 lines
1.3 KiB
TypeScript
import { inject } from "@storyteller/framework";
|
|
import * as studio from "@storyteller/studio";
|
|
import { LitElement, type PropertyValues, html, unsafeCSS } from "lit";
|
|
import { customElement } from "lit/decorators.js";
|
|
|
|
import { SCENE_DATA_PROVIDER, type SceneDataProvider } from "./scene-data-provider.element";
|
|
|
|
import "@storyteller/studio-ui/tree";
|
|
|
|
import styles from "./scene-hierarchy.element.scss?inline";
|
|
|
|
@customElement("sts-scene-hierarchy")
|
|
export class SceneHierarchyElement extends LitElement {
|
|
static override styles = unsafeCSS(styles);
|
|
|
|
@inject(SCENE_DATA_PROVIDER)
|
|
_sceneData?: SceneDataProvider;
|
|
|
|
override connectedCallback(): void {
|
|
this._sceneData?.addEventListener("property-changes", this.onProviderChanges);
|
|
super.connectedCallback();
|
|
}
|
|
|
|
override disconnectedCallback(): void {
|
|
this._sceneData?.removeEventListener("property-changes", this.onProviderChanges);
|
|
super.disconnectedCallback();
|
|
}
|
|
|
|
onProviderChanges = ({ detail: changes }: CustomEvent<PropertyValues<SceneDataProvider>>) => {
|
|
if (changes.has("tree"))
|
|
this.requestUpdate();
|
|
}
|
|
|
|
protected override render = () => html`
|
|
${this._sceneData?.tree.map(obj => html`
|
|
<sts-tree
|
|
id=${obj.id}
|
|
.name=${obj.name}
|
|
.icon=${obj.icon}
|
|
.treeChildren=${obj.children}
|
|
@tree-select=${(event: CustomEvent<string>) => studio.select(event.detail)}
|
|
></sts-tree>
|
|
`)}
|
|
`
|
|
}
|