diff --git a/package-lock.json b/package-lock.json index 511beee..2f092c3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -657,9 +657,9 @@ } }, "node_modules/@babel/traverse": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.0.tgz", - "integrity": "sha512-ubALThHQy4GCf6mbb+5ZRNmLLCI7bJ3f8Q6LHBSRlSKSWj5a7dSUzJBLv3VuIhFrFPgjF4IzPF567YG/HSCdZA==", + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.1.tgz", + "integrity": "sha512-LrHHoWq08ZpmmFqBAzN+hUdWwy5zt7FGa/hVwMcOqW6OVtwqaoD5utfuGYU87JYxdZgLUvktAsn37j/sYR9siA==", "dev": true, "license": "MIT", "dependencies": { diff --git a/src/components/World.vue b/src/components/World.vue index ec32aca..c7cf1fd 100644 --- a/src/components/World.vue +++ b/src/components/World.vue @@ -65,7 +65,6 @@ const sortedItems = computed(() => { // Event listeners gameStore.connection?.on('zone:character:join', (data: CharacterT) => { - console.log('character:zone:join', data) zoneStore.addCharacter(data) }) @@ -74,7 +73,6 @@ gameStore.connection?.on('zone:character:leave', (character_id: number) => { }) gameStore.connection?.on('character:moved', (data: CharacterT) => { - console.log('character:moved', data) zoneStore.updateCharacter(data) }) @@ -91,9 +89,9 @@ onBeforeMount(() => { } gameStore.connection?.emit('character:zone:request', { zoneId: gameStore.character?.zoneId }, (response: TResponse) => { - console.log(response) zoneStore.setZone(response.zone) - zoneStore.setCharacters(response.characters) + const uniqueCharacters = [...new Set(response.characters)] + zoneStore.setCharacters(uniqueCharacters) updateZoneTiles(zoneTilemap, tiles, response.zone) zoneObjects.value = response.zone.zoneObjects }) diff --git a/src/components/sprites/Character.vue b/src/components/sprites/Character.vue index 1b312e3..d7820ef 100644 --- a/src/components/sprites/Character.vue +++ b/src/components/sprites/Character.vue @@ -24,15 +24,17 @@ :x="tileToWorldX(props.layer, props.character.position_x, props.character.position_y)" :y="tileToWorldY(props.layer, props.character.position_x, props.character.position_y)" :origin-y="1" + :flipX="props.character.rotation === 6 || props.character.rotation === 4" + :flipY="false" /> </Container> </template> <script lang="ts" setup> -import { Container, Image, Rectangle, Text } from 'phavuer' +import { Container, Image, Rectangle, RoundRectangle, Text } from 'phavuer' import { type Character as CharacterT } from '@/types' import { tileToWorldX, tileToWorldY } from '@/services/zone' -import { ref, watch, computed } from 'vue' +import { watch, computed } from 'vue' interface Props { layer: Phaser.Tilemaps.TilemapLayer @@ -44,6 +46,7 @@ const props = withDefaults(defineProps<Props>(), { }) const charTexture = computed(() => { + console.log('Character texture:', props.character) if (!props.character?.characterType?.sprite) { console.log('No character type or sprite found') return 'idle_left_down' @@ -61,17 +64,21 @@ const charTexture = computed(() => { return `${spriteId}-idle_left_down` // Default fallback }) -watch(() => props.character, (newCharacter) => { - if (newCharacter) { - console.log('Character updated:', newCharacter) - console.log('Rotation:', newCharacter.rotation) - console.log('Current texture:', charTexture.value) - } else { - console.log('Character is null or undefined') - } -}, { deep: true }) +watch( + () => props.character, + (newCharacter) => { + if (newCharacter) { + console.log('Character updated:', newCharacter) + console.log('Rotation:', newCharacter.rotation) + console.log('Current texture:', charTexture.value) + } else { + console.log('Character is null or undefined') + } + }, + { deep: true } +) const createText = (text: Phaser.GameObjects.Text) => { text.setLetterSpacing(1.5) } -</script> \ No newline at end of file +</script> diff --git a/src/components/utilities/Controls.vue b/src/components/utilities/Controls.vue index 2433c73..4a6d759 100644 --- a/src/components/utilities/Controls.vue +++ b/src/components/utilities/Controls.vue @@ -5,7 +5,6 @@ <script setup lang="ts"> import { Image, useScene } from 'phavuer' import { onBeforeUnmount, ref } from 'vue' -import { useZoneEditorStore } from '@/stores/zoneEditor' import { usePointerHandlers } from '@/composables/usePointerHandlers' import { useCameraControls } from '@/composables/useCameraControls' @@ -27,4 +26,4 @@ const { setupPointerHandlers, cleanupPointerHandlers } = usePointerHandlers(scen setupPointerHandlers() onBeforeUnmount(cleanupPointerHandlers) -</script> \ No newline at end of file +</script> diff --git a/src/components/utilities/assetManager/partials/sprite/SpriteDetails.vue b/src/components/utilities/assetManager/partials/sprite/SpriteDetails.vue index 371d9d9..02a9eb3 100644 --- a/src/components/utilities/assetManager/partials/sprite/SpriteDetails.vue +++ b/src/components/utilities/assetManager/partials/sprite/SpriteDetails.vue @@ -6,14 +6,14 @@ <label class="mb-1.5 font-titles" for="name">Name</label> <input v-model="spriteName" class="input-cyan" type="text" name="name" placeholder="New sprite" /> </div> - + <div class="w-full flex gap-2 mt-2 pb-4 relative"> <button class="btn-cyan px-4 py-2 flex-1 sm:flex-none sm:min-w-24" type="button" @click.prevent="saveSprite">Save</button> <button class="btn-bordeaux px-4 py-2 flex-1 sm:flex-none sm:min-w-24" type="button" @click.prevent="removeSprite">Remove</button> <div class="w-[calc(100%_+_32px)] absolute left-[-15px] bottom-0 h-px bg-cyan-200"></div> </div> </div> - + <button class="btn-cyan py-2 my-4" type="button" @click.prevent="addNewImage">New action</button> <Accordion v-for="action in spriteActions" :key="action.id"> <template #header> @@ -118,19 +118,20 @@ function saveSprite() { const updatedSprite = { id: selectedSprite.value.id, name: spriteName.value, - spriteActions: spriteActions.value?.map((action) => { - return { - action: action.action, - sprites: action.sprites, - origin_x: action.origin_x, - origin_y: action.origin_y, - isAnimated: action.isAnimated, - isLooping: action.isLooping, - frameSpeed: action.frameSpeed, - frameWidth: action.frameWidth, - frameHeight: action.frameHeight, - } - }) ?? [] + spriteActions: + spriteActions.value?.map((action) => { + return { + action: action.action, + sprites: action.sprites, + origin_x: action.origin_x, + origin_y: action.origin_y, + isAnimated: action.isAnimated, + isLooping: action.isLooping, + frameSpeed: action.frameSpeed, + frameWidth: action.frameWidth, + frameHeight: action.frameHeight + } + }) ?? [] } gameStore.connection?.emit('gm:sprite:update', updatedSprite, (response: boolean) => { @@ -161,7 +162,7 @@ function addNewImage() { isLooping: false, frameSpeed: 0, frameWidth: 0, - frameHeight: 0, + frameHeight: 0 } if (!spriteActions.value) { diff --git a/src/components/utilities/assetManager/partials/sprite/partials/SpriteImagesInput.vue b/src/components/utilities/assetManager/partials/sprite/partials/SpriteImagesInput.vue index fe4a38b..f36f98e 100644 --- a/src/components/utilities/assetManager/partials/sprite/partials/SpriteImagesInput.vue +++ b/src/components/utilities/assetManager/partials/sprite/partials/SpriteImagesInput.vue @@ -94,4 +94,4 @@ const drop = (event: DragEvent, dropIndex: number) => { } draggedIndex.value = null } -</script> \ No newline at end of file +</script> diff --git a/src/composables/useCameraControls.ts b/src/composables/useCameraControls.ts index 5cad3c2..1c04ec5 100644 --- a/src/composables/useCameraControls.ts +++ b/src/composables/useCameraControls.ts @@ -43,4 +43,4 @@ export function useCameraControls(scene: Phaser.Scene): any { camera, isDragging } -} \ No newline at end of file +} diff --git a/src/composables/usePointerHandlers.ts b/src/composables/usePointerHandlers.ts index ae63b46..2bd08a6 100644 --- a/src/composables/usePointerHandlers.ts +++ b/src/composables/usePointerHandlers.ts @@ -4,13 +4,7 @@ import { getTile, tileToWorldXY } from '@/services/zone' import { useGameStore } from '@/stores/game' import { useZoneEditorStore } from '@/stores/zoneEditor' -export function usePointerHandlers( - scene: Phaser.Scene, - layer: Phaser.Tilemaps.TilemapLayer, - waypoint: Ref<{ visible: boolean; x: number; y: number }>, - camera: Ref<Phaser.Cameras.Scene2D.Camera>, - isDragging: Ref<boolean> -) { +export function usePointerHandlers(scene: Phaser.Scene, layer: Phaser.Tilemaps.TilemapLayer, waypoint: Ref<{ visible: boolean; x: number; y: number }>, camera: Ref<Phaser.Cameras.Scene2D.Camera>, isDragging: Ref<boolean>) { const gameStore = useGameStore() const zoneEditorStore = useZoneEditorStore() @@ -68,6 +62,7 @@ export function usePointerHandlers( function setupPointerHandlers() { scene.input.on(Phaser.Input.Events.POINTER_MOVE, updateWaypoint) scene.input.on(Phaser.Input.Events.POINTER_WHEEL, handleZoom) + scene.input.on(Phaser.Input.Events.POINTER_MOVE, dragZone) // These are for in-game only, not for in the zone editor if (!zoneEditorStore.active) { @@ -78,6 +73,7 @@ export function usePointerHandlers( function cleanupPointerHandlers() { scene.input.off(Phaser.Input.Events.POINTER_MOVE, updateWaypoint) scene.input.off(Phaser.Input.Events.POINTER_WHEEL, handleZoom) + scene.input.off(Phaser.Input.Events.POINTER_MOVE, dragZone) // These are for in-game only, not for in the zone editor if (!zoneEditorStore.active) { @@ -89,4 +85,4 @@ export function usePointerHandlers( setupPointerHandlers, cleanupPointerHandlers } -} \ No newline at end of file +} diff --git a/src/config.ts b/src/config.ts index 4a929c1..763f5d6 100644 --- a/src/config.ts +++ b/src/config.ts @@ -1,4 +1,4 @@ -const dev: boolean = false +const dev: boolean = true export default { name: 'New Quest',