IronZelly

player.gd

Dec 13th, 2024
37
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.63 KB | Gaming | 0 0
  1. class_name Player
  2. extends CharacterBody2D
  3.  
  4. @export var speed : float = 50
  5. @onready var anim_tree = $AnimationTree
  6. @onready var anim_state = anim_tree.get("parameters/playback")
  7.  
  8. enum player_states {MOVE, JUMP, SWIM}
  9. var current_states = player_states.MOVE
  10.  
  11. var input_movement = Vector2.ZERO
  12. var playback : AnimationNodeStateMachinePlayback
  13.  
  14. func _physics_process(_delta):
  15.  
  16. match current_states:
  17. player_states.SWIM:
  18. swim()
  19. player_states.MOVE:
  20. move()
  21. player_states.JUMP:
  22. jump()
  23.  
  24. func move():
  25. $Watertrail.emitting = false
  26. input_movement = Input.get_vector("left", "right", "up", "down")
  27.  
  28. if input_movement != Vector2.ZERO:
  29. velocity = input_movement * speed
  30. anim_tree.set("parameters/Idle/BlendSpace2D/blend_position", input_movement)
  31. anim_tree.set("parameters/Walk/BlendSpace2D/blend_position", input_movement)
  32. anim_tree.set("parameters/Jump/BlendSpace2D/blend_position", input_movement)
  33. anim_tree.set("parameters/Swim/BlendSpace2D/blend_position", input_movement)
  34. anim_state.travel("Walk")
  35. velocity = input_movement * speed
  36.  
  37. if input_movement == Vector2.ZERO:
  38. anim_state.travel("Idle")
  39. velocity = Vector2.ZERO
  40.  
  41. if Input.is_action_just_pressed("jump"):
  42. current_states = player_states.JUMP
  43.  
  44. move_and_slide()
  45.  
  46. func jump():
  47. input_movement = Input.get_vector("left", "right", "up", "down")
  48. anim_state.travel("Jump")
  49. velocity = input_movement * speed
  50. move_and_slide()
  51.  
  52. func on_states_reset():
  53. current_states = player_states.MOVE
  54.  
  55. func clear_collision():
  56. $CollisionShape2D.disabled = true
  57.  
  58. func create_collision():
  59. $CollisionShape2D.disabled = false
  60. current_states = player_states.MOVE
  61.  
  62. func swim():
  63. input_movement = Input.get_vector("left", "right", "up", "down")
  64. if input_movement != Vector2.ZERO:
  65. velocity = input_movement * speed
  66. anim_tree.set("parameters/Idle/BlendSpace2D/blend_position", input_movement)
  67. anim_tree.set("parameters/Walk/BlendSpace2D/blend_position", input_movement)
  68. anim_tree.set("parameters/Jump/BlendSpace2D/blend_position", input_movement)
  69. anim_tree.set("parameters/Swim/BlendSpace2D/blend_position", input_movement)
  70. anim_state.travel("Swim")
  71. velocity = input_movement * speed
  72. if Input.is_action_just_pressed("jump") and current_states == player_states.SWIM:
  73. anim_state.travel("Jump")
  74. $Watertrail.emitting = false
  75. velocity = input_movement * speed
  76. move_and_slide()
  77.  
  78. func _on_area_2d_body_entered(_body: Node2D):
  79. anim_state.travel("Swim")
  80. current_states = player_states.SWIM
  81. $Watertrail.emitting = true
  82.  
  83. func _on_area_2d_body_exited(_body: Node2D):
  84. current_states = player_states.MOVE
  85. $Watertrail.emitting = false
  86.  
Tags: godot 4
Advertisement
Add Comment
Please, Sign In to add comment