everything_has_a_price_jam/user_context.gd
2026-09-27 00:14:37 -06:00

61 lines
1.6 KiB
GDScript

extends Node
@warning_ignore("unused_signal")
signal currency_inspect(c: Currency)
@warning_ignore("unused_signal")
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] = []
signal selected_member_change(current: CurrencyMemberSprite)
var modal_command: Command
signal modal_command_change(c: Command)
func modal(c: Command):
modal_command = c
modal_command_change.emit(c)
func select_focused_member():
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
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)