Centered camera & Modal position changes

- Able to give position to modal other then centered.
 - Camera now centered on character when
   - Character joins zone
   - Character teleports on to zone
   - Window resize
This commit is contained in:
Zaxiure
2024-09-21 12:00:49 +02:00
parent cfb3e427cf
commit d0bf622443
6 changed files with 95 additions and 8 deletions

View File

@ -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) => {