netmasked/scripts/entity.gd

55 lines
1.2 KiB
GDScript

class_name Entity extends CharacterBody2D
signal health_changed(new_amount)
signal died
@export var current_mask_data: MaskData
@export var max_health: int = 3
@export var move_speed: float = 50.0
@export var friction: float = 0.7
@export var main_visual : Node2D
@export var death_scene : PackedScene
@onready var health: int = max_health
var mask_use_cd = 0
var can_attack: bool = true
func use_mask(target : Vector2):
if mask_use_cd <= 0:
current_mask_data.activate(self, target)
mask_use_cd = current_mask_data.cooldown
func damage(amount: int = 1) -> void:
health -= amount
health_changed.emit(health)
_play_hit_flash()
EventBus.screenshake.emit(5)
if health <= 0:
die()
func die():
if death_scene:
var death : Node2D = death_scene.instantiate()
get_parent().add_child(death)
death.global_position = global_position
died.emit()
func _apply_movement() -> void:
velocity *= friction
move_and_slide()
func _process(delta: float) -> void:
mask_use_cd -= delta
func _physics_process(delta: float) -> void:
_apply_movement()
func _play_hit_flash():
var tween = create_tween()
if main_visual:
tween.tween_property(main_visual, "modulate", Color.CRIMSON, 0.1)
tween.tween_property(main_visual, "modulate", Color.WHITE, 0.3)