Exemple #1
0
 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
Exemple #2
0
    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
Exemple #3
0
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))