def _inspectSpot(self, spot = None): if spot is None: spot = NodePath('randomSpot') spot.setPos(randFloat(-20, 20), randFloat(-20, 20), 0) self.setFocus(spot) self.pet.actionFSM.request('InspectSpot', spot) return 1
def announceGenerate(self): DistributedSmoothNodeAI.DistributedSmoothNodeAI.announceGenerate(self) self._hasCleanedUp = False self.setHasRequestedDelete(False) self.b_setParent(ToontownGlobals.SPHidden) self.lockedDown = 0 self.leashMode = 0 self.leashAvId = None self.leashGoal = None self.trickLogger = ServerEventBuffer.ServerEventMultiAccumulator( self.air, 'petTricksPerformed', self.doId) self.trickFailLogger = ServerEventBuffer.ServerEventMultiAccumulator( self.air, 'petTricksFailed', self.doId) self.feedLogger = ServerEventBuffer.ServerEventAccumulator( self.air, 'petFeedings', self.doId) self.scratchLogger = ServerEventBuffer.ServerEventAccumulator( self.air, 'petScratchings', self.doId) self.traits = PetTraits.PetTraits(self.traitSeed, self.safeZone) if not hasattr(self, '_beingCreatedInDB'): for i in xrange(len(self.traitList)): value = self.traitList[i] if value == 0.0: traitName = PetTraits.getTraitNames()[i] traitValue = self.traits.getTraitValue(traitName) DistributedPetAI.notify.info( "%s: initializing new trait '%s' to %s, seed=%s" % (self.doId, traitName, traitValue, self.traitSeed)) setterName = self.getSetterName(traitName, 'b_set') self.__dict__[setterName](traitValue) self.mood = PetMood.PetMood(self) if not self.active: return self.activated = 1 self.announceZoneChange(self.zoneId, ToontownGlobals.QuietZone) self.b_setParent(ToontownGlobals.SPRender) self.setPos(randFloat(-20, 20), randFloat(-20, 20), 0) self.setH(randFloat(360)) if self.initialDNA: self.setDNA(self.initialDNA) for mood, value in self.requiredMoodComponents.items(): self.mood.setComponent(mood, value, announce=0) self.requiredMoodComponents = {} self.brain = PetBrain.PetBrain(self) self.mover = PetMoverAI(self) self.enterPetLook() self.actionFSM = PetActionFSM.PetActionFSM(self) self.teleportIn() self.handleMoodChange(distribute=0) taskMgr.doMethodLater( simbase.petMovePeriod * random.random(), self.move, self.getMoveTaskName()) self.startPosHprBroadcast() self.accept(PetObserve.getEventName(self.zoneId), self.brain.observe) self.accept(self.mood.getMoodChangeEvent(), self.handleMoodChange) self.mood.start() self.brain.start()
def initializeGridLines(self): # Grid Lines self.gridColor = VBase4(0.4 + randFloat(0.4), 0.4 + randFloat(0.4), 0.4 + randFloat(0.4), 1) # A Dark version of the grid color color = self.gridColor * 0.5 color.setW(1) self.lines = self.attachNewNode('gridLines') self.minorLines = LineNodePath(self.lines) self.minorLines.lineNode.setName('minorLines') self.minorLines.setColor(color) self.minorLines.setThickness(1) self.majorLines = LineNodePath(self.lines) self.majorLines.lineNode.setName('majorLines') self.majorLines.setColor(color) self.majorLines.setThickness(5) self.centerLines = LineNodePath(self.lines) self.centerLines.lineNode.setName('centerLines') self.centerLines.setColor(VBase4(1, 0, 0, 0)) self.centerLines.setThickness(3) # Load up grid parts to initialize grid object # Polygon used to mark grid plane # self.gridBack = loader.loadModel('models/misc/gridBack') # self.gridBack.reparentTo(self) # self.gridBack.setColor(0.2, 0.2, 0.2, 0.5) self.cellLabelParent = None self.markerParent = None self.haveGridLines = 1
def announceGenerate(self): DistributedSmoothNodeAI.DistributedSmoothNodeAI.announceGenerate(self) self._hasCleanedUp = False self.setHasRequestedDelete(False) self.b_setParent(ToontownGlobals.SPHidden) self.lockedDown = 0 self.leashMode = 0 self.leashAvId = None self.leashGoal = None self.trickLogger = ServerEventBuffer.ServerEventMultiAccumulator( self.air, 'petTricksPerformed', self.doId) self.trickFailLogger = ServerEventBuffer.ServerEventMultiAccumulator( self.air, 'petTricksFailed', self.doId) self.feedLogger = ServerEventBuffer.ServerEventAccumulator( self.air, 'petFeedings', self.doId) self.scratchLogger = ServerEventBuffer.ServerEventAccumulator( self.air, 'petScratchings', self.doId) self.traits = PetTraits.PetTraits(self.traitSeed, self.safeZone) if not hasattr(self, '_beingCreatedInDB'): for i in xrange(len(self.traitList)): value = self.traitList[i] if value == 0.0: traitName = PetTraits.getTraitNames()[i] traitValue = self.traits.getTraitValue(traitName) DistributedPetAI.notify.info( "%s: initializing new trait '%s' to %s, seed=%s" % (self.doId, traitName, traitValue, self.traitSeed)) setterName = self.getSetterName(traitName, 'b_set') self.__dict__[setterName](traitValue) self.mood = PetMood.PetMood(self) if not self.active: return self.activated = 1 self.announceZoneChange(self.zoneId, ToontownGlobals.QuietZone) self.b_setParent(ToontownGlobals.SPRender) self.setPos(randFloat(-20, 20), randFloat(-20, 20), 0) self.setH(randFloat(360)) if self.initialDNA: self.setDNA(self.initialDNA) for mood, value in self.requiredMoodComponents.items(): self.mood.setComponent(mood, value, announce=0) self.requiredMoodComponents = {} self.brain = PetBrain.PetBrain(self) self.mover = Mover.Mover(self) self.lockMover = Mover.Mover(self) self.createImpulses() self.enterPetLook() self.actionFSM = PetActionFSM.PetActionFSM(self) self.teleportIn() self.handleMoodChange(distribute=0) taskMgr.doMethodLater(simbase.petMovePeriod * random.random(), self.move, self.getMoveTaskName()) self.startPosHprBroadcast() self.accept(PetObserve.getEventName(self.zoneId), self.brain.observe) self.accept(self.mood.getMoodChangeEvent(), self.handleMoodChange) self.mood.start() self.brain.start() return
def _inspectSpot(self, spot=None): if spot is None: spot = NodePath('randomSpot') spot.setPos(randFloat(-20, 20), randFloat(-20, 20), 0) self.setFocus(spot) self.pet.actionFSM.request('InspectSpot', spot) return 1
def startPosHprBroadcast(self, period=0.20000000000000001, stagger=0, type=None): if self.cnode == None: self.initializeCnode() BT = DistributedSmoothNodeBase.BroadcastTypes if type is None: type = BT.FULL self.broadcastType = type broadcastFuncs = { BT.FULL: self.cnode.broadcastPosHprFull, BT.XYH: self.cnode.broadcastPosHprXyh, BT.XY: self.cnode.broadcastPosHprXy } self.d_broadcastPosHpr = broadcastFuncs[self.broadcastType] taskName = self.getPosHprBroadcastTaskName() self.cnode.initialize(self, self.dclass, self.doId) self.setPosHprBroadcastPeriod(period) self.b_clearSmoothing() self.cnode.sendEverything() taskMgr.remove(taskName) delay = 0.0 if stagger: delay = randFloat(period) if self.wantSmoothPosBroadcastTask(): taskMgr.doMethodLater( self._DistributedSmoothNodeBase__broadcastPeriod + delay, self._posHprBroadcast, taskName)
def __init__(self, cr): DistributedSmoothNode.DistributedSmoothNode.__init__(self, cr) FSM.FSM.__init__(self, 'DistributedVehicle') Kart.Kart.__init__(self) if base.config.GetBool('want-racer', 0) == 1: DistributedVehicle.proRacer = 1 DistributedVehicle.accelerationMult = 35 DistributedVehicle.accelerationBase = 30 self.speedometer = None self.speedGauge = None self.leanAmount = 0 self.leftHeld = 0 self.stopped = False self.rightHeld = 0 self.canRace = False self.groundType = 'gravel' self.offGround = 0 self.turbo = False self.ownerId = 0 self.cameraTrack = None self.curSpeed = 0 self.acceleration = 0 self.imHitMult = 1 self.skidding = False self.hittingWall = 0 base.kart = self self.wipeOut = None self.gagMovie = None self.spinAnim = None self.wrongWay = False self.wallCollideTrack = None self.wheelMaxTurn = 1.0 self.wheelMinTurn = 0.15 self.speedMaxTurn = 90 self.speedMinTurn = 300 self.wheelTurnTime = 0.6 self.wheelReturnTime = 0.3 self.wheelFightTime = 0.2 self.wheelPosition = 0.0 self.outPutCounter = 0 self.proCameraHeading = 0 self.proCameraDummyNode = None self.cameraArmNode = None self.armSwingSpeedPerp = 0.2 self.armSwingSpeedPara = 0.7 self.cameraTightener = 3.0 self.cameraArmBase = 0 self.cameraArmExtend = 20 self.pieCount = 0 self.numPieChunks = 6 self.pieSlideSpeed = [] for piece in range(self.numPieChunks): self.pieSlideSpeed.append(randFloat(0.0, 0.2)) self.wantSmoke = ConfigVariableBool('want-kart-smoke', 1).getValue() self.wantSparks = ConfigVariableBool('want-kart-sparks', 1).getValue() self.__loadTextures() return
def __init__(self, cr): DistributedSmoothNode.DistributedSmoothNode.__init__(self, cr) FSM.FSM.__init__(self, 'DistributedVehicle') Kart.Kart.__init__(self) if base.config.GetBool('want-racer', 0) == 1: DistributedVehicle.proRacer = 1 DistributedVehicle.accelerationMult = 35 DistributedVehicle.accelerationBase = 30 self.speedometer = None self.speedGauge = None self.leanAmount = 0 self.leftHeld = 0 self.stopped = False self.rightHeld = 0 self.canRace = False self.groundType = 'gravel' self.offGround = 0 self.turbo = False self.ownerId = 0 self.cameraTrack = None self.curSpeed = 0 self.acceleration = 0 self.imHitMult = 1 self.skidding = False self.hittingWall = 0 base.kart = self self.wipeOut = None self.gagMovie = None self.spinAnim = None self.wrongWay = False self.wallCollideTrack = None self.wheelMaxTurn = 1.0 self.wheelMinTurn = 0.15 self.speedMaxTurn = 90 self.speedMinTurn = 300 self.wheelTurnTime = 0.6 self.wheelReturnTime = 0.3 self.wheelFightTime = 0.2 self.wheelPosition = 0.0 self.outPutCounter = 0 self.proCameraHeading = 0 self.proCameraDummyNode = None self.cameraArmNode = None self.armSwingSpeedPerp = 0.2 self.armSwingSpeedPara = 0.7 self.cameraTightener = 3.0 self.cameraArmBase = 0 self.cameraArmExtend = 20 self.pieCount = 0 self.numPieChunks = 6 self.pieSlideSpeed = [] for piece in xrange(self.numPieChunks): self.pieSlideSpeed.append(randFloat(0.0, 0.2)) self.wantSmoke = ConfigVariableBool('want-kart-smoke', 1).getValue() self.wantSparks = ConfigVariableBool('want-kart-sparks', 1).getValue() self.__loadTextures() return
def __slidePies(self, optional = None): dt = globalClock.getDt() for piece in xrange(self.numPieChunks): self.pieSlideSpeed[piece] += randFloat(0.0, 0.25 * dt) pieSpeed = self.pieSlideSpeed[piece] * dt self.piePieces[piece].setPos(self.piePieces[piece].getPos()[0], self.piePieces[piece].getPos()[1] - pieSpeed, self.piePieces[piece].getPos()[2] - pieSpeed) if self.pieCount == 0: return Task.done else: return Task.cont
def __slidePies(self, optional = None): dt = globalClock.getDt() for piece in range(self.numPieChunks): self.pieSlideSpeed[piece] += randFloat(0.0, 0.25 * dt) pieSpeed = self.pieSlideSpeed[piece] * dt self.piePieces[piece].setPos(self.piePieces[piece].getPos()[0], self.piePieces[piece].getPos()[1] - pieSpeed, self.piePieces[piece].getPos()[2] - pieSpeed) if self.pieCount == 0: return Task.done else: return Task.cont
def _process(self, dt): self.targetMoveCountdown -= dt if self.targetMoveCountdown <= 0.0: distance = normalDistrib(3.0, 30.0) heading = normalDistrib(-(90 + 45), 90 + 45) if self.gotCollision: self.gotCollision = False heading = heading + 180 target = self.getTarget() target.setPos(self.getNodePath().getPos()) target.setH(target, heading) target.setY(target, distance) duration = distance / self.mover.getFwdSpeed() self.targetMoveCountdown = duration * randFloat(1.2, 3.0) CPetChase.process(self, dt)
def showPieces(self): xRange = 0.3 for piece in self.piePieces: piece.setPos(randFloat(-xRange, xRange), randFloat(-0.1, 3.5), randFloat(-0.9, 0.9)) piece.setScale(randFloat(1.1, 2.0), 1, randFloat(1.1, 2.0)) piece.show() xRange += 2.5 / self.numPieChunks for piece in xrange(self.numPieChunks): self.pieSlideSpeed[piece] = randFloat(0.0, 0.2)
def startPosHprBroadcast(self, period=.2, stagger=0, type=None): if self.cnode == None: self.initializeCnode() BT = DistributedSmoothNodeBase.BroadcastTypes if type is None: type = BT.FULL # set the broadcast type self.broadcastType = type broadcastFuncs = { BT.FULL: self.cnode.broadcastPosHprFull, BT.XYH: self.cnode.broadcastPosHprXyh, BT.XY: self.cnode.broadcastPosHprXy, } # this comment is here so it will show up in a grep for 'def d_broadcastPosHpr' self.d_broadcastPosHpr = broadcastFuncs[self.broadcastType] # Set stagger to non-zero to randomly delay the initial task execution # over 'period' seconds, to spread out task processing over time # when a large number of SmoothNodes are created simultaneously. taskName = self.getPosHprBroadcastTaskName() # Set up telemetry optimization variables self.cnode.initialize(self, self.dclass, self.doId) self.setPosHprBroadcastPeriod(period) # Broadcast our initial position self.b_clearSmoothing() self.cnode.sendEverything() # remove any old tasks taskMgr.remove(taskName) # spawn the new task delay = 0. if stagger: delay = randFloat(period) if self.wantSmoothPosBroadcastTask(): taskMgr.doMethodLater(self.__broadcastPeriod + delay, self._posHprBroadcast, taskName)
def showPieces(self): xRange = 0.3 for piece in self.piePieces: piece.setPos(randFloat(-xRange, xRange), randFloat(-0.1, 3.5), randFloat(-0.9, 0.9)) piece.setScale(randFloat(1.1, 2.0), 1, randFloat(1.1, 2.0)) piece.show() xRange += 2.5 / self.numPieChunks for piece in range(self.numPieChunks): self.pieSlideSpeed[piece] = randFloat(0.0, 0.2)
def _process(self, dt): self.targetMoveCountdown -= dt if self.targetMoveCountdown <= 0.: distance = normalDistrib(3., 30.) heading = normalDistrib(-(90 + 45), (90 + 45)) # if we bumped into something, go in the opposite direction # from where we were about to go if self.gotCollision: self.gotCollision = False heading = heading + 180 target = self.getTarget() target.setPos(self.getNodePath().getPos()) target.setH(target, heading) target.setY(target, distance) duration = distance / self.mover.getFwdSpeed() self.targetMoveCountdown = duration * randFloat(1.2, 3.) CPetChase.process(self, dt)
def uniform(min, max, rng): return randFloat(min, max, rng.random)