Пример #1
0
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)
Пример #2
0
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
Пример #3
0
class GunTurret2(GunTurret):
    rspeed = 0.12
    fire_rate = 4
    turret = Img.lotsrots(Img.imgx("War/GunTurret2"), 1)
    rng = 8