Skip to content

Commit 49c09eb

Browse files
committed
spinner
1 parent 38cc9eb commit 49c09eb

File tree

14 files changed

+261
-23
lines changed

14 files changed

+261
-23
lines changed

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

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,21 @@ room_names = [
2424
];
2525

2626
menu = instance_create_layer(32, 64, layer, obj_menu);
27-
menu.menu_init(fnt_demo, spr_arrow, "menu_demo_control_handler");
27+
menu.menu_init({
28+
font: fnt_demo,
29+
cursor_spr: spr_arrow,
30+
cursor_move_sfx: snd_menu_move,
31+
cursor_change_sfx: -1,
32+
cursor_confirm_sfx: -1,
33+
control_handler: "menu_demo_control_handler"
34+
});
2835
menu.line_spacing = 16;
2936

3037
for (var i=0; i<num_rooms; i++) {
31-
menu.add_menu_selectable(room_names[i], "go_to_demo", [ rooms[i] ]);
38+
menu.add_menu_selectable({
39+
label: room_names[i],
40+
on_confirm_func: "go_to_demo",
41+
on_confirm_args: [ rooms[i] ],
42+
silent_on_confirm: false
43+
});
3244
}

current-scripts/Demos/useful-scripts/objects/obj_menu/CleanUp_0.gml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
for (var i=0; i<num_items; i++) {
2+
items[| i].destroy();
23
delete items[| i];
34
}
45

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,20 @@
11
for (var i=0; i<num_items; i++) {
2-
draw_text(x + cursor_width + cursor_padding, y + (item_height + line_spacing) * i, items[| i].label);
2+
var _item = items[| i];
3+
var _type = _item.types[| ds_list_size(_item.types)-1];
4+
5+
switch (_type) {
6+
case "item":
7+
case "selectable":
8+
draw_text(x + cursor_width + cursor_padding, y + (item_height + line_spacing) * i, _item.label);
9+
break;
10+
11+
case "spinner":
12+
draw_text(x + cursor_width + cursor_padding, y + (item_height + line_spacing) * i, _item.get_full_label());
13+
break;
14+
15+
default:
16+
draw_text(x + cursor_width + cursor_padding, y + (item_height + line_spacing) * i, _item.label);
17+
}
318
}
419

520
draw_sprite(cursor_spr, 0, x, y + (item_height + line_spacing) * pos);

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

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,58 @@ control_state.poll_input();
22

33
if (control_state.pressed_state[MENU_CONTROLS.UP]) {
44
pos = wrap(pos-1, 0, num_items-1);
5+
audio_play_sound(cursor_move_sfx, 1, false);
56
}
67

78
if (control_state.pressed_state[MENU_CONTROLS.DOWN]) {
89
pos = wrap(pos+1, 0, num_items-1);
10+
audio_play_sound(cursor_move_sfx, 1, false);
11+
}
12+
13+
if (control_state.pressed_state[MENU_CONTROLS.LEFT]) {
14+
var _item = items[| pos];
15+
16+
if (ds_list_find_index(_item.types, "spinner") != -1) {
17+
var _num_values = array_length(_item.values);
18+
_item.cur_index = wrap(_item.cur_index-1, 0, _num_values-1);
19+
20+
if (script_exists(_item.on_change_func)) {
21+
script_execute(_item.on_change_func, _item.on_change_args);
22+
}
23+
24+
if (!_item.silent_on_change && audio_exists(cursor_change_sfx)) {
25+
audio_play_sound(cursor_change_sfx, 1, false);
26+
}
27+
}
28+
}
29+
30+
if (control_state.pressed_state[MENU_CONTROLS.RIGHT]) {
31+
var _item = items[| pos];
32+
33+
if (ds_list_find_index(_item.types, "spinner") != -1) {
34+
var _num_values = array_length(_item.values);
35+
_item.cur_index = wrap(_item.cur_index+1, 0, _num_values-1);
36+
37+
if (script_exists(_item.on_change_func)) {
38+
script_execute(_item.on_change_func, _item.on_change_args);
39+
}
40+
41+
if (!_item.silent_on_change && audio_exists(cursor_change_sfx)) {
42+
audio_play_sound(cursor_change_sfx, 1, false);
43+
}
44+
}
945
}
1046

1147
if (control_state.pressed_state[MENU_CONTROLS.CONFIRM]) {
12-
script_execute(items[| pos].on_confirm, items[| pos].args);
48+
var _item = items[| pos];
49+
50+
if (ds_list_find_index(_item.types, "selectable") != -1) {
51+
if (script_exists(_item.on_confirm_func)) {
52+
script_execute(_item.on_confirm_func, _item.on_confirm_args);
53+
}
54+
55+
if (!_item.silent_on_confirm && audio_exists(cursor_confirm_sfx)) {
56+
audio_play_sound(cursor_confirm_sfx, 1, false);
57+
}
58+
}
1359
}

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

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 50 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,52 @@
11
menu = instance_create_layer(32, 32, layer, obj_menu);
2-
menu.menu_init(fnt_demo, spr_arrow, "menu_demo_control_handler");
2+
menu.menu_init({
3+
font: fnt_demo,
4+
cursor_spr: spr_arrow,
5+
cursor_move_sfx: snd_menu_move,
6+
cursor_change_sfx: snd_menu_move,
7+
cursor_confirm_sfx: -1,
8+
control_handler: "menu_demo_control_handler"
9+
});
310

