void;
}
+function setNotDropText({
+ dragType,
+ group,
+}: {
+ dragType?: AssetType;
+ group: ClipGroup;
+}) {
+ if (dragType === AssetType.ANIMATION) {
+ if (group === ClipGroup.CHARACTER) {
+ DndAsset.notDropText = "Cannot drag animation onto movement track";
+ }
+ if (group === ClipGroup.CAMERA) {
+ DndAsset.notDropText = "Cannot drag animation onto camera track";
+ }
+ if (group === ClipGroup.OBJECT) {
+ DndAsset.notDropText = "Cannot drag animation onto object track";
+ }
+ }
+ if (dragType === AssetType.AUDIO) {
+ if (group === ClipGroup.CHARACTER) {
+ DndAsset.notDropText = "Cannot drag audio onto movement track";
+ }
+ if (group === ClipGroup.CAMERA) {
+ DndAsset.notDropText = "Cannot drag audio onto camera track";
+ }
+ if (group === ClipGroup.OBJECT) {
+ DndAsset.notDropText = "Cannot drag audio onto object track";
+ }
+ }
+}
+
export const TrackKeyFrames = ({
id,
keyframes,
@@ -24,10 +63,18 @@ export const TrackKeyFrames = ({
title,
group,
}: Props) => {
+ function onPointerMove() {
+ if (!DndAsset.overElement) {
+ const element = document.getElementById(`track-${group}-${id}`);
+ DndAsset.overElement = element!.getBoundingClientRect();
+ }
+ setNotDropText({ dragType: dragItem.value?.type, group });
+ }
return (
+ className={`relative block h-9 w-full rounded-lg bg-${group}-unselected`}
+ onPointerMove={onPointerMove}>
{keyframes.map((keyframe) => (
{
// cross group functions
const dropClip = useCallback(() => {
- if (!canDrop.value) {
- endDrag();
- return;
- }
-
- if (dragItem.value) {
- const mediaItem = dragItem.value;
- if (mediaItem.type === AssetType.CHARACTER) {
- addCharacter(dragItem.value);
- }
- // if (dragItem.value.type === AssetType.CAMERA) {
- // console.log("Dragged In Camera Type")
- // }
- if (dragItem.value.type === AssetType.OBJECT) {
- addObject(dragItem.value);
- }
-
- if (dragItem.value.type === AssetType.SHAPE) {
- addShape(dragItem.value);
- }
- }
-
- if (canDrop.value && dragItem.value) {
- if (dragItem.value.type === AssetType.ANIMATION) {
- addCharacterAnimation({
- dragItem: dragItem.value,
- characterId: dropId.value,
- offset: dropOffset.value,
- });
- }
- if (dragItem.value.type === AssetType.AUDIO) {
- console.log("add audio", dropId.value);
- addCharacterAudio({
- dragItem: dragItem.value,
- characterId: dropId.value,
- offset: dropOffset.value,
- });
- addGlobalAudio({
- dragItem: dragItem.value,
- audioId: dropId.value,
- offset: dropOffset.value,
- });
- }
- }
endDrag();
}, [endDrag]);
diff --git a/app/pages/PageEnigma/contexts/TrackContext/utils/useUpdateDragDrop.ts b/app/pages/PageEnigma/contexts/TrackContext/utils/useUpdateDragDrop.ts
index 797a9b4df8..2b8673c32e 100644
--- a/app/pages/PageEnigma/contexts/TrackContext/utils/useUpdateDragDrop.ts
+++ b/app/pages/PageEnigma/contexts/TrackContext/utils/useUpdateDragDrop.ts
@@ -1,16 +1,9 @@
import { useCallback } from "react";
-import { canDrop, dragItem } from "~/pages/PageEnigma/store";
-import { MediaItem } from "~/pages/PageEnigma/models";
export default function useUpdateDragDrop() {
- const startDrag = useCallback((item: MediaItem) => {
- dragItem.value = item;
- }, []);
+ const startDrag = useCallback(() => {}, []);
- const endDrag = useCallback(() => {
- dragItem.value = null;
- canDrop.value = false;
- }, []);
+ const endDrag = useCallback(() => {}, []);
return {
startDrag,
diff --git a/app/pages/PageEnigma/store/dragAndDrop.ts b/app/pages/PageEnigma/store/dragAndDrop.ts
index 1945c9c4f5..8a48377e03 100644
--- a/app/pages/PageEnigma/store/dragAndDrop.ts
+++ b/app/pages/PageEnigma/store/dragAndDrop.ts
@@ -1,19 +1,13 @@
import { signal } from "@preact/signals-core";
import { MediaItem } from "~/pages/PageEnigma/models";
-export const dragItem = signal(null);
export const canDrop = signal(false);
export const overTimeline = signal(false);
-export const dropId = signal("");
-export const dropOffset = signal(0);
+export const dragItem = signal(null);
-export const dndTimelineHeight = signal(-1);
-
-export const initPosition = signal<{ initX: number; initY: number }>({
- initX: 0,
- initY: 0,
-});
export const currPosition = signal<{ currX: number; currY: number }>({
currX: 0,
currY: 0,
});
+
+export const dndTimelineHeight = signal(-1);
diff --git a/tailwind.config.ts b/tailwind.config.ts
index 77ef4a915f..be0e295240 100644
--- a/tailwind.config.ts
+++ b/tailwind.config.ts
@@ -146,6 +146,13 @@ export default {
background: "#39394D",
selectedTab: "#55556B",
},
+ dnd: {
+ canDrop: "#46936E",
+ canDropBorder: "#66E4A9",
+ timeGrid: "#6375B5",
+ timeGridBorder: "#7E92DA",
+ cannotDrop: "#904948",
+ },
ui: {
background: "#1a1a27",