diff --git a/src/App.vue b/src/App.vue index f988d44..bf3cc40 100644 --- a/src/App.vue +++ b/src/App.vue @@ -3,15 +3,9 @@

Spritesheet generator

- - Source - - - Discord - - - Help - + Source + Discord + Help
@@ -26,12 +20,12 @@
@@ -40,9 +34,11 @@
- + + + @@ -52,6 +48,7 @@ import SpriteCanvas from './components/SpriteCanvas.vue'; import Modal from './components/utilities/Modal.vue'; import SpritePreview from './components/SpritePreview.vue'; + import HelpModal from './components/HelpModal.vue'; interface Sprite { id: string; @@ -67,6 +64,7 @@ const sprites = ref([]); const columns = ref(4); const isPreviewModalOpen = ref(false); + const isHelpModalOpen = ref(false); const handleSpritesUpload = (files: File[]) => { Promise.all( @@ -157,4 +155,13 @@ const closePreviewModal = () => { isPreviewModalOpen.value = false; }; + + // Help modal control + const openHelpModal = () => { + isHelpModalOpen.value = true; + }; + + const closeHelpModal = () => { + isHelpModalOpen.value = false; + }; diff --git a/src/assets/tut.mp4 b/src/assets/tut.mp4 new file mode 100644 index 0000000..3f8e9b7 Binary files /dev/null and b/src/assets/tut.mp4 differ diff --git a/src/components/HelpModal.vue b/src/components/HelpModal.vue new file mode 100644 index 0000000..119254a --- /dev/null +++ b/src/components/HelpModal.vue @@ -0,0 +1,149 @@ + + + diff --git a/src/components/SpritePreview.vue b/src/components/SpritePreview.vue index 368b72e..3df465c 100644 --- a/src/components/SpritePreview.vue +++ b/src/components/SpritePreview.vue @@ -46,6 +46,13 @@ Show all sprites + +
+ + +
@@ -135,6 +142,9 @@ // Computed properties const totalFrames = computed(() => props.sprites.length); + // Add this after other refs + const hiddenFrames = ref([]); + // Canvas drawing const calculateMaxDimensions = () => { let maxWidth = 0; @@ -186,8 +196,8 @@ if (showAllSprites.value && props.sprites.length > 1) { ctx.value.globalAlpha = 0.3; props.sprites.forEach((sprite, index) => { - if (index !== currentFrameIndex.value) { - ctx.value.drawImage(sprite.img, sprite.x, sprite.y); + if (index !== currentFrameIndex.value && !hiddenFrames.value.includes(index)) { + ctx.value?.drawImage(sprite.img, sprite.x, sprite.y); } }); ctx.value.globalAlpha = 1.0; @@ -200,13 +210,6 @@ ctx.value.strokeStyle = '#e5e7eb'; ctx.value.lineWidth = 1; ctx.value.strokeRect(0, 0, maxWidth, maxHeight); - - // Highlight current frame if draggable - if (isDraggable.value) { - ctx.value.strokeStyle = '#3b82f6'; - ctx.value.lineWidth = 2; - ctx.value.strokeRect(0, 0, maxWidth, maxHeight); - } }; // Animation control @@ -357,6 +360,7 @@ watch(zoom, drawPreviewCanvas); watch(isDraggable, drawPreviewCanvas); watch(showAllSprites, drawPreviewCanvas); + watch(hiddenFrames, drawPreviewCanvas); // Initial draw if (props.sprites.length > 0) { diff --git a/src/components/utilities/Modal.vue b/src/components/utilities/Modal.vue index fa65068..eb1972b 100644 --- a/src/components/utilities/Modal.vue +++ b/src/components/utilities/Modal.vue @@ -1,33 +1,32 @@