Randoloot/scripts/game/combat_vfx.gd
2026-10-25 22:38:13 +01:00

24 lines
1.0 KiB
GDScript

extends RefCounted
const CONTEXT := &"combat_visual_contact"
static func mark_hit(target: Variant, point: Vector2, direction: Vector2) -> void:
if target is Node2D and is_instance_valid(target): target.set_meta(CONTEXT,{"point":point,"direction":direction})
static func consume(target: Node2D) -> Dictionary:
var contact: Dictionary = target.get_meta(CONTEXT,{"point":target.global_position+Vector2.UP*28,"direction":Vector2.DOWN})
if target.has_meta(CONTEXT): target.remove_meta(CONTEXT)
return contact
static func feedback(target: Node2D, shields: float, hull: float, kind: int, contact: Dictionary) -> void:
if shields > 0.0:
var shield := target.get_node_or_null("ShieldVisual")
if shield != null: shield.flash_hit(contact.point,kind)
if hull <= 0.0: return
var visual := target.get_node_or_null("HullDamageVisual")
if visual == null:
visual = Node2D.new()
visual.name = "HullDamageVisual"
visual.set_script(preload("res://scripts/game/hull_damage_visual.gd"))
target.add_child(visual)
visual.hit(contact.point,contact.direction,kind)