24 lines
1.0 KiB
GDScript
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)
|