From be59b002fb2650bf17f58420fa93b0f8bef74a25 Mon Sep 17 00:00:00 2001 From: Florian Jung Date: Wed, 26 Aug 2015 22:51:20 +0200 Subject: detect splits and add cell.parent attribute --- subscriber.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/subscriber.py b/subscriber.py index b2b6643..e910087 100644 --- a/subscriber.py +++ b/subscriber.py @@ -1,6 +1,7 @@ from log import log from collections import deque import sys +import mechanics class DummySubscriber: def on_connect_error(self,s): @@ -126,3 +127,31 @@ class EnhancingSubscriber(DummySubscriber): else: cell.player = None + # detect split cells and clean up obsolete parent references + for cell in self.c.world.cells.values(): + if not cell.is_food and not cell.is_ejected_mass and not cell.is_virus: + # create attribute if not already there + try: + cell.parent = cell.parent + except: + cell.parent = None + print("new cell, setting parent = None") + + # clean up obsolete parent references + if cell.parent and cell.parent.cid not in self.c.world.cells: + cell.parent = None + print("obsolete parent") + + + if not cell.is_food and not cell.is_ejected_mass and not cell.is_virus: + is_split = False + try: + if cell.parent == None and cell.movement.len() > 2 * mechanics.speed(cell.size): + print("looks like a split!"+str(cell.movement.len() / mechanics.speed(cell.size))) + is_split = True + except AttributeError: + pass + + if is_split: + history_len = len(cell.poslog) + cell.parent = min(self.c.world.cells.values(), key=lambda c : (c.poslog[-history_len] - cell.poslog[-history_len]).len() if c != cell and len(c.poslog) >= history_len else 999999) -- cgit v1.2.1