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)