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
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)
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)
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))