tool extends StaticBody2D class_name GameObjectEngine const LIGHT_STRENGTH_MULT = 0.002 const MAX_ENERGY = 2 const MAX_USAGE = 0.5 enum Direction { LEFT, RIGHT, UP, DOWN } export(Direction) var direction = Direction.DOWN setget set_direction onready var activationRange = $ActivationRange as ActivationRange onready var manager = $PowerManager as PowerManager export var strength = 1.0 setget set_strength export var max_force = 0.05 var force = 0 func _ready() -> void: if not Engine.editor_hint: activationRange.visible = true $Light2D.visible = true func set_direction(dir) -> void: direction = dir refresh_sprite() func set_strength(val: float) -> void: strength = val $Light2D.energy = val * LIGHT_STRENGTH_MULT func refresh_sprite() -> void: var rot = 0 match direction: Direction.DOWN: $engine.region_rect.position = Vector2(0, 0) rot = 0 Direction.UP: $engine.region_rect.position = Vector2(0, 96) rot = PI Direction.LEFT: $engine.region_rect.position = Vector2(96, 96) rot = PI/2 Direction.RIGHT: $engine.region_rect.position = Vector2(96, 0) rot = -PI/2 $Light2D.rotation = rot $ActivationRange.rotation = rot func _physics_process(_delta: float) -> void: if Engine.editor_hint: return manager.power_usage = max(1e-3, MAX_USAGE * strength) func _input_event(_viewport, event, _shape_idx): if Engine.editor_hint: return if event is InputEventMouseButton and event.pressed: if activationRange.in_range(): # TODO pass func serialize(): return { "direction": direction, "strength": strength } func deserialize(data): set_direction(data["direction"]) set_strength(data["strength"]) func _power_status_changed(powered): if powered: force = max_force $Light2D.enabled = true else: force = 0 $Light2D.enabled = false