diff --git a/src/components/gameMaster/GmTools.vue b/src/components/gameMaster/GmTools.vue index 963037c..f746809 100644 --- a/src/components/gameMaster/GmTools.vue +++ b/src/components/gameMaster/GmTools.vue @@ -1,5 +1,5 @@ diff --git a/src/components/zone/Zone.vue b/src/components/zone/Zone.vue index eb4006f..2de107a 100644 --- a/src/components/zone/Zone.vue +++ b/src/components/zone/Zone.vue @@ -13,7 +13,7 @@ import type { Character as CharacterT, Zone as ZoneT, ExtendedCharacter as Exten import Tiles from '@/components/zone/Tiles.vue' import Objects from '@/components/zone/Objects.vue' import Characters from '@/components/zone/Characters.vue' -import { loadAssets } from '@/composables/zoneComposable' +import { loadAssets, tileToWorldX, tileToWorldY } from '@/composables/zoneComposable' const gameStore = useGameStore() const zoneStore = useZoneStore() @@ -26,19 +26,23 @@ type zoneLoadData = { characters: CharacterT[] } + gameStore.connection!.emit('zone:character:join', { zoneId: gameStore.character!.zoneId }, async (response: zoneLoadData) => { // Fetch assets for new zone await gameStore.fetchZoneAssets(response.zone.id) await loadAssets(scene) + + // Set zone and characters zoneStore.setZone(response.zone) zoneStore.setCharacters(response.characters) + scene.cameras.main.setScroll(-(scene.cameras.main.worldView.width/2) - gameStore.character.relativePosition.x, -(scene.cameras.main.worldView.height/2) + gameStore.character.relativePosition.y) + console.log('--- CHARACTER JOIN') }) // Event listeners gameStore.connection!.on('zone:character:teleport', async (data: zoneLoadData) => { - console.log('eeee'); /** * This is the cause of the bug */ @@ -56,6 +60,12 @@ gameStore.connection!.on('zone:character:teleport', async (data: zoneLoadData) = zoneStore.setZone(data.zone) zoneStore.setCharacters(data.characters) + + const character = gameStore.character; + // Position character centered on zone change or teleport + const posX = tileToWorldX(tileMap.value, character.positionX, character.positionY) + const posY = tileToWorldY(tileMap.value, character.positionX, character.positionY) + scene.cameras.main.setScroll(-(scene.cameras.main.worldView.width/2) + posX, -(scene.cameras.main.worldView.height/2) + posY) }) gameStore.connection!.on('zone:character:join', async (data: ExtendedCharacterT) => { diff --git a/src/composables/useCameraControls.ts b/src/composables/useCameraControls.ts index 56b6617..8f908a5 100644 --- a/src/composables/useCameraControls.ts +++ b/src/composables/useCameraControls.ts @@ -6,6 +6,15 @@ export function useCameraControls(scene: Phaser.Scene): any { const camera = ref(scene.cameras.main) const isDragging = ref(false) + // Resize center camera on character. + window.addEventListener('resize', () => { + console.log('woep') + // Need to change camera position next frame + setTimeout(() => { + scene.cameras.main.setScroll(-(scene.cameras.main.worldView.width/2) + gameStore.character.relativePosition.x, -(scene.cameras.main.worldView.height/2) + gameStore.character.relativePosition.y) + }, 0) + }) + function onPointerDown(pointer: Phaser.Input.Pointer) { if (pointer.event instanceof MouseEvent || pointer.event.shiftKey) { isDragging.value = true diff --git a/src/types.ts b/src/types.ts index 55fafe7..763553c 100644 --- a/src/types.ts +++ b/src/types.ts @@ -142,6 +142,7 @@ export type Character = { role: string positionX: number positionY: number + relativePosition: {x: number, y: number} rotation: number zoneId: number zone: Zone