feat(canvas): 导演台 - 增加彩色骨骼演员、姿势预设与单一构图回写

This commit is contained in:
ddCat
2026-08-05 16:22:11 +08:00
parent cd326609fa
commit 61af2a652a
11 changed files with 1244 additions and 150 deletions

View File

@@ -4,29 +4,38 @@ import type { DirectorRenderMode } from "@/types/director";
type DirectorWorkbenchStore = {
selectedObjectId: string | null;
selectedBone: string | null;
selectedLightId: string | null;
transformMode: "translate" | "rotate" | "scale";
renderMode: DirectorRenderMode;
playhead: number;
playing: boolean;
autoKey: boolean;
sequencerHeight: number;
setSelectedObjectId: (id: string | null) => void;
setSelectedBone: (bone: string | null) => void;
setSelectedLightId: (id: string | null) => void;
setTransformMode: (mode: DirectorWorkbenchStore["transformMode"]) => void;
setRenderMode: (mode: DirectorRenderMode) => void;
setPlayhead: (time: number) => void;
setPlaying: (playing: boolean) => void;
setAutoKey: (autoKey: boolean) => void;
setSequencerHeight: (height: number) => void;
reset: () => void;
};
const initialState = { selectedObjectId: null, selectedLightId: null, transformMode: "translate" as const, renderMode: "beauty" as const, playhead: 0, playing: false };
const initialState = { selectedObjectId: null, selectedBone: null, selectedLightId: null, transformMode: "translate" as const, renderMode: "beauty" as const, playhead: 0, playing: false, autoKey: true, sequencerHeight: 300 };
export const useDirectorWorkbenchStore = create<DirectorWorkbenchStore>((set) => ({
...initialState,
setSelectedObjectId: (selectedObjectId) => set({ selectedObjectId, selectedLightId: null }),
setSelectedLightId: (selectedLightId) => set({ selectedLightId, selectedObjectId: null }),
setSelectedObjectId: (selectedObjectId) => set({ selectedObjectId, selectedBone: null, selectedLightId: null }),
setSelectedBone: (selectedBone) => set({ selectedBone }),
setSelectedLightId: (selectedLightId) => set({ selectedLightId, selectedObjectId: null, selectedBone: null }),
setTransformMode: (transformMode) => set({ transformMode }),
setRenderMode: (renderMode) => set({ renderMode }),
setPlayhead: (playhead) => set({ playhead }),
setPlaying: (playing) => set({ playing }),
setAutoKey: (autoKey) => set({ autoKey }),
setSequencerHeight: (sequencerHeight) => set({ sequencerHeight: Math.max(180, Math.min(620, sequencerHeight)) }),
reset: () => set(initialState),
}));