netmasked/scripts/hitbox.gd

35 lines
754 B
GDScript

class_name Hitbox extends Area2D
signal hit_entity(entity : Entity);
signal hit_obstacle;
var from_player = true
var enabled = true
@export var deal_damage = true
func _ready() -> void:
collision_mask = 1 | 2 | 4
body_entered.connect(_on_body_entered)
area_entered.connect(_on_area_entered)
func _on_area_entered(area : Area2D):
if area is Hitbox:
if area.from_player != from_player:
hit_obstacle.emit()
func _on_body_entered(body: Node) -> void:
if not enabled: return
if body is Enemy and from_player:
if deal_damage:
body.damage()
body.knockback()
hit_entity.emit(body)
if body is Player and not from_player:
if deal_damage:
body.damage()
hit_entity.emit(body)
if body is StaticBody2D:
hit_obstacle.emit()