def _get_poll_args(sector, last_ids_by_sector): nsectors = {} if '^' in str(sector): x,y = util.totuple(sector) else: x,y = sector for dx in (-1, 0, 1): for dy in (-1, 0, 1): nsectors[(x + dx, y + dy)] = True s_r = [] for s in nsectors.keys(): last_id = last_ids_by_sector.get(s, 0) s_r.append(str(last_id) + '^' + util.fromtuple(s)) return ','.join(s_r)
def _get_poll_args(sector, last_ids_by_sector): nsectors = {} if '^' in str(sector): x, y = util.totuple(sector) else: x, y = sector for dx in (-1, 0, 1): for dy in (-1, 0, 1): nsectors[(x + dx, y + dy)] = True s_r = [] for s in nsectors.keys(): last_id = last_ids_by_sector.get(s, 0) s_r.append(str(last_id) + '^' + util.fromtuple(s)) return ','.join(s_r)
def update(self): jukebox.ensure_playing(None) if self.poll.has_response(): response = self.poll.get_response() if response.get('success', False): self.potato.apply_poll_data(response, self.user_id) t = self.potato.resources self.potato.resources = self.potato.escrow self.potato.escrow = t self.poll = None self.next = PlayScene(self.user_id, self.password, self.potato, util.totuple(self.sector), util.totuple(self.loc), self.new, self.tutorial) else: pass #print("Something terrible has happened.") self.next = None
def apply_poll_data(self, poll, you_id): if not poll.get('success', False): return # users that have building adds/removes dirty_users = {} resources = poll.get('resources', {}) for key in resources.keys(): latest = int(resources[key] * 10) self.escrow[key] = latest - self.resources[key] for sector_data in poll.get('sectors', []): id = util.totuple(sector_data.get('id', None)) if sector_data.get('all', False): # list of all buildings #self.last_id_by_sector[id] = max( # self.last_id_by_sector.get(id, 0), # sector_data.get('valid_through', 0)) structures = sector_data.get('structures', []) structures.sort(key=lambda x:x[4]) for structure in structures: if len(structure) == 5: structure_id = structure[0] type = structure[1] loc = util.totuple(structure[2]) owner = structure[3] event_id = structure[4] dirty_users[owner] = True self.sector_by_user[owner] = id self.user_by_sector[id] = owner if self.last_id_by_sector.get(id, 0) < event_id: self.add_structure(owner, type, id[0], id[1], loc[0], loc[1]) self.last_id_by_sector[id] = event_id #if owner == you_id and type == 'launchsite': # self.queue_epic_battle = True else: # list of new events events = sector_data.get('events', []) events.sort(key=lambda x:x[0]) for event in events: # TODO: pending buildings event_id = event[0] if event_id > self.last_id_by_sector.get(id, 0): self.last_id_by_sector[id] = event_id client_token = event[1] user_id = event[2] data = event[3] parts = data.split(':') if len(parts) > 1: datakey = parts[0].lower() datavalue = ':'.join(parts[1:]) self.sector_by_user[user_id] = id self.user_by_sector[id] = user_id if datakey == 'build': parts = datavalue.split(',') if len(parts) == 2: type = parts[0] loc = util.totuple(parts[1]) self.add_structure(user_id, type, id[0], id[1], loc[0], loc[1]) dirty_users[user_id] = True if type == 'launchsite' and user_id == you_id: self.queue_epic_battle = True elif datakey == 'demolish': x, y = map(int, datavalue.split('^')) self.remove_structure(id, x, y) dirty_users[user_id] = True for user_id in dirty_users.keys(): sector = self.sector_by_user.get(user_id) if sector != None: # should not be false, but crashes suck really bad buildings = self.buildings_by_sector.get(sector, []) color = user_colors[user_id % len(user_colors)] self.borders_by_user[user_id] = border.Border(color, [(b, 4.5) for b in buildings], sector)