Skip to content

Commit 5be0023

Browse files
committed
fix menu controls
1 parent f1556e4 commit 5be0023

File tree

11 files changed

+103
-34
lines changed

11 files changed

+103
-34
lines changed
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
Version: 2.4.2
1+
Version: 2.4.3

current-scripts/Demos/useful-scripts/objects/obj_column_menu/Step_1.gml

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,21 +23,24 @@ if (control_state.pressed_state[MENU_CONTROLS.LEFT]) {
2323
var _item = items[| pos];
2424

2525
if (ds_list_find_index(_item.types, "spinner") != -1)
26-
self.handle_spinner(_item, -1);
26+
self.handle_spinner_change(_item, -1);
2727
}
2828

2929
if (control_state.pressed_state[MENU_CONTROLS.RIGHT]) {
3030
var _item = items[| pos];
3131

3232
if (ds_list_find_index(_item.types, "spinner") != -1)
33-
self.handle_spinner(_item, 1);
33+
self.handle_spinner_change(_item, 1);
3434
}
3535

3636
if (control_state.pressed_state[MENU_CONTROLS.CONFIRM]) {
3737
var _item = items[| pos];
3838

39-
if (ds_list_find_index(_item.types, "selectable") != -1)
40-
self.handle_selectable(_item);
39+
if (ds_list_find_index(_item.types, "spinner") != -1)
40+
self.handle_spinner_confirm(_item);
41+
42+
else if (ds_list_find_index(_item.types, "selectable") != -1)
43+
self.handle_selectable_confirm(_item);
4144

4245
else if (ds_list_find_index(_item.types, "keyconfig") != -1)
4346
self.handle_key_config(_item);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ my_player.set_control_map(CONTROL_TYPE.KEYBOARD, CONTROL_TYPE.KEYBOARD, CONTROLS
2020
my_player.set_control_map(CONTROL_TYPE.KEYBOARD, CONTROL_TYPE.KEYBOARD, CONTROLS.A, ord("A"));
2121
my_player.set_control_map(CONTROL_TYPE.KEYBOARD, CONTROL_TYPE.KEYBOARD, CONTROLS.B, ord("B"));
2222
my_player.set_control_map(CONTROL_TYPE.KEYBOARD, CONTROL_TYPE.KEYBOARD, CONTROLS.X, ord("X"));
23-
my_player.set_control_map(CONTROL_TYPE.KEYBOARD, CONTROL_TYPE.MOUSE, CONTROLS.Y, mb_left);
23+
my_player.set_control_map(CONTROL_TYPE.KEYBOARD, CONTROL_TYPE.KEYBOARD, CONTROLS.Y, ord("Y"));
2424

2525
my_player.set_control_map(CONTROL_TYPE.GAMEPAD, -1, CONTROLS.A, gp_face1);
2626
my_player.set_control_map(CONTROL_TYPE.GAMEPAD, -1, CONTROLS.B, gp_face2);

current-scripts/Demos/useful-scripts/objects/obj_control_manager_demo/Draw_0.gml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
for (var i=0; i<num_controls; i++) {
2-
draw_text(8, i*32 + 16, control_labels[i] + ": " + string(my_player.get_control_state(i, CONTROL_STATE.HELD)));
2+
draw_text(8, i*32 + 16, string(control_labels[i]) + ": " + string(my_player.get_control_state(i, CONTROL_STATE.HELD)));
33
}
44

55
// for (i=0; i<8; i++) {

current-scripts/Demos/useful-scripts/objects/obj_control_manager_demo/obj_control_manager_demo.yy

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 41 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
if (keyboard_check_pressed(vk_anykey)) {
22
if (active_key_config != noone) {
3-
self.handle_key_config(active_key_config);
3+
self.handle_key_config_change(active_key_config);
4+
exit;
45
}
56
}
67

@@ -9,44 +10,73 @@ if (!enabled) exit;
910
control_state.poll_input();
1011

1112
if (control_state.pressed_state[MENU_CONTROLS.UP]) {
12-
pos.y = wrap(pos.y-1, 0, ds_grid_height(items)-1);
13+
var _cur_pos = pos.y;
14+
var _item = -1;
15+
16+
do {
17+
pos.y = wrap(pos.y-1, 0, ds_grid_height(items)-1);
18+
_item = items[# pos.x, pos.y];
19+
} until (is_struct(_item) || _cur_pos == pos.y)
20+
1321
audio_play_sound(cursor_move_sfx, 1, false);
1422
}
1523

1624
if (control_state.pressed_state[MENU_CONTROLS.DOWN]) {
17-
pos.y = wrap(pos.y+1, 0, ds_grid_height(items)-1);
25+
var _cur_pos = pos.y;
26+
var _item = -1;
27+
28+
do {
29+
pos.y = wrap(pos.y+1, 0, ds_grid_height(items)-1);
30+
_item = items[# pos.x, pos.y];
31+
} until (is_struct(_item) || _cur_pos == pos.y)
32+
1833
audio_play_sound(cursor_move_sfx, 1, false);
1934
}
2035

2136
if (control_state.pressed_state[MENU_CONTROLS.LEFT]) {
22-
pos.x = wrap(pos.x-1, 0, ds_grid_width(items)-1);
37+
var _cur_pos = pos.x;
38+
var _item = -1;
39+
40+
do {
41+
pos.x = wrap(pos.x-1, 0, ds_grid_width(items)-1);
42+
_item = items[# pos.x, pos.y];
43+
} until (is_struct(_item) || _cur_pos == pos.x)
44+
2345
audio_play_sound(cursor_move_sfx, 1, false);
2446

25-
var _item = items[# pos.x, pos.y];
2647
if (!is_struct(_item)) return;
2748

2849
if (ds_list_find_index(_item.types, "spinner") != -1)
29-
self.handle_spinner(_item, -1);
50+
self.handle_spinner_change(_item, -1);
3051
}
3152

3253
if (control_state.pressed_state[MENU_CONTROLS.RIGHT]) {
33-
pos.x = wrap(pos.x+1, 0, ds_grid_width(items)-1);
54+
var _cur_pos = pos.x;
55+
var _item = -1;
56+
57+
do {
58+
pos.x = wrap(pos.x+1, 0, ds_grid_width(items)-1);
59+
_item = items[# pos.x, pos.y];
60+
} until (is_struct(_item) || _cur_pos == pos.x)
61+
3462
audio_play_sound(cursor_move_sfx, 1, false);
3563

36-
var _item = items[# pos.x, pos.y];
3764
if (!is_struct(_item)) return;
3865

3966
if (ds_list_find_index(_item.types, "spinner") != -1)
40-
self.handle_spinner(_item, 1);
67+
self.handle_spinner_change(_item, 1);
4168
}
4269

4370
if (control_state.pressed_state[MENU_CONTROLS.CONFIRM]) {
4471
var _item = items[# pos.x, pos.y];
4572
if (!is_struct(_item)) return;
4673

74+
if (ds_list_find_index(_item.types, "spinner") != -1)
75+
self.handle_spinner_confirm(_item);
76+
4777
if (ds_list_find_index(_item.types, "selectable") != -1)
48-
self.handle_selectable(_item);
78+
self.handle_selectable_confirm(_item);
4979

5080
else if (ds_list_find_index(_item.types, "keyconfig") != -1)
51-
self.handle_key_config(_item);
81+
self.handle_key_config_change(_item);
5282
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ 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,
48+
on_change_args: -1,
4749
on_confirm_func: -1,
4850
on_confirm_args: [-1],
4951
silent_on_confirm: false

current-scripts/Demos/useful-scripts/options/operagx/options_operagx.yy

Lines changed: 13 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

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

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ function menu_base_init(_menu_font, _cursor_spr) {
77
cursor_width = sprite_get_width(_cursor_spr);
88
}
99

10-
/// @func handle_selectable(item)
10+
/// @func handle_selectable_confirm(item)
1111
/// @param {MenuSelectable} item
12-
function handle_selectable(_item) {
12+
function handle_selectable_confirm(_item) {
1313
if (script_exists(_item.on_confirm_func)) {
1414
script_execute(_item.on_confirm_func, _item.on_confirm_args);
1515
}
@@ -19,30 +19,47 @@ function handle_selectable(_item) {
1919
}
2020
}
2121

22-
/// @func handle_spinner(item, direction)
22+
/// @func handle_spinner_confirm(item)
23+
/// @param {MenuSpinner} item
24+
function handle_spinner_confirm(_item) {
25+
if (script_exists(_item.on_confirm_func)) {
26+
script_execute(_item.on_confirm_func, _item.cur_index, _item.values[_item.cur_index], _item.on_confirm_args);
27+
}
28+
29+
if (!_item.silent_on_confirm && audio_exists(cursor_confirm_sfx)) {
30+
audio_play_sound(cursor_confirm_sfx, 1, false);
31+
}
32+
}
33+
34+
/// @func handle_spinner_change(item, direction)
2335
/// @param {MenuSpinner} item
2436
/// @param {number} direction -1 or 1
25-
function handle_spinner(_item, _direction) {
37+
function handle_spinner_change(_item, _direction) {
2638
var _num_values = array_length(_item.values);
2739
_item.cur_index = wrap(_item.cur_index+_direction, 0, _num_values-1);
2840

2941
if (script_exists(_item.on_change_func)) {
30-
script_execute(_item.on_change_func, _item.on_change_args);
42+
script_execute(_item.on_change_func, _item.cur_index, _item.values[_item.cur_index], _item.on_change_args);
3143
}
3244

3345
if (!_item.silent_on_change && audio_exists(cursor_change_sfx)) {
3446
audio_play_sound(cursor_change_sfx, 1, false);
3547
}
3648
}
3749

38-
/// @func handle_key_config(item)
50+
/// @func handle_key_config_change(item)
3951
/// @param {MenuSpinner} item
40-
function handle_key_config(_item) {
52+
function handle_key_config_change(_item) {
4153
if (_item.discovery_mode) {
4254
_item.keycode = keyboard_key;
4355
_item.discovery_mode = false;
4456
self.active_key_config = noone;
4557
self.enabled = true;
58+
59+
if (script_exists(_item.on_change_func)) {
60+
script_execute(_item.on_change_func, keyboard_key, _item.on_change_args);
61+
}
62+
4663
io_clear();
4764
} else {
4865
_item.discovery_mode = true;

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

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ enum MENU_CONTROLS {
88
MAX
99
}
1010

11-
function MenuControlState() constructor {
11+
function MenuControlState(_control_manager) constructor {
1212
pressed_state = [];
1313
held_state = [];
1414

@@ -73,8 +73,11 @@ function MenuSelectable(_config) : MenuItem(_config) constructor {
7373
// - {array} on_change_args
7474
// - {boolean} silent_on_confirm
7575
// - {boolean} silent_on_change
76-
function MenuSpinner(_config) : MenuSelectable(_config) constructor {
76+
function MenuSpinner(_config) : MenuItem(_config) constructor {
7777
ds_list_add(types, "spinner");
78+
on_confirm_func = asset_get_index(_config.on_confirm_func);
79+
on_confirm_args = _config.on_confirm_args;
80+
silent_on_confirm = _config.silent_on_confirm;
7881
values = _config.values;
7982
cur_index = clamp(_config.init_index, 0, array_length(values));
8083
on_change_func = asset_get_index(_config.on_change_func);
@@ -90,13 +93,13 @@ function MenuSpinner(_config) : MenuSelectable(_config) constructor {
9093
/// @param config
9194
// - {string} label
9295
// - {array} inital_keycode
93-
// - {function} on_confirm_func
94-
// - {array} on_confirm_args
96+
// - {function} on_change_func
97+
// - {array} on_change_args
9598
// - {boolean} silent_on_confirm
9699
function MenuKeyConfig(_config) : MenuItem(_config) constructor {
97100
ds_list_add(types, "keyconfig");
98-
on_confirm_func = asset_get_index(_config.on_confirm_func);
99-
on_confirm_args = _config.on_confirm_args;
101+
on_change_func = asset_get_index(_config.on_change_func);
102+
on_change_args = _config.on_change_args;
100103
silent_on_confirm = _config.silent_on_confirm;
101104
keycode = _config.inital_keycode;
102105
discovery_mode = false;

0 commit comments

Comments
 (0)