4-
menu.add_menu_selectable("Foo", -1, []);
5-
menu.add_menu_selectable("Bar", -1, []);
6-
menu.add_menu_selectable("Baz", -1, []);
7-
menu.add_menu_selectable("Qux", -1, []);
11+
menu.add_menu_selectable({
12+
label: "Foo",
13+
on_confirm_func: "menu_demo_on_confirm",
14+
on_confirm_args: ["Foo"],
15+
silent_on_confirm: false
16+
});
17+
18+
// - {string} label
19+
// - {array} values
20+
// - {integer} init_index
21+
// - {function} on_confirm_func
22+
// - {array} on_confirm_args
23+
// - {function} on_change_func
24+
// - {array} on_change_args
25+
// - {boolean} silent_on_confirm
26+
// - {boolean} silent_on_change
27+
28+
menu.add_menu_spinner({
29+
label: "Bar",
30+
values: ["A", 1, "B", 2, "C", 3],
31+
init_index: 0,
32+
on_confirm_func: -1,
33+
on_confirm_args: [],
34+
on_change_func: -1,
35+
on_change_args: [],
36+
silent_on_confirm: false,
37+
silent_on_change: false
38+
});
39+
40+
menu.add_menu_selectable({
41+
label: "Baz",
42+
on_confirm_func: "menu_demo_on_confirm",
43+
on_confirm_args: ["Baz"],
44+
silent_on_confirm: false
45+
});
46+
47+
menu.add_menu_selectable({
48+
label: "Qux",
49+
on_confirm_func: "menu_demo_on_confirm",
50+
on_confirm_args: ["Qux"],
51+
silent_on_confirm: false
52+
});
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
function menu_demo_control_handler() {
22
pressed_state[MENU_CONTROLS.UP] = keyboard_check_pressed(vk_up);
33
pressed_state[MENU_CONTROLS.DOWN] = keyboard_check_pressed(vk_down);
4+
pressed_state[MENU_CONTROLS.LEFT] = keyboard_check_pressed(vk_left);
5+
pressed_state[MENU_CONTROLS.RIGHT] = keyboard_check_pressed(vk_right);
46
pressed_state[MENU_CONTROLS.CONFIRM] = keyboard_check_pressed(vk_enter);
57

68
held_state[MENU_CONTROLS.UP] = keyboard_check(vk_up);
79
held_state[MENU_CONTROLS.DOWN] = keyboard_check(vk_down);
10+
held_state[MENU_CONTROLS.LEFT] = keyboard_check_pressed(vk_left);
11+
held_state[MENU_CONTROLS.RIGHT] = keyboard_check_pressed(vk_right);
812
held_state[MENU_CONTROLS.CONFIRM] = keyboard_check(vk_enter);
913
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
function menu_demo_on_confirm(_args) {
2+
print(":O ", _args[0]);
3+
}

current-scripts/Demos/useful-scripts/scripts/menu_demo_scripts/menu_demo_scripts.yy

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,40 @@
1-
function menu_init(_font, _cursor_sprite, _control_handler) {
2-
menu_font = _font;
3-
cursor_spr = _cursor_sprite;
4-
cursor_padding = sprite_get_width(_cursor_sprite) + 16;
1+
function menu_init(_config) {
2+
menu_font = _config.font;
3+
cursor_spr = _config.cursor_spr;
4+
cursor_padding = sprite_get_width(cursor_spr) + 16;
5+
cursor_move_sfx = _config.cursor_move_sfx;
6+
cursor_change_sfx = _config.cursor_change_sfx;
7+
cursor_confirm_sfx = _config.cursor_confirm_sfx;
58

6-
var _handler = asset_get_index(_control_handler);
9+
var _handler = asset_get_index(_config.control_handler);
710
control_state.control_handler = _handler;
811
}
912

10-
function add_menu_selectable(_label, _on_confirm, _arg_array) {
11-
var _new = new MenuSelectable(_label, _on_confirm, _arg_array);
13+
/// @func add_menu_selectable(config)
14+
/// @param config
15+
// - label
16+
// - on_confirm_func
17+
// - on_confirm_args
18+
// - silent_on_confirm
19+
function add_menu_selectable(_config) {
20+
var _new = new MenuSelectable(_config);
21+
ds_list_add(items, _new);
22+
num_items++;
23+
}
24+
25+
/// @func add_menu_spinner(config)
26+
/// @param config
27+
// - {string} label
28+
// - {array} values
29+
// - {integer} init_index
30+
// - {function} on_confirm_func
31+
// - {array} on_confirm_args
32+
// - {function} on_change_func
33+
// - {array} on_change_args
34+
// - {boolean} silent_on_confirm
35+
// - {boolean} silent_on_change
36+
function add_menu_spinner(_config) {
37+
var _new = new MenuSpinner(_config);
1238
ds_list_add(items, _new);
1339
num_items++;
1440
}

0 commit comments

Comments
 (0)