84 lines
1.8 KiB
GDScript
84 lines
1.8 KiB
GDScript
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
|