diff --git a/current-scripts/Demos/useful-scripts/fonts/fnt_demo/fnt_demo.yy b/current-scripts/Demos/useful-scripts/fonts/fnt_demo/fnt_demo.yy index 4983b6b..de66993 100644 --- a/current-scripts/Demos/useful-scripts/fonts/fnt_demo/fnt_demo.yy +++ b/current-scripts/Demos/useful-scripts/fonts/fnt_demo/fnt_demo.yy @@ -311,6 +311,7 @@ {"amount":-1,"first":160,"second":923,}, ], "last": 0, + "lineHeight": 0, "maintainGms1Font": false, "parent": { "name": "Fonts", @@ -325,6 +326,7 @@ ], "regenerateBitmap": false, "sampleText": "abcdef ABCDEF\n0123456789 .,<>\"'&!?\nthe quick brown fox jumps over the lazy dog\nTHE QUICK BROWN FOX JUMPS OVER THE LAZY DOG\nDefault character: ▯ (9647)", + "sdfSpread": 8, "size": 16.0, "styleName": "Regular", "textureGroupId": { @@ -332,4 +334,5 @@ "path": "texturegroups/Default", }, "TTFName": "", + "usesSDF": false, } \ No newline at end of file diff --git a/current-scripts/Demos/useful-scripts/fonts/fnt_graphic/fnt_graphic.yy b/current-scripts/Demos/useful-scripts/fonts/fnt_graphic/fnt_graphic.yy index 9a0be0e..1d82181 100644 --- a/current-scripts/Demos/useful-scripts/fonts/fnt_graphic/fnt_graphic.yy +++ b/current-scripts/Demos/useful-scripts/fonts/fnt_graphic/fnt_graphic.yy @@ -36,6 +36,7 @@ "italic": false, "kerningPairs": [], "last": 0, + "lineHeight": 0, "maintainGms1Font": false, "parent": { "name": "Fonts", @@ -56,6 +57,7 @@ ], "regenerateBitmap": false, "sampleText": "abcdef ABCDEF\n0123456789 .,<>\"'&!?\nthe quick brown fox jumps over the lazy dog\nTHE QUICK BROWN FOX JUMPS OVER THE LAZY DOG\nDefault character: ▯ (9647)", + "sdfSpread": 8, "size": 24.0, "styleName": "Bold", "textureGroupId": { @@ -63,4 +65,5 @@ "path": "texturegroups/Default", }, "TTFName": "", + "usesSDF": false, } \ No newline at end of file diff --git a/current-scripts/Demos/useful-scripts/fonts/fnt_menu_value/fnt_menu_value.yy b/current-scripts/Demos/useful-scripts/fonts/fnt_menu_value/fnt_menu_value.yy index d2b3b8b..b6ecee5 100644 --- a/current-scripts/Demos/useful-scripts/fonts/fnt_menu_value/fnt_menu_value.yy +++ b/current-scripts/Demos/useful-scripts/fonts/fnt_menu_value/fnt_menu_value.yy @@ -233,6 +233,7 @@ {"amount":-1,"first":121,"second":46,}, ], "last": 0, + "lineHeight": 0, "maintainGms1Font": false, "parent": { "name": "Fonts", @@ -245,6 +246,7 @@ ], "regenerateBitmap": false, "sampleText": "abcdef ABCDEF\n0123456789 .,<>\"'&!?\nthe quick brown fox jumps over the lazy dog\nTHE QUICK BROWN FOX JUMPS OVER THE LAZY DOG\nDefault character: ▯ (9647)", + "sdfSpread": 8, "size": 16.0, "styleName": "Regular", "textureGroupId": { @@ -252,4 +254,5 @@ "path": "texturegroups/Default", }, "TTFName": "", + "usesSDF": false, } \ No newline at end of file diff --git a/current-scripts/Demos/useful-scripts/fonts/fnt_title/fnt_title.yy b/current-scripts/Demos/useful-scripts/fonts/fnt_title/fnt_title.yy index 274c307..1e4578a 100644 --- a/current-scripts/Demos/useful-scripts/fonts/fnt_title/fnt_title.yy +++ b/current-scripts/Demos/useful-scripts/fonts/fnt_title/fnt_title.yy @@ -205,6 +205,7 @@ {"amount":-2,"first":121,"second":46,}, ], "last": 0, + "lineHeight": 0, "maintainGms1Font": false, "parent": { "name": "Fonts", @@ -217,6 +218,7 @@ ], "regenerateBitmap": false, "sampleText": "abcdef ABCDEF\n0123456789 .,<>\"'&!?\nthe quick brown fox jumps over the lazy dog\nTHE QUICK BROWN FOX JUMPS OVER THE LAZY DOG\nDefault character: ▯ (9647)", + "sdfSpread": 8, "size": 18.0, "styleName": "Bold", "textureGroupId": { @@ -224,4 +226,5 @@ "path": "texturegroups/Default", }, "TTFName": "", + "usesSDF": false, } \ No newline at end of file diff --git a/current-scripts/Demos/useful-scripts/fonts/fnt_url/fnt_url.yy b/current-scripts/Demos/useful-scripts/fonts/fnt_url/fnt_url.yy index 5254feb..091d5fa 100644 --- a/current-scripts/Demos/useful-scripts/fonts/fnt_url/fnt_url.yy +++ b/current-scripts/Demos/useful-scripts/fonts/fnt_url/fnt_url.yy @@ -305,6 +305,7 @@ {"amount":-1,"first":160,"second":923,}, ], "last": 0, + "lineHeight": 0, "maintainGms1Font": false, "parent": { "name": "Fonts", @@ -316,6 +317,7 @@ ], "regenerateBitmap": false, "sampleText": "abcdef ABCDEF\n0123456789 .,<>\"'&!?\nthe quick brown fox jumps over the lazy dog\nTHE QUICK BROWN FOX JUMPS OVER THE LAZY DOG\nDefault character: ▯ (9647)", + "sdfSpread": 8, "size": 14.0, "styleName": "Regular", "textureGroupId": { @@ -323,4 +325,5 @@ "path": "texturegroups/Default", }, "TTFName": "", + "usesSDF": false, } \ No newline at end of file diff --git a/current-scripts/Demos/useful-scripts/notes/info/info.txt b/current-scripts/Demos/useful-scripts/notes/info/info.txt index aaedd92..de59954 100644 --- a/current-scripts/Demos/useful-scripts/notes/info/info.txt +++ b/current-scripts/Demos/useful-scripts/notes/info/info.txt @@ -1 +1 @@ -Version: 5.1.0 \ No newline at end of file +Version: 6.0.0 \ No newline at end of file diff --git a/current-scripts/Demos/useful-scripts/objects/obj_column_menu/CleanUp_0.gml b/current-scripts/Demos/useful-scripts/objects/obj_column_menu/CleanUp_0.gml index 18cac92..dfd7dee 100644 --- a/current-scripts/Demos/useful-scripts/objects/obj_column_menu/CleanUp_0.gml +++ b/current-scripts/Demos/useful-scripts/objects/obj_column_menu/CleanUp_0.gml @@ -1,10 +1,11 @@ if (ds_exists(items, ds_type_list)) { - for (var i=0; i 0 && view_scroll_progress_y.v != 0) { _y_offset = (item_height + line_spacing) * -view_scroll_progress_y.v; } -for (var i=view_area.x; i<=view_area.y; i++) { - _item = items[| i]; +for (var _i=view_area.x; _i<=view_area.y; _i++) { + _item = items[| _i]; if (is_struct(_item)) { if (view_height > 0) { - if (view_scroll_progress_y.v < 0 && i == view_area.y) { + if (view_scroll_progress_y.v < 0 && _i == view_area.y) { // Scroll up last element draw_set_alpha(1-abs(view_scroll_progress_y.v)); - } else if (view_scroll_progress_y.v > 0 && i == view_area.x) { + } else if (view_scroll_progress_y.v > 0 && _i == view_area.x) { // Scroll down first element draw_set_alpha(1-abs(view_scroll_progress_y.v)); } else { draw_set_alpha(menu_alpha.v); } } - - self.menu_base_draw_item(_item, _x, _y + _y_offset); + + var _is_focused = pos == _i; + self.menu_base_draw_item(_item, _x, _y + _y_offset, _is_focused); } _y += item_height + line_spacing; } @@ -35,14 +36,18 @@ if (view_height > 0) { _item = items[| view_area.x - 1]; if (is_struct(_item)) { draw_set_alpha(abs(view_scroll_progress_y.v)); - self.menu_base_draw_item(_item, _x, y - (item_height + line_spacing) + _y_offset); + + var _is_focused = pos == view_area.x - 1; + self.menu_base_draw_item(_item, _x, y - (item_height + line_spacing) + _y_offset, _is_focused); } } else if (view_scroll_progress_y.v > 0 && view_area.y + 1 < num_items) { // Scroll down last element _item = items[| view_area.y + 1]; if (is_struct(_item)) { draw_set_alpha(abs(view_scroll_progress_y.v)); - self.menu_base_draw_item(_item, _x, _y + _y_offset); + + var _is_focused = pos == view_area.y + 1; + self.menu_base_draw_item(_item, _x, _y + _y_offset + _is_focused); } } } diff --git a/current-scripts/Demos/useful-scripts/objects/obj_column_menu/Step_1.gml b/current-scripts/Demos/useful-scripts/objects/obj_column_menu/Step_1.gml index f6516ce..9bdaf4b 100644 --- a/current-scripts/Demos/useful-scripts/objects/obj_column_menu/Step_1.gml +++ b/current-scripts/Demos/useful-scripts/objects/obj_column_menu/Step_1.gml @@ -17,7 +17,7 @@ if (control_state.pressed_state[MENU_CONTROLS.UP]) { pos = wrap(pos-1, 0, num_items); _item = items[| pos]; } until ((is_struct(_item) - && ds_list_find_index(_item.types, "divider") == -1) + && _item.type != "divider") || _cur_pos == pos) var _should_scroll = self.column_menu_update_view() && (pos < _cur_pos); @@ -35,7 +35,7 @@ if (control_state.pressed_state[MENU_CONTROLS.DOWN]) { pos = wrap(pos+1, 0, num_items); _item = items[| pos]; } until ((is_struct(_item) - && ds_list_find_index(_item.types, "divider") == -1) + && _item.type != "divider") || _cur_pos == pos) var _should_scroll = self.column_menu_update_view() && (pos > _cur_pos); @@ -47,10 +47,10 @@ if (control_state.pressed_state[MENU_CONTROLS.DOWN]) { if (control_state.pressed_state[MENU_CONTROLS.LEFT]) { var _item = items[| pos]; - if (ds_list_find_index(_item.types, "spinner") != -1) + if (_item.type == "spinner") self.handle_spinner_change(_item, -1); - else if (ds_list_find_index(_item.types, "keyconfig") != -1 + else if (_item.type == "keyconfig" && active_key_config == _item) self.handle_key_config_select(_item, -1); } @@ -58,10 +58,10 @@ if (control_state.pressed_state[MENU_CONTROLS.LEFT]) { if (control_state.pressed_state[MENU_CONTROLS.RIGHT]) { var _item = items[| pos]; - if (ds_list_find_index(_item.types, "spinner") != -1) + if (_item.type == "spinner") self.handle_spinner_change(_item, 1); - else if (ds_list_find_index(_item.types, "keyconfig") != -1 + else if (_item.type == "keyconfig" && active_key_config == _item) self.handle_key_config_select(_item, 1); } @@ -69,26 +69,29 @@ if (control_state.pressed_state[MENU_CONTROLS.RIGHT]) { if (control_state.pressed_state[MENU_CONTROLS.CONFIRM]) { var _item = items[| pos]; - if (ds_list_find_index(_item.types, "spinner") != -1) + if (_item.type == "spinner") self.handle_spinner_confirm(_item); - else if (ds_list_find_index(_item.types, "selectable") != -1) + else if (_item.type == "selectable") self.handle_selectable_confirm(_item); + + else if (_item.type == "valuedSelectable") + self.handle_valued_selectable_confirm(_item); - else if (ds_list_find_index(_item.types, "keyconfig") != -1) + else if (_item.type == "keyconfig") self.handle_key_config_confirm(_item); } if (control_state.pressed_state[MENU_CONTROLS.CANCEL]) { var _item = items[| pos]; - if (ds_list_find_index(_item.types, "keyconfig") != -1) + if (_item.type == "keyconfig") self.handle_key_config_cancel(_item); } if (control_state.pressed_state[MENU_CONTROLS.DELETE_BINDING]) { var _item = items[| pos]; - if (ds_list_find_index(_item.types, "keyconfig") != -1) + if (_item.type == "keyconfig") self.handle_key_config_delete(_item); } \ No newline at end of file diff --git a/current-scripts/Demos/useful-scripts/objects/obj_column_menu_demo/Create_0.gml b/current-scripts/Demos/useful-scripts/objects/obj_column_menu_demo/Create_0.gml index 5f04bbb..5425299 100644 --- a/current-scripts/Demos/useful-scripts/objects/obj_column_menu_demo/Create_0.gml +++ b/current-scripts/Demos/useful-scripts/objects/obj_column_menu_demo/Create_0.gml @@ -20,7 +20,7 @@ menu.label_width = 96; menu.column_menu_add_selectable({ label: "Item 1", - on_confirm_func: "menu_demo_on_confirm", + on_confirm_func: menu_demo_on_selectable_confirm, on_confirm_args: ["Foo"], silent_on_confirm: false }); @@ -49,21 +49,21 @@ menu.column_menu_add_spinner({ menu.column_menu_add_selectable({ label: "Item 3", - on_confirm_func: "menu_demo_on_confirm", + on_confirm_func: menu_demo_on_selectable_confirm, on_confirm_args: ["Baz"], silent_on_confirm: false }); menu.column_menu_add_selectable({ label: "Item 4", - on_confirm_func: "menu_demo_on_confirm", + on_confirm_func: menu_demo_on_selectable_confirm, on_confirm_args: ["Qux"], silent_on_confirm: false }); menu.column_menu_add_selectable({ label: "Item 5", - on_confirm_func: "menu_demo_on_confirm", + on_confirm_func: menu_demo_on_selectable_confirm, on_confirm_args: ["Foo"], silent_on_confirm: false }); @@ -82,16 +82,20 @@ menu.column_menu_add_spinner({ menu.column_menu_add_selectable({ label: "Item 7", - on_confirm_func: "menu_demo_on_confirm", + on_confirm_func: menu_demo_on_selectable_confirm, on_confirm_args: ["Baz"], silent_on_confirm: false }); -menu.column_menu_add_selectable({ +vs_item = menu.column_menu_add_valued_selectable({ label: "Item 8", - on_confirm_func: "menu_demo_on_confirm", - on_confirm_args: ["Qux"], - silent_on_confirm: false + init_value: "Qux", + on_confirm_func: menu_demo_on_valued_selectable_confirm, + on_confirm_args: ["Qux", "Dux"], + on_change_func: menu_demo_on_valued_selectable_change, + on_change_args: [], + silent_on_confirm: false, + silent_on_change: false }); menu.view_scroll_arrows_margin = 24; diff --git a/current-scripts/Demos/useful-scripts/objects/obj_control_manager/CleanUp_0.gml b/current-scripts/Demos/useful-scripts/objects/obj_control_manager/CleanUp_0.gml index 7fceaef..8980aa0 100644 --- a/current-scripts/Demos/useful-scripts/objects/obj_control_manager/CleanUp_0.gml +++ b/current-scripts/Demos/useful-scripts/objects/obj_control_manager/CleanUp_0.gml @@ -1,5 +1,5 @@ -for (var i=0; i 0 && view_scroll_progress_y.v != 0) { _y_offset = (item_height + line_spacing) * -view_scroll_progress_y.v; } -for (var i=view_area.left; i<=view_area.right; i++) { - var _x = x + cursor_padding * (i-view_area.left+1) + column_width * (i-view_area.left); - var _y = y; +var _x, _y, _item; - for (var j=view_area.top; j<=view_area.bottom; j++) { - var _item = items[# i, j]; +for (var _i=view_area.left; _i<=view_area.right; _i++) { + _x = x + cursor_padding * (_i-view_area.left+1) + column_width * (_i-view_area.left); + _y = y; + + for (var _j=view_area.top; _j<=view_area.bottom; _j++) { + _item = items[# _i, _j]; if (is_struct(_item)) { if (view_width > 0) { - if (view_scroll_progress_x.v < 0 && i == view_area.right) { + if (view_scroll_progress_x.v < 0 && _i == view_area.right) { // Scroll left last element draw_set_alpha(1-abs(view_scroll_progress_x.v)); - } else if (view_scroll_progress_x.v > 0 && i == view_area.left) { + } else if (view_scroll_progress_x.v > 0 && _i == view_area.left) { // Scroll right first element draw_set_alpha(1-abs(view_scroll_progress_x.v)); } else { @@ -31,10 +36,10 @@ for (var i=view_area.left; i<=view_area.right; i++) { } if (view_height > 0) { - if (view_scroll_progress_y.v < 0 && j == view_area.bottom) { + if (view_scroll_progress_y.v < 0 && _j == view_area.bottom) { // Scroll up last element draw_set_alpha(1-abs(view_scroll_progress_y.v)); - } else if (view_scroll_progress_y.v > 0 && j == view_area.top) { + } else if (view_scroll_progress_y.v > 0 && _j == view_area.top) { // Scroll down first element draw_set_alpha(1-abs(view_scroll_progress_y.v)); } else { @@ -42,23 +47,28 @@ for (var i=view_area.left; i<=view_area.right; i++) { } } - self.menu_base_draw_item(_item, _x + _x_offset, _y + _y_offset); + var _is_focused = (pos.x == _i) && (pos.y == _j); + self.menu_base_draw_item(_item, _x + _x_offset, _y + _y_offset, _is_focused); } - if (view_width > 0 && i == view_area.left) { + if (view_width > 0 && _i == view_area.left) { if (view_scroll_progress_x.v < 0 && view_area.left > 0) { // Scroll left first element - _item = items[# view_area.left - 1, j]; + _item = items[# view_area.left - 1, _j]; if (is_struct(_item)) { draw_set_alpha(abs(view_scroll_progress_x.v)); - self.menu_base_draw_item(_item, x - column_width + _x_offset, _y + _y_offset); + + var _is_focused = (pos.x == view_area.left - 1) && (pos.y == _j); + self.menu_base_draw_item(_item, x - column_width + _x_offset, _y + _y_offset, _is_focused); } } else if (view_scroll_progress_x.v > 0 && view_area.right + 1 < items_width) { // Scroll right last element - _item = items[# view_area.right + 1, j]; + _item = items[# view_area.right + 1, _j]; if (is_struct(_item)) { draw_set_alpha(abs(view_scroll_progress_x.v)); - self.menu_base_draw_item(_item, _x + (column_width + cursor_padding)*2 + _x_offset, _y + _y_offset); + + var _is_focused = (pos.x == view_area.right + 1) && (pos.y == _j); + self.menu_base_draw_item(_item, _x + (column_width + cursor_padding)*2 + _x_offset, _y + _y_offset, _is_focused); } } } @@ -69,17 +79,21 @@ for (var i=view_area.left; i<=view_area.right; i++) { if (view_height > 0) { if (view_scroll_progress_y.v < 0 && view_area.top > 0) { // Scroll up first element - _item = items[# i, view_area.top - 1]; + _item = items[# _i, view_area.top - 1]; if (is_struct(_item)) { draw_set_alpha(abs(view_scroll_progress_y.v)); - self.menu_base_draw_item(_item, _x + _x_offset, y - (item_height + line_spacing) + _y_offset); + + var _is_focused = (pos.x == _i) && (pos.y == view_area.top - 1); + self.menu_base_draw_item(_item, _x + _x_offset, y - (item_height + line_spacing) + _y_offset, _is_focused); } } else if (view_scroll_progress_y.v > 0 && view_area.bottom + 1 < items_height) { // Scroll down last element - _item = items[# i, view_area.bottom + 1]; + _item = items[# _i, view_area.bottom + 1]; if (is_struct(_item)) { draw_set_alpha(abs(view_scroll_progress_y.v)); - self.menu_base_draw_item(_item, _x + _x_offset, _y + _y_offset); + + var _is_focused = (pos.x == _i) && (pos.y == view_area.bottom + 1); + self.menu_base_draw_item(_item, _x + _x_offset, _y + _y_offset, _is_focused); } } } diff --git a/current-scripts/Demos/useful-scripts/objects/obj_grid_menu/Step_1.gml b/current-scripts/Demos/useful-scripts/objects/obj_grid_menu/Step_1.gml index 3755d47..93fd860 100644 --- a/current-scripts/Demos/useful-scripts/objects/obj_grid_menu/Step_1.gml +++ b/current-scripts/Demos/useful-scripts/objects/obj_grid_menu/Step_1.gml @@ -1,9 +1,10 @@ +// Feather disable GM1009 if (!enabled) exit; control_state.poll_input(); if (active_key_config != noone && discovery_mode == MENU_DISCOVERY_MODE.DISCOVERING) { - var _item = items[| pos]; + var _item = items[# pos.x, pos.y]; self.handle_key_config_discovery(_item); exit; } @@ -17,7 +18,7 @@ if (control_state.pressed_state[MENU_CONTROLS.UP]) { pos.y = wrap(pos.y-1, 0, ds_grid_height(items)); _item = items[# pos.x, pos.y]; } until ((is_struct(_item) - && ds_list_find_index(_item.types, "divider") == -1) + && _item.type != "divider") || _cur_pos == pos.y) var _should_scroll = self.grid_menu_update_view().y && (pos.y < _cur_pos); @@ -35,7 +36,7 @@ if (control_state.pressed_state[MENU_CONTROLS.DOWN]) { pos.y = wrap(pos.y+1, 0, ds_grid_height(items)); _item = items[# pos.x, pos.y]; } until ((is_struct(_item) - && ds_list_find_index(_item.types, "divider") == -1) + && _item.type != "divider") || _cur_pos == pos.y) var _should_scroll = self.grid_menu_update_view().y && (pos.y > _cur_pos); @@ -49,12 +50,12 @@ if (control_state.pressed_state[MENU_CONTROLS.LEFT]) { var _item = items[# pos.x, pos.y]; if (is_struct(_item)) { - if (ds_list_find_index(_item.types, "spinner") != -1) { + if (_item.type == "spinner") { self.handle_spinner_change(_item, -1); return; } - else if (ds_list_find_index(_item.types, "keyconfig") != -1 + else if (_item.type == "keyconfig" && active_key_config == _item) { self.handle_key_config_select(_item, -1); return; @@ -65,7 +66,7 @@ if (control_state.pressed_state[MENU_CONTROLS.LEFT]) { pos.x = wrap(pos.x-1, 0, ds_grid_width(items)); _item = items[# pos.x, pos.y]; } until ((is_struct(_item) - && ds_list_find_index(_item.types, "divider") == -1) + && _item.type != "divider") || _cur_pos == pos.x) var _should_scroll = self.grid_menu_update_view().x && (pos.x < _cur_pos); @@ -78,12 +79,12 @@ if (control_state.pressed_state[MENU_CONTROLS.RIGHT]) { var _item = items[# pos.x, pos.y]; if (is_struct(_item)) { - if (ds_list_find_index(_item.types, "spinner") != -1) { + if (_item.type = "spinner") { self.handle_spinner_change(_item, 1); return; } - else if (ds_list_find_index(_item.types, "keyconfig") != -1 + else if (_item.type == "keyconfig" && active_key_config == _item) { self.handle_key_config_select(_item, -1); return; @@ -94,7 +95,7 @@ if (control_state.pressed_state[MENU_CONTROLS.RIGHT]) { pos.x = wrap(pos.x+1, 0, ds_grid_width(items)); _item = items[# pos.x, pos.y]; } until ((is_struct(_item) - && ds_list_find_index(_item.types, "divider") == -1) + && _item.type != "divider") || _cur_pos == pos.x) var _should_scroll = self.grid_menu_update_view().x && (pos.x > _cur_pos); @@ -106,13 +107,16 @@ if (control_state.pressed_state[MENU_CONTROLS.CONFIRM]) { var _item = items[# pos.x, pos.y]; if (!is_struct(_item)) return; - if (ds_list_find_index(_item.types, "spinner") != -1) + if (_item.type == "spinner") self.handle_spinner_confirm(_item); - else if (ds_list_find_index(_item.types, "selectable") != -1) + else if (_item.type == "selectable") self.handle_selectable_confirm(_item); + + else if (_item.type == "valuedSelectable") + self.handle_valued_selectable_confirm(_item); - else if (ds_list_find_index(_item.types, "keyconfig") != -1) + else if (_item.type == "keyconfig") self.handle_key_config_confirm(_item); } @@ -120,7 +124,7 @@ if (control_state.pressed_state[MENU_CONTROLS.CANCEL]) { var _item = items[# pos.x, pos.y]; if (!is_struct(_item)) return; - if (ds_list_find_index(_item.types, "keyconfig") != -1 + if (_item.type == "keyconfig" && active_key_config == _item) self.handle_key_config_cancel(_item); } @@ -129,6 +133,6 @@ if (control_state.pressed_state[MENU_CONTROLS.DELETE_BINDING]) { var _item = items[# pos.x, pos.y]; if (!is_struct(_item)) return; - if (ds_list_find_index(_item.types, "keyconfig") != -1) + if (_item.type == "keyconfig") self.handle_key_config_delete(_item); } \ No newline at end of file diff --git a/current-scripts/Demos/useful-scripts/objects/obj_grid_menu_demo/Create_0.gml b/current-scripts/Demos/useful-scripts/objects/obj_grid_menu_demo/Create_0.gml index bb48546..7dcfb82 100644 --- a/current-scripts/Demos/useful-scripts/objects/obj_grid_menu_demo/Create_0.gml +++ b/current-scripts/Demos/useful-scripts/objects/obj_grid_menu_demo/Create_0.gml @@ -22,7 +22,7 @@ menu.grid_menu_init({ menu.grid_menu_add_selectable(0, 0, { label: "Foo", - on_confirm_func: "menu_demo_on_confirm", + on_confirm_func: menu_demo_on_selectable_confirm, on_confirm_args: ["Foo"], silent_on_confirm: false }); @@ -39,56 +39,56 @@ menu.grid_menu_add_selectable(0, 0, { menu.grid_menu_add_selectable(0, 1, { label: "Bar", - on_confirm_func: "menu_demo_on_confirm", + on_confirm_func: menu_demo_on_selectable_confirm, on_confirm_args: ["Bar"], silent_on_confirm: false }); menu.grid_menu_add_selectable(1, 0, { label: "Baz", - on_confirm_func: "menu_demo_on_confirm", + on_confirm_func: menu_demo_on_selectable_confirm, on_confirm_args: ["Baz"], silent_on_confirm: false }); menu.grid_menu_add_selectable(1, 1, { label: "Qux", - on_confirm_func: "menu_demo_on_confirm", + on_confirm_func: menu_demo_on_selectable_confirm, on_confirm_args: ["Qux"], silent_on_confirm: false }); menu.grid_menu_add_selectable(2, 0, { label: "Boo", - on_confirm_func: "menu_demo_on_confirm", + on_confirm_func: menu_demo_on_selectable_confirm, on_confirm_args: ["Boo"], silent_on_confirm: false }); menu.grid_menu_add_selectable(2, 1, { label: "Far", - on_confirm_func: "menu_demo_on_confirm", + on_confirm_func: menu_demo_on_selectable_confirm, on_confirm_args: ["Far"], silent_on_confirm: false }); menu.grid_menu_add_selectable(2, 2, { label: "Qaz", - on_confirm_func: "menu_demo_on_confirm", + on_confirm_func: menu_demo_on_selectable_confirm, on_confirm_args: ["Qaz"], silent_on_confirm: false }); menu.grid_menu_add_selectable(0, 2, { label: "Bux", - on_confirm_func: "menu_demo_on_confirm", + on_confirm_func: menu_demo_on_selectable_confirm, on_confirm_args: ["Bux"], silent_on_confirm: false }); menu.grid_menu_add_selectable(1, 2, { label: "Huh", - on_confirm_func: "menu_demo_on_confirm", + on_confirm_func: menu_demo_on_selectable_confirm, on_confirm_args: ["Huh"], silent_on_confirm: false }); diff --git a/current-scripts/Demos/useful-scripts/objects/obj_init/Create_0.gml b/current-scripts/Demos/useful-scripts/objects/obj_init/Create_0.gml index d715469..29b5d8a 100644 --- a/current-scripts/Demos/useful-scripts/objects/obj_init/Create_0.gml +++ b/current-scripts/Demos/useful-scripts/objects/obj_init/Create_0.gml @@ -1,3 +1,4 @@ +// Feather ignore once GM1043 start_timer = time_source_create(time_source_game, 1, time_source_units_frames, function() { inst_control_manager.init_steam_deck_info(); diff --git a/current-scripts/Demos/useful-scripts/objects/obj_input_demo/Create_0.gml b/current-scripts/Demos/useful-scripts/objects/obj_input_demo/Create_0.gml index 1f650ac..5b5fa26 100644 --- a/current-scripts/Demos/useful-scripts/objects/obj_input_demo/Create_0.gml +++ b/current-scripts/Demos/useful-scripts/objects/obj_input_demo/Create_0.gml @@ -1,2 +1,3 @@ my_player = inst_control_manager.get_player(0); -last_button = -1; \ No newline at end of file +last_button = -1; +icon_half_size = 50; \ No newline at end of file diff --git a/current-scripts/Demos/useful-scripts/objects/obj_input_demo/Draw_0.gml b/current-scripts/Demos/useful-scripts/objects/obj_input_demo/Draw_0.gml index 2dc75c4..b5bf1b1 100644 --- a/current-scripts/Demos/useful-scripts/objects/obj_input_demo/Draw_0.gml +++ b/current-scripts/Demos/useful-scripts/objects/obj_input_demo/Draw_0.gml @@ -7,7 +7,8 @@ draw_text(room_width/2, 80, "The last key you pressed was:"); draw_text(room_width/2, 256, "The last button you pressed was:"); draw_set_font(fnt_demo); draw_text(room_width/2, 112, string(keyboard_lastkey) + " - " + keycode_to_string(keyboard_lastkey)); -draw_sprite(spr_keyboard_icons, get_keyboard_icon_index(keyboard_lastkey), room_width/2, 192); +draw_sprite(spr_keyboard_icons, get_keyboard_icon_index(keyboard_lastkey, spr_keyboard_icons), room_width/2 - icon_half_size, 192 - icon_half_size); +// Feather disable once GM1029 draw_text(room_width/2, 288, string(last_button) + " - " + gamepad_constant_to_string(last_button)); -draw_sprite(spr_xbox_series_gamepad_icons, get_gamepad_icon_index(last_button, spr_xbox_series_gamepad_icons), room_width/2, 368); \ No newline at end of file +draw_sprite(spr_xbox_series_gamepad_icons, get_gamepad_icon_index(last_button, spr_xbox_series_gamepad_icons), room_width/2 - icon_half_size, 368 - icon_half_size); \ No newline at end of file diff --git a/current-scripts/Demos/useful-scripts/objects/obj_key_config_menu_demo/Create_0.gml b/current-scripts/Demos/useful-scripts/objects/obj_key_config_menu_demo/Create_0.gml index 36280a0..0cc5a23 100644 --- a/current-scripts/Demos/useful-scripts/objects/obj_key_config_menu_demo/Create_0.gml +++ b/current-scripts/Demos/useful-scripts/objects/obj_key_config_menu_demo/Create_0.gml @@ -29,12 +29,12 @@ menu.column_menu_init({ control_icons_scale: 0.3 }); -for (var i=CONTROLS.UP; i<=CONTROLS.RIGHT; i++) { +for (var _i=CONTROLS.UP; _i<=CONTROLS.RIGHT; _i++) { menu.column_menu_add_key_config({ - label: control_labels[i], - control: i, - initial_kbm_bindings: duplicate_array(my_player.get_bindings(CONTROL_TYPE.KEYBOARD_AND_MOUSE, i).values), - initial_gamepad_bindings: duplicate_array(my_player.get_bindings(CONTROL_TYPE.GAMEPAD, i).values), + label: control_labels[_i], + control: _i, + initial_kbm_bindings: duplicate_array(my_player.get_bindings(CONTROL_TYPE.KEYBOARD_AND_MOUSE, _i).values), + initial_gamepad_bindings: duplicate_array(my_player.get_bindings(CONTROL_TYPE.GAMEPAD, _i).values), on_change_func: -1, on_change_args: [-1], on_confirm_func: -1, diff --git a/current-scripts/Demos/useful-scripts/objects/obj_key_config_menu_demo/Draw_0.gml b/current-scripts/Demos/useful-scripts/objects/obj_key_config_menu_demo/Draw_0.gml index 43e119f..5918ca9 100644 --- a/current-scripts/Demos/useful-scripts/objects/obj_key_config_menu_demo/Draw_0.gml +++ b/current-scripts/Demos/useful-scripts/objects/obj_key_config_menu_demo/Draw_0.gml @@ -5,7 +5,13 @@ draw_set_colour(c_white); draw_text(room_width/2, 16, "Control Config Menu Demo"); draw_text(224, 56, "Keyboard"); draw_text(600, 56, "Gamepad"); +draw_text(1076, 56, $"Active Gamepad Slot: {my_player.gamepad_slot}"); draw_set_font(fnt_demo); draw_set_halign(fa_left); -draw_text(32, 256, "Press Tab to switch between configuring and testing the controls."); \ No newline at end of file +draw_text(32, 320, "Press Tab to switch between configuring and testing the controls."); +draw_text(32, 352, "Press Home to change the active gamepad."); + +if (inst_control_manager.gamepad_discovery_mode) { + draw_text(875, 96, "Press any button on the gamepad\nyou want to switch to."); +} \ No newline at end of file diff --git a/current-scripts/Demos/useful-scripts/objects/obj_key_config_menu_demo/KeyPress_36.gml b/current-scripts/Demos/useful-scripts/objects/obj_key_config_menu_demo/KeyPress_36.gml new file mode 100644 index 0000000..ea5e263 --- /dev/null +++ b/current-scripts/Demos/useful-scripts/objects/obj_key_config_menu_demo/KeyPress_36.gml @@ -0,0 +1,5 @@ +if (!inst_control_manager.gamepad_discovery_mode) { + inst_control_manager.start_gamepad_discovery_mode(0); +} else { + inst_control_manager.stop_gamepad_discovery_mode(); +} \ No newline at end of file diff --git a/current-scripts/Demos/useful-scripts/objects/obj_key_config_menu_demo/Other_5.gml b/current-scripts/Demos/useful-scripts/objects/obj_key_config_menu_demo/Other_5.gml new file mode 100644 index 0000000..3cea39f --- /dev/null +++ b/current-scripts/Demos/useful-scripts/objects/obj_key_config_menu_demo/Other_5.gml @@ -0,0 +1,3 @@ +if (inst_control_manager.gamepad_discovery_mode) { + inst_control_manager.stop_gamepad_discovery_mode(); +} \ No newline at end of file diff --git a/current-scripts/Demos/useful-scripts/objects/obj_key_config_menu_demo/obj_key_config_menu_demo.yy b/current-scripts/Demos/useful-scripts/objects/obj_key_config_menu_demo/obj_key_config_menu_demo.yy index 7a0e824..c1a046a 100644 --- a/current-scripts/Demos/useful-scripts/objects/obj_key_config_menu_demo/obj_key_config_menu_demo.yy +++ b/current-scripts/Demos/useful-scripts/objects/obj_key_config_menu_demo/obj_key_config_menu_demo.yy @@ -6,6 +6,8 @@ {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","collisionObjectId":null,"eventNum":0,"eventType":8,"isDnD":false,}, {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","collisionObjectId":null,"eventNum":0,"eventType":0,"isDnD":false,}, {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","collisionObjectId":null,"eventNum":9,"eventType":9,"isDnD":false,}, + {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","collisionObjectId":null,"eventNum":36,"eventType":9,"isDnD":false,}, + {"resourceType":"GMEvent","resourceVersion":"1.0","name":"","collisionObjectId":null,"eventNum":5,"eventType":7,"isDnD":false,}, ], "managed": true, "overriddenProperties": [], diff --git a/current-scripts/Demos/useful-scripts/objects/obj_laser_demo/Create_0.gml b/current-scripts/Demos/useful-scripts/objects/obj_laser_demo/Create_0.gml index c6cde5e..76d6777 100644 --- a/current-scripts/Demos/useful-scripts/objects/obj_laser_demo/Create_0.gml +++ b/current-scripts/Demos/useful-scripts/objects/obj_laser_demo/Create_0.gml @@ -1,4 +1,4 @@ -reflector_angle = new Tween(0, 0.1, 0, 360, TweenLimitMode.WRAP, false); +reflector_angle = new Tween(0, 0.1, 0, 360, TWEEN_LIMIT_MODE.WRAP, false, pointer_null); reflector = new LineSegment(0, 0, 0, 0); reflector.a.x = x + dcos(reflector_angle.v) * reflector_half_length; reflector.a.y = y - dsin(reflector_angle.v) * reflector_half_length; diff --git a/current-scripts/Demos/useful-scripts/objects/obj_math_demo/Create_0.gml b/current-scripts/Demos/useful-scripts/objects/obj_math_demo/Create_0.gml index 64f2d33..40bfb02 100644 --- a/current-scripts/Demos/useful-scripts/objects/obj_math_demo/Create_0.gml +++ b/current-scripts/Demos/useful-scripts/objects/obj_math_demo/Create_0.gml @@ -1,28 +1,29 @@ -vec_A = new Vector2(3, 3); -vec_B = new Vector2(-1, 2); -vec_C = new Vector3(-2, 3, 4); -vec_D = new Vector3(10, -5, 7); +vec_a = new Vector2(3, 3); +vec_b = new Vector2(-1, 2); +vec_c = new Vector3(-2, 3, 4); +vec_d = new Vector3(10, -5, 7); -pulse_counter = new Tween(0, 0.01, 0, 1, TweenLimitMode.WRAP, false); +pulse_counter = new Tween(0, 0.01, 0, 1, TWEEN_LIMIT_MODE.WRAP, false, pointer_null); pulse_t = 0; -wrap_counter = new Tween(-10, 0.01, -10, 10, TweenLimitMode.WRAP, false); +wrap_counter = new Tween(-10, 0.01, -10, 10, TWEEN_LIMIT_MODE.WRAP, false, pointer_null); wrapped_value = 0; blin_values = ds_grid_create(5, 5); blin_values[# 0, 0] = -10; +// Feather disable once GM1043 blin_values[# 0, 4] = 50; blin_values[# 4, 0] = 25; blin_values[# 4, 4] = 100; -for (var i=0; i<5; i++) { - for (var j=0; j<5; j++) { - blin_values[# i, j] = blin( +for (var _i=0; _i<5; _i++) { + for (var _j=0; _j<5; _j++) { + blin_values[# _i, _j] = blin( blin_values[# 0, 0], blin_values[# 4, 0], blin_values[# 0, 4], blin_values[# 4, 4], - i/4, j/4 + _i/4, _j/4 ); } } \ No newline at end of file diff --git a/current-scripts/Demos/useful-scripts/objects/obj_math_demo/Draw_0.gml b/current-scripts/Demos/useful-scripts/objects/obj_math_demo/Draw_0.gml index ee39a54..3bab006 100644 --- a/current-scripts/Demos/useful-scripts/objects/obj_math_demo/Draw_0.gml +++ b/current-scripts/Demos/useful-scripts/objects/obj_math_demo/Draw_0.gml @@ -22,37 +22,37 @@ draw_text(640, 448, "Blin"); draw_set_font(fnt_demo); // Vectors -draw_text(16, 96, "a = " + vec_A.to_string()); -draw_text(16, 128, "b = " + vec_B.to_string()); -draw_text(144, 96, "c = " + vec_C.to_string()); -draw_text(144, 128, "d = " + vec_D.to_string()); +draw_text(16, 96, "a = " + vec_a.to_string()); +draw_text(16, 128, "b = " + vec_b.to_string()); +draw_text(144, 96, "c = " + vec_c.to_string()); +draw_text(144, 128, "d = " + vec_d.to_string()); // Normalized Vectors -draw_text(16, 208, "â = " + normalize_2d(vec_A).to_string()); -draw_text(192, 208, "ĉ = " + normalize_3d(vec_C).to_string()); +draw_text(16, 208, "â = " + normalize_2d(vec_a).to_string()); +draw_text(192, 208, "ĉ = " + normalize_3d(vec_c).to_string()); // Cross Products -draw_text(640, 96, "a x b = " + string(cross_product_2d(vec_A, vec_B)) + " (Z-component)"); -draw_text(640, 128, "c x d = " + cross_product(vec_C, vec_D).to_string()); +draw_text(640, 96, "a x b = " + string(cross_product_2d(vec_a, vec_b)) + " (Z-component)"); +draw_text(640, 128, "c x d = " + cross_product(vec_c, vec_d).to_string()); // Normalized Cross Products -draw_text(640, 208, "c x d / |c x d| = " + cross_product_normalized(vec_C, vec_D).to_string()); +draw_text(640, 208, "c x d / |c x d| = " + cross_product_normalized(vec_c, vec_d).to_string()); // Pulse draw_text(96, 288, "t: " + string(pulse_counter.v)); draw_text(176, 288, "p(t): " + string(pulse_t)); // Vector Operations -draw_text(640, 288, "a + b = " + string(vec_A.add(vec_B).to_string())); -draw_text(640, 320, "c - d = " + string(vec_C.subtract(vec_D).to_string())); +draw_text(640, 288, "a + b = " + string(vec_a.add(vec_b).to_string())); +draw_text(640, 320, "c - d = " + string(vec_c.subtract(vec_d).to_string())); // Wrap draw_text(640, 400, "t: " + string(wrap_counter.v)); draw_text(720, 400, "w(t): " + string(wrapped_value)); // Blin -for (var i=0; i<5; i++) { - for (var j=0; j<5; j++) { - draw_text(640 + i*64, 480 + j*32, string(blin_values[# i, j])); +for (var _i=0; _i<5; _i++) { + for (var _j=0; _j<5; _j++) { + draw_text(640 + _i*64, 480 + _j*32, string(blin_values[# _i, _j])); } } \ No newline at end of file diff --git a/current-scripts/Demos/useful-scripts/objects/obj_menu_base/Alarm_10.gml b/current-scripts/Demos/useful-scripts/objects/obj_menu_base/Alarm_10.gml index 706d5ce..224f5d7 100644 --- a/current-scripts/Demos/useful-scripts/objects/obj_menu_base/Alarm_10.gml +++ b/current-scripts/Demos/useful-scripts/objects/obj_menu_base/Alarm_10.gml @@ -1,2 +1,7 @@ /// @desc fade in end -enabled = true; \ No newline at end of file +enabled = true; + +if (is_callable(on_fade_in_end)) { + on_fade_in_end(on_fade_in_end_args); + on_fade_in_end = noone; +} \ No newline at end of file diff --git a/current-scripts/Demos/useful-scripts/objects/obj_menu_base/Alarm_11.gml b/current-scripts/Demos/useful-scripts/objects/obj_menu_base/Alarm_11.gml index f79e0a3..a45d066 100644 --- a/current-scripts/Demos/useful-scripts/objects/obj_menu_base/Alarm_11.gml +++ b/current-scripts/Demos/useful-scripts/objects/obj_menu_base/Alarm_11.gml @@ -1,13 +1,14 @@ /// @desc fade out end visible = false; -if (script_exists(on_fade_out_end)) { - script_execute(on_fade_out_end, on_fade_out_end_args); +if (is_callable(on_fade_out_end)) { + // feather ignore once GM1021 + on_fade_out_end(on_fade_out_end_args); on_fade_out_end = noone; } if (instance_exists(next_menu)) { - next_menu.menu_fade_in(); + next_menu.menu_fade_in(undefined, []); } next_menu = noone; \ No newline at end of file diff --git a/current-scripts/Demos/useful-scripts/objects/obj_menu_base/Create_0.gml b/current-scripts/Demos/useful-scripts/objects/obj_menu_base/Create_0.gml index 9c86cc9..2e5ba60 100644 --- a/current-scripts/Demos/useful-scripts/objects/obj_menu_base/Create_0.gml +++ b/current-scripts/Demos/useful-scripts/objects/obj_menu_base/Create_0.gml @@ -1,5 +1,7 @@ enabled = true; +control_state = noone; + item_height = 1; cursor_width = 1; cursor_height = 1; @@ -11,11 +13,12 @@ control_icons_y_offset = -18; discovery_mode = MENU_DISCOVERY_MODE.NONE; active_key_config = noone; -menu_alpha = new Tween(1, 0, 0, 1, TweenLimitMode.CLAMP, true); -view_scroll_progress_y = new Tween(0, 0, -1, 1, TweenLimitMode.CLAMP, true); +menu_alpha = new Tween(1, 0, 0, 1, TWEEN_LIMIT_MODE.CLAMP, true, pointer_null); +view_scroll_progress_y = new Tween(0, 0, -1, 1, TWEEN_LIMIT_MODE.CLAMP, true, pointer_null); view_scroll_arrow_height = sprite_get_height(view_scroll_arrows_spr); next_menu = noone; on_fade_out_end = noone; +// Feather disable once GM2039 menu_base_functions(); \ No newline at end of file diff --git a/current-scripts/Demos/useful-scripts/objects/obj_menu_base/obj_menu_base.yy b/current-scripts/Demos/useful-scripts/objects/obj_menu_base/obj_menu_base.yy index 05182a0..6a0c052 100644 --- a/current-scripts/Demos/useful-scripts/objects/obj_menu_base/obj_menu_base.yy +++ b/current-scripts/Demos/useful-scripts/objects/obj_menu_base/obj_menu_base.yy @@ -58,6 +58,11 @@ {"resourceType":"GMObjectProperty","resourceVersion":"1.0","name":"binding_spacing","filters":[],"listItems":[],"multiselect":false,"rangeEnabled":false,"rangeMax":10.0,"rangeMin":0.0,"value":"64","varType":0,}, {"resourceType":"GMObjectProperty","resourceVersion":"1.0","name":"binding_type_spacing","filters":[],"listItems":[],"multiselect":false,"rangeEnabled":false,"rangeMax":10.0,"rangeMin":0.0,"value":"32","varType":0,}, {"resourceType":"GMObjectProperty","resourceVersion":"1.0","name":"spinner_value_text_y_offset","filters":[],"listItems":[],"multiselect":false,"rangeEnabled":false,"rangeMax":10.0,"rangeMin":0.0,"value":"0","varType":0,}, + {"resourceType":"GMObjectProperty","resourceVersion":"1.0","name":"spinner_scroll_arrows_margin","filters":[],"listItems":[],"multiselect":false,"rangeEnabled":false,"rangeMax":10.0,"rangeMin":0.0,"value":"16","varType":0,}, + {"resourceType":"GMObjectProperty","resourceVersion":"1.0","name":"spinner_scroll_arrows_spr","filters":[ + "GMSprite", + ],"listItems":[],"multiselect":false,"rangeEnabled":false,"rangeMax":10.0,"rangeMin":0.0,"value":"spr_scroll_arrow","varType":5,}, + {"resourceType":"GMObjectProperty","resourceVersion":"1.0","name":"spinner_scroll_arrows_y","filters":[],"listItems":[],"multiselect":false,"rangeEnabled":false,"rangeMax":10.0,"rangeMin":0.0,"value":"-2","varType":0,}, {"resourceType":"GMObjectProperty","resourceVersion":"1.0","name":"view_scroll_arrows_margin","filters":[],"listItems":[],"multiselect":false,"rangeEnabled":false,"rangeMax":10.0,"rangeMin":0.0,"value":"12","varType":0,}, {"resourceType":"GMObjectProperty","resourceVersion":"1.0","name":"view_scroll_arrows_x","filters":[],"listItems":[],"multiselect":false,"rangeEnabled":false,"rangeMax":10.0,"rangeMin":0.0,"value":"0","varType":0,}, {"resourceType":"GMObjectProperty","resourceVersion":"1.0","name":"view_scroll_arrows_spr","filters":[ diff --git a/current-scripts/Demos/useful-scripts/objects/obj_nested_menu/CleanUp_0.gml b/current-scripts/Demos/useful-scripts/objects/obj_nested_menu/CleanUp_0.gml index 13c2eae..78cfe1f 100644 --- a/current-scripts/Demos/useful-scripts/objects/obj_nested_menu/CleanUp_0.gml +++ b/current-scripts/Demos/useful-scripts/objects/obj_nested_menu/CleanUp_0.gml @@ -1,10 +1,11 @@ if (ds_exists(items, ds_type_list)) { - for (var i=0; i _cur_pos); @@ -47,10 +48,10 @@ if (control_state.pressed_state[MENU_CONTROLS.DOWN]) { if (control_state.pressed_state[MENU_CONTROLS.LEFT]) { var _item = items[| pos]; - if (ds_list_find_index(_item.types, "spinner") != -1) + if (_item.type == "spinner") self.handle_spinner_change(_item, -1); - else if (ds_list_find_index(_item.types, "keyconfig") != -1 + else if (_item.type == "keyconfig" && active_key_config == _item) self.handle_key_config_select(_item, -1); } @@ -58,10 +59,10 @@ if (control_state.pressed_state[MENU_CONTROLS.LEFT]) { if (control_state.pressed_state[MENU_CONTROLS.RIGHT]) { var _item = items[| pos]; - if (ds_list_find_index(_item.types, "spinner") != -1) + if (_item.type == "spinner") self.handle_spinner_change(_item, 1); - else if (ds_list_find_index(_item.types, "keyconfig") != -1 + else if (_item.type == "keyconfig" && active_key_config == _item) self.handle_key_config_select(_item, 1); } @@ -69,20 +70,20 @@ if (control_state.pressed_state[MENU_CONTROLS.RIGHT]) { if (control_state.pressed_state[MENU_CONTROLS.CONFIRM]) { var _item = items[| pos]; - if (ds_list_find_index(_item.types, "menu") != -1) { + if (_item.type == "menu") { if (active_item == noone) { self.nested_menu_toggle_submenu_by_index(self, pos); player_controller.clear_all_input(); } } - else if (ds_list_find_index(_item.types, "spinner") != -1) + else if (_item.type == "spinner") self.handle_spinner_confirm(_item); - else if (ds_list_find_index(_item.types, "selectable") != -1) + else if (_item.type == "selectable") self.handle_selectable_confirm(_item); - else if (ds_list_find_index(_item.types, "keyconfig") != -1) + else if (_item.type == "keyconfig") self.handle_key_config_confirm(_item); } @@ -90,16 +91,16 @@ if (control_state.pressed_state[MENU_CONTROLS.CANCEL]) { if (active_item != noone) { // Check if active menu has a key config in discovery mode var _submenu = active_item.submenu; - if (_submenu.active_key_config != noone) exit; + if (_submenu.active_key_config != -1) exit; - nested_menu_toggle_submenu_by_index(self, -1); + self.nested_menu_toggle_submenu_by_index(self, -1); player_controller.clear_all_input(); exit; } var _item = items[| pos]; - if (ds_list_find_index(_item.types, "keyconfig") != -1 + if (_item.type == "keyconfig" && active_key_config == _item) self.handle_key_config_cancel(_item); } @@ -107,6 +108,6 @@ if (control_state.pressed_state[MENU_CONTROLS.CANCEL]) { if (control_state.pressed_state[MENU_CONTROLS.DELETE_BINDING]) { var _item = items[| pos]; - if (ds_list_find_index(_item.types, "keyconfig") != -1) + if (_item.type == "keyconfig") self.handle_key_config_delete(_item); } \ No newline at end of file diff --git a/current-scripts/Demos/useful-scripts/objects/obj_nested_menu_demo/Create_0.gml b/current-scripts/Demos/useful-scripts/objects/obj_nested_menu_demo/Create_0.gml index 089d6e9..1810170 100644 --- a/current-scripts/Demos/useful-scripts/objects/obj_nested_menu_demo/Create_0.gml +++ b/current-scripts/Demos/useful-scripts/objects/obj_nested_menu_demo/Create_0.gml @@ -18,14 +18,14 @@ submenu[0].column_menu_init({ submenu[0].column_menu_add_selectable({ label: "Cat", - on_confirm_func: "menu_demo_on_confirm", + on_confirm_func: menu_demo_on_selectable_confirm, on_confirm_args: ["Meow"], silent_on_confirm: false }); submenu[0].column_menu_add_selectable({ label: "Dog", - on_confirm_func: "menu_demo_on_confirm", + on_confirm_func: menu_demo_on_selectable_confirm, on_confirm_args: ["Woof"], silent_on_confirm: false }); @@ -61,28 +61,28 @@ submenu[1].column_menu_init({ submenu[1].column_menu_add_selectable({ label: "Broccoli", - on_confirm_func: "menu_demo_on_confirm", + on_confirm_func: menu_demo_on_selectable_confirm, on_confirm_args: ["Chomp"], silent_on_confirm: false }); submenu[1].column_menu_add_selectable({ label: "Tomato", - on_confirm_func: "menu_demo_on_confirm", + on_confirm_func: menu_demo_on_selectable_confirm, on_confirm_args: ["Splat"], silent_on_confirm: false }); submenu[1].column_menu_add_selectable({ label: "Potato", - on_confirm_func: "menu_demo_on_confirm", + on_confirm_func: menu_demo_on_selectable_confirm, on_confirm_args: ["Mash"], silent_on_confirm: false }); submenu[1].column_menu_add_selectable({ label: "Carrot", - on_confirm_func: "menu_demo_on_confirm", + on_confirm_func: menu_demo_on_selectable_confirm, on_confirm_args: ["Crunch"], silent_on_confirm: false }); @@ -109,7 +109,7 @@ main_menu.nested_menu_init({ main_menu.nested_menu_add_submenu({ submenu: submenu[0], label: "Animals", - on_confirm_func: "menu_demo_on_confirm", + on_confirm_func: menu_demo_on_selectable_confirm, on_confirm_args: ["Foo"], silent_on_confirm: false }); @@ -117,7 +117,7 @@ main_menu.nested_menu_add_submenu({ main_menu.nested_menu_add_submenu({ submenu: submenu[1], label: "Vegetables", - on_confirm_func: "menu_demo_on_confirm", + on_confirm_func: menu_demo_on_selectable_confirm, on_confirm_args: ["Bar"], silent_on_confirm: false }); diff --git a/current-scripts/Demos/useful-scripts/objects/obj_nudger/Create_0.gml b/current-scripts/Demos/useful-scripts/objects/obj_nudger/Create_0.gml index b27b9da..0e2c494 100644 --- a/current-scripts/Demos/useful-scripts/objects/obj_nudger/Create_0.gml +++ b/current-scripts/Demos/useful-scripts/objects/obj_nudger/Create_0.gml @@ -1,3 +1,4 @@ +// Feather disable once GM2039 scr_nudger_funcs(); inst_id_v = noone; diff --git a/current-scripts/Demos/useful-scripts/objects/obj_nudger/Step_0.gml b/current-scripts/Demos/useful-scripts/objects/obj_nudger/Step_0.gml index 261bae8..71b2266 100644 --- a/current-scripts/Demos/useful-scripts/objects/obj_nudger/Step_0.gml +++ b/current-scripts/Demos/useful-scripts/objects/obj_nudger/Step_0.gml @@ -1,3 +1,4 @@ +// Feather disable GM1009 var _super_input = keyboard_check(vk_shift); var _log_input = true; diff --git a/current-scripts/Demos/useful-scripts/objects/obj_soft_mover/Create_0.gml b/current-scripts/Demos/useful-scripts/objects/obj_soft_mover/Create_0.gml index d5dea44..53c9c10 100644 --- a/current-scripts/Demos/useful-scripts/objects/obj_soft_mover/Create_0.gml +++ b/current-scripts/Demos/useful-scripts/objects/obj_soft_mover/Create_0.gml @@ -1,4 +1,4 @@ -actual_xpos = new Tween(start_v, start_d, actual_min, actual_max, TweenLimitMode.YOYO, false); +actual_xpos = new Tween(start_v, start_d, actual_min, actual_max, TWEEN_LIMIT_MODE.YOYO, false, pointer_null); soft_clamp_xpos = start_v; soft_ceiling_xpos = start_v; soft_floor_xpos = start_v; diff --git a/current-scripts/Demos/useful-scripts/objects/obj_soft_mover/Draw_0.gml b/current-scripts/Demos/useful-scripts/objects/obj_soft_mover/Draw_0.gml index 0421717..48ea185 100644 --- a/current-scripts/Demos/useful-scripts/objects/obj_soft_mover/Draw_0.gml +++ b/current-scripts/Demos/useful-scripts/objects/obj_soft_mover/Draw_0.gml @@ -8,7 +8,7 @@ draw_line(actual_max, y-16, actual_max, y+224); draw_set_color(c_white); draw_set_font(fnt_demo); -draw_set_valign(fa_center); +draw_set_valign(fa_middle); draw_set_halign(fa_left); draw_text(16, y, "Raw"); draw_circle(actual_xpos.v, y, 16, false); diff --git a/current-scripts/Demos/useful-scripts/objects/obj_strings_demo/Draw_0.gml b/current-scripts/Demos/useful-scripts/objects/obj_strings_demo/Draw_0.gml index 488618b..ce33e96 100644 --- a/current-scripts/Demos/useful-scripts/objects/obj_strings_demo/Draw_0.gml +++ b/current-scripts/Demos/useful-scripts/objects/obj_strings_demo/Draw_0.gml @@ -12,8 +12,8 @@ draw_set_font(fnt_demo); // Split String draw_text(16, 96, original_str); -for (var i=0; i> 16; +/// @param {real} _rgb_colour colour +function rgb_to_bgr(_rgb_colour) { + return (_rgb_colour & $FF) << 16 | (_rgb_colour & $FF00) | (_rgb_colour & $FF0000) >> 16; } +/// @func rgb_hex_string_to_real(hex_str) +/// @desc Converts RGB hex string to a real +/// @param {string} _hex_str +function rgb_hex_string_to_real(_hex_str) { + if (!is_string(_hex_str)) return -1; + var _str_len = string_length(_hex_str); + var _value = 0; + + for (var i=_str_len; i>0; i--) { + _value = _value << 4; + var _char = string_upper(string_copy(_hex_str, i, 1)); + + if (_char == "#") continue; + var _ord = ord(_char); + + if (_ord >= ord("A") && _ord <= ord("F")) { + _value += _ord - ord("A") + 10; + } else if (_ord >= ord("0") && _ord <= ord("9")) { + _value += real(_char); + } + } + + return _value; +} /// @func vary_color_hsv(base_color, variance_hue, variance_sat, variance_val) /// @desc Shifts the components of an HSV colour -/// @param base_color -/// @param variance_hue -/// @param variance_sat -/// @param variance_val +/// @param _base_color +/// @param _variance_hue +/// @param _variance_sat +/// @param _variance_val function vary_color_hsv(_base_color, _variance_hue, _variance_sat, _variance_val) { - var temp_hue = (color_get_hue(_base_color) + _variance_hue + 256) mod 256; - var temp_sat = (color_get_saturation(_base_color) + _variance_sat + 256) mod 256; - var temp_val = (color_get_value(_base_color) + _variance_val + 256) mod 256; + var _temp_hue = (color_get_hue(_base_color) + _variance_hue + 256) mod 256; + var _temp_sat = (color_get_saturation(_base_color) + _variance_sat + 256) mod 256; + var _temp_val = (color_get_value(_base_color) + _variance_val + 256) mod 256; - return make_color_hsv(temp_hue, temp_sat, temp_val); + return make_color_hsv(_temp_hue, _temp_sat, _temp_val); } \ No newline at end of file diff --git a/current-scripts/Demos/useful-scripts/scripts/column_menu_demo_scripts/column_menu_demo_scripts.gml b/current-scripts/Demos/useful-scripts/scripts/column_menu_demo_scripts/column_menu_demo_scripts.gml index 3c3b934..2bc3e60 100644 --- a/current-scripts/Demos/useful-scripts/scripts/column_menu_demo_scripts/column_menu_demo_scripts.gml +++ b/current-scripts/Demos/useful-scripts/scripts/column_menu_demo_scripts/column_menu_demo_scripts.gml @@ -1,3 +1,14 @@ -function menu_demo_on_confirm(_args) { +// Feather disable once GM1064 +function menu_demo_on_selectable_confirm(_args) { show_message(_args[0]); +} + +function menu_demo_on_valued_selectable_confirm(_item, _args) { + var _cur_value = _item.get_value(); + if (_cur_value == _args[0]) _item.set_value(_args[1]); + else _item.set_value(_args[0]); +} + +function menu_demo_on_valued_selectable_change(_args) { + show_message("Change!"); } \ No newline at end of file diff --git a/current-scripts/Demos/useful-scripts/scripts/column_menu_functions/column_menu_functions.gml b/current-scripts/Demos/useful-scripts/scripts/column_menu_functions/column_menu_functions.gml index 3661f69..95b6818 100644 --- a/current-scripts/Demos/useful-scripts/scripts/column_menu_functions/column_menu_functions.gml +++ b/current-scripts/Demos/useful-scripts/scripts/column_menu_functions/column_menu_functions.gml @@ -1,5 +1,5 @@ /// @func column_menu_init(config) -/// @param config +/// @param _config // - {real} view_height // - {} player_controller // - {font} label_font @@ -50,25 +50,25 @@ function column_menu_update_view_area() { } /// @func column_menu_get_item_by_index(menu, index) -/// @param {obj_column_menu} menu -/// @param {number} index +/// @param {Id.Instance} _menu obj_column_menu +/// @param {real} _index function column_menu_get_item_by_index(_menu, _index) { return _menu.items[| _index]; } /// @func column_menu_get_item_by_label(menu, label) -/// @param {obj_column_menu} menu -/// @param {string} label +/// @param {Id.Instance} _menu obj_column_menu +/// @param {string} _label function column_menu_get_item_by_label(_menu, _label) { - for (var i=0; i= _alarm.duration * 1000) { with (_alarm.context) { + // Feather disable once GM1041 script_execute(_alarm.callback); } if (_alarm.loop) { @@ -110,8 +114,8 @@ function DeltaTimeAlarmManager(_number) constructor { } function destroy() { - for (var i=0; i 0 = counter-clockwise. Can't be 0. -/// @param {real} percentage 0 - 1 -/// @param {Colour} front_color -/// @param {Colour} back_color -/// @param {Sprite} sprite use -1 for no sprite -/// @param {integer} fidelity +/// @func draw_circle_meter(x, y, radius, start_angle, direction, percentage, front_color, back_color, texture, fidelity, alpha) +/// @desc Draws circular progress meter on a surface +/// @param {Id.Surface} _surface +/// @param {real} _x +/// @param {real} _y +/// @param {real} _radius +/// @param {real} _start_angle +/// @param {real} _direction < 0 = clockwise, > 0 = counter-clockwise. Can't be 0. +/// @param {real} _percentage 0 - 1 +/// @param {real} _front_color colour +/// @param {real} _back_color colour +/// @param {Asset.GMSprite} _sprite use -1 for no sprite +/// @param {real} _fidelity function draw_circle_meter(_surface, _x, _y, _radius, _start_angle, _direction, _percentage, _front_color, _back_color, _sprite, _fidelity) { if (!surface_exists(_surface) || _direction == 0) return; @@ -26,20 +26,20 @@ function draw_circle_meter(_surface, _x, _y, _radius, _start_angle, _direction, // Draw back draw_primitive_begin_texture(pr_trianglestrip, _texture); - for (var i=0; i<=360; i+=_step_size) { + for (var _i=0; _i<=360; _i+=_step_size) { draw_vertex_texture_color(_radius,_radius, 0.5, 0.5, _back_color, 1); draw_vertex_texture_color( - _radius + dcos(i)*_radius, _radius - dsin(i)*_radius, - 0.5 + dcos(i) * 0.5, 0.5 - dsin(i) * 0.5,_back_color, 1); + _radius + dcos(_i)*_radius, _radius - dsin(_i)*_radius, + 0.5 + dcos(_i) * 0.5, 0.5 - dsin(_i) * 0.5,_back_color, 1); } draw_primitive_end(); // Draw front draw_primitive_begin_texture(pr_trianglestrip, _texture); - for (var i=0; i<=360*_percentage; i+=_step_size) { - var _angle = _actual_start_angle + i * _direction; + for (var _i=0; _i<=360*_percentage; _i+=_step_size) { + var _angle = _actual_start_angle + _i * _direction; draw_vertex_texture_color(_radius,_radius, 0.5, 0.5, _front_color, 1); draw_vertex_texture_color( @@ -51,11 +51,11 @@ function draw_circle_meter(_surface, _x, _y, _radius, _start_angle, _direction, // Draw back draw_primitive_begin(pr_trianglestrip); - for (var i=0; i<=360; i+=_step_size) { + for (var _i=0; _i<=360; _i+=_step_size) { draw_vertex_color(_radius, _radius, _back_color, 1); draw_vertex_color( - _radius + dcos(i)*_radius, _radius - dsin(i)*_radius, + _radius + dcos(_i)*_radius, _radius - dsin(_i)*_radius, _back_color, 1); } draw_primitive_end(); @@ -63,8 +63,8 @@ function draw_circle_meter(_surface, _x, _y, _radius, _start_angle, _direction, // Draw front draw_primitive_begin(pr_trianglestrip); - for (var i=0; i<=360*_percentage; i+=_step_size) { - var _angle = _actual_start_angle + i * _direction; + for (var _i=0; _i<=360*_percentage; _i+=_step_size) { + var _angle = _actual_start_angle + _i * _direction; draw_vertex_color(_radius, _radius, _front_color, 1); draw_vertex_color( @@ -78,21 +78,21 @@ function draw_circle_meter(_surface, _x, _y, _radius, _start_angle, _direction, } -/// @func draw_curved_meter(x, y, inner_radius, outer_radius, min_angle, max_angle, direction, percentage, front_color, back_color, sprite, fidelity) -/// @desc Draws circular progress meter on a surface -/// @param {Surface} surface -/// @param {real} x -/// @param {real} y -/// @param {real} inner_radius -/// @param {real} outer_radius -/// @param {real} min_angle -/// @param {real} max_angle -/// @param {real} direction < 0 = clockwise, > 0 = counter-clockwise. Can't be 0. -/// @param {real} percentage 0 - 1 -/// @param {Colour} front_color -/// @param {Colour} back_color -/// @apram {Sprite} sprite use -1 for no sprite -/// @param {integer} fidelity +/// @func draw_curved_meter(x, y, inner_radius, outer_radius, min_angle, max_angle, direction, percentage, front_color, back_color, sprite, fidelity) +/// @desc Draws circular progress meter on a surface +/// @param {Id.Surface} _surface +/// @param {real} _x +/// @param {real} _y +/// @param {real} _inner_radius +/// @param {real} _outer_radius +/// @param {real} _min_angle +/// @param {real} _max_angle +/// @param {real} _direction < 0 = clockwise, > 0 = counter-clockwise. Can't be 0. +/// @param {real} _percentage 0 - 1 +/// @param {real} _front_color colour +/// @param {real} _back_color colour +/// @param {Asset.GMSprite} _sprite use -1 for no sprite +/// @param {real} _fidelity function draw_curved_meter(_surface, _x, _y, _inner_radius, _outer_radius, _min_angle, _max_angle, _direction, _percentage, _front_color, _back_color, _sprite, _fidelity) { if (!surface_exists(_surface) || _direction == 0) return; @@ -110,22 +110,22 @@ function draw_curved_meter(_surface, _x, _y, _inner_radius, _outer_radius, _min_ // Draw back draw_primitive_begin_texture(pr_trianglestrip, _texture); - for (var i=_min_angle; i<=_max_angle; i+=_step_size) { + for (var _i=_min_angle; _i<=_max_angle; _i+=_step_size) { draw_vertex_texture_color( - _outer_radius + dcos(i)*_outer_radius, _outer_radius - dsin(i)*_outer_radius, - 0.5 + dcos(i) * 0.5, 0.5 - dsin(i) * 0.5, _back_color, 1); + _outer_radius + dcos(_i)*_outer_radius, _outer_radius - dsin(_i)*_outer_radius, + 0.5 + dcos(_i) * 0.5, 0.5 - dsin(_i) * 0.5, _back_color, 1); draw_vertex_texture_color( - _outer_radius + dcos(i)*_inner_radius, _outer_radius - dsin(i)*_inner_radius, - 0.5 + dcos(i) * 0.5 * _inner_outer_ratio, 0.5 - dsin(i) * 0.5 * _inner_outer_ratio, _back_color, 1); + _outer_radius + dcos(_i)*_inner_radius, _outer_radius - dsin(_i)*_inner_radius, + 0.5 + dcos(_i) * 0.5 * _inner_outer_ratio, 0.5 - dsin(_i) * 0.5 * _inner_outer_ratio, _back_color, 1); } draw_primitive_end(); // Draw front draw_primitive_begin_texture(pr_trianglestrip, _texture); - for (var i=0; i<=_percentage_angle; i+=_step_size) { - var _angle = _actual_start_angle + i * _direction; + for (var _i=0; _i<=_percentage_angle; _i+=_step_size) { + var _angle = _actual_start_angle + _i * _direction; draw_vertex_texture_color( _outer_radius + dcos(_angle)*_outer_radius, _outer_radius - dsin(_angle)*_outer_radius, @@ -140,13 +140,13 @@ function draw_curved_meter(_surface, _x, _y, _inner_radius, _outer_radius, _min_ // Draw back draw_primitive_begin(pr_trianglestrip); - for (var i=_min_angle; i<=_max_angle; i+=_step_size) { + for (var _i=_min_angle; _i<=_max_angle; _i+=_step_size) { draw_vertex_color( - _outer_radius + dcos(i)*_outer_radius, _outer_radius - dsin(i)*_outer_radius, + _outer_radius + dcos(_i)*_outer_radius, _outer_radius - dsin(_i)*_outer_radius, _back_color, 1); draw_vertex_color( - _outer_radius + dcos(i)*_inner_radius, _outer_radius - dsin(i)*_inner_radius, + _outer_radius + dcos(_i)*_inner_radius, _outer_radius - dsin(_i)*_inner_radius, _back_color, 1); } draw_primitive_end(); @@ -154,8 +154,8 @@ function draw_curved_meter(_surface, _x, _y, _inner_radius, _outer_radius, _min_ // Draw front draw_primitive_begin(pr_trianglestrip); - for (var i=0; i<=_percentage_angle; i+=_step_size) { - var _angle = _actual_start_angle + i * _direction; + for (var _i=0; _i<=_percentage_angle; _i+=_step_size) { + var _angle = _actual_start_angle + _i * _direction; draw_vertex_color( _outer_radius + dcos(_angle)*_outer_radius, _outer_radius - dsin(_angle)*_outer_radius, @@ -174,23 +174,23 @@ function draw_curved_meter(_surface, _x, _y, _inner_radius, _outer_radius, _min_ /// @func draw_outlined_text(x, y, string, xscale, yscale, angle, inner_color, outline_color, outline_width, alpha, fidelity) /// @desc Draws text with outline -/// @param {real} x -/// @param {real} y -/// @param {string} string -/// @param {real} xscale -/// @param {real} yscale -/// @param {real} angle -/// @param {Colour} inner_color -/// @param {Colour} outline_color -/// @param {real} outline_width -/// @param {real} alpha -/// @param {integer} fidelity +/// @param {real} _x +/// @param {real} _y +/// @param {string} _string +/// @param {real} _xscale +/// @param {real} _yscale +/// @param {real} _angle +/// @param {real} _inner_color colour +/// @param {real} _outline_color colour +/// @param {real} _outline_width +/// @param {real} _alpha +/// @param {real} _fidelity function draw_outlined_text(_x, _y, _string, _xscale, _yscale, _angle, _inner_color, _outline_color, _outline_width, _alpha, _fidelity) { draw_set_color(_outline_color); - for (var i=0; i<360; i+=360/_fidelity) { - draw_text_transformed_color(_x + lengthdir_x(_outline_width * _xscale, i), - _y + lengthdir_y(_outline_width * _yscale, i), + for (var _i=0; _i<360; _i+=360/_fidelity) { + draw_text_transformed_color(_x + lengthdir_x(_outline_width * _xscale, _i), + _y + lengthdir_y(_outline_width * _yscale, _i), _string,_xscale,_yscale,_angle,_outline_color,_outline_color,_outline_color,_outline_color,_alpha); } diff --git a/current-scripts/Demos/useful-scripts/scripts/easings_cubic/easings_cubic.gml b/current-scripts/Demos/useful-scripts/scripts/easings_cubic/easings_cubic.gml index 8fae89e..6c6c7e5 100644 --- a/current-scripts/Demos/useful-scripts/scripts/easings_cubic/easings_cubic.gml +++ b/current-scripts/Demos/useful-scripts/scripts/easings_cubic/easings_cubic.gml @@ -1,8 +1,8 @@ /// @func easing_cubic_in(_start, _end, _t) /// @desc cubic interpolation in -/// @param {number} start -/// @param {number} end -/// @param {number} t +/// @param {real} _start +/// @param {real} _end +/// @param {real} _t function easing_cubic_in(_start, _end, _t) { // (e + s) * t^3 + s var _t2 = clamp(power(_t, 3), 0, 1); @@ -12,9 +12,9 @@ function easing_cubic_in(_start, _end, _t) { /// @func easing_cubic_out(_start, _end, _t) /// @desc cubic interpolation in -/// @param {number} start -/// @param {number} end -/// @param {number} t +/// @param {real} _start +/// @param {real} _end +/// @param {real} _t function easing_cubic_out(_start, _end, _t) { // (e + s) * 1 - (1-t)^3 + s var _t2 = clamp(1 - power(1-_t, 3), 0, 1); @@ -24,9 +24,9 @@ function easing_cubic_out(_start, _end, _t) { /// @func easing_cubic_inout(_start, _end, _t) /// @desc cubic interpolation in/out -/// @param {number} start -/// @param {number} end -/// @param {number} t +/// @param {real} _start +/// @param {real} _end +/// @param {real} _t function easing_cubic_inout(_start, _end, _t) { // 0 - 0.5: (e + s) * (4 * t^3) + s // 0.5 - 1: (e + s) * (-4 * (1 - t)^3 + 1) + s diff --git a/current-scripts/Demos/useful-scripts/scripts/easings_linear/easings_linear.gml b/current-scripts/Demos/useful-scripts/scripts/easings_linear/easings_linear.gml index 3a5f2bb..8379015 100644 --- a/current-scripts/Demos/useful-scripts/scripts/easings_linear/easings_linear.gml +++ b/current-scripts/Demos/useful-scripts/scripts/easings_linear/easings_linear.gml @@ -1,8 +1,8 @@ -/// @func easing_linear(_start, _end, _t) -/// @desc linear interpolation (same as lerp()) -/// @param {number} start -/// @param {number} end -/// @param {number} t +/// @func easing_linear(_start, _end, _t) +/// @desc linear interpolation (same as lerp()) +/// @param {real} _start +/// @param {real} _end +/// @param {real} _t function easing_linear(_start, _end, _t) { // (e + s) * _t + s return lerp(_start, _end, _t); diff --git a/current-scripts/Demos/useful-scripts/scripts/easings_quadratic/easings_quadratic.gml b/current-scripts/Demos/useful-scripts/scripts/easings_quadratic/easings_quadratic.gml index 4cce5bd..a124920 100644 --- a/current-scripts/Demos/useful-scripts/scripts/easings_quadratic/easings_quadratic.gml +++ b/current-scripts/Demos/useful-scripts/scripts/easings_quadratic/easings_quadratic.gml @@ -1,8 +1,8 @@ -/// @func easing_quadratic_in(_start, _end, _t) -/// @desc quadratic interpolation in -/// @param {number} start -/// @param {number} end -/// @param {number} t +/// @func easing_quadratic_in(_start, _end, _t) +/// @desc quadratic interpolation in +/// @param {real} _start +/// @param {real} _end +/// @param {real} _t function easing_quadratic_in(_start, _end, _t) { // (e + s) * _t^2 + s var _t2 = clamp(power(_t, 2), 0, 1); @@ -10,11 +10,11 @@ function easing_quadratic_in(_start, _end, _t) { } -/// @func easing_quadratic_out(_start, _end, _t) -/// @desc quadratic interpolation in -/// @param {number} start -/// @param {number} end -/// @param {number} t +/// @func easing_quadratic_out(_start, _end, _t) +/// @desc quadratic interpolation in +/// @param {real} _start +/// @param {real} _end +/// @param {real} _t function easing_quadratic_out(_start, _end, _t) { // (e + s) * 1 - (1-t)^2 + s var _t2 = clamp(1 - power(1-_t, 2), 0, 1); @@ -22,11 +22,11 @@ function easing_quadratic_out(_start, _end, _t) { } -/// @func easing_quadratic_inout(_start, _end, _t) -/// @desc quadratic interpolation in/out -/// @param {number} start -/// @param {number} end -/// @param {number} t +/// @func easing_quadratic_inout(_start, _end, _t) +/// @desc quadratic interpolation in/out +/// @param {real} _start +/// @param {real} _end +/// @param {real} _t function easing_quadratic_inout(_start, _end, _t) { // 0 - 0.5: (e + s) * (2 * t^2) + s // 0.5 - 1: (e + s) * (-2 * (1-t)^2 + 1) + sW diff --git a/current-scripts/Demos/useful-scripts/scripts/easings_quartic/easings_quartic.gml b/current-scripts/Demos/useful-scripts/scripts/easings_quartic/easings_quartic.gml index 0396bc2..c628a6f 100644 --- a/current-scripts/Demos/useful-scripts/scripts/easings_quartic/easings_quartic.gml +++ b/current-scripts/Demos/useful-scripts/scripts/easings_quartic/easings_quartic.gml @@ -1,8 +1,8 @@ -/// @func easing_quartic_in(_start, _end, _t) -/// @desc quartic interpolation in -/// @param {number} start -/// @param {number} end -/// @param {number} t +/// @func easing_quartic_in(_start, _end, _t) +/// @desc quartic interpolation in +/// @param {real} _start +/// @param {real} _end +/// @param {real} _t function easing_quartic_in(_start, _end, _t) { // (e + s) * t^4 + s var _t2 = clamp(power(_t, 4), 0, 1); @@ -10,11 +10,11 @@ function easing_quartic_in(_start, _end, _t) { } -/// @func easing_quartic_out(_start, _end, _t) -/// @desc quartic interpolation in -/// @param {number} start -/// @param {number} end -/// @param {number} t +/// @func easing_quartic_out(_start, _end, _t) +/// @desc quartic interpolation in +/// @param {real} _start +/// @param {real} _end +/// @param {real} _t function easing_quartic_out(_start, _end, _t) { // (e + s) * 1 - (1-t)^4 + s var _t2 = clamp(1 - power(1-_t, 4), 0, 1); @@ -22,11 +22,11 @@ function easing_quartic_out(_start, _end, _t) { } -/// @func easing_quartic_inout(_start, _end, _t) -/// @desc quartic interpolation in/out -/// @param {number} start -/// @param {number} end -/// @param {number} t +/// @func easing_quartic_inout(_start, _end, _t) +/// @desc quartic interpolation in/out +/// @param {real} _start +/// @param {real} _end +/// @param {real} _t function easing_quartic_inout(_start, _end, _t) { // 0 - 0.5: (e + s) * (8 * t^4) + s // 0.5 - 1: (e + s) * (-8 * (1 - t)^4 + 1) + s diff --git a/current-scripts/Demos/useful-scripts/scripts/easings_quintic/easings_quintic.gml b/current-scripts/Demos/useful-scripts/scripts/easings_quintic/easings_quintic.gml index fa42971..ab53bdb 100644 --- a/current-scripts/Demos/useful-scripts/scripts/easings_quintic/easings_quintic.gml +++ b/current-scripts/Demos/useful-scripts/scripts/easings_quintic/easings_quintic.gml @@ -1,8 +1,8 @@ -/// @func easing_quintic_in(_start, _end, _t) -/// @desc quintic interpolation in -/// @param {number} start -/// @param {number} end -/// @param {number} t +/// @func easing_quintic_in(_start, _end, _t) +/// @desc quintic interpolation in +/// @param {real} _start +/// @param {real} _end +/// @param {real} _t function easing_quintic_in(_start, _end, _t) { // (e + s) * t^5 + s var _t2 = clamp(power(_t, 5), 0, 1); @@ -10,11 +10,11 @@ function easing_quintic_in(_start, _end, _t) { } -/// @func easing_quintic_out(_start, _end, _t) -/// @desc quintic interpolation in -/// @param {number} start -/// @param {number} end -/// @param {number} t +/// @func easing_quintic_out(_start, _end, _t) +/// @desc quintic interpolation in +/// @param {real} _start +/// @param {real} _end +/// @param {real} _t function easing_quintic_out(_start, _end, _t) { // (e + s) * 1 - (1-t)^5 + s var _t2 = clamp(1 - power(1-_t, 5), 0, 1); @@ -22,11 +22,11 @@ function easing_quintic_out(_start, _end, _t) { } -/// @func easing_quintic_inout(_start, _end, _t) -/// @desc quintic interpolation in/out -/// @param {number} start -/// @param {number} end -/// @param {number} t +/// @func easing_quintic_inout(_start, _end, _t) +/// @desc quintic interpolation in/out +/// @param {real} _start +/// @param {real} _end +/// @param {real} _t function easing_quintic_inout(_start, _end, _t) { // 0 - 0.5: (e + s) * (8 * t^5) + s // 0.5 - 1: (e + s) * (-8 * (1 - t)^5 + 1) + s diff --git a/current-scripts/Demos/useful-scripts/scripts/geometry_functions/geometry_functions.gml b/current-scripts/Demos/useful-scripts/scripts/geometry_functions/geometry_functions.gml index 0ca83a8..6b94d2e 100644 --- a/current-scripts/Demos/useful-scripts/scripts/geometry_functions/geometry_functions.gml +++ b/current-scripts/Demos/useful-scripts/scripts/geometry_functions/geometry_functions.gml @@ -1,7 +1,7 @@ -/// @func get_edge_position(line, bounding_box) -/// @desc Get the closest intersection point between a line segment and the edge of a rectangle -/// @param {LineSegment} line -/// @param {Rectangle} bounding_box +/// @func get_edge_position(line, bounding_box) +/// @desc Get the closest intersection point between a line segment and the edge of a rectangle +/// @param {Struct} _line LineSegment +/// @param {Struct} _bounding_box Rectangle function get_edge_position(_line, _bounding_box) { var _cur_point = -1; var _cur_dist; @@ -72,16 +72,16 @@ function get_edge_position(_line, _bounding_box) { /// 0 = on the line /// < 0 = below or left /// > 0 = above or right -/// @param {LineSegment} line -/// @param {Vector2} P +/// @param {Struct} _line LineSegment +/// @param {Struct} _p Vector2 function point_which_side(_line, _p) { return (_p.x - _line.a.x) * (_line.b.y - _line.y) - (_p.y - _line.a.y) * (_line.b.x - _line.a.x); } /// @func prune_path(path) /// @desc Removes redundant points in a Path -/// @param {Path} path -/// @param {Object} obstacle +/// @param {Asset.GMPath} _path +/// @param {Asset.GMObject} _obstacle function prune_path(_path, _obstacle) { var _num_points = path_get_number(_path); @@ -91,13 +91,14 @@ function prune_path(_path, _obstacle) { var _cur = new Vector2(path_get_x(_path, 0), path_get_y(_path, 0)); var _next = new Vector2(0, 0); - for (var i=1; i<_num_points; i++) { - _next.x = path_get_x(_path, i); - _next.y = path_get_y(_path, i); + for (var _i=1; _i<_num_points; _i++) { + _next.x = path_get_x(_path, _i); + _next.y = path_get_y(_path, _i); + // Feather disable once GM1011 if (!collision_line(_cur.x, _cur.y, _next.x, _next.y, _obstacle, false, true)) { - if (i <_num_points-1) - path_delete_point(_path,i); + if (_i <_num_points-1) + path_delete_point(_path, _i); } else { @@ -110,8 +111,9 @@ function prune_path(_path, _obstacle) { /// @func line_line_intersect(line1, line2) /// @desc Finds the intersection point between two LineSegments -/// @param {LineSegement} line1 -/// @param {LineSegement} line2 +/// @param {Struct} _line1 LineSegment +/// @param {Struct} _line2 LineSegment +/// @returns {Struct | real} function ray_line_intersect(_line1, _line2) { var _ray_dir = point_direction(_line1.a.x, _line1.a.y, _line1.b.x, _line1.b.y); @@ -137,8 +139,8 @@ function ray_line_intersect(_line1, _line2) { /// @func ray_reflect(incident_dir, normal_dir) /// @desc Rr = Ri - 2 * N * (Ri . N) -/// @param {real} incident_dir -/// @param {real} normal_dir +/// @param {real} _incident_dir +/// @param {real} _normal_dir function ray_reflect(_incident_dir, _normal_dir) { var _ri = new Vector2(lengthdir_x(1, _incident_dir), lengthdir_y(1, _incident_dir)); var _n = new Vector2(lengthdir_x(1, _normal_dir), lengthdir_y(1, _normal_dir)); diff --git a/current-scripts/Demos/useful-scripts/scripts/geometry_structs/geometry_structs.gml b/current-scripts/Demos/useful-scripts/scripts/geometry_structs/geometry_structs.gml index 3b283d7..78bca7b 100644 --- a/current-scripts/Demos/useful-scripts/scripts/geometry_structs/geometry_structs.gml +++ b/current-scripts/Demos/useful-scripts/scripts/geometry_structs/geometry_structs.gml @@ -1,3 +1,5 @@ +// Feather disable GM1010 + function LineSegment(_ax, _ay, _bx, _by) constructor { a = new Vector2(_ax, _ay); b = new Vector2(_bx, _by); diff --git a/current-scripts/Demos/useful-scripts/scripts/grid_menu_functions/grid_menu_functions.gml b/current-scripts/Demos/useful-scripts/scripts/grid_menu_functions/grid_menu_functions.gml index 6d9a4a7..cfdb53e 100644 --- a/current-scripts/Demos/useful-scripts/scripts/grid_menu_functions/grid_menu_functions.gml +++ b/current-scripts/Demos/useful-scripts/scripts/grid_menu_functions/grid_menu_functions.gml @@ -1,11 +1,11 @@ /// @func grid_menu_init(config) -/// @param config +/// @param {Struct} _config // - {real} width // - {real} height // - {real} view_width // - {real} view_height -// - {number} column_width -// - {} player_controller +// - {real} column_width +// - {Id.Instance} player_controller obj_player_controller // - {font} label_font // - {font} value_font // - {sprite} cursor_spr @@ -13,8 +13,8 @@ // - {sound} cursor_change_sfx // - {sound} cursor_confirm_sfx // - {boolean} use_control_icons -// - {Array.} keyboard_icons -// - {Array.} gamepad_icons +// - {Array} keyboard_icons +// - {Array} gamepad_icons function grid_menu_init(_config) { self.menu_base_init(_config); @@ -108,23 +108,24 @@ function grid_menu_update_view() { } /// @func grid_menu_get_item_by_index(menu, x, y) -/// @param {obj_grid_menu} menu -/// @param {number} x -/// @param {number} y +/// @param {Id.Instance} _menu obj_grid_menu +/// @param {real} _x +/// @param {real} _y function grid_menu_get_item_by_index(_menu, _x, _y) { return _menu.items[# _x, _y]; } /// @func grid_menu_get_item_by_label(menu, label) -/// @param {obj_grid_menu} menu -/// @param {string} label +/// @param {Id.Instance} _menu obj_grid_menu +/// @param {string} _label +/// @returns {any} function grid_menu_get_item_by_label(_menu, _label) { var _width = ds_grid_width(items); var _height = ds_grid_height(items); - for (var i=0; i<_width; i++) { - for (var j=0; j<_height; j++) { - if (_menu.items[# i, j].label == _label) return _menu.items[# i, j]; + for (var _i=0; _i<_width; _i++) { + for (var _j=0; _j<_height; _j++) { + if (_menu.items[# _i, _j].label == _label) return _menu.items[# _i, _j]; } } @@ -132,9 +133,9 @@ function grid_menu_get_item_by_label(_menu, _label) { } /// @func grid_menu_add_selectable(x, y, config) -/// @param x -/// @param y -/// @param config +/// @param _x +/// @param _y +/// @param _config // - {string} label // - {function} on_confirm_func // - {array} on_confirm_args @@ -150,10 +151,32 @@ function grid_menu_add_selectable(_x, _y, _config) { return _new; } +/// @param {real} _x +/// @param {real} _y +/// @param {Struct} _config +// - {string} label +// - {string} init_value +// - {function} on_confirm_func +// - {array} on_confirm_args +// - {function} on_change_func +// - {array} on_change_args +// - {boolean} silent_on_confirm +// - {boolean} silent_on_change +function grid_menu_add_valued_selectable(_x, _y, _config) { + if (_x < 0 || _x >= ds_grid_width(items) + || _y < 0 || _y >= ds_grid_height(items)) + return; + + var _new = new MenuValuedSelectable(_config); + _new.parent_menu = self.id; + items[# _x, _y] = _new; + return _new; +} + /// @func grid_menu_add_spinner(x, y, config) -/// @param x -/// @param y -/// @param config +/// @param _x +/// @param _y +/// @param _config // - {string} label // - {array} values // - {integer} init_index @@ -174,10 +197,10 @@ function grid_menu_add_spinner(_x, _y, _config) { return _new; } -/// @param grid_menu_add_key_config(x, y, config) -/// @param x -/// @param y -/// @param config +/// @func grid_menu_add_key_config(x, y, config) +/// @param _x +/// @param _y +/// @param _config // - {string} label // - {CONTROLS} control // - {array} initial_kbm_bindings @@ -197,10 +220,10 @@ function grid_menu_add_key_config(_x, _y, _config) { return _new; } -/// @param grid_menu_add_divider(x, y, config) -/// @param x -/// @param y -/// @param config +/// @func grid_menu_add_divider(x, y, config) +/// @param _x +/// @param _y +/// @param _config // - {string} label function grid_menu_add_divider(_x, _y, _config) { if (_x < 0 || _x >= ds_grid_width(items) diff --git a/current-scripts/Demos/useful-scripts/scripts/input_constants/input_constants.gml b/current-scripts/Demos/useful-scripts/scripts/input_constants/input_constants.gml index aee289a..585be99 100644 --- a/current-scripts/Demos/useful-scripts/scripts/input_constants/input_constants.gml +++ b/current-scripts/Demos/useful-scripts/scripts/input_constants/input_constants.gml @@ -1,3 +1,4 @@ +// Feather disable GM2017 #macro vk_clear 12 #macro vk_caps_lock 20 #macro vk_left_command 91 diff --git a/current-scripts/Demos/useful-scripts/scripts/input_functions/input_functions.gml b/current-scripts/Demos/useful-scripts/scripts/input_functions/input_functions.gml index 3294c39..099eed3 100644 --- a/current-scripts/Demos/useful-scripts/scripts/input_functions/input_functions.gml +++ b/current-scripts/Demos/useful-scripts/scripts/input_functions/input_functions.gml @@ -4,13 +4,11 @@ function translate_native_to_js_keycode(_keycode) { if (_keycode == 222) return vk_single_quote; else if (_keycode == 50) return vk_backtick; else return _keycode; - break; case os_linux: if (_keycode == 192) return vk_single_quote; else if (_keycode == 223) return vk_backtick; else return _keycode; - break; default: // Windows, Web, etc. @@ -20,7 +18,7 @@ function translate_native_to_js_keycode(_keycode) { /// @func keycode_to_string(keycode) /// @desc converts keycode to name of key as a string -/// @param {integer} keycode +/// @param {real} _keycode function keycode_to_string(_keycode) { // alphanumeric if ((_keycode >= ord("0") && _keycode <= ord("9")) || (_keycode >= ord("A") && _keycode <= ord("Z"))) { @@ -183,8 +181,8 @@ function keycode_to_string(_keycode) { /// @func get_keyboard_icon_index(keycode, icons) /// @desc converts keycode to image_index of keyboard icon -/// @param {integer} keycode -/// @param {Sprite} icons +/// @param {real} _keycode +/// @param {Asset.GMSprite} _icons function get_keyboard_icon_index(_keycode, _icons) { if (_keycode < 0) return sprite_get_number(_icons) - 1; var _js_keycode = translate_native_to_js_keycode(_keycode); @@ -195,8 +193,8 @@ function get_keyboard_icon_index(_keycode, _icons) { /// @func get_gamepad_icon_index(button_code, icons) /// @desc converts keycode to image_index of keyboard icon -/// @param {integer} button_code -/// @param {Sprite} icons +/// @param {real} _button_code +/// @param {Asset.GMSprite} _icons function get_gamepad_icon_index(_button_code, _icons) { var _offset_code = _button_code - 32768; if (_offset_code < 0) return sprite_get_number(_icons) - 1; @@ -207,7 +205,7 @@ function get_gamepad_icon_index(_button_code, _icons) { /// @func gamepad_constant_to_string(keycode) /// @desc converts gamepad constant to name as a string -/// @param {integer} gp_constant +/// @param {Constant.GamepadButton} _gp_constant function gamepad_constant_to_string(_gp_constant) { switch (_gp_constant) { case gp_padu: diff --git a/current-scripts/Demos/useful-scripts/scripts/math_functions/math_functions.gml b/current-scripts/Demos/useful-scripts/scripts/math_functions/math_functions.gml index 25d98e9..d4a852e 100644 --- a/current-scripts/Demos/useful-scripts/scripts/math_functions/math_functions.gml +++ b/current-scripts/Demos/useful-scripts/scripts/math_functions/math_functions.gml @@ -1,6 +1,6 @@ /// @func normalize_2d(vec) /// @desc Normalizes a Vector2 -/// @param {Vector2} vec +/// @param {Struct} _vec Vector2 function normalize_2d(_vec) { var _len = point_distance(0, 0, _vec.x, _vec.y); return new Vector2(_vec.x / _len, _vec.y / _len); @@ -9,7 +9,7 @@ function normalize_2d(_vec) { /// @func normalize_3d(vec) /// @desc Normalizes a Vector3 -/// @param {Vector3} vec +/// @param {Struct} _vec Vector3 function normalize_3d(_vec) { var _len = point_distance_3d(0, 0, 0, _vec.x, _vec.y, _vec.z); return new Vector3(_vec.x / _len, _vec.y / _len, _vec.z / _len); @@ -18,8 +18,8 @@ function normalize_3d(_vec) { /// @func cross_product(vec1, vec2) /// @desc Calculates cross product of two Vector3s -/// @param {Vector3} vec1 -/// @param {Vector3} vec2 +/// @param {Struct} _vec1 Vector3 +/// @param {Struct} _vec2 Vector3 function cross_product(_vec1, _vec2) { return new Vector3( _vec1.y*_vec2.z - _vec1.z*_vec2.y, @@ -31,8 +31,8 @@ function cross_product(_vec1, _vec2) { /// @func cross_product_2d(vec1, vec2) /// @desc Calculates the z-component of the "cross product" of two Vector2s -/// @param {Vector2} vec1 -/// @param {Vector2} vec2 +/// @param {Struct} _vec1 Vector2 +/// @param {Struct} _vec2 Vector2 function cross_product_2d(_vec1, _vec2) { return _vec1.x*_vec2.y - _vec1.y*_vec2.x; } @@ -40,8 +40,8 @@ function cross_product_2d(_vec1, _vec2) { /// @func cross_product_normalized(vec1, vec2) /// @desc Calculates the normalized cross product of two Vector3s -/// @param {Vector3} vec1 -/// @param {Vector3} vec2 +/// @param {Struct} _vec1 Vector3 +/// @param {Struct} _vec2 Vector3 function cross_product_normalized(_vec1, _vec2) { var _xp = new Vector3( _vec1.y*_vec2.z - _vec1.z*_vec2.y, @@ -54,9 +54,9 @@ function cross_product_normalized(_vec1, _vec2) { /// @func pulse(t, min, max) -/// @param {real} t -/// @param {real} min -/// @param {real} max +/// @param {real} _t +/// @param {real} _min +/// @param {real} _max function pulse(_t, _min, _max) { return _t >= _min && _t <= _max ? 1 - ((_t - _min) / (_max - _min)) @@ -64,24 +64,24 @@ function pulse(_t, _min, _max) { } /// @func blin(a, b, c, d, w1, w2) -/// @param {real} a -/// @param {real} b -/// @param {real} c -/// @param {real} d -/// @param {real} w1 -/// @param {real} w2 -function blin(a, b, c, d, w1, w2) { - var _ab = lerp(a, b, w1); - var _cd = lerp(c, d, w1); - return lerp(_ab, _cd, w2); +/// @param {real} _a +/// @param {real} _b +/// @param {real} _c +/// @param {real} _d +/// @param {real} _w1 +/// @param {real} _w2 +function blin(_a, _b, _c, _d, _w1, _w2) { + var _ab = lerp(_a, _b, _w1); + var _cd = lerp(_c, _d, _w1); + return lerp(_ab, _cd, _w2); } /// @func soft_ceiling(value, delta, max) /// @desc Allows values higher than max to go below, but not values lower than max to go above -/// @param {real} value -/// @param {real} delta -/// @param {real} max +/// @param {real} _value +/// @param {real} _delta +/// @param {real} _max function soft_ceiling(_value, _delta, _max) { return _value > _max && _delta > 0 ? min(_value, _max) : _value + _delta; } @@ -89,9 +89,9 @@ function soft_ceiling(_value, _delta, _max) { /// @func soft_floor(value, delta, min) /// @desc Allows values lower than min to go above, but not values higher than min to go below -/// @param {real} value -/// @param {real} delta -/// @param {real} min +/// @param {real} _value +/// @param {real} _delta +/// @param {real} _min function soft_floor(_value, _delta, _min) { return _value < _min && _delta < 0 ? max(_value, _min) : _value + _delta; } @@ -99,10 +99,10 @@ function soft_floor(_value, _delta, _min) { /// @func soft_clamp(original_value, delta, min, max) /// @desc A combination of soft_ceiling and soft_floor -/// @param {real} value -/// @param {real} delta -/// @param {real} min -/// @param {real} max +/// @param {real} _value +/// @param {real} _delta +/// @param {real} _min +/// @param {real} _max function soft_clamp(_value, _delta, _min, _max) { return (_value > _max && _delta > 0) || (_value < _min && _delta < 0) ? clamp(_value, _min, _max) : _value + _delta; } @@ -110,9 +110,9 @@ function soft_clamp(_value, _delta, _min, _max) { /// @func wrap(value, min, max) /// @desc Wraps a value to a positive number between min and max -/// @param {real} value -/// @apara {real} min -/// @param {real} max +/// @param {real} _value +/// @param {real} _min +/// @param {real} _max function wrap(_value, _min, _max) { var _range = _max - _min; if (_range == 0) return 0; diff --git a/current-scripts/Demos/useful-scripts/scripts/menu_base_functions/menu_base_functions.gml b/current-scripts/Demos/useful-scripts/scripts/menu_base_functions/menu_base_functions.gml index 178f319..e6ff740 100644 --- a/current-scripts/Demos/useful-scripts/scripts/menu_base_functions/menu_base_functions.gml +++ b/current-scripts/Demos/useful-scripts/scripts/menu_base_functions/menu_base_functions.gml @@ -1,11 +1,11 @@ /// @func menu_base_init(config) -/// @param {Struct} config +/// @param {Struct} _config /// - {} player_controller /// - {Font} font /// - {Sprite} cursor_spr /// - {boolean} use_control_icons -/// - {Array.} keyboard_icons -/// - {Array.} gamepad_icons +/// - {Array} keyboard_icons +/// - {Array} gamepad_icons /// - {number} control_icons_scale function menu_base_init(_config) { player_controller = _config.player_controller; @@ -47,11 +47,23 @@ function menu_base_start_scroll_down() { } /// @func handle_selectable_confirm(item) -/// @param {MenuSelectable} item +/// @param {Struct} _item MenuSelectable function handle_selectable_confirm(_item) { if (!_item.enabled) return; - if (script_exists(_item.on_confirm_func)) { - script_execute(_item.on_confirm_func, _item.on_confirm_args); + if (is_callable(_item.on_confirm_func)) { + _item.on_confirm_func(_item.on_confirm_args); + } + + if (!_item.silent_on_confirm && audio_exists(cursor_confirm_sfx)) { + audio_play_sound(cursor_confirm_sfx, 1, false); + } +} + +/// @param {Struct.MenuValuedSelectable} _item +function handle_valued_selectable_confirm(_item) { + if (!_item.enabled) return; + if (is_callable(_item.on_confirm_func)) { + _item.on_confirm_func(_item, _item.on_confirm_args); } if (!_item.silent_on_confirm && audio_exists(cursor_confirm_sfx)) { @@ -60,11 +72,11 @@ function handle_selectable_confirm(_item) { } /// @func handle_spinner_confirm(item) -/// @param {MenuSpinner} item +/// @param {Struct} _item MenuSpinner function handle_spinner_confirm(_item) { if (!_item.enabled) return; - if (script_exists(_item.on_confirm_func)) { - script_execute(_item.on_confirm_func, _item.cur_index, _item.values[_item.cur_index], _item.on_confirm_args); + if (is_callable(_item.on_confirm_func)) { + _item.on_confirm_func(_item.cur_index, _item.values[_item.cur_index], _item.on_confirm_args); } if (!_item.silent_on_confirm && audio_exists(cursor_confirm_sfx)) { @@ -73,16 +85,15 @@ function handle_spinner_confirm(_item) { } /// @func handle_spinner_change(item, delta) -/// @param {MenuSpinner} item -/// @param {number} delta -1 or 1 +/// @param {Struct} _item MenuSpinner +/// @param {real} _delta -1 or 1 function handle_spinner_change(_item, _delta) { if (!_item.enabled) return; var _num_values = array_length(_item.values); _item.cur_index = wrap(_item.cur_index+_delta, 0, _num_values); - if (script_exists(_item.on_change_func)) { - script_execute( - _item.on_change_func, + if (is_callable(_item.on_change_func)) { + _item.on_change_func( _item.cur_index, _item.values[_item.cur_index], _delta, @@ -96,8 +107,8 @@ function handle_spinner_change(_item, _delta) { } /// @func handle_key_config_select(item, delta) -/// @param {MenuKeyConfig} item -/// @param {number} delta +/// @param {Struct} _item MenuKeyConfig +/// @param {real} _delta function handle_key_config_select(_item, _delta) { if (!_item.enabled) return; var _num_values = KEYBOARD_MAX_BINDINGS_PER_CONTROL + GAMEPAD_MAX_BINDINGS_PER_CONTROL; @@ -116,7 +127,7 @@ function handle_key_config_select(_item, _delta) { } /// @func handle_key_config_confirm(item) -/// @param {MenuKeyConfig} item +/// @param {Struct} _item MenuKeyConfig function handle_key_config_confirm(_item) { if (!_item.enabled) return; var _last_pressed = control_state.control_any_pressed(); @@ -129,6 +140,7 @@ function handle_key_config_confirm(_item) { _item.current_binding_index = 0; } discovery_mode = MENU_DISCOVERY_MODE.SELECTING; + // Feather ignore once GM1043 self.active_key_config = _item; } else if (discovery_mode == MENU_DISCOVERY_MODE.SELECTING) { // Selecting @@ -148,6 +160,7 @@ function handle_key_config_cancel(_item) { if (!_item.enabled) return; if (discovery_mode == MENU_DISCOVERY_MODE.SELECTING) { discovery_mode = MENU_DISCOVERY_MODE.NONE; + // Feather disable once GM1043 self.active_key_config = noone; } } @@ -171,6 +184,7 @@ function handle_key_config_delete(_item) { } _item[$ _binding_key][_control_index] = -1; + // Feather disable once GM2017 player_controller.remove_binding(_control_type, _item.control, _control_index); discovery_mode = MENU_DISCOVERY_MODE.NONE; if (active_key_config) { @@ -206,24 +220,31 @@ function handle_key_config_discovery(_item) { } active_key_config[$ _binding_key][_control_index] = _last_pressed.control_pressed; + // Feather disable once GM2017 player_controller.set_binding(_control_type, _last_pressed.control_source, active_key_config.control, _control_index, _last_pressed.control_pressed); discovery_mode = MENU_DISCOVERY_MODE.NONE; active_key_config.discovery_binding_info = false; - if (script_exists(self.active_key_config.on_change_func)) { - script_execute(self.active_key_config.on_change_func, _control_type, _last_pressed.control_source, active_key_config.control, _control_index, _last_pressed.control_pressed, self.active_key_config.on_change_args); + // Feather disable once GM2017 + if (is_callable(self.active_key_config.on_change_func)) { + // Feather disable once GM1050 + // Feather disable once GM2017 + self.active_key_config.on_change_func(_control_type, _last_pressed.control_source, active_key_config.control, _control_index, _last_pressed.control_pressed, self.active_key_config.on_change_args); } + // Feather disable once GM1043 self.active_key_config = noone; io_clear(); } } -function menu_base_draw_item(_item, _x, _y) { - var _type = _item.types[| ds_list_size(_item.types)-1]; +function menu_base_draw_item(_item, _x, _y, _is_focused = false) { + var _type = _item.type; if (_item.enabled) draw_set_colour(c_white); else draw_set_colour(c_gray); + var _item_value; + switch (_type) { case "item": case "selectable": @@ -231,89 +252,117 @@ function menu_base_draw_item(_item, _x, _y) { draw_text(_x, _y, _item.label); break; - case "spinner": - draw_set_font(self.menu_label_font); - draw_text(_x, _y, _item.label); - draw_set_font(self.menu_value_font); - draw_text(_x + label_width, _y + spinner_value_text_y_offset, _item.get_value()); - break; + case "valuedSelectable": + draw_set_font(self.menu_label_font); + draw_text(_x, _y, _item.label); + draw_set_font(self.menu_value_font); + draw_text(_x + label_width, _y + spinner_value_text_y_offset, _item.get_value()); + break; - case "keyconfig": - draw_set_font(self.menu_label_font); - draw_text(_x, _y, _item.label); - var _cur_x = _x + label_width; - var _cur_binding_index = 0; - draw_set_font(self.menu_value_font); + case "spinner": + _item_value = _item.get_value(); + draw_set_font(self.menu_label_font); + draw_text(_x, _y, _item.label); + draw_set_font(self.menu_value_font); + draw_text(_x + label_width, _y + spinner_value_text_y_offset, _item_value); - // Draw keyboard bindings - for (var i=0; i} keyboard_icons -// - {Array.} gamepad_icons +// - {Asset.GMFont} font +// - {real} column_width +// - {Asset.GMSprite} cursor_spr +// - {Asset.GMSound} cursor_move_sfx +// - {Asset.GMSound} cursor_change_sfx +// - {Asset.GMSound} cursor_confirm_sfx +// - {bool} use_control_icons +// - {Array} keyboard_icons +// - {Array} gamepad_icons function nested_menu_init(_config) { self.column_menu_init(_config); column_width = _config.column_width; } /// @func nested_menu_get_submenu_by_index(menu, index) -/// @param {obj_nested_menu} menu -/// @param {number} index +/// @param {Id.Instance} _menu obj_nested_menu +/// @param {real} _index function nested_menu_get_item_by_index(_menu, _index) { return _menu.items[| _index]; } /// @func column_menu_get_submenu_by_label(menu, label) -/// @param {obj_nested_menu} menu -/// @param {string} label +/// @param {Id.Instance} _menu obj_nested_menu +/// @param {string} _label +/// @returns {any} function nested_menu_get_item_by_label(_menu, _label) { - for (var i=0; i= _menu.num_items) return; _menu.active_item = noone; - for (var i=0; i<_menu.num_items; i++) { - var _item = _menu.nested_menu_get_item_by_index(_menu, i) + for (var _i=0; _i<_menu.num_items; _i++) { + var _item = _menu.nested_menu_get_item_by_index(_menu, _i) var _submenu = _item.submenu; - if (_index == i) { + if (_index == _i) { _submenu.enabled = true; _submenu.visible = true; _menu.active_item = _item; @@ -58,7 +59,7 @@ function nested_menu_toggle_submenu_by_index(_menu, _index) { } /// @func nested_menu_add_submenu(config) -/// @param config +/// @param _config // - {obj_menu_base} submenu // - {string} label // - {function} on_confirm_func diff --git a/current-scripts/Demos/useful-scripts/scripts/nested_menu_structs/nested_menu_structs.gml b/current-scripts/Demos/useful-scripts/scripts/nested_menu_structs/nested_menu_structs.gml index b894b93..aef2d5e 100644 --- a/current-scripts/Demos/useful-scripts/scripts/nested_menu_structs/nested_menu_structs.gml +++ b/current-scripts/Demos/useful-scripts/scripts/nested_menu_structs/nested_menu_structs.gml @@ -1,11 +1,11 @@ /// @func NestedMenuSubmenu(config) -/// @param config +/// @param _config // - {obj_menu_base} submenu // - {string} label // - {function} on_confirm_func // - {array} on_confirm_args // - {boolean} silent_on_confirm function NestedMenuSubmenu(_config) : MenuSelectable(_config) constructor { - ds_list_add(types, "menu"); + type = "menu"; submenu = _config.submenu; } \ No newline at end of file diff --git a/current-scripts/Demos/useful-scripts/scripts/strings/strings.gml b/current-scripts/Demos/useful-scripts/scripts/strings/strings.gml index 60a221a..c2ace39 100644 --- a/current-scripts/Demos/useful-scripts/scripts/strings/strings.gml +++ b/current-scripts/Demos/useful-scripts/scripts/strings/strings.gml @@ -1,13 +1,13 @@ /// @func concat(val1[, val2, ...]) /// @desc Concatenates a bunch of arguments into a string -/// @param {*} value1 -/// @param {*} [value2] +/// @param {any} _value1 +/// @param {any} [_value2] /// ... function concat() { var _str = ""; - for (var i=0; i= 0 && _os_type < array_length(global._os_type_strings)) { @@ -39,7 +39,7 @@ function get_os_type_string(_os_type){ /// @func get_os_version_string(os_version) /// @desc Converts os_version into a human-readable string -/// @param {number} os_version +/// @param {real} _os_version /// @returns {string} function get_os_version_string(_os_version) { // Browser @@ -68,12 +68,14 @@ function get_os_version_string(_os_version) { /// @func get_os_browser_string(os_version) /// @desc Converts os_browser enum value into a human-readable string -/// @param {number} os_browser +/// @param {Constant.BrowserType} _os_browser /// @returns {string} function get_os_browser_string(_os_browser) { if (_os_browser == browser_not_a_browser) { return "Not a browser"; - } else if (_os_browser >= 0 && _os_browser < array_length(global._os_browser_strings)) { + } + // Feather disable once GM1044 + else if (_os_browser >= 0 && _os_browser < array_length(global._os_browser_strings)) { return global._os_browser_strings[_os_browser]; } else { return global._os_browser_strings[browser_unknown]; @@ -83,7 +85,7 @@ function get_os_browser_string(_os_browser) { /// @func get_steam_deck_info() /// @desc Checks if game is running on Steam Deck and which gamepad slot the controls are connected to /// Note: Doesn't work if called at the very start of the game. Wait a few steps before calling it. -/// @returns {boolean} +/// @returns {Struct} function get_steam_deck_info() { var _result = { is_on_steam_deck: false, @@ -92,11 +94,11 @@ function get_steam_deck_info() { // Check all gamepad slots for "Steam Virtual Gamepad" var _num_devices = gamepad_get_device_count(); - for (var i = 0; i < _num_devices; i++;) { - if (gamepad_is_connected(i)) { - var _description = gamepad_get_description(i); + for (var _i = 0; _i < _num_devices; _i++;) { + if (gamepad_is_connected(_i)) { + var _description = gamepad_get_description(_i); if (string_pos("Steam Virtual Gamepad", _description) != 0) { - _result.gamepad_index = i; + _result.gamepad_index = _i; } } } diff --git a/current-scripts/Demos/useful-scripts/scripts/tween_structs/tween_structs.gml b/current-scripts/Demos/useful-scripts/scripts/tween_structs/tween_structs.gml index 9782427..0b036b3 100644 --- a/current-scripts/Demos/useful-scripts/scripts/tween_structs/tween_structs.gml +++ b/current-scripts/Demos/useful-scripts/scripts/tween_structs/tween_structs.gml @@ -1,4 +1,4 @@ -enum TweenLimitMode { +enum TWEEN_LIMIT_MODE { NONE, CEILING, FLOOR, @@ -11,14 +11,15 @@ enum TweenLimitMode { BOUNCE } -/// @func Tween(value, delta, min_v, max_v, limit_mode, stop_outside_range) -function Tween(_value, _delta, _min_v, _max_v, _limit_mode, _stop_outside_range) constructor { +/// @func Tween(value, delta, min_v, max_v, limit_mode, stop_outside_range, outside_range_callback) +function Tween(_value, _delta, _min_v, _max_v, _limit_mode, _stop_outside_range, _outside_range_callback) constructor { v = _value; d = _delta; min_v = _min_v; max_v = _max_v; limit_mode = _limit_mode; stop_outside_range = _stop_outside_range; + outside_range_callback = _outside_range_callback; static update = function() { if (d != 0) { @@ -26,46 +27,46 @@ function Tween(_value, _delta, _min_v, _max_v, _limit_mode, _stop_outside_range) var _new_v = v + d; switch (limit_mode) { - case TweenLimitMode.NONE: + case TWEEN_LIMIT_MODE.NONE: v = _new_v; break; - case TweenLimitMode.CEILING: + case TWEEN_LIMIT_MODE.CEILING: v = min(_new_v, max_v); break; - case TweenLimitMode.FLOOR: + case TWEEN_LIMIT_MODE.FLOOR: v = max(_new_v, min_v); break; - case TweenLimitMode.CLAMP: + case TWEEN_LIMIT_MODE.CLAMP: v = clamp(_new_v, min_v, max_v); break; - case TweenLimitMode.SOFT_CEILING: + case TWEEN_LIMIT_MODE.SOFT_CEILING: v = soft_ceiling(v, d, max_v); break; - case TweenLimitMode.SOFT_FLOOR: + case TWEEN_LIMIT_MODE.SOFT_FLOOR: v = soft_floor(v, d, min_v); break; - case TweenLimitMode.SOFT_CLAMP: + case TWEEN_LIMIT_MODE.SOFT_CLAMP: v = soft_clamp(v, d, min_v, max_v); break; - case TweenLimitMode.WRAP: + case TWEEN_LIMIT_MODE.WRAP: v = wrap(_new_v, min_v, max_v); break; - case TweenLimitMode.YOYO: + case TWEEN_LIMIT_MODE.YOYO: v = clamp(_new_v, min_v, max_v); if ((v == min_v) || (v == max_v)) { d *= -1; } break; - case TweenLimitMode.BOUNCE: + case TWEEN_LIMIT_MODE.BOUNCE: v = clamp(_new_v, min_v, max_v); if (v == max_v) { d *= -1; @@ -78,8 +79,11 @@ function Tween(_value, _delta, _min_v, _max_v, _limit_mode, _stop_outside_range) v = _new_v; } - if (stop_outside_range && _old_v == v) { + if (stop_outside_range && (v >= max_v || v <= min_v)) { d = 0; + if (is_callable(outside_range_callback)) { + outside_range_callback(); + } } } } diff --git a/current-scripts/Demos/useful-scripts/scripts/web/web.gml b/current-scripts/Demos/useful-scripts/scripts/web/web.gml index d26f38d..27ae836 100644 --- a/current-scripts/Demos/useful-scripts/scripts/web/web.gml +++ b/current-scripts/Demos/useful-scripts/scripts/web/web.gml @@ -1,6 +1,6 @@ /// @func url_encode(url) /// @desc URL-Encodes a string according to RFC 1738. Based on https://help.yoyogames.com/hc/en-us/articles/216754718-Encoding-URLs -/// @param {string{ url +/// @param {string} _url function url_encode(_url) { var _encoded_url = ""; @@ -15,23 +15,23 @@ function url_encode(_url) { ]; var _num_special_chars = array_length(_special_chars); - var decimal_to_hex = [ + var _decimal_to_hex = [ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F" ]; - for (var i=1; i<=_url_len; i++) { - var _char = ord(string_char_at(_url, i)); + for (var _i=1; _i<=_url_len; _i++) { + var _char = ord(string_char_at(_url, _i)); var _is_special = false; if (_char < ord(" ") || _char > ord("~")) { _is_special = true; } else { - for (var j=0; j<_num_special_chars; j++) { - if (_char == ord(_special_chars[j])) { + for (var _j=0; _j<_num_special_chars; _j++) { + if (_char == ord(_special_chars[_j])) { _is_special = true; break; } @@ -39,8 +39,8 @@ function url_encode(_url) { } if (_is_special) { - var _high = decimal_to_hex[_char div 16]; - var _low = decimal_to_hex[_char mod 16]; + var _high = _decimal_to_hex[_char div 16]; + var _low = _decimal_to_hex[_char mod 16]; _encoded_url += "%" + _high + _low; } else { _encoded_url += chr(_char); diff --git a/current-scripts/Demos/useful-scripts/useful-scripts.yyp b/current-scripts/Demos/useful-scripts/useful-scripts.yyp index cb8c21c..d545f53 100644 --- a/current-scripts/Demos/useful-scripts/useful-scripts.yyp +++ b/current-scripts/Demos/useful-scripts/useful-scripts.yyp @@ -54,7 +54,7 @@ "isEcma": false, "LibraryEmitters": [], "MetaData": { - "IDEVersion": "2023.4.0.84", + "IDEVersion": "2023.8.2.108", }, "resources": [ {"id":{"name":"obj_data_structures_demo","path":"objects/obj_data_structures_demo/obj_data_structures_demo.yy",},}, @@ -174,6 +174,7 @@ {"roomId":{"name":"room_system_info","path":"rooms/room_system_info/room_system_info.yy",},}, {"roomId":{"name":"room_key_config_menu_demo","path":"rooms/room_key_config_menu_demo/room_key_config_menu_demo.yy",},}, ], + "templateType": null, "TextureGroups": [ {"resourceType":"GMTextureGroup","resourceVersion":"1.3","name":"Default","autocrop":true,"border":2,"compressFormat":"bz2","directory":"","groupParent":null,"isScaled":true,"loadType":"default","mipsToGenerate":0,"targets":-1,}, ], diff --git a/current-scripts/usefulGMLScripts.yymps b/current-scripts/usefulGMLScripts.yymps index 07871c2..c89f65f 100644 Binary files a/current-scripts/usefulGMLScripts.yymps and b/current-scripts/usefulGMLScripts.yymps differ