everything_has_a_price_jam/user_context.gd
2026-09-27 13:54:56 -06:00

82 lines
2 KiB
GDScript

extends Node
signal currency_inspect(c: Currency)
signal member_inspect(c: CurrencyMemberSprite)
@warning_ignore("unused_signal")
signal open_inbox
signal set_target_for(who: CurrencyMemberSprite, target: Node2D)
var selected_member: CurrencyMemberSprite = null
var focused_members: Array[CurrencyMemberSprite] = []
var game_paused: bool = false
@warning_ignore("unused_signal")
signal chart(b: bool)
signal paused(b: bool)
signal selected_member_change(current: CurrencyMemberSprite)
var modal_command: Command
signal modal_command_change(c: Command)
var zoom_off: bool = false
func modal(c: Command):
modal_command = c
modal_command_change.emit(c)
var is_inspecting: bool
func _ready() -> void:
paused.connect(on_paused)
currency_inspect.connect(on_inspect)
member_inspect.connect(on_inspect)
modal_command_change.connect(on_modal_command_change)
func on_modal_command_change(c: Command):
modal_command = c
func on_inspect(_c):
is_inspecting = true
func on_paused(b: bool):
game_paused = b
func select_focused_member():
if focused_member() == null:
return
if modal_command is MoveCommand:
if focused_member() == selected_member:
modal(null)
return
set_target_for.emit(selected_member, focused_member().get_parent())
return
var candidate := focused_member()
if candidate == null:
return
if selected_member != null:
unselect_member()
selected_member = candidate
selected_member.tree_exiting.connect(unselect_member)
selected_member_change.emit(selected_member)
UserContext.member_inspect.emit(selected_member)
func unselect_member():
if selected_member == null:
return
selected_member.tree_exiting.disconnect(unselect_member)
selected_member = null
modal(null)
func focused_member() -> CurrencyMemberSprite:
if focused_members.size() == 0:
return null
return focused_members[focused_members.size()-1]
func focus_member(member: CurrencyMemberSprite):
focused_members.append(member)
func unfocus_member(member: CurrencyMemberSprite):
var i := focused_members.find(member)
if i == -1:
return
focused_members.remove_at(i)