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)
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)