Advertisement
thatenbykiki

player.gd

Apr 15th, 2024
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. extends CharacterBody2D
  2.  
  3. signal swing_sword
  4.  
  5. @onready var sprite = $AnimatedSprite2D
  6. @onready var weapPivot = $WeaponPivot
  7. @onready var atkArea = $WeaponPivot/AttackArea
  8. @onready var atkTimer = $AttackTimer
  9.  
  10. @export var speed := 150
  11.  
  12. var base_speed = speed
  13.  
  14. var move_dir
  15. var aim_dir
  16. var mouse
  17. var angle
  18. var set_angle
  19. var _facing
  20.  
  21. func _ready():
  22.     pass
  23.  
  24.  
  25. func _physics_process(_delta):
  26.     get_input()
  27.     move_and_slide()
  28.     sprite.play()
  29.  
  30.  
  31. func _get_facing():
  32.     if angle == 0:
  33.         _facing = "0"
  34.     elif angle == 1:
  35.         _facing = "1"
  36.     elif angle == 2:
  37.         _facing = "2"
  38.     else:
  39.         _facing == "3"
  40.  
  41.  
  42. func get_input():
  43.     var move_dir = Vector2(Input.get_axis("move_left", "move_right"), Input.get_axis("move_up", "move_down"))
  44.     var aim_dir = Vector2(Input.get_axis("aim_left", "aim_right"), Input.get_axis("aim_up", "aim_down"))
  45.     var mouse = get_local_mouse_position()
  46.     var angle = snappedf(mouse.angle(), PI / 2) / (PI / 2)
  47.     angle = wrapi(int(angle), 0, 4)
  48.    
  49.     if aim_dir != Vector2.ZERO:
  50.         weapPivot.rotation = lerp_angle(rotation, aim_dir.angle(), 1)
  51.     else:
  52.         weapPivot.rotation = lerpf(rotation, mouse.angle(), 1)
  53.     velocity = move_dir.clamp(Vector2(-1, -1), Vector2(1, 1)).normalized() * speed
  54.    
  55.     if velocity.length() != 0:
  56.         sprite.animation = "walk" + str(angle)
  57.     else:
  58.         sprite.animation = "idle" + str(angle)
  59.    
  60.     if Input.is_action_just_pressed("attack"):
  61.         swing_sword.emit()
  62.         _get_facing()
  63.         attack()
  64.    
  65.  
  66. func attack():
  67.     sprite.animation = "attack" + str(_facing)
  68.     atkTimer.start(1)
  69.  
  70. func _on_atktimer_timeout():
  71.     sprite.play()
  72.     if velocity.length() != 0:
  73.         sprite.animation = "walk" + str(_facing)
  74.     elif velocity.length() > 0 or velocity.length() < 0:
  75.         sprite.animation = "idle" + str(_facing)
  76.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement