def __init__(self, fulcrum, terrain): TerrainCamera.__init__(self) self.terrain = terrain self.fulcrum = fulcrum # in behind Ralph regardless of ralph's movement. self.camNode.reparentTo(fulcrum) # How far should the camera be from Ralph self.cameraDistance = 30 # Initialize the pitch of the camera self.cameraPitch = 10 self.focus = self.fulcrum.attachNewNode("focus") self.maxDistance = 500.0 self.minDistance = 2 self.maxPitch = 80 self.minPitch = -70 # We will detect the height of the terrain by creating a collision # ray and casting it downward toward the terrain. One ray will # start above ralph's head. # A ray may hit the terrain, or it may hit a rock or a tree. If it # hits the terrain, we can detect the height. If it hits anything # else, we rule that the move is illegal. self.cTrav = CollisionTraverser() self.cameraRay = CollisionSegment(self.fulcrum.getPos(), (0, 5, 5)) self.cameraCol = CollisionNode('cameraRay') self.cameraCol.addSolid(self.cameraRay) self.cameraCol.setFromCollideMask(BitMask32.bit(0)) self.cameraCol.setIntoCollideMask(BitMask32.allOff()) self.cameraColNp = self.fulcrum.attachNewNode(self.cameraCol) self.cameraColHandler = CollisionHandlerQueue() self.cTrav.addCollider(self.cameraColNp, self.cameraColHandler)
def initializeSmartCameraCollisions(self): if self.initialized: return self.ccTrav = CollisionTraverser('LocalAvatar.ccTrav') self.ccLine = CollisionSegment(0.0, 0.0, 0.0, 1.0, 0.0, 0.0) self.ccLineNode = CollisionNode('ccLineNode') self.ccLineNode.addSolid(self.ccLine) self.ccLineNodePath = base.localAvatar.attachNewNode(self.ccLineNode) self.ccLineBitMask = CIGlobals.CameraBitmask self.ccLineNode.setFromCollideMask(self.ccLineBitMask) self.ccLineNode.setIntoCollideMask(BitMask32.allOff()) self.camCollisionQueue = CollisionHandlerQueue() self.ccTrav.addCollider(self.ccLineNodePath, self.camCollisionQueue) self.ccSphere = CollisionSphere(0, 0, 0, 1) self.ccSphereNode = CollisionNode('ccSphereNode') self.ccSphereNode.addSolid(self.ccSphere) self.ccSphereNodePath = base.camera.attachNewNode(self.ccSphereNode) self.ccSphereNode.setFromCollideMask(CIGlobals.CameraBitmask) self.ccSphereNode.setIntoCollideMask(BitMask32.allOff()) self.camPusher = CollisionHandlerPusher() self.camPusher.addCollider(self.ccSphereNodePath, base.camera) self.camPusher.setCenter(base.localAvatar) self.ccPusherTrav = CollisionTraverser('LocalAvatar.ccPusherTrav') self.ccSphere2 = self.ccSphere self.ccSphereNode2 = CollisionNode('ccSphereNode2') self.ccSphereNode2.addSolid(self.ccSphere2) self.ccSphereNodePath2 = base.camera.attachNewNode(self.ccSphereNode2) self.ccSphereNode2.setFromCollideMask(CIGlobals.CameraBitmask) self.ccSphereNode2.setIntoCollideMask(BitMask32.allOff()) self.camPusher2 = CollisionHandlerPusher() self.ccPusherTrav.addCollider(self.ccSphereNodePath2, self.camPusher2) self.camPusher2.addCollider(self.ccSphereNodePath2, base.camera) self.camPusher2.setCenter(base.localAvatar) self.camFloorRayNode = base.localAvatar.attachNewNode('camFloorRayNode') self.ccRay = CollisionRay(0.0, 0.0, 0.0, 0.0, 0.0, -1.0) self.ccRayNode = CollisionNode('ccRayNode') self.ccRayNode.addSolid(self.ccRay) self.ccRayNodePath = self.camFloorRayNode.attachNewNode(self.ccRayNode) self.ccRayBitMask = CIGlobals.FloorBitmask self.ccRayNode.setFromCollideMask(self.ccRayBitMask) self.ccRayNode.setIntoCollideMask(BitMask32.allOff()) self.ccTravFloor = CollisionTraverser('LocalAvatar.ccTravFloor') self.camFloorCollisionQueue = CollisionHandlerQueue() self.ccTravFloor.addCollider(self.ccRayNodePath, self.camFloorCollisionQueue) self.ccTravOnFloor = CollisionTraverser('LocalAvatar.ccTravOnFloor') self.ccRay2 = CollisionRay(0.0, 0.0, 0.0, 0.0, 0.0, -1.0) self.ccRay2Node = CollisionNode('ccRay2Node') self.ccRay2Node.addSolid(self.ccRay2) self.ccRay2NodePath = self.camFloorRayNode.attachNewNode(self.ccRay2Node) self.ccRay2BitMask = CIGlobals.FloorBitmask self.ccRay2Node.setFromCollideMask(self.ccRay2BitMask) self.ccRay2Node.setIntoCollideMask(BitMask32.allOff()) self.ccRay2MoveNodePath = hidden.attachNewNode('ccRay2MoveNode') self.camFloorCollisionBroadcaster = CollisionHandlerFloor() self.camFloorCollisionBroadcaster.setInPattern('on-floor') self.camFloorCollisionBroadcaster.setOutPattern('off-floor') self.camFloorCollisionBroadcaster.addCollider(self.ccRay2NodePath, self.ccRay2MoveNodePath) self.cTrav.addCollider(self.ccRay2NodePath, self.camFloorCollisionBroadcaster) self.initialized = True
def setup_ray(node, traverser, bitmask, point_a=(0, 0, 1), point_b=(0, 0, 0)): ray = CollisionSegment(point_a, point_b) col = CollisionNode(node.getName() + "-ray") col.add_solid(ray) col.set_from_collide_mask(bitmask) col.set_into_collide_mask(CollideMask.all_off()) col_node = node.attach_new_node(col) handler = CollisionHandlerQueue() traverser.add_collider(col_node, handler) return {"collider": col, "ray": ray, "handler": handler, "node": col_node}
def attachCollisionSegment(self, name, ax, ay, az, bx, by, bz, fromCollide, intoCollide): from panda3d.core import CollisionSegment from panda3d.core import CollisionNode coll = CollisionSegment(ax, ay, az, bx, by, bz) collNode = CollisionNode(name) collNode.addSolid(coll) collNode.setFromCollideMask(fromCollide) collNode.setIntoCollideMask(intoCollide) collNodePath = self.attachNewNode(collNode) return collNodePath
def init_entity(self, filter_name, entity): camera = entity[ThirdPersonCamera] camera_col = entity[CollisionZoom] w = camera_col.body_width / 2 segs = ((0, 0, w), (0, 0, -w), (w, 0, 0), (-w, 0, 0)) for seg in segs: segment = CollisionSegment(seg, (0, -camera.distance, 0)) camera_col.collision.addSolid(segment) camera_col.collision.set_into_collide_mask(0) cn = camera.camera.parent.attachNewNode(camera_col.collision) camera_col.traverser.addCollider(cn, camera_col.queue)
def __init__(self, pos): Enemy.__init__(self, pos, "Models/Misc/simpleEnemy", { "stand" : "Models/Misc/simpleEnemy-stand", "walk" : "Models/Misc/simpleEnemy-walk", "attack" : "Models/Misc/simpleEnemy-attack", "die" : "Models/Misc/simpleEnemy-die", "spawn" : "Models/Misc/simpleEnemy-spawn" }, 3.0, 7.0, "walkingEnemy") self.attackDistance = 0.75 self.attackDelay = 0.3 self.attackDelayTimer = 0 self.attackWaitTimer = 0 self.acceleration = 100.0 mask = BitMask32() mask.setBit(2) self.collider.node().setIntoCollideMask(mask) self.attackSegment = CollisionSegment(0, 0, 0, 1, 0, 0) segmentNode = CollisionNode("enemyAttackSegment") segmentNode.addSolid(self.attackSegment) mask = BitMask32() mask.setBit(1) segmentNode.setFromCollideMask(mask) mask = BitMask32() segmentNode.setIntoCollideMask(mask) self.attackSegmentNodePath = render.attachNewNode(segmentNode) self.segmentQueue = CollisionHandlerQueue() base.cTrav.addCollider(self.attackSegmentNodePath, self.segmentQueue) self.attackDamage = -1 self.deathSound = loader.loadSfx("Sounds/enemyDie.ogg") self.attackSound = loader.loadSfx("Sounds/enemyAttack.ogg") self.yVector = Vec2(0, 1) self.actor.play("spawn")
def init_entity(self, filter_name, entity): camera = entity[Camera] center = entity[ObjectCentricCameraMode] zoom = entity[CollisionZoom] w = zoom.body_width / 2 segs = ((0, 0, w), (0, 0, -w), (w, 0, 0), (-w, 0, 0)) for seg in segs: segment = CollisionSegment(seg,(0, -center.distance, 0)) zoom.collision.add_solid(segment) zoom.collision.set_into_collide_mask(0) cn = camera.camera.parent.attach_new_node(zoom.collision) zoom.traverser.add_collider(cn, zoom.queue)
def __init__(self, charId, charNr, controls): FSM.__init__(self, "FSM-Player{}".format(charNr)) self.charId = charId charPath = "characters/character{}/".format(charNr) self.character = Actor( charPath + "char", { "Idle": charPath + "idle", "Walk": charPath + "walk", "Walk_back": charPath + "walk_back", "Punch_l": charPath + "punch_l", "Punch_r": charPath + "punch_r", "Kick_l": charPath + "kick_l", "Kick_r": charPath + "kick_r", "Hit": charPath + "hit", "Defend": charPath + "defend", "Defeated": charPath + "defeated" }) self.character.reparentTo(render) self.character.hide() self.walkSpeed = 2.0 if controls == "p1": self.character.setH(90) self.leftButton = KeyboardButton.asciiKey("d") self.rightButton = KeyboardButton.asciiKey("f") self.punchLButton = KeyboardButton.asciiKey("q") self.punchRButton = KeyboardButton.asciiKey("w") self.kickLButton = KeyboardButton.asciiKey("a") self.kickRButton = KeyboardButton.asciiKey("s") self.defendButton = KeyboardButton.asciiKey("e") elif controls == "p2": self.character.setH(-90) self.leftButton = KeyboardButton.right() self.rightButton = KeyboardButton.left() self.punchLButton = KeyboardButton.asciiKey("i") self.punchRButton = KeyboardButton.asciiKey("o") self.kickLButton = KeyboardButton.asciiKey("k") self.kickRButton = KeyboardButton.asciiKey("l") self.defendButton = KeyboardButton.asciiKey("p") characterSphere = CollisionSphere(0, 0, 1.0, 0.5) self.collisionNodeName = "character{}Collision".format(charId) characterColNode = CollisionNode(self.collisionNodeName) characterColNode.addSolid(characterSphere) self.characterCollision = self.character.attachNewNode( characterColNode) base.pusher.addCollider(self.characterCollision, self.character) base.cTrav.addCollider(self.characterCollision, base.pusher) characterHitRay = CollisionSegment(0, -0.5, 1.0, 0, -0.8, 1.0) characterColNode.addSolid(characterHitRay) self.getPos = self.character.getPos self.getX = self.character.getX
def startPhysics(self): #self.actorNode = ActorNode("playerPhysicsControler") #base.physicsMgr.attachPhysicalNode(self.actorNode) #self.actorNode.getPhysicsObject().setMass(self.player_mass) #self.mainNode = render.attachNewNode(self.actorNode) self.mainNode = render.attachNewNode("CharacterColliders") self.reparentTo(self.mainNode) charCollisions = self.mainNode.attachNewNode( CollisionNode(self.char_collision_name)) #charCollisions.node().addSolid(CollisionSphere(0, 0, self.player_height/4.0, self.player_height/4.0)) #charCollisions.node().addSolid(CollisionSphere(0, 0, self.player_height/4.0*3.05, self.player_height/4.0)) charCollisions.node().addSolid( CollisionSphere(0, 0, self.player_height / 2.0, self.player_height / 4.0)) charCollisions.node().setIntoCollideMask(BitMask32(0x80)) # 1000 0000 if self.show_collisions: charCollisions.show() self.pusher.addCollider(charCollisions, self.mainNode) base.cTrav.addCollider(charCollisions, self.pusher) charFFootCollisions = self.attachNewNode(CollisionNode("floor_ray")) charFFootCollisions.node().addSolid(CollisionRay(0, 0, 0.5, 0, 0, -1)) #charFFootCollisions.node().addSolid(CollisionSegment((0, 0, 0.2), (0, 0, -1))) charFFootCollisions.node().setIntoCollideMask(BitMask32.allOff()) charFFootCollisions.node().setFromCollideMask( BitMask32(0x7f)) # 0111 1111 if self.show_collisions: charFFootCollisions.show() self.floor_handler = CollisionHandlerFloor() self.floor_handler.addCollider(charFFootCollisions, self.mainNode) #self.floor_handler.setOffset(0) self.floor_handler.setMaxVelocity(5) base.cTrav.addCollider(charFFootCollisions, self.floor_handler) self.accept("{}-in".format(self.char_collision_name), self.checkCharCollisions) self.raytest_segment = CollisionSegment(0, 1) self.raytest_np = render.attachNewNode(CollisionNode("testRay")) self.raytest_np.node().addSolid(self.raytest_segment) self.raytest_np.node().setIntoCollideMask(BitMask32.allOff()) self.raytest_np.node().setFromCollideMask(BitMask32(0x7f)) # 0111 1111 if self.show_collisions: self.raytest_np.show() self.raytest_queue = CollisionHandlerQueue() self.rayCTrav.addCollider(self.raytest_np, self.raytest_queue)
def ray(self, name, bitmask, point_a=(0, 0, 1), point_b=(0, 0, 0)): shape = CollisionSegment(point_a, point_b) col = CollisionNode(self.node.getName() + "-ray-" + name) col.add_solid(shape) col.set_from_collide_mask(bitmask) col.set_into_collide_mask(CollideMask.all_off()) col_node = self.node.attach_new_node(col) handler = CollisionHandlerQueue() self.traverser.add_collider(col_node, handler) return { "collider": col, "shape": shape, "handler": handler, "node": col_node }
def __setup_collision(self): self.cTrav = CollisionTraverser('cameraTraverser') self.__camSeg = CollisionSegment((0, 0, self.__camRef), (0, 0, 0)) cameraCol = CollisionNode('cameraSeg') cameraCol.addSolid(self.__camSeg) cameraCol.setFromCollideMask(BitMask32.bit(0)) cameraCol.setIntoCollideMask(BitMask32.allOff()) cameraColNp = self.ponto.attachNewNode(cameraCol) self.__camColHandler = CollisionHandlerQueue() self.cTrav.addCollider(cameraColNp, self.__camColHandler)
def __endFireWater(self): if self.aimStart == None: return if not self.state == 'Controlled': return if not self.avId == localAvatar.doId: return taskMgr.remove(self.waterPowerTaskName) messenger.send('wakeup') self.aimStart = None origin = self.nozzle.getPos(render) target = self.boss.getPos(render) angle = deg2Rad(self.waterPitcherNode.getH() + 90) x = math.cos(angle) y = math.sin(angle) fireVector = Point3(x, y, 0) if self.power < 0.001: self.power = 0.001 self.lastPowerFired = self.power fireVector *= self.fireLength * self.power target = origin + fireVector segment = CollisionSegment(origin[0], origin[1], origin[2], target[0], target[1], target[2]) fromObject = render.attachNewNode(CollisionNode('pitcherColNode')) fromObject.node().addSolid(segment) fromObject.node().setFromCollideMask(ToontownGlobals.PieBitmask | ToontownGlobals.CameraBitmask | ToontownGlobals.FloorBitmask) fromObject.node().setIntoCollideMask(BitMask32.allOff()) queue = CollisionHandlerQueue() base.cTrav.addCollider(fromObject, queue) base.cTrav.traverse(render) queue.sortEntries() self.hitObject = None if queue.getNumEntries(): entry = queue.getEntry(0) target = entry.getSurfacePoint(render) self.hitObject = entry.getIntoNodePath() base.cTrav.removeCollider(fromObject) fromObject.removeNode() self.d_firingWater(origin, target) self.fireWater(origin, target) self.resetPowerBar() return
def __init__(self): try: self.__initialized return except: self.__initialized = 1 NodePath.__init__(self, hidden.attachNewNode('PositionExaminer')) self.cRay = CollisionRay(0.0, 0.0, 6.0, 0.0, 0.0, -1.0) self.cRayNode = CollisionNode('cRayNode') self.cRayNode.addSolid(self.cRay) self.cRayNodePath = self.attachNewNode(self.cRayNode) self.cRayNodePath.hide() self.cRayBitMask = CIGlobals.FloorBitmask self.cRayNode.setFromCollideMask(self.cRayBitMask) self.cRayNode.setIntoCollideMask(BitMask32.allOff()) self.cSphere = CollisionSphere(0.0, 0.0, 0.0, 1.5) self.cSphereNode = CollisionNode('cSphereNode') self.cSphereNode.addSolid(self.cSphere) self.cSphereNodePath = self.attachNewNode(self.cSphereNode) self.cSphereNodePath.hide() self.cSphereBitMask = CIGlobals.WallBitmask self.cSphereNode.setFromCollideMask(self.cSphereBitMask) self.cSphereNode.setIntoCollideMask(BitMask32.allOff()) self.ccLine = CollisionSegment(0.0, 0.0, 0.0, 1.0, 0.0, 0.0) self.ccLineNode = CollisionNode('ccLineNode') self.ccLineNode.addSolid(self.ccLine) self.ccLineNodePath = self.attachNewNode(self.ccLineNode) self.ccLineNodePath.hide() self.ccLineBitMask = CIGlobals.CameraBitmask self.ccLineNode.setFromCollideMask(self.ccLineBitMask) self.ccLineNode.setIntoCollideMask(BitMask32.allOff()) self.cRayTrav = CollisionTraverser('PositionExaminer.cRayTrav') self.cRayTrav.setRespectPrevTransform(False) self.cRayQueue = CollisionHandlerQueue() self.cRayTrav.addCollider(self.cRayNodePath, self.cRayQueue) self.cSphereTrav = CollisionTraverser('PositionExaminer.cSphereTrav') self.cSphereTrav.setRespectPrevTransform(False) self.cSphereQueue = CollisionHandlerQueue() self.cSphereTrav.addCollider(self.cSphereNodePath, self.cSphereQueue) self.ccLineTrav = CollisionTraverser('PositionExaminer.ccLineTrav') self.ccLineTrav.setRespectPrevTransform(False) self.ccLineQueue = CollisionHandlerQueue() self.ccLineTrav.addCollider(self.ccLineNodePath, self.ccLineQueue)
def __init__(self, mask, damage, knockback, range=None): Weapon.__init__(self, mask, range, damage, knockback) if range is None: self.ray = CollisionRay(0, 0, 0, 0, 1, 0) else: self.ray = CollisionSegment(0, 0, 0, 1, 0, 0) rayNode = CollisionNode("playerRay") rayNode.addSolid(self.ray) rayNode.setFromCollideMask(mask) rayNode.setIntoCollideMask(0) self.rayNodePath = render.attachNewNode(rayNode) self.rayQueue = CollisionHandlerQueue() self.traverser = CollisionTraverser() self.traverser.addCollider(self.rayNodePath, self.rayQueue)
def __init__(self): FSM.__init__(self, "FSM-Golem") random.seed() self.golem = loader.loadModel("Golem") self.golem = Actor( "Golem", { "Idle": "Golem-Idle", "Walk": "Golem-Walk", "Attack": "Golem-Attack", "Destroyed": "Golem-Destroyed" }) self.golem.setBlend(frameBlend=True) golemViewSphere = CollisionSphere(0, 0, 0.5, 6) golemViewSphere.setTangible(False) golemViewColNP = self.golem.attachNewNode( CollisionNode('golemViewField')) golemViewColNP.node().addSolid(golemViewSphere) golemHitSphere = CollisionSphere(0, 0, 0.5, 1) golemHitColNP = self.golem.attachNewNode( CollisionNode('golemHitField')) golemHitColNP.node().addSolid(golemHitSphere) # a collision segment to check attacks self.attackCheckSegment = CollisionSegment(0, 0, 1, 0, -1.3, 1) self.golemAttackRay = self.golem.attachNewNode( CollisionNode("golemAttackCollision")) self.golemAttackRay.node().addSolid(self.attackCheckSegment) self.golemAttackRay.node().setIntoCollideMask(0) self.attackqueue = CollisionHandlerQueue() base.cTrav.addCollider(self.golemAttackRay, self.attackqueue) attackAnim = self.golem.actorInterval("Attack", playRate=2) self.AttackSeq = Parallel(attackAnim, Sequence(Wait(0.5), Func(self.ceckAttack))) self.lookatFloater = NodePath(PandaNode("golemTracker")) self.lookatFloater.setPos(self.golem, 0, 0, 3.4) self.lookatFloater.hide() self.lookatFloater.reparentTo(render) self.trackerObject = loader.loadModel("misc/Pointlight") self.trackerObject.setColor(0, 1, 0) self.trackerObject.setScale(0.25) self.trackerObject.reparentTo(self.lookatFloater)
def __init__(self, pos, modelName, maxHealth, maxSpeed, colliderName, size): Enemy.__init__(self, pos, modelName, maxHealth, maxSpeed, colliderName, size) self.acceleration = 100.0 self.turnRate = 200.0 self.yVector = Vec2(0, 1) self.steeringRayNPs = [] self.steeringQueue = CollisionHandlerQueue() self.state = FighterEnemy.STATE_ATTACK self.breakAwayTimer = 0 self.breakAwayMaxDuration = 5 self.evasionDuration = 2 self.evasionDurationVariability = 0.2 self.evasionTimer = 0 self.evasionDirection = (0, 0) for i in range(4): ray = CollisionSegment(0, 0, 0, 0, 1, 0) rayNode = CollisionNode("steering ray") rayNode.addSolid(ray) rayNode.setFromCollideMask(MASK_WALLS) rayNode.setIntoCollideMask(0) rayNodePath = self.actor.attachNewNode(rayNode) #rayNodePath.show() self.steeringRayNPs.append(rayNodePath) Common.framework.traverser.addCollider(rayNodePath, self.steeringQueue)
def raycast(self, origin, direction=(0, 0, 1), distance=math.inf, traverse_target=scene, ignore=list(), debug=False): self.position = origin self.look_at(self.position + direction) self._pickerNode.clearSolids() # if thickness == (0,0): if distance == math.inf: ray = CollisionRay() ray.setOrigin(Vec3(0, 0, 0)) ray.setDirection(Vec3(0, 1, 0)) else: ray = CollisionSegment(Vec3(0, 0, 0), Vec3(0, distance, 0)) self._pickerNode.addSolid(ray) if debug: self._pickerNP.show() else: self._pickerNP.hide() self._picker.traverse(traverse_target) if self._pq.get_num_entries() == 0: self.hit = Hit(hit=False) return self.hit ignore += tuple([e for e in scene.entities if not e.collision]) self._pq.sort_entries() self.entries = [ # filter out ignored entities e for e in self._pq.getEntries() if e.get_into_node_path().parent not in ignore ] if len(self.entries) == 0: self.hit = Hit(hit=False) return self.hit self.collision = self.entries[0] nP = self.collision.get_into_node_path().parent point = self.collision.get_surface_point(nP) point = Vec3(point[0], point[2], point[1]) world_point = self.collision.get_surface_point(render) world_point = Vec3(world_point[0], world_point[2], world_point[1]) hit_dist = self.distance(self.world_position, world_point) if nP.name.endswith('.egg'): nP = nP.parent self.hit = Hit(hit=True) for e in scene.entities: if e == nP: # print('cast nP to Entity') self.hit.entity = e self.hit.point = point self.hit.world_point = world_point self.hit.distance = hit_dist normal = self.collision.get_surface_normal( self.collision.get_into_node_path().parent) self.hit.normal = (normal[0], normal[2], normal[1]) normal = self.collision.get_surface_normal(render) self.hit.world_normal = (normal[0], normal[2], normal[1]) return self.hit self.hit = Hit(hit=False) return self.hit
def setup(self, task): lens = OrthographicLens() lens.setFilmSize(25, 20) base.camNode.setLens(lens) self.player = self.scene.attachNewNode("Player") self.scene.find("root/barrel").setPos(0, 100, 0) self.scene.find("root/walls").hide() self.scene.find("root/rightWall").hide() self.lifes = [ self.scene.attachNewNode("life1"), self.scene.attachNewNode("life2"), self.scene.attachNewNode("life3"), ] # init mario gfx stuff self.marioGfx = self.scene.find('root/mario') self.marioGfx.instanceTo(self.lifes[0]) self.marioGfx.instanceTo(self.lifes[1]) self.marioGfx.instanceTo(self.lifes[2]) self.lifes[0].setPos(-9, 0, 7.5) self.lifes[1].setPos(-10, 0, 7.5) self.lifes[2].setPos(-11, 0, 7.5) self.marioGfx.reparentTo(self.player) self.marioGfx.setTwoSided(True) self.hammerDown = self.scene.find('root/hammerdowm') self.hammerDown.reparentTo(self.marioGfx) self.hammerDown.setPos(1, 0, 0) self.hammerUp = self.scene.find('root/hammerup') self.hammerUp.reparentTo(self.marioGfx) self.hammerUp.setPos(0, 0, 1) self.hammerDown.hide() self.hammerUp.hide() frame1 = Func(self.hammerFrame1) frame2 = Func(self.hammerFrame2) delay = Wait(0.1) self.hammerSequence = Sequence(frame1, delay, frame2, delay) #sequence.loop() #sequence.start() #sequence.finish() #input setup self.accept("raw-arrow_up", self.pressUp) self.accept("raw-arrow_down", self.pressDown) self.accept("raw-arrow_left", self.pressLeft) self.accept("raw-arrow_right", self.pressRight) self.accept("raw-space", self.pressSpace) self.accept("raw-arrow_up-up", self.pressUp) self.accept("raw-arrow_down-up", self.pressDown) self.accept("raw-arrow_left-up", self.pressLeft) self.accept("raw-arrow_right-up", self.pressRight) self.accept("raw-space-up", self.pressSpace) self.input = { 'left': False, 'right': False, 'up': False, 'down': False, 'space': False } # collision handling base.cTrav = CollisionTraverser() self.collisionHandlerEvent = CollisionHandlerEvent() self.collisionHandlerEvent.addInPattern('into-%in') self.collisionHandlerEvent.addOutPattern('outof-%in') ray = CollisionSegment(0, 0, 0, 0, 0, -.6) cNodePath = self.player.attachNewNode(CollisionNode('marioRay')) cNodePath.node().addSolid(ray) cNodePath.node().setIntoCollideMask(0x3) cNodePath.node().setFromCollideMask(0x3) cNodePath.show() base.cTrav.addCollider(cNodePath, self.collisionHandlerEvent) self.donkeykonggfx = self.scene.find(f'root/donkeykong') self.donkeykong = self.createSquareCollider(8.7, 5, 1, 1, 'donkeykong', 'dkHitbox', 'DK', self.reachedDk, self.exitDk, self.arcadeTexture, 0x2) self.floor1 = self.createSquareCollider(-1.8, -5.5, 9.3, .5, 'floor0', 'floor1Hitbox', 'Floor1', self.enableJump, self.disableJump, self.blockTexture, 0x01) self.floor2 = self.createSquareCollider(2.08, -2.5, 8.0, .5, 'floor1', 'floor2Hitbox', 'Floor2', self.enableJump, self.disableJump, self.blockTexture, 0x01) self.floor3_1 = self.createSquareCollider(3.6, 0.5, 3.8, .5, 'floor2', 'floor3_1Hitbox', 'Floor3_1', self.enableJump, self.disableJump, self.blockTexture, 0x01) self.floor3_2 = self.createSquareCollider(-6.3, 0.5, 5, .5, 'pCube4', 'floor3_2Hitbox', 'Floor3_2', self.enableJump, self.disableJump, self.blockTexture, 0x01) self.floor4 = self.createSquareCollider(1.8, 3.5, 8, .5, 'floors', 'floor4Hitbox', 'Floor4', self.enableJump, self.disableJump, self.blockTexture, 0x01) self.hammer = self.createSquareCollider(6, 1.5, .5, .5, 'hammer', 'hammerHitbox', 'hammer', self.enableHammer, self.disableHammer, self.arcadeTexture, 0x02) self.topstair = self.createSquareCollider( -6.8, 3.5, 0.5, 2.5, 'topstair', 'topstairHitbox', 'TopStair', self.enableStairs, self.disableStairs, self.stairsTexture, 0x02) self.middlestair = self.createSquareCollider( -0.86, 0.1, 0.5, 2.5, 'middlestair', 'middlestairHitbox', 'MiddleStair', self.enableStairs, self.disableStairs, self.stairsTexture, 0x02) self.bottomstair = self.createSquareCollider( -6.8, -2.5, 0.5, 2.5, 'bottomstair', 'bottomstairHitbox', 'BottomStair', self.enableStairs, self.disableStairs, self.stairsTexture, 0x02) self.leftWall = self.invisibleSquareCollider(-12.5, 0, 1, 10, "leftWallHitbox", "leftWall", 0x1) self.rightWall = self.invisibleSquareCollider(11.3, 0, 1, 20, "rightWallHitbox", "rightWall", 0x1) self.barrelDestroyer = self.invisibleSquareCollider( -0.5, -10, 10.5, 1, "barrelDestroyHitBox", "barrelDestroyer", 0x1) self.barrelBridge = self.invisibleSquareCollider( -0.4, 0.5, 2, 0.5, "barrelBridgeHitBox", "barrelBridge", 0x4) base.enableParticles() self.physicsCollisionPusher = PhysicsCollisionHandler() gravity = ForceNode("world-forces") gravityP = render.attachNewNode(gravity) gravityForce = LinearVectorForce(0, 0, -9.81) gravity.addForce(gravityForce) base.physicsMgr.addLinearForce(gravityForce) self.accept("into-barrelCollider", self.barrelCrash) #self.accept("raw-a", self.throwBarrel) #base.cTrav.showCollisions(self.render) self.barrels_frames = [] self.barrels_frames.append(0) self.barrels_frames.append(0.410573 - 0.375774) self.barrels_frames.append(0.444913 - 0.375774) self.barrels_frames.append(0.479941 - 0.375774) self.createDKSequence() self.player.setPos(3, 0, -3) return Task.done
def setup(self, task): lens = OrthographicLens() lens.setFilmSize(25, 20) base.camNode.setLens(lens) self.player = self.scene.attachNewNode("Player") self.marioGfx = self.scene.find('root/mario') self.marioGfx.reparentTo(self.player) self.jumpAvailable = False self.gravity = -.5 self.verticalTime = 0 self.v0 = 0 self.floorZ = 0 self.onStairs = False self.jumpCounter = 1 # input setup self.input = { 'up': False, 'down': False, 'left': False, 'right': False, 'space': False } key_list = ['up', 'down', 'left', 'right'] for k in key_list: self.accept(f'raw-arrow_{k}', self.buildPress(k)) self.accept(f'raw-arrow_{k}-up', self.buildRelease(k)) self.accept(f'raw-space', self.buildPress('space')) self.accept(f'raw-space-up', self.buildRelease('space')) # collision set up base.cTrav = CollisionTraverser() self.collisionHandlerEvent = CollisionHandlerEvent() self.collisionHandlerEvent.addInPattern('into-%in') self.collisionHandlerEvent.addOutPattern('outof-%in') ray = CollisionSegment(0, 0, 0, 0, 0, -.6) cNodePath = self.player.attachNewNode(CollisionNode('marioRay')) cNodePath.node().addSolid(ray) cNodePath.node().setIntoCollideMask(0x03) cNodePath.node().setFromCollideMask(0x03) cNodePath.show() base.cTrav.addCollider(cNodePath, self.collisionHandlerEvent) self.floor1 = self.createSquareCollider(-1.8, -5.5, 9.3, .5, 'floor0', 'floor1HitBox', 'Floor1', self.enableJump, self.disableJump, self.blocksTexture, 0x1) self.floor2 = self.createSquareCollider(2.08, -2.5, 8.0, .5, 'floor1', 'floor2HitBox', 'Floor2', self.enableJump, self.disableJump, self.blocksTexture, 0x1) self.floor3_1 = self.createSquareCollider(3.6, 0.5, 3.8, .5, 'floor2', 'floor3_1HitBox', 'Floor3_1', self.enableJump, self.disableJump, self.blocksTexture, 0x1) self.floor3_2 = self.createSquareCollider(-6.3, 0.5, 5, .5, 'pCube4', 'floor3_2HitBox', 'Floor3_2', self.enableJump, self.disableJump, self.blocksTexture, 0x1) self.floor4 = self.createSquareCollider(1.8, 3.5, 8.0, .5, 'floors', 'floor4HitBox', 'Floor4', self.enableJump, self.disableJump, self.blocksTexture, 0x1) self.topStair = self.createSquareCollider( -6.8, 3.5, 0.5, 2.5, 'topstair', 'topStairHitBox', 'TopStair', self.enableStairs, self.disableStairs, self.stairsTexture, 0x2) self.middleStair = self.createSquareCollider( -0.86, 0.1, 0.5, 2.5, 'middlestair', 'middleStairHitBox', 'MiddleStair', self.enableStairs, self.disableStairs, self.stairsTexture, 0x2) self.bottomStair = self.createSquareCollider( -6.8, -2.5, 0.5, 2.5, 'bottomstair', 'bottomStairHitBox', 'BottomStair', self.enableStairs, self.disableStairs, self.stairsTexture, 0x2) #self.createInvisibleSquareCollider(0,0,8,3,"NewCollision","NewNode") #self.createInvisibleSquareCollider(-6,0,4,5,"NewCollisio2","NewNode2") base.cTrav.showCollisions(self.render) # self.player.setPos(3,0,-3.5) self.player.setPos(-8, 0, -1.5) return Task.done
def setupCollision(self): base.cTrav = CollisionTraverser() self.collisionHandlerEvent = CollisionHandlerEvent() self.physicsCollisionPusher = PhysicsCollisionHandler() self.collisionHandlerEvent.addInPattern('into-%in') self.collisionHandlerEvent.addOutPattern('outof-%in') # create masks defaultCollisionMask = BitMask32(0b0001) #0x1 segmentCollisionMask = BitMask32(0b1000) #0x8 stairsCollisionMask = BitMask32(0b0010) #0x2 marioBodyCollisionMask = BitMask32(0b0011) #0x3 collisionWallsForBarrels = BitMask32(0b0100) #0x4 # mario segment collider ray = CollisionSegment(7, 0, -4.5, 7, 0, -5.1) cnodePath = self.mario.attachNewNode(CollisionNode('marioRay')) cnodePath.node().addSolid(ray) cnodePath.node().setFromCollideMask(segmentCollisionMask) cnodePath.node().setIntoCollideMask(0) cnodePath.show() base.cTrav.addCollider(cnodePath, self.collisionHandlerEvent) self.setupBoxCollider(self.mario, 7, 0, -4.5, 0.5, 5, 0.5, 'marioHitBox', self.collisionHandlerEvent, marioBodyCollisionMask, marioBodyCollisionMask) stairs1 = self.scene.find("bottomstair") self.setupBoxCollider(stairs1, -6.8, 0, -3.0, 0.5, 5, 2.5, 'stairs1HitBox', self.collisionHandlerEvent, stairsCollisionMask, stairsCollisionMask) stairs2 = self.scene.find("middlestair") self.setupBoxCollider(stairs2, -0.86, 0, .1, 0.5, 5, 2.1, 'stairs2HitBox', self.collisionHandlerEvent, stairsCollisionMask, stairsCollisionMask) stairs3 = self.scene.find("topstair") self.setupBoxCollider(stairs3, -6.8, 0, 3.1, 0.5, 5, 2.2, 'stairs3HitBox', self.collisionHandlerEvent, stairsCollisionMask, stairsCollisionMask) hammer = self.scene.find("MainGroup") # hammer self.setupBoxCollider(hammer, 5.5, 0, -1.5, 0.5, 5, 0.5, 'hammer1HitBox', self.collisionHandlerEvent, stairsCollisionMask, stairsCollisionMask) dk = self.scene.find("hammer1") self.setupBoxCollider(dk, 8.7, 0, 5, 1, 5, 1, 'dkHitBox', self.collisionHandlerEvent, stairsCollisionMask, stairsCollisionMask) floor0 = self.scene.find("floor0") self.setupBoxCollider(floor0, -2.5, 0, -5.5, 10, 5, 0.5, 'floor0HitBox', self.collisionHandlerEvent, intoCollisionMask=segmentCollisionMask) floor1 = self.scene.find("floor1") self.setupBoxCollider(floor1, 2, 0, -2.5, 8.4, 5, 0.5, 'floor1HitBox', self.collisionHandlerEvent, intoCollisionMask=segmentCollisionMask) floor2_1 = self.scene.find("floor2") self.setupBoxCollider(floor2_1, 3.6, 0, 0.5, 3.8, 5, 0.5, 'floor21HitBox', self.collisionHandlerEvent, intoCollisionMask=segmentCollisionMask) floor2_2 = self.scene.find("pCube4") self.setupBoxCollider(floor2_2, -6.3, 0, 0.5, 5.0, 5, 0.5, 'floor22HitBox', self.collisionHandlerEvent, intoCollisionMask=segmentCollisionMask) floor3 = self.scene.find("floors") self.setupBoxCollider(floor3, 1.8, 0, 3.5, 8, 5, 0.5, 'floor3HitBox', self.collisionHandlerEvent, intoCollisionMask=segmentCollisionMask) rightWall = self.scene.find("rightWall") self.setupBoxCollider(rightWall, -12, 0, 0, 1, 5, 10, 'rightWallHitBox', self.collisionHandlerEvent, fromCollisionMask=collisionWallsForBarrels, intoCollisionMask=collisionWallsForBarrels) leftWall = self.scene.find("walls") self.setupBoxCollider(leftWall, 11.5, 0, 0, 1, 5, 10, 'leftWallHitBox', self.collisionHandlerEvent, fromCollisionMask=collisionWallsForBarrels, intoCollisionMask=collisionWallsForBarrels) barrelFixer = self.scene.attachNewNode("barrelFixer") self.setupBoxCollider(barrelFixer, -3, 0, 0.505, 10, 5, 0.5, 'barrelFixerHitBox', self.collisionHandlerEvent, fromCollisionMask=collisionWallsForBarrels, intoCollisionMask=collisionWallsForBarrels) barrelDestroyer = self.scene.attachNewNode("barrelDestroyer") self.setupBoxCollider(barrelDestroyer, 0, 0, -8, 15, 5, 0.5, 'barrelDestroyerHitBox', self.collisionHandlerEvent, fromCollisionMask=collisionWallsForBarrels, intoCollisionMask=collisionWallsForBarrels) self.accept('into-stairs1HitBox', self.enableStair) self.accept('outof-stairs1HitBox', self.disableStair) self.accept('into-stairs2HitBox', self.enableStair) self.accept('outof-stairs2HitBox', self.disableStair) self.accept('into-stairs3HitBox', self.enableStair) self.accept('outof-stairs3HitBox', self.disableStair) self.accept('into-hammer1HitBox', self.enableHammer) self.accept('into-dkHitBox', self.dkArrived) self.accept('into-floor0HitBox', self.enableJump) self.accept('outof-floor0HitBox', self.disableJump) self.accept('into-floor1HitBox', self.enableJump) self.accept('outof-floor1HitBox', self.disableJump) self.accept('into-floor21HitBox', self.enableJump) self.accept('outof-floor21HitBox', self.disableJump) self.accept('into-floor22HitBox', self.enableJump) self.accept('outof-floor22HitBox', self.disableJump) self.accept('into-floor3HitBox', self.enableJump) self.accept('outof-floor3HitBox', self.disableJump) self.accept("into-barrelCollider", self.barrelCrash) base.cTrav.showCollisions(self.render)
def __init__(self, shipSpec): GameObject.__init__(self, Vec3(0, 0, 0), None, None, shipSpec.maxShields, shipSpec.maxSpeed, "player", MASK_INTO_PLAYER, 2) ArmedObject.__init__(self) self.acceleration = shipSpec.acceleration self.turnRate = shipSpec.turnRate self.numGuns = len(shipSpec.gunPositions) self.numMissiles = shipSpec.numMissiles self.maxEnergy = shipSpec.maxEnergy self.energyRechargeRate = shipSpec.energyRechargeRate self.shieldRechargeRate = shipSpec.shieldRechargeRate self.energy = shipSpec.maxEnergy for gunPos in shipSpec.gunPositions: np = self.actor.attachNewNode(PandaNode("gun node")) np.setPos(gunPos) gun = BlasterWeapon() self.addWeapon(gun, 0, np) missileSetCounter = 1 for missilePos in shipSpec.missilePositions: np = self.actor.attachNewNode(PandaNode("missile node")) np.setPos(missilePos) gun = RocketWeapon() self.addWeapon(gun, missileSetCounter, np) missileSetCounter += 1 self.numMissileSets = missileSetCounter - 1 self.missileSetIndex = 0 light = PointLight("basic light") light.setColor(Vec4(1, 1, 1, 1)) light.setAttenuation((1, 0.01, 0.001)) self.lightNP = self.root.attachNewNode(light) self.lightNP.setZ(1) Common.framework.showBase.render.setLight(self.lightNP) self.colliderNP.node().setFromCollideMask(MASK_WALLS | MASK_FROM_PLAYER) Common.framework.pusher.addCollider(self.colliderNP, self.root) Common.framework.traverser.addCollider(self.colliderNP, Common.framework.pusher) Common.framework.showBase.camera.reparentTo(self.actor) Common.framework.showBase.camera.setPos(0, 0, 0) Common.framework.showBase.camera.setHpr(0, 0, 0) lens = Common.framework.showBase.camLens lens.setNear(0.03) ratio = lens.getAspectRatio() lens.setFov(75 * ratio) self.lastMousePos = Vec2(0, 0) self.mouseSpeedHori = 50.0 self.mouseSpeedVert = 30.0 self.mouseSensitivity = 1.0 self.targetingRay = CollisionSegment(0, 0, 0, 0, 100, 0) self.targetingRayNode = CollisionNode("lock ray") self.targetingRayNode.addSolid(self.targetingRay) self.targetingRayNode.setFromCollideMask(MASK_ENEMY_LOCK_SPHERE) self.targetingRayNode.setIntoCollideMask(0) self.targetingRayNP = self.actor.attachNewNode(self.targetingRayNode) self.targetingQueue = CollisionHandlerQueue() self.prospectiveLockTarget = None self.lockTargetTimer = 0 self.lockDuration = 1 Common.framework.traverser.addCollider(self.targetingRayNP, self.targetingQueue) #rayNodePath.show() self.uiRoot = aspect2d.attachNewNode(PandaNode("player UI")) cardMaker = CardMaker("UI maker") cardMaker.setFrame(-1, 1, -1, 1) self.centreSpot = self.uiRoot.attachNewNode(cardMaker.generate()) self.centreSpot.setTexture( Common.framework.showBase.loader.loadTexture( "../Section2SpaceflightDocking/UI/spot.png")) self.centreSpot.setTransparency(True) self.centreSpot.setPos(0, 0, 0) self.centreSpot.setScale(0.01) self.centreSpot.setAlphaScale(0.5) self.directionIndicator = self.uiRoot.attachNewNode( cardMaker.generate()) self.directionIndicator.setTexture( Common.framework.showBase.loader.loadTexture( "../Section2SpaceflightDocking/UI/directionIndicator.png")) self.directionIndicator.setTransparency(True) self.directionIndicator.setScale(0.05) self.directionIndicator.hide() self.lockMarkerRoot = self.uiRoot.attachNewNode( PandaNode("lock marker root")) for i in range(4): markerRotationNP = self.lockMarkerRoot.attachNewNode( PandaNode("lock marker rotation")) marker = markerRotationNP.attachNewNode(cardMaker.generate()) marker.setTexture( Common.framework.showBase.loader.loadTexture( "../Section2SpaceflightDocking/UI/lockMarker.png")) marker.setTransparency(True) markerRotationNP.setScale(0.04) markerRotationNP.setR(i * 90) self.lockMarkerRoot.hide() self.lockBar = Common.framework.showBase.loader.loadModel( "../Section2SpaceflightDocking/UI/uiLockBar") self.lockBar.reparentTo(self.uiRoot) self.lockBar.setScale(0.15) #self.lockBar.hide() cardMaker.setFrame(-1, 1, 0, 1) self.cockpit = Common.framework.showBase.loader.loadModel( "../Section2SpaceflightDocking/Models/{0}".format( shipSpec.cockpitModelFile)) self.cockpit.reparentTo(self.actor) healthBarRoot = self.cockpit.find("**/healthBar") if healthBarRoot is None or healthBarRoot.isEmpty(): healthBarRoot = self.uiRoot.attachNewNode( PandaNode("health bar root")) print("No health bar root found!") energyBarRoot = self.cockpit.find("**/energyBar") if energyBarRoot is None or energyBarRoot.isEmpty(): energyBarRoot = self.uiRoot.attachNewNode( PandaNode("energy bar root")) print("No energy bar root found!") missileCounterRoot = self.cockpit.find("**/missileCounter") if missileCounterRoot is None or missileCounterRoot.isEmpty(): missileCounterRoot = self.uiRoot.attachNewNode( PandaNode("missile counter root")) print("No missile counter root found!") radarRoot = self.cockpit.find("**/radar") if radarRoot is None or radarRoot.isEmpty(): radarRoot = self.uiRoot.attachNewNode(PandaNode("radar root")) print("No radar root found!") speedometerRoot = self.cockpit.find("**/speedometer") if speedometerRoot is None or speedometerRoot.isEmpty(): speedometerRoot = self.uiRoot.attachNewNode( PandaNode("speedometer root")) print("No speedometer root found!") self.radarDrawer = MeshDrawer() self.radarDrawer.setBudget(4096) self.radarDrawerNP = self.radarDrawer.getRoot() self.radarDrawerNP.reparentTo(radarRoot) self.radarDrawerNP.setTwoSided(True) self.radarDrawerNP.setLightOff() self.radarDrawerNP.setDepthWrite(False) self.radarDrawerNP.setTransparency(True) self.healthBar = healthBarRoot.attachNewNode(cardMaker.generate()) self.healthBar.setSx(0.05) self.energyBar = energyBarRoot.attachNewNode(cardMaker.generate()) self.energyBar.setSx(0.05) self.healthBarScalar = 0.00175 self.energyBarScalar = 0.00175 self.missileCounter = DirectLabel(text="", text_mayChange=True, scale=0.09, relief=None, parent=missileCounterRoot) self.maxRadarRange = 700 self.radarSize = 0.3 self.speedometer = DirectLabel(text="", text_mayChange=True, scale=0.09, relief=None, parent=speedometerRoot) self.updateHealthUI() self.updateEnergyUI() self.updateMissileUI() self.updateRadar() self.updateSpeedometer() self.updatingEffects = []
def __init__(self, charId, charNr, controls): FSM.__init__(self, "FSM-Player{}".format(charNr)) self.charId = charId charPath = "characters/character{}/".format(charNr) self.character = Actor( charPath + "char", { "Idle": charPath + "idle", "Walk": charPath + "walk", "Walk_back": charPath + "walk_back", "Punch_l": charPath + "punch_l", "Punch_r": charPath + "punch_r", "Kick_l": charPath + "kick_l", "Kick_r": charPath + "kick_r", "Defend": charPath + "defend", "Hit": charPath + "hit", "Defeated": charPath + "defeated" }) self.character.reparentTo(render) self.character.hide() self.walkSpeed = 2.0 # units per second if controls == "p1": self.character.setH(90) self.leftButton = KeyboardButton.asciiKey(b"d") self.rightButton = KeyboardButton.asciiKey(b"f") self.punchLButton = KeyboardButton.asciiKey(b"q") self.punchRButton = KeyboardButton.asciiKey(b"w") self.kickLButton = KeyboardButton.asciiKey(b"a") self.kickRButton = KeyboardButton.asciiKey(b"s") self.defendButton = KeyboardButton.asciiKey(b"e") elif controls == "p2": self.character.setH(-90) self.leftButton = KeyboardButton.right() self.rightButton = KeyboardButton.left() self.punchLButton = KeyboardButton.asciiKey(b"i") self.punchRButton = KeyboardButton.asciiKey(b"o") self.kickLButton = KeyboardButton.asciiKey(b"k") self.kickRButton = KeyboardButton.asciiKey(b"l") self.defendButton = KeyboardButton.asciiKey(b"p") self.getPos = self.character.getPos self.getX = self.character.getX characterSphere = CollisionSphere(0, 0, 1.0, 0.5) self.collisionNodeName = "character{}Collision".format(charId) characterColNode = CollisionNode(self.collisionNodeName) characterColNode.addSolid(characterSphere) self.characterCollision = self.character.attachNewNode( characterColNode) # Uncomment this line to show collision solids #self.characterCollision.show() base.pusher.addCollider(self.characterCollision, self.character) base.cTrav.addCollider(self.characterCollision, base.pusher) characterHitRay = CollisionSegment(0, -0.5, 1.0, 0, -0.8, 1.0) characterColNode.addSolid(characterHitRay) self.audioStep = base.audio3d.loadSfx("assets/audio/step.ogg") self.audioStep.setLoop(True) base.audio3d.attachSoundToObject(self.audioStep, self.character) self.audioHit = base.audio3d.loadSfx("assets/audio/hit.ogg") self.audioHit.setLoop(False) base.audio3d.attachSoundToObject(self.audioStep, self.character)