37 lines
1,000 B
GDScript
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)
|