Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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
Exemplo n.º 4
0
	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)