From 47c848de5e77d221843dc6d8041497b83298f02e Mon Sep 17 00:00:00 2001 From: Lee-Orr Date: Wed, 20 Mar 2024 18:53:33 -0400 Subject: [PATCH] use scene data icons --- .../src/app/anim-editor.element.ts | 29 +++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/studio-frontend/src/app/anim-editor.element.ts b/studio-frontend/src/app/anim-editor.element.ts index 6d25c09..4b57735 100644 --- a/studio-frontend/src/app/anim-editor.element.ts +++ b/studio-frontend/src/app/anim-editor.element.ts @@ -1,6 +1,6 @@ import * as studio 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 { customElement, state } from "lit/decorators.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 { 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 = { camera: "video", @@ -27,7 +28,9 @@ function isOutsideEntity( } @customElement("sts-anim-editor") -export class AnimEditorElement extends LitElement { +@provide(TREE_SELECTION_PROVIDER) +export class AnimEditorElement extends LitElement +implements TreeSelectionProvider { @inject(SCENE_DATA_PROVIDER) sceneData?: SceneDataProvider; @@ -56,10 +59,25 @@ export class AnimEditorElement extends LitElement { return Object.keys(this.tracks).length; } + get selectedId() { + return !isOutsideEntity(this.selectedTrack) && this.selectedTrack?.track || null; + } + protected override update(changes: PropertyValues): void { if (changes.has("playHead")) studio.seekTime(this.playHead); + if (changes.has("selectedTrack")) { + const treeSelectionChanges: PropertyValues = 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); } @@ -271,15 +289,16 @@ export class AnimEditorElement extends LitElement { const tracklist = this.track_ordered.map((entity) => { let track = this.tracks[entity]; 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` - { + @tree-select=${() => { studio.select(entity); }} + .id=${entity} > `; });