47 lines
1.3 KiB
GDScript
47 lines
1.3 KiB
GDScript
extends Node2D
|
|
|
|
## Currently held structure
|
|
var held_construction : Structure
|
|
|
|
func _ready() -> void:
|
|
GuiEventBus.construction_selected.connect(on_construction_selected)
|
|
|
|
func _input(event: InputEvent) -> void:
|
|
if held_construction == null:
|
|
return
|
|
if event.is_action_pressed("plc_place"):
|
|
var zone = try_get_zone(held_construction.global_position)
|
|
if zone == null:
|
|
held_construction.queue_free()
|
|
else:
|
|
if held_construction.try_place(zone):
|
|
held_construction = null
|
|
if event.is_action_pressed("plc_rotate_up"):
|
|
if held_construction != null:
|
|
held_construction.cycle_up_facing()
|
|
|
|
if event.is_action_pressed("plc_cancel"):
|
|
held_construction.queue_free()
|
|
|
|
func on_construction_selected(constructible : Prototype):
|
|
if held_construction:
|
|
held_construction.queue_free()
|
|
held_construction = constructible.scene.instantiate()
|
|
add_child(held_construction)
|
|
|
|
|
|
func _process(_delta: float) -> void:
|
|
if held_construction == null:
|
|
return
|
|
var mouse_pos = get_global_mouse_position()
|
|
var zone = try_get_zone(mouse_pos)
|
|
if zone and held_construction.can_be_placed(zone):
|
|
global_position = zone.get_placement_position(mouse_pos)
|
|
else:
|
|
global_position = mouse_pos
|
|
|
|
func try_get_zone(point : Vector2) -> PlacementZone:
|
|
for zone in RuntimePlayerData.build_zones:
|
|
if zone.is_global_point_in_zone(point):
|
|
return zone
|
|
return null
|