25 lines
857 B
GDScript
25 lines
857 B
GDScript
extends ActiveAbility
|
|
|
|
const SCAN_DURATION := 8.0
|
|
const OVERLAY := preload("res://scripts/ui/scanner_overlay.gd")
|
|
|
|
func unavailable_reason(ship: CharacterBody2D) -> String:
|
|
if ship.has_node("ScannerOverlay"):
|
|
return "Skaner jest aktywny"
|
|
return "Wymagane 50% energii" if float(ship.get("energy")) < float(ship.get("max_energy")) * 0.5 else ""
|
|
|
|
func activate(ship: CharacterBody2D) -> void:
|
|
if not unavailable_reason(ship).is_empty():
|
|
return
|
|
ship.set("energy", float(ship.get("energy")) - float(ship.get("max_energy")) * 0.5)
|
|
var layer := CanvasLayer.new()
|
|
layer.name = "ScannerOverlay"
|
|
layer.layer = 8
|
|
ship.add_child(layer)
|
|
var overlay := Control.new()
|
|
overlay.set_script(OVERLAY)
|
|
overlay.set("player", ship)
|
|
overlay.set("remaining", SCAN_DURATION)
|
|
layer.add_child(overlay)
|
|
overlay.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT)
|