import pygame as pg from game.util import * class Tower(pg.sprite.Sprite): def __init__(self, game, pos, tile_pos, type, range, level=1): super().__init__() self.game = game self.type = type self.image = self.game.assets[type] self.rect = self.image.get_rect() self.rect.center = pos self.range = range self.selected = False self.pos = pos self.tile_pos = tile_pos self.level = level self.action = "" self.set_action('shoot') def update(self, enemies): self.animation.update() def set_action(self, action): if action != self.action: self.action = action self.animation = self.game.assets[self.type + '/' + self.action].copy() def render(self, surf, camera): screen_pos = camera.world_to_screen(pg.Vector2( tile_to_pixel(self.tile_pos, self.game.tilemap.tile_size, True) )) anim_img = self.animation.img() scaled_image = pg.transform.scale( anim_img, ( int(anim_img.get_width() * camera.zoom), int(anim_img.get_height() * camera.zoom) ) ) rect = scaled_image.get_rect(center=screen_pos) if self.selected: scaled_range = int(self.range * camera.zoom) range_surf = pg.Surface((scaled_range * 2, scaled_range * 2), pg.SRCALPHA) pg.draw.circle(range_surf, (200, 200, 200, 100), (scaled_range, scaled_range), scaled_range) range_rect = range_surf.get_rect(center=screen_pos) surf.blit(range_surf, range_rect) surf.blit(scaled_image, rect) class TowerGroup(pg.sprite.Group): def render(self, surf, camera): for tower in self.sprites(): tower.render(surf, camera) def update(self, enemies): for tower in self.sprites(): tower.update(enemies)