2023-08-04 18:17:08 +09:30
|
|
|
extends Panel
|
|
|
|
|
2023-12-09 22:30:43 +10:30
|
|
|
onready var sidebar_classic := $'%sidebar_classic'
|
|
|
|
onready var sbc_menu_item_containers := [$'%menu_items_1', $'%menu_items_2']
|
|
|
|
|
|
|
|
onready var characters_container := $'%characters_container'
|
|
|
|
onready var items_menu := $'%items_menu'
|
|
|
|
onready var items_container := $'%items_container'
|
|
|
|
|
|
|
|
enum Submenu {PARTY, ITEMS}
|
|
|
|
const str2submenu := {
|
|
|
|
'party': Submenu.PARTY,
|
|
|
|
'items': Submenu.ITEMS,
|
|
|
|
}
|
|
|
|
var submenu2sbc_label := {}
|
|
|
|
onready var submenu2widget := {
|
|
|
|
Submenu.PARTY: characters_container,
|
|
|
|
Submenu.ITEMS: items_menu,
|
|
|
|
}
|
|
|
|
|
2023-08-04 18:17:08 +09:30
|
|
|
func update_labels(data: Dictionary):
|
|
|
|
var characters = data.characters
|
2023-12-09 22:30:43 +10:30
|
|
|
var character_panels = characters_container.get_children()
|
2023-08-04 18:17:08 +09:30
|
|
|
for i in len(characters):
|
|
|
|
var p = character_panels[i]
|
|
|
|
p.visible = not characters[i].is_absent
|
|
|
|
p.update_labels(data, i)
|
|
|
|
|
2023-09-21 15:26:10 +09:30
|
|
|
$'%lbl_time'.text = Common.game_time_frames_to_hhmm(data.game_time_frames)
|
|
|
|
$'%lbl_gilcount'.text = '%d' % data.current_gil
|
2023-08-04 18:17:08 +09:30
|
|
|
|
2023-12-09 22:30:43 +10:30
|
|
|
for child in items_container.get_children():
|
|
|
|
child.queue_free()
|
|
|
|
|
|
|
|
for i in 256:
|
|
|
|
var item_id = data.inventory_item_ids[i]
|
|
|
|
var item_qty = data.inventory_item_qtys[i]
|
|
|
|
var item_name = StringLoader.tables.items[item_id]
|
|
|
|
var lbl_item_name := Label.new()
|
|
|
|
var lbl_item_qty := Label.new()
|
|
|
|
lbl_item_qty.align = HALIGN_RIGHT
|
|
|
|
if item_qty > 0:
|
|
|
|
lbl_item_name.text = item_name
|
|
|
|
lbl_item_qty.text = 'x%d'%item_qty
|
|
|
|
items_container.add_child(lbl_item_name)
|
|
|
|
items_container.add_child(lbl_item_qty)
|
|
|
|
|
|
|
|
func _init_sidebar_classic() -> void:
|
|
|
|
for menu_item_container in sbc_menu_item_containers:
|
|
|
|
for label in menu_item_container.get_children():
|
|
|
|
var submenu = str2submenu.get(label.name, -1)
|
|
|
|
if submenu > -1:
|
|
|
|
self.submenu2sbc_label[submenu] = label
|
|
|
|
|
2023-08-04 18:17:08 +09:30
|
|
|
# Called when the node enters the scene tree for the first time.
|
|
|
|
func _ready() -> void:
|
2023-12-09 22:30:43 +10:30
|
|
|
_init_sidebar_classic()
|
|
|
|
var _err = change_submenu(Submenu.PARTY)
|
|
|
|
|
|
|
|
|
|
|
|
const active_label_colour := Color.yellow
|
|
|
|
const inactive_label_colour := Color.white
|
|
|
|
func change_submenu(submenu_id) -> int:
|
|
|
|
# print(submenu)
|
|
|
|
if not (submenu_id in submenu2widget):
|
|
|
|
return ERR_DOES_NOT_EXIST
|
|
|
|
|
|
|
|
# Make everything inactive/invisible
|
|
|
|
for submenu in submenu2widget.values():
|
|
|
|
submenu.visible = false
|
|
|
|
for label in submenu2sbc_label.values():
|
|
|
|
label.modulate = inactive_label_colour
|
|
|
|
# Make the selected submenu active/visible
|
|
|
|
submenu2widget[submenu_id].visible = true
|
|
|
|
submenu2sbc_label[submenu_id].modulate = active_label_colour
|
|
|
|
return OK
|
|
|
|
|
|
|
|
func change_submenu_by_name(name: String) -> int:
|
|
|
|
var submenu = str2submenu.get(name, -1)
|
|
|
|
if submenu < 0:
|
|
|
|
return ERR_DOES_NOT_EXIST
|
|
|
|
return change_submenu(submenu)
|
2023-08-04 18:17:08 +09:30
|
|
|
|
2023-12-09 22:30:43 +10:30
|
|
|
func _on_sidebar_classic_click(pos: Vector2) -> int:
|
|
|
|
for menu_item_container in sbc_menu_item_containers:
|
|
|
|
var rect: Rect2 = menu_item_container.get_global_rect()
|
|
|
|
if rect.has_point(pos):
|
|
|
|
var local_y := pos.y - rect.position.y
|
|
|
|
var menu_items: Array = menu_item_container.get_children()
|
|
|
|
# A y-check is sufficient if we assume all labels are the same height
|
|
|
|
var label_height: float = menu_items[0].rect_size.y
|
|
|
|
var selected_label: int = int(local_y/label_height)
|
|
|
|
if selected_label < len(menu_items):
|
|
|
|
return change_submenu_by_name(menu_items[selected_label].name)
|
|
|
|
return ERR_CANT_RESOLVE
|
2023-08-04 18:17:08 +09:30
|
|
|
|
2023-12-09 22:30:43 +10:30
|
|
|
func _input(event: InputEvent) -> void:
|
|
|
|
if (event is InputEventMouseButton or event is InputEventScreenTouch) and event.pressed:
|
|
|
|
var pos: Vector2 = event.position
|
|
|
|
if sidebar_classic.get_global_rect().has_point(pos):
|
|
|
|
var _err = _on_sidebar_classic_click(pos)
|