diff --git a/menus/Base Menu/test_menu_1.tres b/menus/Base Menu/test_menu_1.tres index 1a432ec..8cdbfd3 100644 --- a/menus/Base Menu/test_menu_1.tres +++ b/menus/Base Menu/test_menu_1.tres @@ -15,5 +15,5 @@ item = &"res://scripts/Base/Menu/test.gd" [resource] script = ExtResource("3_ow6va") item_ids = Array[String](["BASE_TEST_TRANSIT", "BASE_TEST_BLANK", "BASE_TEST_BLANK", "BASE_TEST_BLANK", "BASE_TEST_BUTTON", "BASE_TEST_BLANK", "BASE_TEST_BLANK", "BASE_TEST_BLANK"]) -item_actions = Array[int]([0, 3, 3, 3, 1, 3, 3, 3]) +item_actions = Array[int]([1, 0, 0, 0, 2, 0, 0, 0]) item_data = Array[Resource("res://scripts/Classes/Menu/menu_resource.gd")]([SubResource("Resource_jjcgb"), null, null, null, SubResource("Resource_b58fs"), null, null, null]) diff --git a/menus/Base Menu/test_menu_2.tres b/menus/Base Menu/test_menu_2.tres index 05e61d3..58f65fb 100644 --- a/menus/Base Menu/test_menu_2.tres +++ b/menus/Base Menu/test_menu_2.tres @@ -15,5 +15,5 @@ item = &"res://menus/Base Menu/test_menu_1.tres" [resource] script = ExtResource("3_frt6d") item_ids = Array[String](["BASE_TEST_BLANK", "BASE_TEST_BUTTON", "BASE_TEST_BLANK", "BASE_TEST_BLANK", "BASE_TEST_BLANK", "BASE_TEST_TRANSIT", "BASE_TEST_BLANK", "BASE_TEST_BLANK"]) -item_actions = Array[int]([3, 1, 3, 3, 3, 0, 3, 3]) +item_actions = Array[int]([0, 2, 0, 0, 0, 1, 0, 0]) item_data = Array[Resource("res://scripts/Classes/Menu/menu_resource.gd")]([null, SubResource("Resource_dbknc"), null, null, null, SubResource("Resource_rxr54"), null, null]) diff --git a/scripts/Base/Menu/send_message.gd b/scripts/Base/Menu/send_message.gd new file mode 100644 index 0000000..2176a5b --- /dev/null +++ b/scripts/Base/Menu/send_message.gd @@ -0,0 +1,7 @@ +extends MenuAction + +## Message which will be send on click +var msg: Message + +func action(): + get_parent().transit_menu(id) diff --git a/scripts/Base/actions_menu.gd b/scripts/Base/actions_menu.gd index bb439d5..d779464 100644 --- a/scripts/Base/actions_menu.gd +++ b/scripts/Base/actions_menu.gd @@ -1,5 +1,6 @@ extends Node +## Array of menu actions represented as buttons @onready var actions: Array[Button] = [ $Action1, $Action2, @@ -11,6 +12,7 @@ extends Node $Action8 ] +## Script attached to transit buttons const TRANSIT_BUTTON_SCRIPT = preload("res://scripts/Classes/Menu/transit_button.gd") @export var menu: Menu = null @@ -22,22 +24,27 @@ func _ready(): func load_menu(): # iterating through all actions for i in range(len(menu.item_ids)): + # disconnect previous action if actions[i] is TransitButton: actions[i].button_up.disconnect(transit_menu) elif actions[i] is MenuAction: actions[i].button_up.disconnect(actions[i].action) + # disconnect previous script actions[i].set_script(null) actions[i].text = menu.item_ids[i] + # assign new script match menu.item_actions[i]: Menu.Action.TransitAction: actions[i].set_script(TRANSIT_BUTTON_SCRIPT) - actions[i].id = i Menu.Action.ButtonAction: - actions[i].set_script(menu.item_data[i].load()) + actions[i].set_script(menu.item_data[i].load_script()) + Menu.Action.ComboAction: + actions[i].set_script(menu.item_data[i].load_script()) + actions[i].id = i ## Called with transit_button, changes current menu func transit_menu(id: int): assert(id < len(menu.item_ids) and id >= 0) - var new_menu = menu.item_data[id].load().duplicate() + var new_menu = menu.item_data[id].load_menu().duplicate() menu = new_menu load_menu() diff --git a/scripts/Classes/Menu/combo_menu_resource.gd b/scripts/Classes/Menu/combo_menu_resource.gd new file mode 100644 index 0000000..084d409 --- /dev/null +++ b/scripts/Classes/Menu/combo_menu_resource.gd @@ -0,0 +1,16 @@ +extends MenuResource + +class_name ComboMenuResource + +## Script path +@export var item_script: StringName +## Menu that will be transitioned to +@export var item_menu: StringName + +## Returns script resource +func load_script() -> GDScript: + return ResourceLoader.load(item_script) + +## Returns menu resource +func load_menu() -> Menu: + return ResourceLoader.load(item_menu) diff --git a/scripts/Classes/Menu/menu.gd b/scripts/Classes/Menu/menu.gd index 610b7d3..3160b2d 100644 --- a/scripts/Classes/Menu/menu.gd +++ b/scripts/Classes/Menu/menu.gd @@ -4,16 +4,17 @@ extends Resource class_name Menu enum Action { + ## Represents lack of action, should not have resource in item_data + NoneAction, ## Represents when this menu should be replaced with another. - ## Attach Menu next to it in item_data + ## Attach MenuMenuResource next to it in item_data TransitAction, ## Represents scripts which should be attached to button on menu startup - ## Attach Script next to it in item_data + ## Attach ScriptMenuResource next to it in item_data ButtonAction, - ## WIP, should represent LineEdit or some other input control - InputAction, - ## WIP - OtherAction + ## Represents button script with transition after its execution + ## Attach ComboMenuResource next to it in item_data + ComboAction } ## Action string IDs. Should have same size as item_actions diff --git a/scripts/Base/menu_action.gd b/scripts/Classes/Menu/menu_action.gd similarity index 90% rename from scripts/Base/menu_action.gd rename to scripts/Classes/Menu/menu_action.gd index 31e13dc..757afd5 100644 --- a/scripts/Base/menu_action.gd +++ b/scripts/Classes/Menu/menu_action.gd @@ -2,6 +2,8 @@ extends Button class_name MenuAction +var id: int = -1 + func _init(): get_tree().create_timer(0.05).timeout.connect(_ready) diff --git a/scripts/Classes/Menu/menu_menu_resource.gd b/scripts/Classes/Menu/menu_menu_resource.gd index c7bf5a3..c4fe598 100644 --- a/scripts/Classes/Menu/menu_menu_resource.gd +++ b/scripts/Classes/Menu/menu_menu_resource.gd @@ -4,5 +4,6 @@ class_name MenuMenuResource @export var item: StringName -func load() -> Menu: +## Returns menu resource +func load_menu() -> Menu: return ResourceLoader.load(item) diff --git a/scripts/Classes/Menu/script_menu_resource.gd b/scripts/Classes/Menu/script_menu_resource.gd index a0d284f..1493d07 100644 --- a/scripts/Classes/Menu/script_menu_resource.gd +++ b/scripts/Classes/Menu/script_menu_resource.gd @@ -4,5 +4,6 @@ class_name ScriptMenuResource @export var item: StringName -func load() -> GDScript: +## Returns script resource +func load_script() -> GDScript: return ResourceLoader.load(item) diff --git a/scripts/Classes/message.gd b/scripts/Classes/message.gd new file mode 100644 index 0000000..5376727 --- /dev/null +++ b/scripts/Classes/message.gd @@ -0,0 +1,14 @@ +## Represents string that differs in fact value and a value which should be displayed to player +class_name Message + +## Fact value +var fact: String +## Display value +var shown: String + +## Returns message with set fact and shown strings +static func create(fact: String, shown: String) -> Message: + var msg = Message.new() + msg.fact = fact + msg.shown = shown + return msg diff --git a/translations/gui.en.translation b/translations/gui.en.translation index a1417ee..6c37f44 100644 Binary files a/translations/gui.en.translation and b/translations/gui.en.translation differ diff --git a/translations/gui.ru.translation b/translations/gui.ru.translation index ff267cc..f4b13b0 100644 Binary files a/translations/gui.ru.translation and b/translations/gui.ru.translation differ