Invulnerability component
This commit is contained in:
@@ -4,17 +4,29 @@ extends Node
|
||||
@export var damage: float = 0.25
|
||||
@export var area2d: Area2D
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
if not area2d:
|
||||
printerr("No area2d assigned!")
|
||||
return
|
||||
|
||||
|
||||
area2d.body_entered.connect(on_area2d_body_entered)
|
||||
|
||||
func deal_damage(target: HealthComponent):
|
||||
target.decrease_health(damage)
|
||||
|
||||
func on_area2d_body_entered(body: Node2D):
|
||||
func deal_damage(target: HealthComponent) -> void:
|
||||
target.decrease_health(damage)
|
||||
print("Dealt damage to target!")
|
||||
|
||||
|
||||
func on_area2d_body_entered(body: Node2D) -> void:
|
||||
if body.has_node("HealthComponent"):
|
||||
var health_component: HealthComponent = body.get_node("HealthComponent")
|
||||
var health_component: HealthComponent = body.get_node("HealthComponent")
|
||||
var invulnerability_component: InvulnerabilityComponent = body.get_node_or_null("InvulnerabilityComponent")
|
||||
|
||||
if invulnerability_component and invulnerability_component.is_invulnerable():
|
||||
return
|
||||
|
||||
deal_damage(health_component)
|
||||
|
||||
if invulnerability_component:
|
||||
invulnerability_component.activate()
|
||||
|
30
scripts/components/invulnerability_component.gd
Normal file
30
scripts/components/invulnerability_component.gd
Normal file
@@ -0,0 +1,30 @@
|
||||
class_name InvulnerabilityComponent
|
||||
extends Node
|
||||
|
||||
@export var duration: float = 1.0
|
||||
@export var flashing_component: FlashingComponent
|
||||
|
||||
var invulnerable: bool = false
|
||||
|
||||
|
||||
func activate() -> void:
|
||||
if invulnerable:
|
||||
return
|
||||
|
||||
invulnerable = true
|
||||
if flashing_component:
|
||||
flashing_component.start_flashing()
|
||||
|
||||
var timer = get_tree().create_timer(duration)
|
||||
timer.timeout.connect(deactivate)
|
||||
|
||||
|
||||
func deactivate() -> void:
|
||||
invulnerable = false
|
||||
if flashing_component:
|
||||
flashing_component.stop_flashing()
|
||||
|
||||
|
||||
func is_invulnerable() -> bool:
|
||||
return invulnerable
|
||||
|
Reference in New Issue
Block a user