import { Sprite } from './sprite.js' import { ItemType, Rotation } from '../logic.js' const draw_players = (data, players, sprites) => { for (let id of players) { let pos = data.players[id].pos sprites[id].move(pos[0], pos[1]) switch (data.players[id].move_rot) { case Rotation.NORTH: sprites[id].rotate(270) break case Rotation.EAST: sprites[id].rotate(0) break case Rotation.SOUTH: sprites[id].rotate(90) break case Rotation.WEST: sprites[id].rotate(180) break } } } const update_player_sprites = (data, players, sprites) => { for (const sprite of sprites) { if (sprite !== undefined) { sprite.destroy() } } let new_sprites = Array(players) new_sprites.fill(undefined) for (let id of players) { let sprite = new Sprite("/img/pac.png", data.map) sprite.layer(3) sprite.resize(1,1) sprite.show() new_sprites[id] = sprite } return new_sprites } const create_map_dot = (data, x, y) => { let dot = new Sprite("/img/dot.png", data.map) dot.move(x, y) dot.resize(.2,.2) dot.show() return dot } const update_item_sprites = (data) => { let item_sprites = {} for (let item_key in data.map.items) { let item = data.map.items[item_key] switch (item.type) { case ItemType.DOT: item_sprites[item_key] = create_map_dot(data, item.pos[0], item.pos[1]) break; } } return item_sprites } export const startGraphicsUpdater = () => { let player_sprites = [] let item_sprites = {} /** * @type {(data: import("../logic.js").GameState) => void} */ return (data) => { if (!data.map || !data.map.visible) return let players = Object.keys(data.players).filter(k => data.players[k] !== undefined) if (player_sprites.length !== players.length) { player_sprites = update_player_sprites(data, players, player_sprites) console.log("updating player sprites") } for (let item_key of data.items_eaten) { if (!(item_sprites[item_key])) continue item_sprites[item_key].destroy() delete item_sprites[item_key] delete data.items_eaten[item_key] } if (Object.keys(item_sprites).length !== Object.keys(data.map.items).length) { item_sprites = update_item_sprites(data) console.log("updating item sprites") } draw_players(data, players, player_sprites) } }