The_Dark_Side_of_Earth/player/sword.gd

37 lines
1,000 B
GDScript

extends Area2D
var anim_sprite: AnimatedSprite2D
var slash_duration = 0.1
var slash_timer = 0
var damage = 20
var facing = -1
var facing_mult = 1
var dmg_id
func _ready() -> void:
anim_sprite = $AnimatedSprite2D
get_parent().attack.connect(swing)
func swing(dir_str) -> void:
dmg_id = Global.next_dmg_id
facing = - get_parent().facing * facing_mult
if dir_str == "up":
scale.x = abs(scale.x)
scale.y = abs(scale.y) * facing
rotation = PI/2
else:
scale.x = abs(scale.x) * facing
scale.y = abs(scale.y)
rotation = 0
anim_sprite.visible = true
await get_tree().physics_frame
await get_tree().physics_frame
slash_timer = slash_duration
func _process(delta: float) -> void:
if slash_timer > 0:
slash_timer = max(0, slash_timer-delta)
if(slash_timer == 0):
anim_sprite.visible = false
for area in get_overlapping_areas():
var hurt_dir = -get_parent().earth_aligner.global_from_local(Vector2(-facing, 0)).rotated(facing*rotation)
area.hurt(damage, hurt_dir, dmg_id)