ChilliVonWilly

Player-Script

Oct 21st, 2024
41
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. extends CharacterBody2D
  2.  
  3. class_name Player
  4.  
  5. signal healthChanged
  6. signal DirectionChanged(new_direction: Vector2)
  7.  
  8. const DIR_8 = [
  9.     Vector2.RIGHT,
  10.     Vector2.DOWN + Vector2.RIGHT, Vector2.DOWN, Vector2.DOWN + Vector2.LEFT,
  11.     Vector2.LEFT,
  12.     Vector2.UP + Vector2.LEFT,
  13.     Vector2.UP,
  14.     Vector2.UP + Vector2.RIGHT,
  15.     ]
  16.  
  17. @export var current_item: ItemData:
  18.     set(value):
  19.         current_item = value
  20.         change_weapon()
  21.  
  22. @onready var weapon_sprite: Sprite2D = $weapon/WeaponSprite
  23.  
  24. @onready var animation_player = $AnimationPlayer
  25. @onready var attack_animation_player = $AttackAnimationPlayer
  26. @onready var sprite: Sprite2D = $Sprite2D
  27. @onready var effects = $Effects
  28. @onready var hurtBox = $hurtBox
  29. @onready var hurtTimer = $hurtTimer
  30. @onready var weapon: Node2D = $weapon
  31. @onready var shape = $CollisionShape2D
  32. @onready var damage_interval_timer = $DamageIntervalTimer
  33. @onready var health_component = $HealthComponent
  34. @onready var health_bar = $HealthBar
  35. @onready var damage_bar: ProgressBar = $DamageBar
  36. @onready var abilities = $Abilities
  37. @onready var combo_timer = $weapon/combo_timer
  38. @onready var state_machine: PlayerStateMachine = $StateMachine
  39.  
  40. var cardinal_direction: Vector2 = Vector2.DOWN
  41. var direction: Vector2 = Vector2.ZERO
  42. var isAttacking = false
  43. var combo_step = 0
  44. var number_colliding_bodies = 0
  45. var isHurt: bool = false
  46. var isDashing = false
  47.  
  48. func _ready():
  49.     state_machine.Initialize(self)
  50.     effects.play("RESET")
  51.     hurtBox.body_entered.connect(on_body_entered)
  52.     hurtBox.body_exited.connect(on_body_exited)
  53.     damage_interval_timer.timeout.connect(on_damage_interval_timer_timeout)
  54.     health_component.health_changed.connect(on_health_changed)
  55.     health_component.died.connect(on_died)
  56.     combo_timer.connect("timeout", Callable(self, "_on_combo_timer_timeout"))
  57.     GameEvents.ability_upgrade_added.connect(on_ability_upgrade_added)
  58.     update_health_display()
  59.    
  60.  
  61. func _process(delta):
  62.     direction = Vector2(
  63.         Input.get_axis("ui_left", "ui_right"),
  64.         Input.get_axis("ui_up", "ui_down")
  65.     ).normalized()
  66.  
  67. func _physics_process(delta):
  68.     move_and_slide()
  69.  
  70.  
  71. func SetDirection() -> bool:
  72.     if direction == Vector2.ZERO:
  73.         return false
  74.    
  75.     var direction_id: int = int(round((direction + cardinal_direction * 0.1).angle() / TAU * DIR_8.size()))
  76.     var new_dir = DIR_8[direction_id]
  77.    
  78.     if new_dir == cardinal_direction:
  79.         return false
  80.    
  81.     cardinal_direction = new_dir
  82.     DirectionChanged.emit(new_dir)
  83.     return true
  84.  
  85.  
  86. func UpdateAnimation(state: String) -> void:
  87.     animation_player.play(state + "_" + AnimDirection())
  88.  
  89. func UpdateAttackAnimation(state: String):
  90.     attack_animation_player.play(state + "_" + AnimDirection())
  91.  
  92.  
  93. func AnimDirection() -> String:
  94.     if cardinal_direction == Vector2.DOWN:
  95.         return "down"
  96.     elif cardinal_direction == Vector2.UP:
  97.         return "up"
  98.     elif cardinal_direction == Vector2.LEFT:
  99.         return "left"
  100.     elif cardinal_direction == Vector2.RIGHT:
  101.         return "right"
  102.     elif cardinal_direction == Vector2.DOWN + Vector2.RIGHT:
  103.         return "down_right"
  104.     elif cardinal_direction == Vector2.UP + Vector2.RIGHT:
  105.         return "up_right"
  106.     elif cardinal_direction == Vector2.UP + Vector2.LEFT:
  107.         return "up_left"
  108.     else:
  109.         return "down_left"
  110.  
  111.  
  112. func check_deal_damage():
  113.     if number_colliding_bodies == 0 || !damage_interval_timer.is_stopped():
  114.         return
  115.     health_component.damage(1)
  116.     damage_interval_timer.start()
  117.     effects.play("hurtBlink")
  118.    
  119.     await damage_interval_timer.timeout
  120.     effects.play("RESET")
  121.    
  122.    
  123. func update_health_display():
  124.     var current_health = health_bar.value
  125.     damage_bar.value = health_bar.value
  126.     health_bar.value = health_component.get_health_percent()
  127.  
  128.     var new_health_percent = health_component.get_health_percent()
  129.    
  130.     health_bar.visible = true
  131.     damage_bar.visible = true
  132.     var tween_health = get_tree().create_tween()
  133.     tween_health.tween_property(health_bar, "value", new_health_percent, 0.2)
  134.     tween_health.set_ease(Tween.EASE_IN_OUT)
  135.     tween_health.set_trans(Tween.TRANS_QUAD)
  136.    
  137.     await tween_health.finished
  138.     damage_bar.value = health_bar.value
  139.     var tween_damage = get_tree().create_tween()
  140.     tween_damage.tween_property(damage_bar, "value", new_health_percent, 0.5)
  141.     tween_damage.set_ease(Tween.EASE_IN_OUT)
  142.     tween_damage.set_trans(Tween.TRANS_QUAD)
  143.  
  144.  
  145.  
  146. func on_body_entered(other_body: Node2D):
  147.     number_colliding_bodies += 1
  148.     check_deal_damage()
  149.  
  150. func on_body_exited(other_body: Node2D):
  151.     number_colliding_bodies -=1
  152.  
  153. func on_damage_interval_timer_timeout():
  154.     check_deal_damage()
  155.  
  156. func on_health_changed():
  157.     update_health_display()
  158.  
  159. func on_died():
  160.     $AnimationPlayer.play("death")
  161.    
  162.  
  163. func on_ability_upgrade_added(ability_upgrade: AbilityUpgrade, current_upgrades: Dictionary):
  164.     if not ability_upgrade is Ability:
  165.         return
  166.    
  167.     var ability = ability_upgrade as Ability
  168.     abilities.add_child(ability.ability_controller_scene.instantiate())
  169.  
  170.  
  171. func change_weapon():
  172.     if current_item != null and weapon_sprite != null:
  173.         weapon_sprite.texture = current_item.texture
  174.         weapon.update_damage()
  175.  
Add Comment
Please, Sign In to add comment