diff --git a/app/assets/characters/img01.png b/app/assets/characters/img01.png new file mode 100644 index 0000000000..6ca475c716 Binary files /dev/null and b/app/assets/characters/img01.png differ diff --git a/app/assets/characters/img02.png b/app/assets/characters/img02.png new file mode 100644 index 0000000000..953c7d7615 Binary files /dev/null and b/app/assets/characters/img02.png differ diff --git a/app/assets/characters/img03.png b/app/assets/characters/img03.png new file mode 100644 index 0000000000..906664ff29 Binary files /dev/null and b/app/assets/characters/img03.png differ diff --git a/app/assets/characters/img04.png b/app/assets/characters/img04.png new file mode 100644 index 0000000000..fc07201b7c Binary files /dev/null and b/app/assets/characters/img04.png differ diff --git a/app/assets/characters/img05.png b/app/assets/characters/img05.png new file mode 100644 index 0000000000..713480af68 Binary files /dev/null and b/app/assets/characters/img05.png differ diff --git a/app/assets/characters/img06.png b/app/assets/characters/img06.png new file mode 100644 index 0000000000..88dfacaa51 Binary files /dev/null and b/app/assets/characters/img06.png differ diff --git a/app/assets/characters/img07.png b/app/assets/characters/img07.png new file mode 100644 index 0000000000..237ecf24fd Binary files /dev/null and b/app/assets/characters/img07.png differ diff --git a/app/assets/characters/img08.png b/app/assets/characters/img08.png new file mode 100644 index 0000000000..9093ffb775 Binary files /dev/null and b/app/assets/characters/img08.png differ diff --git a/app/assets/characters/img09.png b/app/assets/characters/img09.png new file mode 100644 index 0000000000..bc2b039d07 Binary files /dev/null and b/app/assets/characters/img09.png differ diff --git a/app/assets/characters/img10.png b/app/assets/characters/img10.png new file mode 100644 index 0000000000..3fb4bba597 Binary files /dev/null and b/app/assets/characters/img10.png differ diff --git a/app/assets/characters/img11.png b/app/assets/characters/img11.png new file mode 100644 index 0000000000..08182a9636 Binary files /dev/null and b/app/assets/characters/img11.png differ diff --git a/app/assets/characters/img12.png b/app/assets/characters/img12.png new file mode 100644 index 0000000000..38dcddd768 Binary files /dev/null and b/app/assets/characters/img12.png differ diff --git a/app/assets/img.png b/app/assets/img.png new file mode 100644 index 0000000000..fabaf7f681 Binary files /dev/null and b/app/assets/img.png differ diff --git a/app/assets/objects b/app/assets/objects new file mode 100644 index 0000000000..e69de29bb2 diff --git a/app/pages/PageEnigma/Queue/Queue.ts b/app/pages/PageEnigma/Queue/Queue.ts index d477964258..4e098238e8 100644 --- a/app/pages/PageEnigma/Queue/Queue.ts +++ b/app/pages/PageEnigma/Queue/Queue.ts @@ -4,7 +4,7 @@ import { QueueClip, QueueKeyframe, UpdateTime, -} from "~/pages/PageEnigma/models/track"; +} from "~/pages/PageEnigma/models"; import { toTimelineActions } from "./toTimelineActions"; class Queue { diff --git a/app/pages/PageEnigma/comps/ControlPanelSceneObject/ControlPanelSceneObject.tsx b/app/pages/PageEnigma/comps/ControlPanelSceneObject/ControlPanelSceneObject.tsx index eb867d4d35..e173ed5f45 100644 --- a/app/pages/PageEnigma/comps/ControlPanelSceneObject/ControlPanelSceneObject.tsx +++ b/app/pages/PageEnigma/comps/ControlPanelSceneObject/ControlPanelSceneObject.tsx @@ -17,7 +17,7 @@ import { ACTION_TYPES } from "../../reducers/appUiReducer/types"; import { QueueNames } from "../../Queue/QueueNames"; import Queue from "~/pages/PageEnigma/Queue/Queue"; import { toTimelineActions } from "../../Queue/toTimelineActions"; -import { QueueKeyframe } from "~/pages/PageEnigma/models/track"; +import { QueueKeyframe } from "~/pages/PageEnigma/models"; export const ControlPanelSceneObject = () => { const editorEngine = useContext(EngineContext); @@ -33,9 +33,13 @@ export const ControlPanelSceneObject = () => { const scale = appUiState.controlPanel.currentSceneObject.objectVectors.scale; const currentSceneObject = appUiState.controlPanel.currentSceneObject; - useEffect(()=>{ - const vectors = appUiState.controlPanel.currentSceneObject.objectVectors - editorEngine?.setSelectedObject(vectors.position, vectors.rotation, vectors.scale) + useEffect(() => { + const vectors = appUiState.controlPanel.currentSceneObject.objectVectors; + editorEngine?.setSelectedObject( + vectors.position, + vectors.rotation, + vectors.scale, + ); }, [appUiState.controlPanel.currentSceneObject]); const handlePositionChange = (xyz: XYZ) => { @@ -141,9 +145,9 @@ export const ControlPanelSceneObject = () => { } }; - const handleDeleteObject = () =>{ + const handleDeleteObject = () => { console.log("TELL EDITOR TO DELETE HERE"); - } + }; return ( {
-

{appUiState.controlPanel.currentSceneObject.object_name}

+

+ {appUiState.controlPanel.currentSceneObject.object_name} +

diff --git a/app/pages/PageEnigma/comps/ControlsTopButtons/ControlsTopButtons.tsx b/app/pages/PageEnigma/comps/ControlsTopButtons/ControlsTopButtons.tsx index 7a064d7f7a..b3b0cbf723 100644 --- a/app/pages/PageEnigma/comps/ControlsTopButtons/ControlsTopButtons.tsx +++ b/app/pages/PageEnigma/comps/ControlsTopButtons/ControlsTopButtons.tsx @@ -4,7 +4,7 @@ import { ButtonDialogue } from "~/modules/ButtonDialogue"; import { AppUiContext } from "../../contexts/AppUiContext"; import { EngineContext } from "../../contexts/EngineContext"; import { APPUI_ACTION_TYPES } from "../../reducers"; -import { ClipGroup } from "~/pages/PageEnigma/models/track"; +import { ClipGroup } from "~/pages/PageEnigma/models"; export const ControlsTopButtons = () => { const editorEngine = useContext(EngineContext); @@ -173,9 +173,9 @@ export const ControlsTopButtons = () => {
@@ -186,7 +186,7 @@ export const ControlsTopButtons = () => { */} + + +
+
+ +
+ +
+
+ +
+
+ {TABS.map((tab) => ( + + ))} +
+
+ + ); }; diff --git a/app/pages/PageEnigma/comps/Timeline/Audio.tsx b/app/pages/PageEnigma/comps/Timeline/Audio.tsx index 81be75ce41..b6d716a765 100644 --- a/app/pages/PageEnigma/comps/Timeline/Audio.tsx +++ b/app/pages/PageEnigma/comps/Timeline/Audio.tsx @@ -5,7 +5,7 @@ import { toggleAudioMute, updateAudio, } from "~/pages/PageEnigma/store"; -import { ClipGroup } from "~/pages/PageEnigma/models/track"; +import { ClipGroup } from "~/pages/PageEnigma/models"; export const Audio = () => { const { clips } = audioGroup.value; diff --git a/app/pages/PageEnigma/comps/Timeline/Camera.tsx b/app/pages/PageEnigma/comps/Timeline/Camera.tsx index 27e7b12ffb..55d97e85d2 100644 --- a/app/pages/PageEnigma/comps/Timeline/Camera.tsx +++ b/app/pages/PageEnigma/comps/Timeline/Camera.tsx @@ -1,7 +1,7 @@ import { cameraGroup, fullWidth, updateCamera } from "~/pages/PageEnigma/store"; import { TrackKeyFrames } from "~/pages/PageEnigma/comps/Timeline/TrackKeyFrames"; import { useSignals } from "@preact/signals-react/runtime"; -import { ClipGroup } from "~/pages/PageEnigma/models/track"; +import { ClipGroup } from "~/pages/PageEnigma/models"; export const Camera = () => { useSignals(); diff --git a/app/pages/PageEnigma/comps/Timeline/Character.tsx b/app/pages/PageEnigma/comps/Timeline/Character.tsx index ffe1d229e0..6b6caff886 100644 --- a/app/pages/PageEnigma/comps/Timeline/Character.tsx +++ b/app/pages/PageEnigma/comps/Timeline/Character.tsx @@ -7,7 +7,7 @@ import { updateCharacters, } from "~/pages/PageEnigma/store"; import { TrackKeyFrames } from "~/pages/PageEnigma/comps/Timeline/TrackKeyFrames"; -import { ClipGroup, ClipType } from "~/pages/PageEnigma/models/track"; +import { ClipGroup, ClipType } from "~/pages/PageEnigma/models"; function buildUpdaters( updateCharacters: (options: { diff --git a/app/pages/PageEnigma/comps/Timeline/ObjectTrack.tsx b/app/pages/PageEnigma/comps/Timeline/ObjectTrack.tsx index 11ca18c6c0..6ee2460961 100644 --- a/app/pages/PageEnigma/comps/Timeline/ObjectTrack.tsx +++ b/app/pages/PageEnigma/comps/Timeline/ObjectTrack.tsx @@ -1,6 +1,6 @@ import { fullWidth, objectGroup, updateObject } from "~/pages/PageEnigma/store"; import { TrackKeyFrames } from "~/pages/PageEnigma/comps/Timeline/TrackKeyFrames"; -import { ClipGroup } from "~/pages/PageEnigma/models/track"; +import { ClipGroup } from "~/pages/PageEnigma/models"; export const ObjectTrack = () => { return ( diff --git a/app/pages/PageEnigma/comps/Timeline/Timeline.tsx b/app/pages/PageEnigma/comps/Timeline/Timeline.tsx index 5ceb0ae6db..9779650314 100644 --- a/app/pages/PageEnigma/comps/Timeline/Timeline.tsx +++ b/app/pages/PageEnigma/comps/Timeline/Timeline.tsx @@ -17,7 +17,7 @@ import { Scrubber } from "~/pages/PageEnigma/comps/Timeline/Scrubber"; import { Characters } from "~/pages/PageEnigma/comps/Timeline/Characters"; import { ObjectGroups } from "~/pages/PageEnigma/comps/Timeline/ObjectGroups"; import useUpdateKeyframe from "~/pages/PageEnigma/contexts/TrackContext/utils/useUpdateKeyframe"; -import { Clip, Keyframe } from "~/pages/PageEnigma/models/track"; +import { Clip, Keyframe } from "~/pages/PageEnigma/models"; function getItemType(item: Clip | Keyframe | null) { if (!item) { diff --git a/app/pages/PageEnigma/comps/Timeline/TrackClip.tsx b/app/pages/PageEnigma/comps/Timeline/TrackClip.tsx index 64532b0e2e..207bb67ccd 100644 --- a/app/pages/PageEnigma/comps/Timeline/TrackClip.tsx +++ b/app/pages/PageEnigma/comps/Timeline/TrackClip.tsx @@ -1,7 +1,7 @@ import { useMouseEventsClip } from "./utils/useMouseEventsClip"; import { useState } from "react"; import { scale, selectedItem } from "~/pages/PageEnigma/store"; -import { Clip, ClipGroup } from "~/pages/PageEnigma/models/track"; +import { Clip, ClipGroup } from "~/pages/PageEnigma/models"; interface Props { min: number; diff --git a/app/pages/PageEnigma/comps/Timeline/TrackClips.tsx b/app/pages/PageEnigma/comps/Timeline/TrackClips.tsx index 6d45a2f9c6..17cd1095a1 100644 --- a/app/pages/PageEnigma/comps/Timeline/TrackClips.tsx +++ b/app/pages/PageEnigma/comps/Timeline/TrackClips.tsx @@ -1,7 +1,7 @@ import { TrackClip } from "~/pages/PageEnigma/comps/Timeline/TrackClip"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faVolume, faVolumeSlash } from "@fortawesome/pro-solid-svg-icons"; -import { Clip, ClipGroup, ClipType } from "~/pages/PageEnigma/models/track"; +import { Clip, ClipGroup, ClipType } from "~/pages/PageEnigma/models"; import { PointerEvent } from "react"; import { canDrop, diff --git a/app/pages/PageEnigma/comps/Timeline/TrackKeyFrame.tsx b/app/pages/PageEnigma/comps/Timeline/TrackKeyFrame.tsx index 71c7045eb6..4f57972b14 100644 --- a/app/pages/PageEnigma/comps/Timeline/TrackKeyFrame.tsx +++ b/app/pages/PageEnigma/comps/Timeline/TrackKeyFrame.tsx @@ -1,4 +1,4 @@ -import { Keyframe } from "~/pages/PageEnigma/models/track"; +import { Keyframe } from "~/pages/PageEnigma/models"; import { filmLength, scale, selectedItem } from "~/pages/PageEnigma/store"; import { useMouseEventsKeyframe } from "~/pages/PageEnigma/comps/Timeline/utils/useMouseEventsKeyframe"; import { useSignals } from "@preact/signals-react/runtime"; diff --git a/app/pages/PageEnigma/comps/Timeline/TrackKeyFrames.tsx b/app/pages/PageEnigma/comps/Timeline/TrackKeyFrames.tsx index ca1316a033..f7f75153e9 100644 --- a/app/pages/PageEnigma/comps/Timeline/TrackKeyFrames.tsx +++ b/app/pages/PageEnigma/comps/Timeline/TrackKeyFrames.tsx @@ -1,4 +1,4 @@ -import { ClipGroup, Keyframe } from "~/pages/PageEnigma/models/track"; +import { ClipGroup, Keyframe } from "~/pages/PageEnigma/models"; import { TrackKeyFrame } from "~/pages/PageEnigma/comps/Timeline/TrackKeyFrame"; interface Props { diff --git a/app/pages/PageEnigma/comps/Timeline/utils/useMouseEventsClip.ts b/app/pages/PageEnigma/comps/Timeline/utils/useMouseEventsClip.ts index 4746501ee8..c9dd1abd22 100644 --- a/app/pages/PageEnigma/comps/Timeline/utils/useMouseEventsClip.ts +++ b/app/pages/PageEnigma/comps/Timeline/utils/useMouseEventsClip.ts @@ -1,5 +1,5 @@ import React, { Dispatch, useCallback, useEffect, useRef } from "react"; -import { Clip } from "~/pages/PageEnigma/models/track"; +import { Clip } from "~/pages/PageEnigma/models"; import { canDrop, scale } from "~/pages/PageEnigma/store"; import { useSignals } from "@preact/signals-react/runtime"; diff --git a/app/pages/PageEnigma/comps/Timeline/utils/useMouseEventsKeyframe.ts b/app/pages/PageEnigma/comps/Timeline/utils/useMouseEventsKeyframe.ts index dcb5f4ae2d..6abc8af784 100644 --- a/app/pages/PageEnigma/comps/Timeline/utils/useMouseEventsKeyframe.ts +++ b/app/pages/PageEnigma/comps/Timeline/utils/useMouseEventsKeyframe.ts @@ -1,5 +1,5 @@ import React, { useCallback, useEffect, useRef, useState } from "react"; -import { Keyframe } from "~/pages/PageEnigma/models/track"; +import { Keyframe } from "~/pages/PageEnigma/models"; import { canDrop, scale } from "~/pages/PageEnigma/store"; import { useSignals } from "@preact/signals-react/runtime"; diff --git a/app/pages/PageEnigma/comps/Timeline/utils/useQueueHandler.ts b/app/pages/PageEnigma/comps/Timeline/utils/useQueueHandler.ts index d1b6c5d14b..efb62a9bbc 100644 --- a/app/pages/PageEnigma/comps/Timeline/utils/useQueueHandler.ts +++ b/app/pages/PageEnigma/comps/Timeline/utils/useQueueHandler.ts @@ -9,7 +9,7 @@ import { QueueClip, QueueKeyframe, UpdateTime, -} from "~/pages/PageEnigma/models/track"; +} from "~/pages/PageEnigma/models"; import { TrackContext } from "~/pages/PageEnigma/contexts/TrackContext/TrackContext"; import { toTimelineActions } from "~/pages/PageEnigma/Queue/toTimelineActions"; diff --git a/app/pages/PageEnigma/contexts/TrackContext/TrackContext.tsx b/app/pages/PageEnigma/contexts/TrackContext/TrackContext.tsx index b3038d6be3..6f1e78faef 100644 --- a/app/pages/PageEnigma/contexts/TrackContext/TrackContext.tsx +++ b/app/pages/PageEnigma/contexts/TrackContext/TrackContext.tsx @@ -4,7 +4,9 @@ import { Keyframe, QueueKeyframe, ClipType, -} from "~/pages/PageEnigma/models/track"; + ObjectItem, + AssetType, +} from "~/pages/PageEnigma/models"; export const TrackContext = createContext<{ // keyframes @@ -14,9 +16,10 @@ export const TrackContext = createContext<{ // sidebar clips animationClips: MediaClip[]; audioClips: MediaClip[]; + characterItems: ObjectItem[]; // drag and drop - startDrag: (type: ClipType, id: string, length: number) => void; + startDrag: (type: AssetType, id: string, length: number) => void; endDrag: () => void; }>({ addKeyframe: () => {}, @@ -24,6 +27,7 @@ export const TrackContext = createContext<{ animationClips: [], audioClips: [], + characterItems: [], startDrag: () => {}, endDrag: () => {}, diff --git a/app/pages/PageEnigma/contexts/TrackContext/TrackProvider.tsx b/app/pages/PageEnigma/contexts/TrackContext/TrackProvider.tsx index 6c6e69a40d..5ce55b2cec 100644 --- a/app/pages/PageEnigma/contexts/TrackContext/TrackProvider.tsx +++ b/app/pages/PageEnigma/contexts/TrackContext/TrackProvider.tsx @@ -1,6 +1,11 @@ import { TrackContext } from "~/pages/PageEnigma/contexts/TrackContext/TrackContext"; import { ReactNode, useCallback, useEffect, useMemo, useState } from "react"; -import { ClipType, MediaClip } from "~/pages/PageEnigma/models/track"; +import { + AssetType, + ClipType, + MediaClip, + ObjectItem, +} from "~/pages/PageEnigma/models"; import useUpdateDragDrop from "~/pages/PageEnigma/contexts/TrackContext/utils/useUpdateDragDrop"; import { addCharacterAnimation, @@ -26,6 +31,7 @@ export const TrackProvider = ({ children }: Props) => { const [animationClips, setAnimationClips] = useState([]); const [audioClips, setAudioClips] = useState([]); + const [characterItems, setCharacterItems] = useState([]); const [scale, setScale] = useState(1); const [length, setLength] = useState(1); @@ -48,7 +54,7 @@ export const TrackProvider = ({ children }: Props) => { // cross group functions const dropClip = useCallback(() => { if (canDrop.value) { - if (dragType.value === ClipType.ANIMATION) { + if (dragType.value === AssetType.ANIMATION) { addCharacterAnimation({ clipId: dragId.value!, characterId: dropId.value, @@ -56,7 +62,7 @@ export const TrackProvider = ({ children }: Props) => { offset: dropOffset.value, }); } - if (dragType.value === ClipType.AUDIO) { + if (dragType.value === AssetType.AUDIO) { addCharacterAudio({ clipId: dragId.value!, characterId: dropId.value, @@ -139,6 +145,80 @@ export const TrackProvider = ({ children }: Props) => { name: "Yell", }, ]); + setCharacterItems([ + { + version: 1, + media_id: uuid.v4(), + name: "Block Stance", + thumbnail: "resources/characters/img01.png", + }, + { + version: 1, + media_id: uuid.v4(), + name: "Elbow", + thumbnail: "resources/characters/img02.png", + }, + { + version: 1, + media_id: uuid.v4(), + name: "Stand Up", + thumbnail: "resources/characters/img03.png", + }, + { + version: 1, + media_id: uuid.v4(), + name: "Wave Sitting", + thumbnail: "resources/characters/img04.png", + }, + { + version: 1, + media_id: uuid.v4(), + name: "Idle", + thumbnail: "resources/characters/img05.png", + }, + { + version: 1, + media_id: uuid.v4(), + name: "Dancing", + thumbnail: "resources/characters/img06.png", + }, + { + version: 1, + media_id: uuid.v4(), + name: "Start Walking", + thumbnail: "resources/characters/img07.png", + }, + { + version: 1, + media_id: uuid.v4(), + name: "Start Fight", + thumbnail: "resources/characters/img08.png", + }, + { + version: 1, + media_id: uuid.v4(), + name: "", + thumbnail: "resources/characters/img09.png", + }, + { + version: 1, + media_id: uuid.v4(), + name: "Dancing 2", + thumbnail: "resources/characters/img10.png", + }, + { + version: 1, + media_id: uuid.v4(), + name: "Start Fight 2", + thumbnail: "resources/characters/img11.png", + }, + { + version: 1, + media_id: uuid.v4(), + name: "Dancing 3", + thumbnail: "resources/characters/img12.png", + }, + ]); setScale(1); setLength(12); }, []); @@ -152,6 +232,7 @@ export const TrackProvider = ({ children }: Props) => { animationClips, audioClips, + characterItems, scale, currentTime: time, @@ -169,6 +250,7 @@ export const TrackProvider = ({ children }: Props) => { animationClips, audioClips, + characterItems, updateCurrentTime, time, diff --git a/app/pages/PageEnigma/contexts/TrackContext/utils/useUpdateDragDrop.ts b/app/pages/PageEnigma/contexts/TrackContext/utils/useUpdateDragDrop.ts index e7386440b0..e379b557d6 100644 --- a/app/pages/PageEnigma/contexts/TrackContext/utils/useUpdateDragDrop.ts +++ b/app/pages/PageEnigma/contexts/TrackContext/utils/useUpdateDragDrop.ts @@ -5,11 +5,11 @@ import { dragId, dragType, } from "~/pages/PageEnigma/store"; -import { ClipType } from "~/pages/PageEnigma/models/track"; +import { AssetType } from "~/pages/PageEnigma/models"; export default function useUpdateDragDrop() { const startDrag = useCallback( - (type: ClipType, id: string, length: number) => { + (type: AssetType, id: string, length: number) => { dragId.value = id; dragType.value = type; clipLength.value = length; diff --git a/app/pages/PageEnigma/contexts/TrackContext/utils/useUpdateKeyframe.ts b/app/pages/PageEnigma/contexts/TrackContext/utils/useUpdateKeyframe.ts index 740739e467..cd74478149 100644 --- a/app/pages/PageEnigma/contexts/TrackContext/utils/useUpdateKeyframe.ts +++ b/app/pages/PageEnigma/contexts/TrackContext/utils/useUpdateKeyframe.ts @@ -1,9 +1,5 @@ import { useCallback } from "react"; -import { - ClipGroup, - QueueKeyframe, - Keyframe, -} from "~/pages/PageEnigma/models/track"; +import { ClipGroup, QueueKeyframe, Keyframe } from "~/pages/PageEnigma/models"; import { addCameraKeyframe, addCharacterKeyframe, diff --git a/app/pages/PageEnigma/datastructures/clips/clip_ui.ts b/app/pages/PageEnigma/datastructures/clips/clip_ui.ts index 04dce4428c..8f54e7c448 100644 --- a/app/pages/PageEnigma/datastructures/clips/clip_ui.ts +++ b/app/pages/PageEnigma/datastructures/clips/clip_ui.ts @@ -1,6 +1,6 @@ // Clip offsets represent the state of the clip on the timeline as well as what type of clip it is. // it is created from a media id. -import { ClipGroup, ClipType } from "~/pages/PageEnigma/models/track"; +import { ClipGroup, ClipType } from "~/pages/PageEnigma/models"; export class ClipUI { version: number; diff --git a/app/pages/PageEnigma/js/api_manager.ts b/app/pages/PageEnigma/js/api_manager.ts index fde45ddd37..282d672a3a 100644 --- a/app/pages/PageEnigma/js/api_manager.ts +++ b/app/pages/PageEnigma/js/api_manager.ts @@ -161,7 +161,7 @@ export class APIManager { const loadGlb = ( bucket_path: string, ): Promise => { - return new Promise((resolve, reject) => { + return new Promise((resolve) => { glbLoader.load(bucket_path, (glb) => { if (glb) { const scene: THREE.Scene = glb.scene; diff --git a/app/pages/PageEnigma/js/editor.ts b/app/pages/PageEnigma/js/editor.ts index 367670be48..0b76b05694 100644 --- a/app/pages/PageEnigma/js/editor.ts +++ b/app/pages/PageEnigma/js/editor.ts @@ -22,9 +22,9 @@ import { AnimationEngine } from "./animation_engine.js"; import { PointerLockControls } from "three/addons/controls/PointerLockControls.js"; import { APPUI_ACTION_TYPES } from "../reducers"; -import { ClipGroup } from "~/pages/PageEnigma/models/track"; +import { ClipGroup, ClipType } from "~/pages/PageEnigma/models"; +import { XYZ } from "~/pages/PageEnigma/datastructures/common"; -import { XYZ } from "../../datastructures/common"; class EditorState { // { // action: "ShowLoadingIndicator" @@ -340,7 +340,7 @@ class Editor { if (this.cam_obj) { this.addTransformClipBase( "Camera Object", - "camera", + ClipGroup.CAMERA, this.cam_obj, 0, 150, @@ -442,24 +442,21 @@ class Editor { } // TO UPDATE selected objects in the scene might want to add to the scene ... - async setSelectedObject(position:XYZ,rotation:XYZ,scale:XYZ) { - if (this.selected !=null) { + async setSelectedObject(position: XYZ, rotation: XYZ, scale: XYZ) { + if (this.selected != null) { + this.selected.position.x = position.x; + this.selected.position.y = position.y; + this.selected.position.z = position.z; - this.selected.position.x = position.x - this.selected.position.y = position.y - this.selected.position.z = position.z - - this.selected.rotation.x = rotation.x - this.selected.rotation.y = rotation.y - this.selected.rotation.z = rotation.z - - this.selected.scale.x = scale.x - this.selected.scale.y = scale.y - this.selected.scale.z = scale.z + this.selected.rotation.x = rotation.x; + this.selected.rotation.y = rotation.y; + this.selected.rotation.z = rotation.z; + this.selected.scale.x = scale.x; + this.selected.scale.y = scale.y; + this.selected.scale.z = scale.z; } - } - + } public async saveScene(name: string) { // remove controls when saving scene. @@ -535,8 +532,8 @@ class Editor { this.timeline.addPlayableClip( new ClipUI( 1.0, - "lipsync", - "character", + ClipType.AUDIO, + ClipGroup.CHARACTER, "clip1", "m_f1jxx4zwy4da2zn0cvdqhha7kqkj72", object.uuid, @@ -549,8 +546,8 @@ class Editor { this.timeline.addPlayableClip( new ClipUI( 1.0, - "transform", - "character", + ClipType.TRANSFORM, + ClipGroup.CHARACTER, "clip2", object.uuid, object.uuid, @@ -563,8 +560,8 @@ class Editor { this.timeline.addPlayableClip( new ClipUI( 1.0, - "animation", - "character", + ClipType.ANIMATION, + ClipGroup.CHARACTER, "clip3", "/resources/models/fox/fox_idle.glb", object.uuid, @@ -628,7 +625,7 @@ class Editor { async addTransformClipBase( name: string = "New Clip", - group: "object" | "character" | "camera" | "global_audio", + group: ClipGroup, object: THREE.Object3D, offset: number, length: number, @@ -636,7 +633,7 @@ class Editor { this.timeline.addPlayableClip( new ClipUI( 1.0, - "transform", + ClipType.TRANSFORM, group, name, object.uuid, // object id here ... @@ -823,7 +820,7 @@ class Editor { if (this.cam_obj) { this.addTransformClipBase( "Camera Object", - "camera", + ClipGroup.CAMERA, this.cam_obj, 0, 150, @@ -844,11 +841,11 @@ class Editor { if (this.cameraViewControls && this.camera_person_mode) { this.cameraViewControls.update(5 * delta_time); - if(this.cam_obj){ + if (this.cam_obj) { if (this.last_scrub != this.timeline.scrubber_frame_position) { this.camera.position.copy(this.cam_obj.position); this.camera.rotation.copy(this.cam_obj.rotation); - } else if(this.timeline.is_playing == false) { + } else if (this.timeline.is_playing == false) { this.cam_obj.position.copy(this.camera.position); this.cam_obj.rotation.copy(this.camera.rotation); } else { @@ -865,7 +862,7 @@ class Editor { this.updateSelectedUI(); - if(this.timeline.is_playing){ + if (this.timeline.is_playing) { this.timeline.update(); } @@ -1002,7 +999,7 @@ class Editor { if (compile_audio) { for (const clip of this.timeline.timeline_items) { - if (clip.type == "lipsync" || clip.type == "audio") { + if (clip.type === ClipType.AUDIO) { await this.convertAudioClip(itteration, ffmpeg, clip); itteration += 1; } @@ -1024,7 +1021,6 @@ class Editor { const data = await this.api_manager.uploadMedia(blob, "render.mp4"); // Create a link to download the file - } async generateFrame() { diff --git a/app/pages/PageEnigma/js/timeline.ts b/app/pages/PageEnigma/js/timeline.ts index 3c5c83a3e9..db66ad059c 100644 --- a/app/pages/PageEnigma/js/timeline.ts +++ b/app/pages/PageEnigma/js/timeline.ts @@ -11,7 +11,7 @@ import Queue from "~/pages/PageEnigma/Queue/Queue"; import { QueueNames } from "../Queue/QueueNames"; import { toEngineActions } from "../Queue/toEngineActions"; import { fromEngineActions } from "../Queue/fromEngineActions"; -import { ClipGroup, ClipType } from "~/pages/PageEnigma/models/track"; +import { ClipGroup, ClipType } from "~/pages/PageEnigma/models"; // Every object uuid / entity has a track. export class TimelineCurrentState { diff --git a/app/pages/PageEnigma/models/assets.ts b/app/pages/PageEnigma/models/assets.ts new file mode 100644 index 0000000000..8de61f5f89 --- /dev/null +++ b/app/pages/PageEnigma/models/assets.ts @@ -0,0 +1,24 @@ +import { ClipType } from "~/pages/PageEnigma/models"; + +export interface MediaClip { + version: number; + type: ClipType; + media_id: string; + name: string; + length: number; +} + +export interface ObjectItem { + version: number; + media_id: string; + name: string; + thumbnail: string; +} + +export enum AssetType { + CHARACTER = "character", + OBJECT = "object", + AUDIO = "audio", + ANIMATION = "animation", + CAMERA = "camera", +} diff --git a/app/pages/PageEnigma/models/index.ts b/app/pages/PageEnigma/models/index.ts new file mode 100644 index 0000000000..1738ee11c3 --- /dev/null +++ b/app/pages/PageEnigma/models/index.ts @@ -0,0 +1,3 @@ +export * from "./assets"; +export * from "./message"; +export * from "./track"; diff --git a/app/pages/PageEnigma/models/message.ts b/app/pages/PageEnigma/models/message.ts new file mode 100644 index 0000000000..6a52621fa0 --- /dev/null +++ b/app/pages/PageEnigma/models/message.ts @@ -0,0 +1,28 @@ +import { ClipGroup, ClipType } from "~/pages/PageEnigma/models"; +import { XYZ } from "~/pages/PageEnigma/datastructures/common"; + +export interface QueueClip { + version: number; + type: ClipType; + group: ClipGroup; + object_uuid?: string; + clip_uuid?: string; + media_id?: string; + name?: string; + offset?: number; + length?: number; + selected?: boolean; +} + +export interface QueueKeyframe { + version: number; + keyframe_uuid?: string; + group: ClipGroup; + object_uuid: string; + object_name?: string; + offset?: number; + position: XYZ; + rotation: XYZ; + scale: XYZ; + selected?: boolean; +} diff --git a/app/pages/PageEnigma/models/track.ts b/app/pages/PageEnigma/models/track.ts index a6d316ed42..b9786f905c 100644 --- a/app/pages/PageEnigma/models/track.ts +++ b/app/pages/PageEnigma/models/track.ts @@ -1,26 +1,5 @@ import { XYZ } from "../datastructures/common"; -export interface QueueClip { - version: number; - type: ClipType; - group: ClipGroup; - object_uuid?: string; - clip_uuid?: string; - media_id?: string; - name?: string; - offset?: number; - length?: number; - selected?: boolean; -} - -export interface MediaClip { - version: number; - type: ClipType; - media_id: string; - name: string; - length: number; -} - export interface Clip { version: number; clip_uuid: string; @@ -59,19 +38,6 @@ export interface Keyframe { selected?: boolean; } -export interface QueueKeyframe { - version: number; - keyframe_uuid?: string; - group: ClipGroup; - object_uuid: string; - object_name?: string; - offset?: number; - position: XYZ; - rotation: XYZ; - scale: XYZ; - selected?: boolean; -} - export interface CharacterGroup { id: string; muted: boolean; diff --git a/app/pages/PageEnigma/reducers/appUiReducer/types.tsx b/app/pages/PageEnigma/reducers/appUiReducer/types.tsx index ccbc7fd068..5dc4cffe81 100644 --- a/app/pages/PageEnigma/reducers/appUiReducer/types.tsx +++ b/app/pages/PageEnigma/reducers/appUiReducer/types.tsx @@ -1,5 +1,5 @@ import { Simple3DVector } from "../../datastructures/common"; -import { ClipGroup } from "../../models/track"; +import { AssetType, ClipGroup } from "../../models"; export enum VIEW_MODES { EDITOR = "editor", SIDE_BY_SIDE = "side-by-side", diff --git a/app/pages/PageEnigma/reducers/appUiReducer/values.tsx b/app/pages/PageEnigma/reducers/appUiReducer/values.tsx index 51f8a64f01..bb48fd6f05 100644 --- a/app/pages/PageEnigma/reducers/appUiReducer/values.tsx +++ b/app/pages/PageEnigma/reducers/appUiReducer/values.tsx @@ -1,5 +1,5 @@ import { State, VIEW_MODES } from "./types"; -import { ClipGroup } from "~/pages/PageEnigma/models/track"; +import { ClipGroup } from "~/pages/PageEnigma/models"; export const initialStateValues: State = { timelineHeight: 260, diff --git a/app/pages/PageEnigma/store/audioGroup.ts b/app/pages/PageEnigma/store/audioGroup.ts index f693976c45..26b3afd8ad 100644 --- a/app/pages/PageEnigma/store/audioGroup.ts +++ b/app/pages/PageEnigma/store/audioGroup.ts @@ -4,7 +4,7 @@ import { ClipGroup, ClipType, MediaClip, -} from "~/pages/PageEnigma/models/track"; +} from "~/pages/PageEnigma/models"; import Queue from "~/pages/PageEnigma/Queue/Queue"; import { QueueNames } from "~/pages/PageEnigma/Queue/QueueNames"; import { toEngineActions } from "~/pages/PageEnigma/Queue/toEngineActions"; diff --git a/app/pages/PageEnigma/store/cameraGroup.ts b/app/pages/PageEnigma/store/cameraGroup.ts index 71ca0b9e2f..8e88414066 100644 --- a/app/pages/PageEnigma/store/cameraGroup.ts +++ b/app/pages/PageEnigma/store/cameraGroup.ts @@ -2,7 +2,7 @@ import { CameraGroup, Keyframe, QueueKeyframe, -} from "~/pages/PageEnigma/models/track"; +} from "~/pages/PageEnigma/models"; import Queue from "~/pages/PageEnigma/Queue/Queue"; import { QueueNames } from "~/pages/PageEnigma/Queue/QueueNames"; import { toEngineActions } from "~/pages/PageEnigma/Queue/toEngineActions"; diff --git a/app/pages/PageEnigma/store/characterGroups.ts b/app/pages/PageEnigma/store/characterGroups.ts index 8bed1c6436..e1ffa8af01 100644 --- a/app/pages/PageEnigma/store/characterGroups.ts +++ b/app/pages/PageEnigma/store/characterGroups.ts @@ -6,7 +6,7 @@ import { Keyframe, MediaClip, QueueKeyframe, -} from "~/pages/PageEnigma/models/track"; +} from "~/pages/PageEnigma/models"; import { signal } from "@preact/signals-core"; import Queue from "~/pages/PageEnigma/Queue/Queue"; import { QueueNames } from "~/pages/PageEnigma/Queue/QueueNames"; diff --git a/app/pages/PageEnigma/store/dragAndDrop.ts b/app/pages/PageEnigma/store/dragAndDrop.ts index ba3d1bec9a..7532950c8d 100644 --- a/app/pages/PageEnigma/store/dragAndDrop.ts +++ b/app/pages/PageEnigma/store/dragAndDrop.ts @@ -1,7 +1,7 @@ import { signal } from "@preact/signals-core"; -import { ClipType } from "~/pages/PageEnigma/models/track"; +import { AssetType } from "~/pages/PageEnigma/models"; -export const dragType = signal(null); +export const dragType = signal(null); export const dragId = signal(null); export const canDrop = signal(false); export const overTimeline = signal(false); diff --git a/app/pages/PageEnigma/store/objectGroup.ts b/app/pages/PageEnigma/store/objectGroup.ts index c1361fe499..611b497799 100644 --- a/app/pages/PageEnigma/store/objectGroup.ts +++ b/app/pages/PageEnigma/store/objectGroup.ts @@ -3,7 +3,7 @@ import { Keyframe, ObjectGroup, QueueKeyframe, -} from "~/pages/PageEnigma/models/track"; +} from "~/pages/PageEnigma/models"; import * as uuid from "uuid"; import Queue from "~/pages/PageEnigma/Queue/Queue"; import { QueueNames } from "~/pages/PageEnigma/Queue/QueueNames"; diff --git a/app/pages/PageEnigma/store/selectedItem.ts b/app/pages/PageEnigma/store/selectedItem.ts index 54c5b65c91..4f1d7bf778 100644 --- a/app/pages/PageEnigma/store/selectedItem.ts +++ b/app/pages/PageEnigma/store/selectedItem.ts @@ -1,4 +1,4 @@ import { signal } from "@preact/signals-core"; -import { Clip, Keyframe } from "~/pages/PageEnigma/models/track"; +import { Clip, Keyframe } from "~/pages/PageEnigma/models"; export const selectedItem = signal(null); diff --git a/public/resources/characters/img01.png b/public/resources/characters/img01.png new file mode 100644 index 0000000000..6ca475c716 Binary files /dev/null and b/public/resources/characters/img01.png differ diff --git a/public/resources/characters/img02.png b/public/resources/characters/img02.png new file mode 100644 index 0000000000..953c7d7615 Binary files /dev/null and b/public/resources/characters/img02.png differ diff --git a/public/resources/characters/img03.png b/public/resources/characters/img03.png new file mode 100644 index 0000000000..906664ff29 Binary files /dev/null and b/public/resources/characters/img03.png differ diff --git a/public/resources/characters/img04.png b/public/resources/characters/img04.png new file mode 100644 index 0000000000..fc07201b7c Binary files /dev/null and b/public/resources/characters/img04.png differ diff --git a/public/resources/characters/img05.png b/public/resources/characters/img05.png new file mode 100644 index 0000000000..713480af68 Binary files /dev/null and b/public/resources/characters/img05.png differ diff --git a/public/resources/characters/img06.png b/public/resources/characters/img06.png new file mode 100644 index 0000000000..88dfacaa51 Binary files /dev/null and b/public/resources/characters/img06.png differ diff --git a/public/resources/characters/img07.png b/public/resources/characters/img07.png new file mode 100644 index 0000000000..237ecf24fd Binary files /dev/null and b/public/resources/characters/img07.png differ diff --git a/public/resources/characters/img08.png b/public/resources/characters/img08.png new file mode 100644 index 0000000000..9093ffb775 Binary files /dev/null and b/public/resources/characters/img08.png differ diff --git a/public/resources/characters/img09.png b/public/resources/characters/img09.png new file mode 100644 index 0000000000..bc2b039d07 Binary files /dev/null and b/public/resources/characters/img09.png differ diff --git a/public/resources/characters/img10.png b/public/resources/characters/img10.png new file mode 100644 index 0000000000..3fb4bba597 Binary files /dev/null and b/public/resources/characters/img10.png differ diff --git a/public/resources/characters/img11.png b/public/resources/characters/img11.png new file mode 100644 index 0000000000..08182a9636 Binary files /dev/null and b/public/resources/characters/img11.png differ diff --git a/public/resources/characters/img12.png b/public/resources/characters/img12.png new file mode 100644 index 0000000000..38dcddd768 Binary files /dev/null and b/public/resources/characters/img12.png differ diff --git a/public/resources/icons/animations.png b/public/resources/icons/animations.png new file mode 100644 index 0000000000..fabaf7f681 Binary files /dev/null and b/public/resources/icons/animations.png differ diff --git a/public/resources/icons/audios.png b/public/resources/icons/audios.png new file mode 100644 index 0000000000..e2c3c0fa52 Binary files /dev/null and b/public/resources/icons/audios.png differ diff --git a/public/resources/icons/camera.png b/public/resources/icons/camera.png new file mode 100644 index 0000000000..9e162a9e4a Binary files /dev/null and b/public/resources/icons/camera.png differ diff --git a/public/resources/icons/characters.png b/public/resources/icons/characters.png new file mode 100644 index 0000000000..11f2ef919d Binary files /dev/null and b/public/resources/icons/characters.png differ diff --git a/public/resources/icons/objects.png b/public/resources/icons/objects.png new file mode 100644 index 0000000000..11f2ef919d Binary files /dev/null and b/public/resources/icons/objects.png differ diff --git a/public/resources/icons/shapes.png b/public/resources/icons/shapes.png new file mode 100644 index 0000000000..0657f36870 Binary files /dev/null and b/public/resources/icons/shapes.png differ diff --git a/tailwind.config.ts b/tailwind.config.ts index b1eaaa23aa..f69f1008b2 100644 --- a/tailwind.config.ts +++ b/tailwind.config.ts @@ -122,6 +122,10 @@ export default { unselected: "#EEEEEE", selected: "#FFDE67", }, + assets: { + background: "#39394D", + selectedTab: "#55556B", + }, "ui-background": "#1a1a27", "ui-panel": "#242433",