Skip to content

Commit 51776bd

Browse files
committed
improve menu system
1 parent 5be0023 commit 51776bd

File tree

5 files changed

+80
-12
lines changed

5 files changed

+80
-12
lines changed

current-scripts/Demos/useful-scripts/objects/obj_grid_menu_demo/Create_0.gml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ menu.grid_menu_add_selectable(1, 0, {
4444
menu.grid_menu_add_key_config(1, 1, {
4545
label: "Qux",
4646
inital_keycode: vk_space,
47-
on_change_func: -1,
47+
on_change_func: ",
4848
on_change_args: -1,
4949
on_confirm_func: -1,
5050
on_confirm_args: [-1],

current-scripts/Demos/useful-scripts/scripts/column_menu_functions/column_menu_functions.gml

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
// - {sound} cursor_change_sfx
77
// - {sound} cursor_confirm_sfx
88
function column_menu_init(_config) {
9-
self.menu_base_init(_config.font, _config.cursor_spr);
9+
self.menu_base_init(_config.font, _config.cursor_spr);
1010

1111
menu_font = _config.font;
1212
cursor_spr = _config.cursor_spr;
@@ -16,6 +16,22 @@ function column_menu_init(_config) {
1616
cursor_confirm_sfx = _config.cursor_confirm_sfx;
1717
}
1818

19+
/// @func column_menu_get_item_by_index(index)
20+
/// @param {number} index
21+
function column_menu_get_item_by_index(_index) {
22+
return self.items[| _index];
23+
}
24+
25+
/// @func column_menu_get_item_by_label(label)
26+
/// @param {string} label
27+
function column_menu_get_item_by_label(_label) {
28+
for (var i=0; i<num_items; i++) {
29+
if (self.items[| i].label == _label) return self.items[| i];
30+
}
31+
32+
return noone;
33+
}
34+
1935
/// @func column_menu_add_selectable(config)
2036
/// @param config
2137
// - {string} label
@@ -26,6 +42,8 @@ function column_menu_add_selectable(_config) {
2642
var _new = new MenuSelectable(_config);
2743
ds_list_add(items, _new);
2844
num_items++;
45+
_new.parent_menu = self;
46+
return _new;
2947
}
3048

3149
/// @func column_menu_add_spinner(config)
@@ -43,6 +61,8 @@ function column_menu_add_spinner(_config) {
4361
var _new = new MenuSpinner(_config);
4462
ds_list_add(items, _new);
4563
num_items++;
64+
_new.parent_menu = self;
65+
return _new;
4666
}
4767

4868
/// @param column_menu_add_key_config(config)
@@ -56,4 +76,6 @@ function column_menu_add_key_config(_config) {
5676
var _new = new MenuKeyConfig(_config);
5777
ds_list_add(items, _new);
5878
num_items++;
79+
_new.parent_menu = self;
80+
return _new;
5981
}

current-scripts/Demos/useful-scripts/scripts/grid_menu_functions/grid_menu_functions.gml

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
// - {sound} cursor_change_sfx
1010
// - {sound} cursor_confirm_sfx
1111
function grid_menu_init(_config) {
12-
self.menu_base_init(_config.font, _config.cursor_spr);
13-
12+
self.menu_base_init(_config.font, _config.cursor_spr);
13+
1414
column_width = _config.column_width;
1515
menu_font = _config.font;
1616
cursor_spr = _config.cursor_spr;
@@ -22,6 +22,28 @@ function grid_menu_init(_config) {
2222
ds_grid_resize(items, _config.width, _config.height);
2323
}
2424

25+
/// @func grid_menu_get_item_by_index(x, y)
26+
/// @param {number} x
27+
/// @param {number} y
28+
function grid_menu_get_item_by_index(_x, _y) {
29+
return self.items[# _x, _y];
30+
}
31+
32+
/// @func grid_menu_get_item_by_label(label)
33+
/// @param {string} label
34+
function grid_menu_get_item_by_label(_label) {
35+
var _width = ds_grid_width(items);
36+
var _height = ds_grid_height(items);
37+
38+
for (var i=0; i<_width; i++) {
39+
for (var j=0; j<_height; j++) {
40+
if (self.items[# i, j].label == _label) return self.items[# i, j];
41+
}
42+
}
43+
44+
return noone;
45+
}
46+
2547
/// @func grid_menu_add_selectable(x, y, config)
2648
/// @param x
2749
/// @param y
@@ -36,7 +58,9 @@ function grid_menu_add_selectable(_x, _y, _config) {
3658
return;
3759

3860
var _new = new MenuSelectable(_config);
61+
_new.parent_menu = self;
3962
items[# _x, _y] = _new;
63+
return _new;
4064
}
4165

4266
/// @func grid_menu_add_spinner(x, y, config)
@@ -58,7 +82,9 @@ function grid_menu_add_spinner(_x, _y, _config) {
5882
return;
5983

6084
var _new = new MenuSpinner(_config);
85+
_new.parent_menu = self;
6186
items[# _x, _y] = _new;
87+
return _new;
6288
}
6389

6490
/// @param grid_menu_add_key_config(x, y, config)
@@ -76,5 +102,7 @@ function grid_menu_add_key_config(_x, _y, _config) {
76102
return;
77103

78104
var _new = new MenuKeyConfig(_config);
105+
_new.parent_menu = self;
79106
items[# _x, _y] = _new;
107+
return _new;
80108
}

current-scripts/Demos/useful-scripts/scripts/menu_base_functions/menu_base_functions.gml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,13 @@ function handle_spinner_change(_item, _direction) {
3939
_item.cur_index = wrap(_item.cur_index+_direction, 0, _num_values-1);
4040

4141
if (script_exists(_item.on_change_func)) {
42-
script_execute(_item.on_change_func, _item.cur_index, _item.values[_item.cur_index], _item.on_change_args);
42+
script_execute(
43+
_item.on_change_func,
44+
_item.cur_index,
45+
_item.values[_item.cur_index],
46+
_direction,
47+
_item.on_change_args
48+
);
4349
}
4450

4551
if (!_item.silent_on_change && audio_exists(cursor_change_sfx)) {

current-scripts/Demos/useful-scripts/scripts/menu_base_structs/menu_base_structs.gml

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ function MenuItem(_config) constructor {
4141
types = ds_list_create();
4242
ds_list_add(types, "item");
4343
label = _config.label;
44+
parent_menu = noone;
4445

4546
function destroy() {
4647
ds_list_destroy(types);
@@ -61,28 +62,39 @@ function MenuSelectable(_config) : MenuItem(_config) constructor {
6162
silent_on_confirm = _config.silent_on_confirm;
6263
}
6364

64-
65-
/// @func MenuSpinner(config)
65+
/// @func MenuSpinnerBase(config)
6666
/// @param config
6767
// - {string} label
68-
// - {array} values
69-
// - {integer} init_index
7068
// - {function} on_confirm_func
7169
// - {array} on_confirm_args
7270
// - {function} on_change_func
7371
// - {array} on_change_args
7472
// - {boolean} silent_on_confirm
7573
// - {boolean} silent_on_change
76-
function MenuSpinner(_config) : MenuItem(_config) constructor {
74+
function MenuSpinnerBase(_config) : MenuItem(_config) constructor {
7775
ds_list_add(types, "spinner");
7876
on_confirm_func = asset_get_index(_config.on_confirm_func);
7977
on_confirm_args = _config.on_confirm_args;
8078
silent_on_confirm = _config.silent_on_confirm;
81-
values = _config.values;
82-
cur_index = clamp(_config.init_index, 0, array_length(values));
8379
on_change_func = asset_get_index(_config.on_change_func);
8480
on_change_args = _config.on_change_args;
8581
silent_on_change = _config.silent_on_change;
82+
}
83+
84+
/// @func MenuSpinner(config)
85+
/// @param config
86+
// - {string} label
87+
// - {array} values
88+
// - {integer} init_index
89+
// - {function} on_confirm_func
90+
// - {array} on_confirm_args
91+
// - {function} on_change_func
92+
// - {array} on_change_args
93+
// - {boolean} silent_on_confirm
94+
// - {boolean} silent_on_change
95+
function MenuSpinner(_config) : MenuSpinnerBase(_config) constructor {
96+
values = _config.values;
97+
cur_index = clamp(_config.init_index, 0, array_length(values));
8698

8799
function get_full_label() {
88100
return concat(label, ": ", values[cur_index]);

0 commit comments

Comments
 (0)