Added minimap module (bad) and miss counters

This commit is contained in:
Casey 2024-07-10 20:14:35 +03:00
parent 329084b895
commit 3faea430d5
Signed by: hkc
GPG Key ID: F0F6CFE11CDB0960
2 changed files with 37 additions and 1 deletions

View File

@ -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)

View File

@ -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()