use scene data icons

This commit is contained in:
Lee-Orr
2024-03-20 18:53:33 -04:00
parent b324350096
commit 47c848de5e
+24 -5
View File
@@ -1,6 +1,6 @@
import * as studio from "@storyteller/studio"; import * as studio from "@storyteller/studio";
import type { EntitySelectEvent, SeekTimeChanged, UpdateAnimationTargets, Keyframe } from "@storyteller/studio"; import type { EntitySelectEvent, SeekTimeChanged, UpdateAnimationTargets, Keyframe } from "@storyteller/studio";
import { bind, drag, inject, on } from "@storyteller/framework"; import { bind, drag, inject, on, provide } from "@storyteller/framework";
import { LitElement, type PropertyValues, html, unsafeCSS, TemplateResult, PropertyValueMap } from "lit"; import { LitElement, type PropertyValues, html, unsafeCSS, TemplateResult, PropertyValueMap } from "lit";
import { customElement, state } from "lit/decorators.js"; import { customElement, state } from "lit/decorators.js";
import { styleMap } from "lit/directives/style-map.js"; import { styleMap } from "lit/directives/style-map.js";
@@ -12,6 +12,7 @@ import "./anim-timeline.element";
import styles from "./anim-editor.element.scss?inline"; import styles from "./anim-editor.element.scss?inline";
import { SCENE_DATA_PROVIDER, type SceneDataProvider } from "@storyteller/studio-web/scene-data-provider"; import { SCENE_DATA_PROVIDER, type SceneDataProvider } from "@storyteller/studio-web/scene-data-provider";
import { TREE_SELECTION_PROVIDER, TreeSelectionProvider } from "@storyteller/studio-ui/tree";
const TRACK_ICONS : Record<string, string> = { const TRACK_ICONS : Record<string, string> = {
camera: "video", camera: "video",
@@ -27,7 +28,9 @@ function isOutsideEntity(
} }
@customElement("sts-anim-editor") @customElement("sts-anim-editor")
export class AnimEditorElement extends LitElement { @provide(TREE_SELECTION_PROVIDER)
export class AnimEditorElement extends LitElement
implements TreeSelectionProvider {
@inject(SCENE_DATA_PROVIDER) @inject(SCENE_DATA_PROVIDER)
sceneData?: SceneDataProvider; sceneData?: SceneDataProvider;
@@ -56,10 +59,25 @@ export class AnimEditorElement extends LitElement {
return Object.keys(this.tracks).length; return Object.keys(this.tracks).length;
} }
get selectedId() {
return !isOutsideEntity(this.selectedTrack) && this.selectedTrack?.track || null;
}
protected override update(changes: PropertyValues<this>): void { protected override update(changes: PropertyValues<this>): void {
if (changes.has("playHead")) if (changes.has("playHead"))
studio.seekTime(this.playHead); studio.seekTime(this.playHead);
if (changes.has("selectedTrack")) {
const treeSelectionChanges: PropertyValues<TreeSelectionProvider> = new Map();
const prevSelectedTrack = changes.get("selectedTrack");
const prevTreeSelection = !isOutsideEntity(prevSelectedTrack) && prevSelectedTrack?.track || null;
treeSelectionChanges.set("selectedId", prevTreeSelection);
this.dispatchEvent(new CustomEvent("property-changes", {
detail: treeSelectionChanges,
}));
}
super.update(changes); super.update(changes);
} }
@@ -271,15 +289,16 @@ export class AnimEditorElement extends LitElement {
const tracklist = this.track_ordered.map((entity) => { const tracklist = this.track_ordered.map((entity) => {
let track = this.tracks[entity]; let track = this.tracks[entity];
let name = track.name ?? track.target_type; let name = track.name ?? track.target_type;
let icon = TRACK_ICONS[track.target_type] ?? "minus"; let icon = this.sceneData?.entityMap.get(entity)?.icon ?? "minus";
return html` return html`
<sts-tree class=${`track ` + (selected === entity ? `selected` : ``)} <sts-tree class="track"
role="listitem" role="listitem"
name=${name} name=${name}
icon=${icon} icon=${icon}
@click=${() => { @tree-select=${() => {
studio.select(entity); studio.select(entity);
}} }}
.id=${entity}
></sts-tree> ></sts-tree>
`; `;
}); });