def __makeDoobers(self): # Generate a handful of suits that we can see the Boss Cog # promoting as we come in. These shouldn't really need to be # true DistributedSuits, but I tried to make just a Suit by # itself and it just doesn't work. It doesn't do any real # harm to make DistributedSuits, anyway. self.__resetDoobers() # 8 suits, 4 on each side. for i in range(8): suit = DistributedSuitAI.DistributedSuitAI(self.air, None) # Choose a random level for each new suit. level = random.randrange(len(SuitDNA.suitsPerLevel)) # And a random type to match the level. suit.dna = SuitDNA.SuitDNA() suit.dna.newSuitRandom(level = level, dept = self.dna.dept) suit.setLevel(level) suit.generateWithRequired(self.zoneId) self.doobers.append(suit) self.__sendDooberIds()
def _DistributedSellbotBossAI__makeDoobers(self): self._DistributedSellbotBossAI__resetDoobers() for i in range(8): suit = DistributedSuitAI.DistributedSuitAI(self.air, None) level = random.randrange(len(SuitDNA.suitsPerLevel)) suit.dna = SuitDNA.SuitDNA() suit.dna.newSuitRandom(level=level, dept=self.dna.dept) suit.setLevel(level) suit.generateWithRequired(self.zoneId) self.doobers.append(suit) self._DistributedSellbotBossAI__sendDooberIds()
def createNewSuit(self, blockNumbers, streetPoints, toonBlockTakeover=None, cogdoTakeover=None, minPathLen=None, maxPathLen=None, buildingHeight=None, suitLevel=None, suitType=None, suitTrack=None, suitName=None, skelecog=None, revives=None): startPoint = None blockNumber = None if self.notify.getDebug(): self.notify.debug('Choosing origin from %d+%d possibles.' % (len(streetPoints), len(blockNumbers))) while startPoint == None and len(blockNumbers) > 0: bn = random.choice(blockNumbers) blockNumbers.remove(bn) if self.buildingSideDoors.has_key(bn): for doorPoint in self.buildingSideDoors[bn]: points = self.dnaStore.getAdjacentPoints(doorPoint) i = points.getNumPoints() - 1 while blockNumber == None and i >= 0: pi = points.getPointIndex(i) p = self.pointIndexes[pi] i -= 1 startTime = SuitTimings.fromSuitBuilding startTime += self.dnaStore.getSuitEdgeTravelTime( doorPoint.getIndex(), pi, self.suitWalkSpeed) if not self.pointCollision(p, doorPoint, startTime): startTime = SuitTimings.fromSuitBuilding startPoint = doorPoint blockNumber = bn while startPoint == None and len(streetPoints) > 0: p = random.choice(streetPoints) streetPoints.remove(p) if not self.pointCollision(p, None, SuitTimings.fromSky): startPoint = p startTime = SuitTimings.fromSky continue if startPoint == None: print 'DSP failed to create a new suit! REASON: startPoint = None' return None newSuit = DistributedSuitAI.DistributedSuitAI(simbase.air, self) newSuit.startPoint = startPoint if blockNumber != None: newSuit.buildingSuit = 1 if suitTrack == None: suitTrack = self.buildingMgr.getBuildingTrack(blockNumber) else: newSuit.flyInSuit = 1 newSuit.attemptingTakeover = self.newSuitShouldAttemptTakeover() if newSuit.attemptingTakeover: if suitTrack == None and len(self.pendingBuildingTracks) > 0: suitTrack = self.pendingBuildingTracks[0] del self.pendingBuildingTracks[0] self.pendingBuildingTracks.append(suitTrack) if buildingHeight == None and len( self.pendingBuildingHeights) > 0: buildingHeight = self.pendingBuildingHeights[0] del self.pendingBuildingHeights[0] self.pendingBuildingHeights.append(buildingHeight) if suitName == None: (suitName, skelecog, v2, waiter) = self.air.suitInvasionManager.getInvadingCog() if suitName == None: suitName = self.defaultSuitName if suitType == None and suitName != None: suitType = SuitDNA.getSuitType(suitName) suitTrack = SuitDNA.getSuitDept(suitName) if suitLevel == None and buildingHeight != None: suitLevel = self.chooseSuitLevel( self.SuitHoodInfo[self.hoodInfoIdx][self.SUIT_HOOD_INFO_LVL], buildingHeight) (suitLevel, suitType, suitTrack) = self.pickLevelTypeAndTrack(suitLevel, suitType, suitTrack) newSuit.setupSuitDNA(suitLevel, suitType, suitTrack) newSuit.buildingHeight = buildingHeight gotDestination = self.chooseDestination( newSuit, startTime, toonBlockTakeover=toonBlockTakeover, cogdoTakeover=cogdoTakeover, minPathLen=minPathLen, maxPathLen=maxPathLen) if not gotDestination: self.notify.debug("Couldn't get a destination in %d!" % self.zoneId) newSuit.doNotDeallocateChannel = None newSuit.delete() print 'DSP failed to create a new suit! REASON: gotDestination = None' return None newSuit.initializePath() self.zoneChange(newSuit, None, newSuit.zoneId) if skelecog: newSuit.setSkelecog(skelecog) newSuit.generateWithRequired(newSuit.zoneId) if v2: revives = 1 if revives: newSuit.b_setSkeleRevives(revives) newSuit.d_setSPDoId(self.doId) newSuit.moveToNextLeg(None) self.suitList.append(newSuit) if newSuit.flyInSuit: self.numFlyInSuits += 1 if newSuit.buildingSuit: self.numBuildingSuits += 1 if newSuit.attemptingTakeover: self.numAttemptingTakeover += 1 return newSuit
def createNewSuit(self, blockNumbers, streetPoints, toonBlockTakeover = None, cogdoTakeover = None, minPathLen = None, maxPathLen = None, buildingHeight = None, suitLevel = None, suitType = None, suitTrack = None, suitName = None, specialSuit = 0): startPoint = None blockNumber = None if self.notify.getDebug(): self.notify.debug('Choosing origin from %d+%d possibles.' % (len(streetPoints), len(blockNumbers))) while startPoint == None and len(blockNumbers) > 0: bn = random.choice(blockNumbers) blockNumbers.remove(bn) if self.buildingSideDoors.has_key(bn): for doorPoint in self.buildingSideDoors[bn]: points = self.dnaData.suitGraph.getAdjacentPoints(doorPoint) for p in points: startTime = SuitTimings.fromSuitBuilding startTime += self.dnaData.suitGraph.getSuitEdgeTravelTime(doorPoint, p, self.suitWalkSpeed) if not self.pointCollision(p, doorPoint, startTime): startTime = SuitTimings.fromSuitBuilding startPoint = doorPoint blockNumber = bn break while startPoint == None and len(streetPoints) > 0: p = random.choice(streetPoints) streetPoints.remove(p) if not self.pointCollision(p, None, SuitTimings.fromSky): startPoint = p startTime = SuitTimings.fromSky if startPoint == None: return newSuit = DistributedSuitAI.DistributedSuitAI(simbase.air, self) newSuit.startPoint = startPoint if blockNumber != None: newSuit.buildingSuit = 1 if suitTrack == None: suitTrack = self.buildingMgr.getBuildingTrack(blockNumber) else: newSuit.flyInSuit = 1 newSuit.attemptingTakeover = self.newSuitShouldAttemptTakeover() if newSuit.attemptingTakeover: if suitTrack == None and len(self.pendingBuildingTracks) > 0: suitTrack = self.pendingBuildingTracks[0] del self.pendingBuildingTracks[0] self.pendingBuildingTracks.append(suitTrack) if buildingHeight == None and len(self.pendingBuildingHeights) > 0: buildingHeight = self.pendingBuildingHeights[0] del self.pendingBuildingHeights[0] self.pendingBuildingHeights.append(buildingHeight) if suitName == None: suitName, specialSuit = self.air.suitInvasionManager.getInvadingCog() if suitName == None: suitName = self.defaultSuitName if suitType == None and suitName != None: suitType = SuitDNA.getSuitType(suitName) suitTrack = SuitDNA.getSuitDept(suitName) if suitLevel == None and buildingHeight != None: suitLevel = self.chooseSuitLevel(self.SuitHoodInfo[self.hoodInfoIdx][self.SUIT_HOOD_INFO_LVL], buildingHeight) suitLevel, suitType, suitTrack = self.pickLevelTypeAndTrack(suitLevel, suitType, suitTrack) newSuit.setupSuitDNA(suitLevel, suitType, suitTrack) newSuit.buildingHeight = buildingHeight gotDestination = self.chooseDestination(newSuit, startTime, toonBlockTakeover=toonBlockTakeover, cogdoTakeover=cogdoTakeover, minPathLen=minPathLen, maxPathLen=maxPathLen) if not gotDestination: self.notify.debug("Couldn't get a destination in %d!" % self.zoneId) newSuit.doNotDeallocateChannel = None newSuit.delete() return newSuit.initializePath() self.zoneChange(newSuit, None, newSuit.zoneId) # Determine if we are spawning a special type of suit. 1 is Skelecog, 2 is v2.0. if specialSuit == 1: newSuit.setSkelecog(1) elif specialSuit == 2: newSuit.setSkeleRevives(1) newSuit.generateWithRequired(newSuit.zoneId) newSuit.moveToNextLeg(None) self.suitList.append(newSuit) if newSuit.flyInSuit: self.numFlyInSuits += 1 if newSuit.buildingSuit: self.numBuildingSuits += 1 if newSuit.attemptingTakeover: self.numAttemptingTakeover += 1 return newSuit