import pygame as pg import math import constants as c from turret_data import TURRET_DATA class Turret(pg.sprite.Sprite): def __init__(self, sprite_sheets, tile_x, tile_y, shot_fx): pg.sprite.Sprite.__init__(self) self.upgrade_level = 1 self.range = TURRET_DATA[self.upgrade_level - 1].get("range") self.cooldown = TURRET_DATA[self.upgrade_level -1].get("cooldown") self.last_shot = pg.time.get_ticks() self.selected = False self.target = None #position variables self.tile_x = tile_x self.tile_y = tile_y #center co-ords self.x = (self.tile_x + 0.5) * c.TILE_SIZE self.y = (self.tile_y + 0.5) * c.TILE_SIZE #shot effect self.shot_fx = shot_fx #animation variables self.sprite_sheets = sprite_sheets self.animation_list = self.load_images(self.sprite_sheets[self.upgrade_level - 1]) self.frame_index = 0 self.update_time = pg.time.get_ticks() #upd image self.angle = 90 self.original_image = self.animation_list[self.frame_index] self.image = pg.transform.rotate(self.original_image, self.angle) self.rect = self.image.get_rect() self.rect.center = (self.x, self.y) #create transparent circle showing range self.range_image = pg.Surface((self.range * 2, self.range *2)) self.range_image.fill((0,0,0)) self.range_image.set_colorkey((0,0,0)) pg.draw.circle(self.range_image, "grey100", (self.range, self.range), self.range) self.range_image.set_alpha(100) self.range_rect = self.range_image.get_rect() self.range_rect.center = self.rect.center def load_images(self, sprite_sheet): #extract images size = sprite_sheet.get_height() animation_list = [] for x in range(c.ANIMATION_STEPS): temp_img = sprite_sheet.subsurface(x * size, 0, size, size) animation_list.append(temp_img) return animation_list def update(self, enemy_group, world): #if target picked, play firing animation if self.target: self.play_animation()