Beispiel #1
0
 def __init__(self, g_lefttop, world):
     GameObject.__init__(self)
     self.rect.topleft = util.game2tlscreen(g_lefttop)
     self.g_pos = Vec(util.screen2fgame(self.rect.center))
     self.creeps = world.creeps
     self.missles = world.missles
     self.current_recharge = 0
     self.recharge_ticks = self.recharge_time * TICK_PER_SEC
Beispiel #2
0
 def _draw_tower_sketch(self):
     tower_cls = self._tower_for_build_class
     if tower_cls is not None:
         mpos = self._to_field_coord(pygame.mouse.get_pos())
         if mpos is None:
             return
         g_pos = util.screen2fgame(mpos)
         g_topleft = util.placeintrect(g_pos, (tower_cls.size, ) * 2)
         s_topleft = util.game2tlscreen(g_topleft)
         self._tower_sketch_rect = tower_cls.draw_oksketch_on(
                 self._field_surface, s_topleft)
Beispiel #3
0
    def _dispatch_play_event(self, event):
        if (event.type == QUIT) or (
                event.type == KEYDOWN and event.key == K_ESCAPE):
            self._exit()
        elif event.type == KEYDOWN:
            if event.key == K_w:
                self.select_tower_for_build(Wall)
            elif event.key == K_s:
                self.select_tower_for_build(SimpleTower)
            elif event.key == K_SPACE:
                if self.world.creeps_released():
                    self._game_speed = 4
                else:
                    self.world.release_creeps()

            # TODO: remove one day
            elif event.key == K_z:
                self._game_speed = 8
            elif event.key == K_x:
                self._game_speed = 16
            elif event.key == K_c:
                self._game_speed = 32

            elif event.key == K_RETURN:
                self.toggle_pause()
            elif event.key == K_F10:
                self._restart()
            elif event.key == K_DELETE:
                obj = self._selected_object
                if isinstance(obj, Tower):
                    self.world.sell_tower(obj)
                    self.update_static_layer()

        elif event.type == KEYUP:
            if event.key == K_SPACE:
                self._game_speed = 1
        elif event.type == MOUSEBUTTONDOWN:
            if self._field_rect.collidepoint(event.pos):
                pos = self._to_field_coord(event.pos)
                if event.button == 1:
                    game_pos = util.screen2fgame(pos)
                    if self._tower_for_build_class is None:
                        for obj in itertools.chain(self.world.towers, self.world.creeps):
                            if obj.rect.collidepoint(pos):
                                self.select_object(obj)
                                break
                    else:
                        try:
                            self.world.build_tower(self._tower_for_build_class, game_pos)
                            self.update_static_layer()
                        except BuildError, e:
                            self._messages.post_message(str(e), 3)
                elif event.button == 2:
                    for creep in self.world.creeps:
                        b = SimpleBullet(util.screen2fgame(pos), creep, 1, 20)
                        self.world.missles.add(b)
                        break
                elif event.button == 3:
                    self.reset_selection()
            elif self._top_panel.rect.collidepoint(event.pos):
                self._top_panel.onclick(event.pos, event.button)
            elif self._panel.rect.collidepoint(event.pos):
                pos = Vec(event.pos) - Vec(self._panel.rect.topleft)
                self._panel.onclick(pos, event.button)
Beispiel #4
0
 def __init__(self, g_lefttop, world):
     GameObject.__init__(self)
     self.rect.center = util.game2cscreen(g_lefttop)
     self.g_pos = Vec(util.screen2fgame(self.rect.center))