fix bug bug fix

This commit is contained in:
Freya Murphy 2023-06-14 23:56:28 -04:00
parent 17a6fb6340
commit cd10bd2cec
2 changed files with 41 additions and 31 deletions

View file

@ -49,29 +49,51 @@ const create_map_dot = (data, x, y) => {
dot.move(x, y) dot.move(x, y)
dot.resize(.2,.2) dot.resize(.2,.2)
dot.show() dot.show()
dot.type = ItemType.DOT
return dot return dot
} }
const update_item_sprites = (data, sprites) => { const draw_sprites = (data, item_sprites) => {
let items = data.map.items
for (const sprite of sprites) { let to_remove = []
if (sprite !== undefined) { // remove rendered but non existing items
for (const item_key in item_sprites) {
let sprite = item_sprites[item_key]
if (!items[item_key]) {
sprite.destroy()
to_remove.push(item_key)
}
}
for (const id of to_remove) {
delete item_sprites[id]
}
// add not rendered sprites
for (const item_key in items) {
/** @type {import('../logic.js').Item} */
let item = items[item_key]
let sprite = item_sprites[item_key]
if (sprite) {
if (item.type === sprite.type)
continue
sprite.destroy() sprite.destroy()
} }
}
let item_sprites = {}
for (let item_key in data.map.items) {
let item = data.map.items[item_key]
switch (item.type) { switch (item.type) {
case ItemType.DOT: case ItemType.DOT:
item_sprites[item_key] = create_map_dot(data, item.pos[0], item.pos[1]) sprite = create_map_dot(data, ...item.pos)
break; break;
} }
item_sprites[item_key] = sprite
} }
return item_sprites
} }
export const startGraphicsUpdater = () => { export const startGraphicsUpdater = () => {
@ -93,18 +115,7 @@ export const startGraphicsUpdater = () => {
console.log("updating player sprites") console.log("updating player sprites")
} }
for (let item_key of data.items_eaten) { draw_sprites(data, item_sprites)
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, item_sprites)
console.log("updating item sprites")
}
draw_players(data, players, player_sprites) draw_players(data, players, player_sprites)
} }

View file

@ -42,7 +42,7 @@ export const ItemType = {
* input: InputMap, * input: InputMap,
* players: Players, * players: Players,
* map: Map, * map: Map,
* items_eaten: Item[] * items_removed: Item[]
* }} GameState * }} GameState
*/ */
@ -51,12 +51,12 @@ export const initState = {
started: false, started: false,
input: {}, input: {},
players: [], players: [],
map: {}, map: {}
items_eaten: []
} }
let last = Date.now() let last = Date.now()
let fps_div = document.getElementById("fps") let fps_div = document.getElementById("fps")
let frameCount = 0
export function advance( export function advance(
pastData = initState, pastData = initState,
@ -65,13 +65,16 @@ export function advance(
) { ) {
let data = processInput(pastData, input, frame); let data = processInput(pastData, input, frame);
if (frame % 60 == 0) { if (frameCount == 60) {
frameCount = 0
let now = Date.now() let now = Date.now()
let fps = (now-last)/1000*60 let fps = (now-last)/1000*60
fps_div.innerHTML = fps.toFixed(2); fps_div.innerHTML = fps.toFixed(2);
last = now last = now
} }
frameCount++
return data; return data;
} }
@ -320,11 +323,7 @@ const update_players = (data) => {
for (let x = ceil_half(pos[0]-.5); x <= floor_half(pos[0]+.5); x += .5) { for (let x = ceil_half(pos[0]-.5); x <= floor_half(pos[0]+.5); x += .5) {
for (let y = ceil_half(pos[1]-.5); y <= floor_half(pos[1]+.5); y += .5) { for (let y = ceil_half(pos[1]-.5); y <= floor_half(pos[1]+.5); y += .5) {
let item_key = get_item_key(x, y, data.map.width) let item_key = get_item_key(x, y, data.map.width)
let item = data.map.items[item_key] delete data.map.items[item_key]
if (item) {
data.items_eaten.push(item_key)
delete data.map.items[item_key]
}
} }
} }