61 lines
1.6 KiB
GDScript
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())
|
|
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)
|