def make_territory(self): self.build_up = 0 x = self.get_best_territory() if not x: return False pt, m_size = x t = Territory(self.player) for i in [pt.topleft, pt.topright, pt.bottomright, pt.bottomleft]: t.add_point(i) t.finish() if self.state.world.mo.test_territory(t): self.state.world.mo.add(t) t.create_name(constants.territory_first_name, constants.territory_second_name) self.player.resources.string -= m_size return True
class TerritoryDrawer(object): def __init__(self, player, world): self.player = player self.world = world self.font = data.font("Pieces-of-Eight.ttf", 18) self.t = None self.active = False def update_event(self, event): if self.active: if event.type == MOUSEBUTTONDOWN: if event.button == 1: x, y = event.pos ox, oy = self.world.camera.get_offset() x += ox y += oy x -= self.world.camera.screen_rect.left y -= self.world.camera.screen_rect.top pos = x, y ax, lol = self.get_acceptable(pos) if ax > self.player.resources.string: return if self.world.mo.test_point(pos): if not self.t: self.t = Territory(self.player) self.t.add_point(pos) self.t.create_name(constants.territory_first_name, constants.territory_second_name) else: if self.t.within_range(pos): if len(self.t.points) == 1: return None self.t.finish() if self.world.mo.test_territory(self.t): self.world.mo.add(self.t) self.player.resources.string -= ax self.t = None self.active = False else: self.t.add_point(pos) if event.button == 3: self.t = None self.active = False def get_acceptable(self, mpos): if not self.t: return 0, self.player.resources.string > 0 if len(self.t.points) >= 2: dis = 0 for i in xrange(len(self.t.points)): x1, y1 = self.t.points[i] try: x2, y2 = self.t.points[i+1] except: x2, y2 = mpos dis += math.sqrt((abs(x1 - x2) ** 2) +\ (abs(y1 - y2) ** 2)) return int(dis), self.player.resources.string >= dis if len(self.t.points) == 1: x1, y1 = self.t.points[0] x2, y2 = mpos dis = math.sqrt((abs(x1 - x2) ** 2) +\ (abs(y1 - y2) ** 2)) return int(dis), self.player.resources.string >= dis else: return 0, self.player.resources.string > 0 def render(self, screen): if self.t: ox, oy = self.world.camera.get_offset() mx, my = pygame.mouse.get_pos() mx -= self.world.camera.screen_rect.left my -= self.world.camera.screen_rect.top mp = (mx, my) np = [] for i in self.t.points: x, y = i x -= ox y -= oy np.append((x, y)) if len(np) > 1: pygame.draw.lines(screen, self.player.color, False, np, 1) pygame.draw.line(screen, self.player.color, np[-1], mp, 3) for i in np: pygame.draw.rect(screen, self.player.color, [i[0]-10, i[1]-10, 20, 20]) ga, gg = self.get_acceptable((mp[0]+ox, mp[1]+oy)) if gg: color = (0, 0, 255) else: color = (255, 0, 0) screen.blit(self.font.render(str(ga), 1, color), (mx, my+20))