Added minimap module (bad) and miss counters
This commit is contained in:
parent
329084b895
commit
3faea430d5
|
@ -211,6 +211,30 @@ class Manager:
|
||||||
self.put_image(shrek_x, shrek_y, im)
|
self.put_image(shrek_x, shrek_y, im)
|
||||||
|
|
||||||
self.animation_functions.append(update_shrek)
|
self.animation_functions.append(update_shrek)
|
||||||
|
elif elem["type"] == "minimap":
|
||||||
|
minimap_x, minimap_y = elem["x"], elem["y"]
|
||||||
|
minimap_w, minimap_h = elem["w"], elem["h"]
|
||||||
|
|
||||||
|
minimap_state = {
|
||||||
|
"last_update": time.time()
|
||||||
|
}
|
||||||
|
def update_minimap():
|
||||||
|
if self.shmem is None:
|
||||||
|
return
|
||||||
|
if (time.time() - minimap_state["last_update"]) < 5:
|
||||||
|
return
|
||||||
|
for y in range(minimap_h):
|
||||||
|
for x in range(minimap_w):
|
||||||
|
world_x = int(x * 1000 / minimap_w)
|
||||||
|
world_y = int(y * 1000 / minimap_h)
|
||||||
|
world_i = world_x + world_y * 1000
|
||||||
|
byte, mask = world_i >> 3, 0x80 >> (world_i & 7)
|
||||||
|
state = bool(self.shmem.buf[byte] & mask)
|
||||||
|
px, py = x + minimap_x, y + minimap_y
|
||||||
|
self.set_index(px + py * 1000, state)
|
||||||
|
minimap_state["last_update"] = time.time()
|
||||||
|
|
||||||
|
self.animation_functions.append(update_minimap)
|
||||||
else:
|
else:
|
||||||
raise TypeError(f"invalid element: {elem}")
|
raise TypeError(f"invalid element: {elem}")
|
||||||
print("ADD", elem)
|
print("ADD", elem)
|
||||||
|
|
|
@ -31,9 +31,12 @@ class WorkerManager:
|
||||||
self.n_toggles = 0
|
self.n_toggles = 0
|
||||||
self.workers: set[tuple[int, int]] = set()
|
self.workers: set[tuple[int, int]] = set()
|
||||||
self._restarts: dict[int, int] = {}
|
self._restarts: dict[int, int] = {}
|
||||||
|
self.miss_avoid = 0
|
||||||
|
self.miss_mask = 0
|
||||||
|
self.miss_state = 0
|
||||||
|
|
||||||
async def queue_manager(self):
|
async def queue_manager(self):
|
||||||
offset = random.randint(0, 999999)
|
offset = random.randint(0, 1000000)
|
||||||
while True:
|
while True:
|
||||||
for oy in [0, 2, 1, 3]:
|
for oy in [0, 2, 1, 3]:
|
||||||
for y in range(oy, 1000, 4):
|
for y in range(oy, 1000, 4):
|
||||||
|
@ -73,9 +76,11 @@ class WorkerManager:
|
||||||
mask = 0x80 >> bit
|
mask = 0x80 >> bit
|
||||||
|
|
||||||
if self.shmem.buf[OFFSET_AVOID + byte] & mask:
|
if self.shmem.buf[OFFSET_AVOID + byte] & mask:
|
||||||
|
self.miss_avoid += 1
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if (self.shmem.buf[OFFSET_MASK + byte] & mask) == 0:
|
if (self.shmem.buf[OFFSET_MASK + byte] & mask) == 0:
|
||||||
|
self.miss_mask += 1
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if (self.shmem.buf[OFFSET_CANVAS + byte] & mask) != (
|
if (self.shmem.buf[OFFSET_CANVAS + byte] & mask) != (
|
||||||
|
@ -85,7 +90,10 @@ class WorkerManager:
|
||||||
self.n_toggles += 1
|
self.n_toggles += 1
|
||||||
self.shmem.buf[OFFSET_STATE + byte] ^= 0x80 >> bit
|
self.shmem.buf[OFFSET_STATE + byte] ^= 0x80 >> bit
|
||||||
await sio.emit("toggle_bit", {"index": index})
|
await sio.emit("toggle_bit", {"index": index})
|
||||||
|
self.queue.task_done()
|
||||||
await asyncio.sleep(self.delay)
|
await asyncio.sleep(self.delay)
|
||||||
|
else:
|
||||||
|
self.miss_state += 1
|
||||||
finally:
|
finally:
|
||||||
self.workers.remove(cookie)
|
self.workers.remove(cookie)
|
||||||
|
|
||||||
|
@ -104,6 +112,9 @@ class WorkerManager:
|
||||||
print(f"Workers: {len(self.workers)} {self.workers}")
|
print(f"Workers: {len(self.workers)} {self.workers}")
|
||||||
print(f"Queue size: {self.queue.qsize()}/{self.queue.maxsize}")
|
print(f"Queue size: {self.queue.qsize()}/{self.queue.maxsize}")
|
||||||
print(f"Toggles: {self.n_toggles / diff:.2f}/s")
|
print(f"Toggles: {self.n_toggles / diff:.2f}/s")
|
||||||
|
print(f"Misses: A:{self.miss_avoid} M:{self.miss_mask} S:{self.miss_state}")
|
||||||
|
|
||||||
|
print(f"Q: {self.queue}")
|
||||||
|
|
||||||
self.n_toggles = 0
|
self.n_toggles = 0
|
||||||
last_printout = time.time()
|
last_printout = time.time()
|
||||||
|
@ -113,6 +124,7 @@ class WorkerManager:
|
||||||
return self
|
return self
|
||||||
|
|
||||||
async def __aexit__(self, a, b, c):
|
async def __aexit__(self, a, b, c):
|
||||||
|
print("Closing shmem")
|
||||||
self.shmem.close()
|
self.shmem.close()
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue