Map event tile improvements
This commit is contained in:
@ -15,7 +15,7 @@ export default class CharacterMove extends BaseEvent {
|
||||
|
||||
private async handleEvent({ positionX, positionY }: { positionX: number; positionY: number }): Promise<void> {
|
||||
const mapCharacter = MapManager.getCharacterById(this.socket.characterId!)
|
||||
if (!mapCharacter?.character) {
|
||||
if (!mapCharacter?.getCharacter()) {
|
||||
this.logger.error('map:character:move error: Character not found or not initialized')
|
||||
return
|
||||
}
|
||||
@ -39,7 +39,7 @@ export default class CharacterMove extends BaseEvent {
|
||||
}
|
||||
|
||||
private async moveAlongPath(mapCharacter: MapCharacter, path: Array<{ x: number; y: number }>): Promise<void> {
|
||||
const { character } = mapCharacter
|
||||
const character = mapCharacter.getCharacter()
|
||||
|
||||
for (let i = 0; i < path.length - 1; i++) {
|
||||
if (!mapCharacter.isMoving || mapCharacter.currentPath !== path) {
|
||||
@ -47,10 +47,10 @@ export default class CharacterMove extends BaseEvent {
|
||||
}
|
||||
|
||||
const [start, end] = [path[i], path[i + 1]]
|
||||
character.rotation = CharacterService.calculateRotation(start.x, start.y, end.x, end.y)
|
||||
character.setRotation(CharacterService.calculateRotation(start.x, start.y, end.x, end.y))
|
||||
|
||||
const mapEventTileRepository = new MapEventTileRepository()
|
||||
const mapEventTile = await mapEventTileRepository.getEventTileByMapIdAndPosition(character.map.id, Math.floor(end.x), Math.floor(end.y))
|
||||
const mapEventTile = await mapEventTileRepository.getEventTileByMapIdAndPosition(character.getMap().getId(), Math.floor(end.x), Math.floor(end.y))
|
||||
|
||||
if (mapEventTile?.type === 'BLOCK') break
|
||||
if (mapEventTile?.type === 'TELEPORT' && mapEventTile.teleport) {
|
||||
@ -59,15 +59,14 @@ export default class CharacterMove extends BaseEvent {
|
||||
}
|
||||
|
||||
// Update position first
|
||||
character.positionX = end.x
|
||||
character.positionY = end.y
|
||||
character.setPositionX(end.x).setPositionY(end.y)
|
||||
|
||||
// Then emit with the same properties
|
||||
this.io.in(character.map.id).emit('map:character:move', {
|
||||
characterId: character.id,
|
||||
positionX: character.positionX,
|
||||
positionY: character.positionY,
|
||||
rotation: character.rotation,
|
||||
positionX: character.getPositionX(),
|
||||
positionY: character.getPositionY(),
|
||||
rotation: character.getRotation(),
|
||||
isMoving: true
|
||||
})
|
||||
|
||||
@ -80,18 +79,12 @@ export default class CharacterMove extends BaseEvent {
|
||||
}
|
||||
|
||||
private async handleMapEventTile(mapEventTile: MapEventTileWithTeleport): Promise<void> {
|
||||
const mapCharacter = MapManager.getCharacterById(this.socket.characterId!)
|
||||
if (!mapCharacter) {
|
||||
this.logger.error('map:character:move error: Character not found')
|
||||
return
|
||||
}
|
||||
|
||||
if (mapEventTile.teleport) {
|
||||
await TeleportService.teleportCharacter(mapCharacter.character.id, {
|
||||
targetMapId: mapEventTile.teleport.toMap.id,
|
||||
targetX: mapEventTile.teleport.toPositionX,
|
||||
targetY: mapEventTile.teleport.toPositionY,
|
||||
rotation: mapCharacter.character.rotation
|
||||
if (mapEventTile.getTeleport()) {
|
||||
await TeleportService.teleportCharacter(this.socket.characterId!, {
|
||||
targetMapId: mapEventTile.getTeleport()!.getToMap().getId(),
|
||||
targetX: mapEventTile.getTeleport()!.getToPositionX(),
|
||||
targetY: mapEventTile.getTeleport()!.getToPositionY(),
|
||||
rotation: mapEventTile.getTeleport()!.getToRotation()
|
||||
})
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user