Fully working menu system
This commit is contained in:
parent
1fa10004b3
commit
6eef2c781c
11 changed files with 93 additions and 9 deletions
19
menus/Base Menu/test_menu_1.tres
Normal file
19
menus/Base Menu/test_menu_1.tres
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
[gd_resource type="Resource" script_class="Menu" load_steps=6 format=3 uid="uid://c4jg3vwtxskjm"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/Classes/Menu/menu_menu_resource.gd" id="1_idjuj"]
|
||||
[ext_resource type="Script" path="res://scripts/Classes/Menu/script_menu_resource.gd" id="3_6o5so"]
|
||||
[ext_resource type="Script" path="res://scripts/Classes/Menu/menu.gd" id="3_ow6va"]
|
||||
|
||||
[sub_resource type="Resource" id="Resource_jjcgb"]
|
||||
script = ExtResource("1_idjuj")
|
||||
item = &"res://menus/Base Menu/test_menu_2.tres"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_b58fs"]
|
||||
script = ExtResource("3_6o5so")
|
||||
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_data = Array[Resource("res://scripts/Classes/Menu/menu_resource.gd")]([SubResource("Resource_jjcgb"), null, null, null, SubResource("Resource_b58fs"), null, null, null])
|
||||
19
menus/Base Menu/test_menu_2.tres
Normal file
19
menus/Base Menu/test_menu_2.tres
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
[gd_resource type="Resource" script_class="Menu" load_steps=6 format=3 uid="uid://d085ddwle8ald"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/Classes/Menu/script_menu_resource.gd" id="2_vxx6s"]
|
||||
[ext_resource type="Script" path="res://scripts/Classes/Menu/menu.gd" id="3_frt6d"]
|
||||
[ext_resource type="Script" path="res://scripts/Classes/Menu/menu_menu_resource.gd" id="3_jtkie"]
|
||||
|
||||
[sub_resource type="Resource" id="Resource_dbknc"]
|
||||
script = ExtResource("2_vxx6s")
|
||||
item = &"res://scripts/Base/Menu/test.gd"
|
||||
|
||||
[sub_resource type="Resource" id="Resource_rxr54"]
|
||||
script = ExtResource("3_jtkie")
|
||||
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_data = Array[Resource("res://scripts/Classes/Menu/menu_resource.gd")]([null, SubResource("Resource_dbknc"), null, null, null, SubResource("Resource_rxr54"), null, null])
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
[gd_scene load_steps=7 format=3 uid="uid://crq284yed2if5"]
|
||||
[gd_scene load_steps=8 format=3 uid="uid://crq284yed2if5"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/Base/base_menu.gd" id="1_3hgu4"]
|
||||
[ext_resource type="Theme" uid="uid://dmb8bcdghdjd" path="res://main_theme.tres" id="1_p1gsn"]
|
||||
|
|
@ -6,6 +6,7 @@
|
|||
[ext_resource type="Texture2D" uid="uid://hxrx87gda3uf" path="res://sprites/Bases/Menu/end_communications.png" id="2_ceeiv"]
|
||||
[ext_resource type="Script" path="res://scripts/Base/actions_menu.gd" id="4_3gtyd"]
|
||||
[ext_resource type="Script" path="res://scripts/Base/close_button.gd" id="4_68ool"]
|
||||
[ext_resource type="Resource" uid="uid://c4jg3vwtxskjm" path="res://menus/Base Menu/test_menu_1.tres" id="5_rkret"]
|
||||
|
||||
[node name="BaseMenu" type="Control"]
|
||||
layout_mode = 3
|
||||
|
|
@ -113,6 +114,7 @@ grow_horizontal = 2
|
|||
grow_vertical = 2
|
||||
columns = 2
|
||||
script = ExtResource("4_3gtyd")
|
||||
menu = ExtResource("5_rkret")
|
||||
metadata/_edit_use_anchors_ = true
|
||||
|
||||
[node name="Action1" type="Button" parent="MenuBackground/ActionsBackground/ActionsMenu"]
|
||||
|
|
|
|||
4
scripts/Base/Menu/test.gd
Normal file
4
scripts/Base/Menu/test.gd
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
extends MenuAction
|
||||
|
||||
func action():
|
||||
print("works")
|
||||
|
|
@ -11,27 +11,33 @@ extends Node
|
|||
$Action8
|
||||
]
|
||||
|
||||
@export var menu: Menu
|
||||
const TRANSIT_BUTTON_SCRIPT = preload("res://scripts/Classes/Menu/transit_button.gd")
|
||||
|
||||
@export var menu: Menu = null
|
||||
|
||||
func _ready():
|
||||
load_menu()
|
||||
|
||||
## Called when menu is changed
|
||||
func load_menu():
|
||||
# iterating through all actions
|
||||
for i in range(len(menu.item_ids)):
|
||||
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)
|
||||
actions[i].set_script(null)
|
||||
actions[i].text = menu.item_ids[i]
|
||||
match menu.item_actions[i]:
|
||||
Menu.Action.TransitAction:
|
||||
actions[i].set_script("res://scripts/Classes/transit_button.gd")
|
||||
actions[i].text = menu.item_ids[i]
|
||||
actions[i].set_script(TRANSIT_BUTTON_SCRIPT)
|
||||
actions[i].id = i
|
||||
Menu.Action.ButtonAction:
|
||||
actions[i].set_script(menu.item_data[i])
|
||||
actions[i].text = menu.item_ids[i]
|
||||
actions[i].set_script(menu.item_data[i].load())
|
||||
|
||||
## 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].duplicate()
|
||||
assert(id < len(menu.item_ids) and id >= 0)
|
||||
var new_menu = menu.item_data[id].load().duplicate()
|
||||
menu = new_menu
|
||||
load_menu()
|
||||
|
|
|
|||
12
scripts/Base/menu_action.gd
Normal file
12
scripts/Base/menu_action.gd
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
extends Button
|
||||
|
||||
class_name MenuAction
|
||||
|
||||
func _init():
|
||||
get_tree().create_timer(0.05).timeout.connect(_ready)
|
||||
|
||||
func _ready():
|
||||
button_up.connect(action)
|
||||
|
||||
func action():
|
||||
pass
|
||||
|
|
@ -21,4 +21,4 @@ enum Action {
|
|||
## Action type. Should have same size as item_ids
|
||||
@export var item_actions: Array[Action]
|
||||
## Should have same size as other arrays
|
||||
@export var item_data: Array
|
||||
@export var item_data: Array[MenuResource]
|
||||
8
scripts/Classes/Menu/menu_menu_resource.gd
Normal file
8
scripts/Classes/Menu/menu_menu_resource.gd
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
extends MenuResource
|
||||
|
||||
class_name MenuMenuResource
|
||||
|
||||
@export var item: StringName
|
||||
|
||||
func load() -> Menu:
|
||||
return ResourceLoader.load(item)
|
||||
3
scripts/Classes/Menu/menu_resource.gd
Normal file
3
scripts/Classes/Menu/menu_resource.gd
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
extends Resource
|
||||
|
||||
class_name MenuResource
|
||||
8
scripts/Classes/Menu/script_menu_resource.gd
Normal file
8
scripts/Classes/Menu/script_menu_resource.gd
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
extends MenuResource
|
||||
|
||||
class_name ScriptMenuResource
|
||||
|
||||
@export var item: StringName
|
||||
|
||||
func load() -> GDScript:
|
||||
return ResourceLoader.load(item)
|
||||
|
|
@ -6,5 +6,8 @@ class_name TransitButton
|
|||
## This is used when button_up is activated
|
||||
var id: int = -1
|
||||
|
||||
func _init():
|
||||
get_tree().create_timer(0.05).timeout.connect(_ready)
|
||||
|
||||
func _ready():
|
||||
button_up.connect(get_parent().transit_menu.bind(id))
|
||||
Loading…
Add table
Add a link
Reference in a new issue