35 lines
754 B
GDScript
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()
|