a
This commit is contained in:
parent
a0c56dd901
commit
354d96274a
@ -75,6 +75,15 @@
|
|||||||
<button @click="zoomIn" :disabled="previewZoom >= 5" class="flex items-center justify-center w-8 h-8 bg-gray-700 text-gray-200 border border-gray-600 rounded transition-colors disabled:opacity-60 disabled:cursor-not-allowed hover:border-blue-500">
|
<button @click="zoomIn" :disabled="previewZoom >= 5" class="flex items-center justify-center w-8 h-8 bg-gray-700 text-gray-200 border border-gray-600 rounded transition-colors disabled:opacity-60 disabled:cursor-not-allowed hover:border-blue-500">
|
||||||
<i class="fas fa-search-plus"></i>
|
<i class="fas fa-search-plus"></i>
|
||||||
</button>
|
</button>
|
||||||
|
<button
|
||||||
|
@click="applyOffsetsToMainView"
|
||||||
|
:disabled="!hasSpriteOffset"
|
||||||
|
class="flex items-center gap-1 px-2 h-8 bg-gray-700 text-gray-200 border border-gray-600 rounded text-xs transition-colors disabled:opacity-60 disabled:cursor-not-allowed hover:border-blue-500"
|
||||||
|
title="Permanently apply offset to sprite position"
|
||||||
|
>
|
||||||
|
<i class="fas fa-save"></i>
|
||||||
|
Apply Offset
|
||||||
|
</button>
|
||||||
<button @click="resetZoom" :disabled="previewZoom === 1" class="flex items-center justify-center px-2 h-8 bg-gray-700 text-gray-200 border border-gray-600 rounded text-xs transition-colors disabled:opacity-60 disabled:cursor-not-allowed hover:border-blue-500">Reset Zoom</button>
|
<button @click="resetZoom" :disabled="previewZoom === 1" class="flex items-center justify-center px-2 h-8 bg-gray-700 text-gray-200 border border-gray-600 rounded text-xs transition-colors disabled:opacity-60 disabled:cursor-not-allowed hover:border-blue-500">Reset Zoom</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -205,6 +214,11 @@
|
|||||||
return spriteOffset.x !== 0 || spriteOffset.y !== 0;
|
return spriteOffset.x !== 0 || spriteOffset.y !== 0;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const applyOffsetsToMainView = () => {
|
||||||
|
store.applyOffsetsToMainView();
|
||||||
|
store.showNotification('Offset permanently applied to sprite position');
|
||||||
|
};
|
||||||
|
|
||||||
const handleKeyDown = (e: KeyboardEvent) => {
|
const handleKeyDown = (e: KeyboardEvent) => {
|
||||||
if (!isModalOpen.value) return;
|
if (!isModalOpen.value) return;
|
||||||
|
|
||||||
@ -582,6 +596,9 @@
|
|||||||
|
|
||||||
// Update the frame with the new offset
|
// Update the frame with the new offset
|
||||||
updateFrame();
|
updateFrame();
|
||||||
|
|
||||||
|
// Re-render the main view to reflect the changes
|
||||||
|
store.renderSpritesheetPreview();
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -256,9 +256,16 @@ export function useSpritesheetStore() {
|
|||||||
const x = Math.round(sprite.x);
|
const x = Math.round(sprite.x);
|
||||||
const y = Math.round(sprite.y);
|
const y = Math.round(sprite.y);
|
||||||
|
|
||||||
// Draw the image at its original size with pixel-perfect rendering
|
// Get the frame-specific offset for this sprite
|
||||||
|
const frameOffset = getSpriteOffset(index);
|
||||||
|
|
||||||
|
// Apply the frame-specific offset to the sprite position
|
||||||
|
const finalX = x + frameOffset.x;
|
||||||
|
const finalY = y + frameOffset.y;
|
||||||
|
|
||||||
|
// Draw the image at its final position with pixel-perfect rendering
|
||||||
ctx.value!.imageSmoothingEnabled = false; // Keep pixel art sharp
|
ctx.value!.imageSmoothingEnabled = false; // Keep pixel art sharp
|
||||||
ctx.value!.drawImage(sprite.img, x, y, sprite.width, sprite.height);
|
ctx.value!.drawImage(sprite.img, finalX, finalY, sprite.width, sprite.height);
|
||||||
} else {
|
} else {
|
||||||
console.warn(`Store: Sprite image ${index} not fully loaded, setting onload handler`);
|
console.warn(`Store: Sprite image ${index} not fully loaded, setting onload handler`);
|
||||||
sprite.img.onload = () => {
|
sprite.img.onload = () => {
|
||||||
@ -267,8 +274,15 @@ export function useSpritesheetStore() {
|
|||||||
const x = Math.round(sprite.x);
|
const x = Math.round(sprite.x);
|
||||||
const y = Math.round(sprite.y);
|
const y = Math.round(sprite.y);
|
||||||
|
|
||||||
|
// Get the frame-specific offset for this sprite
|
||||||
|
const frameOffset = getSpriteOffset(index);
|
||||||
|
|
||||||
|
// Apply the frame-specific offset to the sprite position
|
||||||
|
const finalX = x + frameOffset.x;
|
||||||
|
const finalY = y + frameOffset.y;
|
||||||
|
|
||||||
ctx.value.imageSmoothingEnabled = false; // Keep pixel art sharp
|
ctx.value.imageSmoothingEnabled = false; // Keep pixel art sharp
|
||||||
ctx.value.drawImage(sprite.img, x, y, sprite.width, sprite.height);
|
ctx.value.drawImage(sprite.img, finalX, finalY, sprite.width, sprite.height);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@ -306,6 +320,28 @@ export function useSpritesheetStore() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function applyOffsetsToMainView() {
|
||||||
|
sprites.value.forEach((sprite, index) => {
|
||||||
|
const frameOffset = getSpriteOffset(index);
|
||||||
|
if (frameOffset.x !== 0 || frameOffset.y !== 0) {
|
||||||
|
// Update the sprite's position to include the offset
|
||||||
|
sprite.x += frameOffset.x;
|
||||||
|
sprite.y += frameOffset.y;
|
||||||
|
|
||||||
|
// Reset the offset
|
||||||
|
frameOffset.x = 0;
|
||||||
|
frameOffset.y = 0;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Reset current offset
|
||||||
|
currentSpriteOffset.x = 0;
|
||||||
|
currentSpriteOffset.y = 0;
|
||||||
|
|
||||||
|
// Re-render the main view
|
||||||
|
renderSpritesheetPreview();
|
||||||
|
}
|
||||||
|
|
||||||
function drawGrid() {
|
function drawGrid() {
|
||||||
if (!ctx.value || !canvas.value) return;
|
if (!ctx.value || !canvas.value) return;
|
||||||
|
|
||||||
@ -644,5 +680,6 @@ export function useSpritesheetStore() {
|
|||||||
zoomIn,
|
zoomIn,
|
||||||
zoomOut,
|
zoomOut,
|
||||||
resetZoom,
|
resetZoom,
|
||||||
|
applyOffsetsToMainView
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user