fix bug bug fix
This commit is contained in:
parent
17a6fb6340
commit
cd10bd2cec
2 changed files with 41 additions and 31 deletions
|
@ -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)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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,12 +65,15 @@ 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]
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue