Files
pixel_tower_defense/game/tower.py
T
ScriptSorcerer f3a5647e5b To much gap between last commit
Im now working next on shoorting for turret

Added new sand map and new cannon tower images aswell as function to play animations, showing range, placing turrets on allowed tiles for towers

Buy and cancel button to buy towers
2026-07-04 23:50:07 +02:00

62 lines
1.9 KiB
Python

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)