Example #1
0
    def doTurn( self, game ):
        (ao,ro,ag) = Ship.doTurn(self, game)

        if self.inNebula and self.ttl%(config.fps*2)==0:
            self.loseTarget( game )

        if self.lostTarget and (self.originalTtl-self.ttl)>config.fps:
            self.launcher = None

        # detect hit
        for obj in game.objects.getWithinRadius( self, self.stats.maxRadius ):
             if obj.alive and obj.player and (not self.launcher or obj.player != self.launcher.player):
                 if self.launcher:
                     sender = self.launcher.player
                 else:
                     sender = None
                 (ao0, ro0, ag0) = obj.hit( game, utils.angleBetweenObjects( obj, self ), sender, self.weapon.stats.energyDamage, self.weapon.stats.massDamage )
                 (ao1, ro1, ag1) = self.explode( game )
                 (ao, ro, ag) = (ao+ao0+ao1, ro+ro0+ro1, ag+ag0+ag1)
                 break

        if self.alive and not (self.originalTtl-self.ttl)%self.thinkFreq:
            if isinstance( self.target, Object ):
                target = ( self.target.xp, self.target.yp )
                if not self.target.alive:
                    self.target = target
            else:
                target = self.target

        # ori
            destAngle = utils.angleBetween( (self.xp,self.yp), target )
            angle = utils.angleDiff( destAngle, self.ori )

            absAngle = fabs( angle )
            if absAngle > self.stats.maxRg*2: # *(config.fps/10): #*5:
                if angle > 0:
                    self.rg = self.stats.maxRg
                else:
                    self.rg = -1*self.stats.maxRg
            else:
                self.rg = 0

 	    self.thrust = self.stats.maxThrust
        

            if utils.distLowerThan( (self.xp,self.yp), target, self.stats.maxRadius*4 ):
                 (ao1, ro1, ag1) = self.explode( game )
                 (ao, ro, ag) = (ao+ao1, ro+ro1, ag+ag1)
             #    self.alive = False
            #     ro.append( self )
             #    ag.append( GfxExplosion( (self.xp,self.yp), self.stats.maxRadius*3 ) )
                
        if self.alive:
            if self.ttl == 0:
                self.alive = False
                ro.append( self )
            else:
                self.ttl = self.ttl - 1

        return (ao,ro,ag)
Example #2
0
    def doTurn(self, game):
        (ao, ro, ag) = Ship.doTurn(self, game)

        if self.inNebula and self.ttl % (config.fps * 2) == 0:
            self.loseTarget(game)

        if self.lostTarget and (self.originalTtl - self.ttl) > config.fps:
            self.launcher = None

        # detect hit
        for obj in game.objects.getWithinRadius(self, self.stats.maxRadius):
            if obj.alive and obj.player and (
                    not self.launcher or obj.player != self.launcher.player):
                if self.launcher:
                    sender = self.launcher.player
                else:
                    sender = None
                (ao0, ro0, ag0) = obj.hit(game,
                                          utils.angleBetweenObjects(obj, self),
                                          sender,
                                          self.weapon.stats.energyDamage,
                                          self.weapon.stats.massDamage)
                (ao1, ro1, ag1) = self.explode(game)
                (ao, ro, ag) = (ao + ao0 + ao1, ro + ro0 + ro1, ag + ag0 + ag1)
                break

        if self.alive and not (self.originalTtl - self.ttl) % self.thinkFreq:
            if isinstance(self.target, Object):
                target = (self.target.xp, self.target.yp)
                if not self.target.alive:
                    self.target = target
            else:
                target = self.target

        # ori
            destAngle = utils.angleBetween((self.xp, self.yp), target)
            angle = utils.angleDiff(destAngle, self.ori)

            absAngle = fabs(angle)
            if absAngle > self.stats.maxRg * 2:  # *(config.fps/10): #*5:
                if angle > 0:
                    self.rg = self.stats.maxRg
                else:
                    self.rg = -1 * self.stats.maxRg
            else:
                self.rg = 0

            self.thrust = self.stats.maxThrust

            if utils.distLowerThan((self.xp, self.yp), target,
                                   self.stats.maxRadius * 4):
                (ao1, ro1, ag1) = self.explode(game)
                (ao, ro, ag) = (ao + ao1, ro + ro1, ag + ag1)
            #    self.alive = False
            #     ro.append( self )
            #    ag.append( GfxExplosion( (self.xp,self.yp), self.stats.maxRadius*3 ) )

        if self.alive:
            if self.ttl == 0:
                self.alive = False
                ro.append(self)
            else:
                self.ttl = self.ttl - 1

        return (ao, ro, ag)