class LaserTurret(Turret): img=Img.imgx("War/LaserBase") ds=1 turret=Img.lotsrots(Img.imgx("War/LaserTurret"),ds) fx=FX.Laser def explode(self,area,pos,tier): if tier>=2: super().explode(area,pos,tier)
class Turret(Machine): img=Img.imgx("War/GunBase") ds=1 turret=Img.lotsrots(Img.imgx("War/GunTurret"),ds) angle=0 rspeed=0.04 sleep=60 hardness = 300 targetable = True hp=1 fx=FX.Gunfire damage=0.01 rng=4 def render(self, layer, surf, tpos, area,scale=3): super().render(layer,surf,tpos,area,scale) if layer==self.renderlayer: surf.blit(self.turret[int(math.degrees(self.angle%math.tau)//self.ds)][scale],(tpos[0],tpos[1]-4)) def shoot(self,area,target): target.on_shoot(area, target.coords.pos, self.damage) return True def update(self, pos, area, events): ls=[] if self.hp<=1: self.hp+=0.001 if self.sleep: self.sleep-=1 for t in area.targets: length=pos.len_to(t.coords.pos) if t.team is not None and t.team!=self.p.team: if length<=self.rng: apos=t.coords.pos+t.moveoff/64 tar_ang=pos.angle_to(apos)%math.tau d=ang_d(self.angle,tar_ang) if abs(d)<=self.rspeed: self.angle=tar_ang if self.shoot(area,t): area["FX"].add(self.fx(pos*64+Vector.VectorX(32+32*math.cos(self.angle),24-32*math.sin(self.angle)),t.coords.pos*64+t.moveoff,self.angle,pos.len_to(apos)*64-32)) elif d<0: self.angle+=self.rspeed else: self.angle-=self.rspeed self.angle%=math.tau break else: ls.append(length) else: self.sleep=60 if not ls else min(ls)*5 def on_shoot(self,area,pos,power): self.hp-=power if self.hp<=0: self.explode(area,pos,2) @property def team(self): return self.p.team
class GunTurret2(GunTurret): rspeed = 0.12 fire_rate = 4 turret = Img.lotsrots(Img.imgx("War/GunTurret2"), 1) rng = 8