Guest User

Cave playerController

a guest
Mar 30th, 2025
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.46 KB | None | 0 0
  1. import cave
  2.  
  3.  
  4. class PlayerController(cave.Component):
  5.     walkSpeed = 2.0
  6.     runSpeed  = 6.0
  7.  
  8.     def start(self, scene: cave.Scene):
  9.         self.transf = self.entity.getTransform()
  10.         self.character : cave.CharacterComponent = self.entity.get("Character")
  11.  
  12.         self.mesh = self.entity.getChild("Mesh")
  13.         self.meshTransf = self.mesh.getTransform()
  14.  
  15.         self.animator : cave.AnimationComponent = self.mesh.get("Animation")
  16.  
  17.     def update(self):
  18.         dt = cave.getDeltaTime()
  19.         events = cave.getEvents()
  20.  
  21.         x = events.active(cave.event.KEY_A) - events.active(cave.event.KEY_D)
  22.         z = events.active(cave.event.KEY_W) - events.active(cave.event.KEY_S)
  23.  
  24.         dir = cave.Vector3(x, 0.0, z)
  25.        
  26.         isMoving = dir.length() > 0.0
  27.         if isMoving:
  28.             dir.normalize()
  29.             aimDir = self.transf.transformDirection(dir)
  30.             self.meshTransf.lookAtSmooth(-aimDir, 0.2)
  31.  
  32.         isRunning = events.active(cave.event.KEY_LSHIFT)
  33.         if isRunning:
  34.             dir *= self.runSpeed
  35.         else:
  36.             dir *= self.walkSpeed
  37.  
  38.         if events.pressed(cave.event.KEY_SPACE):
  39.             self.character.jump()
  40.  
  41.         self.character.setWalkDirection(dir * dt)
  42.  
  43.         # Animating:
  44.         if self.character.onGround():
  45.             if isMoving:
  46.                 if isRunning:
  47.                     self.animator.playByName("p-run", 0.2, loop=True)
  48.                 else:
  49.                     self.animator.playByName("p-walk", 0.2, loop=True)
  50.             else:
  51.                 self.animator.playByName("p-idle", 0.2, loop=True)
  52.         else:
  53.             self.animator.playByName("p-fall", 0.3, loop=True)
  54.            
  55.     def end(self, scene: cave.Scene):
  56.         pass
  57.    
Advertisement
Add Comment
Please, Sign In to add comment