diff --git a/PixelComposer.resource_order b/PixelComposer.resource_order index 3c39d26a0..5bdc246ec 100644 --- a/PixelComposer.resource_order +++ b/PixelComposer.resource_order @@ -7,6 +7,7 @@ {"name":"Math","order":1,"path":"folders/_extensions/BBMOD/Math.yy",}, {"name":"GMD3D11","order":11,"path":"folders/_extensions/GMD3D11.yy",}, {"name":"MAC","order":6,"path":"folders/_extensions/MAC.yy",}, + {"name":"Shader replace","order":12,"path":"folders/_extensions/Shader replace.yy",}, {"name":"addons","order":10,"path":"folders/addons.yy",}, {"name":"custom","order":4,"path":"folders/addons/custom.yy",}, {"name":"key displayer","order":2,"path":"folders/addons/key displayer.yy",}, @@ -25,20 +26,19 @@ {"name":"light","order":6,"path":"folders/functions/3d/light.yy",}, {"name":"mesh","order":8,"path":"folders/functions/3d/mesh.yy",}, {"name":"util","order":5,"path":"folders/functions/3d/util.yy",}, - {"name":"action","order":40,"path":"folders/functions/action.yy",}, + {"name":"action","order":38,"path":"folders/functions/action.yy",}, {"name":"animation","order":19,"path":"folders/functions/animation.yy",}, - {"name":"async","order":36,"path":"folders/functions/async.yy",}, - {"name":"audio","order":35,"path":"folders/functions/audio.yy",}, + {"name":"async","order":34,"path":"folders/functions/async.yy",}, + {"name":"audio","order":33,"path":"folders/functions/audio.yy",}, {"name":"bones","order":18,"path":"folders/functions/bones.yy",}, - {"name":"buffer","order":37,"path":"folders/functions/buffer.yy",}, + {"name":"buffer","order":35,"path":"folders/functions/buffer.yy",}, {"name":"compat","order":13,"path":"folders/functions/compat.yy",}, {"name":"control","order":22,"path":"folders/functions/control.yy",}, {"name":"curve","order":12,"path":"folders/functions/curve.yy",}, {"name":"debug","order":14,"path":"folders/functions/debug.yy",}, - {"name":"delaunay","order":30,"path":"folders/functions/delaunay.yy",}, - {"name":"draw","order":2,"path":"folders/functions/draw.yy",}, - {"name":"ds","order":5,"path":"folders/functions/ds.yy",}, - {"name":"eval","order":10,"path":"folders/functions/eval.yy",}, + {"name":"delaunay","order":28,"path":"folders/functions/delaunay.yy",}, + {"name":"draw","order":3,"path":"folders/functions/draw.yy",}, + {"name":"ds","order":6,"path":"folders/functions/ds.yy",}, {"name":"files","order":15,"path":"folders/functions/files.yy",}, {"name":"fluid sim","order":26,"path":"folders/functions/fluid sim.yy",}, {"name":"API","order":3,"path":"folders/functions/fluid sim/API.yy",}, @@ -53,23 +53,27 @@ {"name":"object","order":4,"path":"folders/functions/fluid sim/Internal/Compatibility/object.yy",}, {"name":"texture","order":5,"path":"folders/functions/fluid sim/Internal/Compatibility/texture.yy",}, {"name":"view","order":6,"path":"folders/functions/fluid sim/Internal/Compatibility/view.yy",}, - {"name":"geometry","order":31,"path":"folders/functions/geometry.yy",}, - {"name":"importers","order":6,"path":"folders/functions/importers.yy",}, - {"name":"inputs","order":7,"path":"folders/functions/inputs.yy",}, + {"name":"geometry","order":29,"path":"folders/functions/geometry.yy",}, + {"name":"GLSL","order":41,"path":"folders/functions/GLSL.yy",}, + {"name":"importers","order":7,"path":"folders/functions/importers.yy",}, + {"name":"inputs","order":8,"path":"folders/functions/inputs.yy",}, {"name":"lua","order":24,"path":"folders/functions/lua.yy",}, - {"name":"nodes","order":34,"path":"folders/functions/nodes.yy",}, - {"name":"packing","order":32,"path":"folders/functions/packing.yy",}, + {"name":"migration","order":1,"path":"folders/functions/migration.yy",}, + {"name":"nodes","order":32,"path":"folders/functions/nodes.yy",}, + {"name":"packing","order":30,"path":"folders/functions/packing.yy",}, + {"name":"PCX","order":11,"path":"folders/functions/PCX.yy",}, {"name":"physics","order":21,"path":"folders/functions/physics.yy",}, - {"name":"project","order":39,"path":"folders/functions/project.yy",}, + {"name":"project","order":37,"path":"folders/functions/project.yy",}, {"name":"shader","order":16,"path":"folders/functions/shader.yy",}, - {"name":"string","order":4,"path":"folders/functions/string.yy",}, - {"name":"surface","order":8,"path":"folders/functions/surface.yy",}, + {"name":"string","order":5,"path":"folders/functions/string.yy",}, + {"name":"surface","order":9,"path":"folders/functions/surface.yy",}, {"name":"test","order":23,"path":"folders/functions/test.yy",}, - {"name":"tween","order":33,"path":"folders/functions/tween.yy",}, - {"name":"value","order":1,"path":"folders/functions/value.yy",}, - {"name":"variables","order":41,"path":"folders/functions/variables.yy",}, - {"name":"vector","order":3,"path":"folders/functions/vector.yy",}, - {"name":"window","order":29,"path":"folders/functions/window.yy",}, + {"name":"tooltip","order":40,"path":"folders/functions/tooltip.yy",}, + {"name":"tween","order":31,"path":"folders/functions/tween.yy",}, + {"name":"value","order":2,"path":"folders/functions/value.yy",}, + {"name":"variables","order":39,"path":"folders/functions/variables.yy",}, + {"name":"vector","order":4,"path":"folders/functions/vector.yy",}, + {"name":"window","order":27,"path":"folders/functions/window.yy",}, {"name":"main","order":1,"path":"folders/main.yy",}, {"name":"startup scripts","order":2,"path":"folders/main/startup scripts.yy",}, {"name":"nodes","order":3,"path":"folders/nodes.yy",}, @@ -167,6 +171,7 @@ {"name":"color picker","order":56,"path":"folders/shader/color picker.yy",}, {"name":"color selector","order":51,"path":"folders/shader/color selector.yy",}, {"name":"draw","order":39,"path":"folders/shader/draw.yy",}, + {"name":"dummy","order":57,"path":"folders/shader/dummy.yy",}, {"name":"filter","order":30,"path":"folders/shader/filter.yy",}, {"name":"color","order":53,"path":"folders/shader/filter/color.yy",}, {"name":"shadow caster","order":46,"path":"folders/shader/filter/shadow caster.yy",}, @@ -194,7 +199,6 @@ {"name":"biterator","order":2,"path":"folders/VCT/biterator.yy",}, {"name":"widget","order":3,"path":"folders/VCT/widget.yy",}, {"name":"widgets","order":5,"path":"folders/widgets.yy",}, - {"name":"tooltip","order":42,"path":"folders/functions/tooltip.yy",}, ], "ResourceOrderSettings": [ {"name":"s_node_corner","order":16,"path":"sprites/s_node_corner/s_node_corner.yy",}, @@ -215,6 +219,7 @@ {"name":"sh_fd_add_velocity_glsl","order":1,"path":"shaders/sh_fd_add_velocity_glsl/sh_fd_add_velocity_glsl.yy",}, {"name":"s_node_normal","order":30,"path":"sprites/s_node_normal/s_node_normal.yy",}, {"name":"node_pixel_sort","order":12,"path":"scripts/node_pixel_sort/node_pixel_sort.yy",}, + {"name":"node_glsl","order":13,"path":"scripts/node_glsl/node_glsl.yy",}, {"name":"sh_dither","order":28,"path":"shaders/sh_dither/sh_dither.yy",}, {"name":"__vec2","order":7,"path":"scripts/__vec2/__vec2.yy",}, {"name":"node_region_fill","order":20,"path":"scripts/node_region_fill/node_region_fill.yy",}, @@ -404,6 +409,7 @@ {"name":"fd_rectangle_update_view","order":5,"path":"scripts/fd_rectangle_update_view/fd_rectangle_update_view.yy",}, {"name":"s_node_rigidSim_renderer","order":1,"path":"sprites/s_node_rigidSim_renderer/s_node_rigidSim_renderer.yy",}, {"name":"__init_background","order":4,"path":"scripts/__init_background/__init_background.yy",}, + {"name":"shader_replace_simple_macros","order":2,"path":"scripts/shader_replace_simple_macros/shader_replace_simple_macros.yy",}, {"name":"s_textbox","order":1,"path":"sprites/s_textbox/s_textbox.yy",}, {"name":"__node","order":8,"path":"scripts/__node/__node.yy",}, {"name":"fd_rectangle_add_velocity","order":5,"path":"scripts/fd_rectangle_add_velocity/fd_rectangle_add_velocity.yy",}, @@ -749,7 +755,7 @@ {"name":"node_color_remove","order":2,"path":"scripts/node_color_remove/node_color_remove.yy",}, {"name":"s_node_3d_light_directi","order":17,"path":"sprites/s_node_3d_light_directi/s_node_3d_light_directi.yy",}, {"name":"spr_gameframe_pixel","order":3,"path":"sprites/spr_gameframe_pixel/spr_gameframe_pixel.yy",}, - {"name":"process_functions","order":38,"path":"scripts/process_functions/process_functions.yy",}, + {"name":"process_functions","order":36,"path":"scripts/process_functions/process_functions.yy",}, {"name":"s_node_radial","order":53,"path":"sprites/s_node_radial/s_node_radial.yy",}, {"name":"s_node_grid","order":3,"path":"sprites/s_node_grid/s_node_grid.yy",}, {"name":"s_node_animation_control","order":31,"path":"sprites/s_node_animation_control/s_node_animation_control.yy",}, @@ -912,6 +918,7 @@ {"name":"sh_d3d_shadow_depth","order":19,"path":"shaders/sh_d3d_shadow_depth/sh_d3d_shadow_depth.yy",}, {"name":"s_node_noise_fbm","order":26,"path":"sprites/s_node_noise_fbm/s_node_noise_fbm.yy",}, {"name":"sh_color_select_content","order":1,"path":"shaders/sh_color_select_content/sh_color_select_content.yy",}, + {"name":"scr_cmd_arg","order":3,"path":"scripts/scr_cmd_arg/scr_cmd_arg.yy",}, {"name":"sh_outline","order":18,"path":"shaders/sh_outline/sh_outline.yy",}, {"name":"s_node_strandSim_break","order":8,"path":"sprites/s_node_strandSim_break/s_node_strandSim_break.yy",}, {"name":"s_node_scatter_point","order":4,"path":"sprites/s_node_scatter_point/s_node_scatter_point.yy",}, @@ -1297,6 +1304,7 @@ {"name":"addon","order":1,"path":"objects/addon/addon.yy",}, {"name":"_f_h3","order":3,"path":"fonts/_f_h3/_f_h3.yy",}, {"name":"s_node_math","order":1,"path":"sprites/s_node_math/s_node_math.yy",}, + {"name":"panel_text_editor","order":11,"path":"scripts/panel_text_editor/panel_text_editor.yy",}, {"name":"node_iterator_index","order":2,"path":"scripts/node_iterator_index/node_iterator_index.yy",}, {"name":"s_node_palette_sort","order":14,"path":"sprites/s_node_palette_sort/s_node_palette_sort.yy",}, {"name":"node_greyscale","order":5,"path":"scripts/node_greyscale/node_greyscale.yy",}, @@ -1474,6 +1482,7 @@ {"name":"sprite_loader","order":11,"path":"scripts/sprite_loader/sprite_loader.yy",}, {"name":"fd_rectangle_get_material_surface","order":12,"path":"scripts/fd_rectangle_get_material_surface/fd_rectangle_get_material_surface.yy",}, {"name":"fd_rectangle_clear","order":6,"path":"scripts/fd_rectangle_clear/fd_rectangle_clear.yy",}, + {"name":"shader_replace_simple","order":1,"path":"extensions/shader_replace_simple/shader_replace_simple.yy",}, {"name":"d3d_cone","order":5,"path":"scripts/d3d_cone/d3d_cone.yy",}, {"name":"__rectangle","order":7,"path":"scripts/__rectangle/__rectangle.yy",}, {"name":"s_node_iterator_index","order":8,"path":"sprites/s_node_iterator_index/s_node_iterator_index.yy",}, @@ -1516,7 +1525,7 @@ {"name":"fd_rectangle_set_material_dissipation_value","order":5,"path":"scripts/fd_rectangle_set_material_dissipation_value/fd_rectangle_set_material_dissipation_value.yy",}, {"name":"node_iterator_output","order":2,"path":"scripts/node_iterator_output/node_iterator_output.yy",}, {"name":"panel_graph_export_image_dialog","order":5,"path":"scripts/panel_graph_export_image_dialog/panel_graph_export_image_dialog.yy",}, - {"name":"debug","order":9,"path":"scripts/debug/debug.yy",}, + {"name":"debug","order":10,"path":"scripts/debug/debug.yy",}, {"name":"node_shadow_cast","order":15,"path":"scripts/node_shadow_cast/node_shadow_cast.yy",}, {"name":"node_strand_render","order":5,"path":"scripts/node_strand_render/node_strand_render.yy",}, {"name":"s_node_3d_obj_combine","order":5,"path":"sprites/s_node_3d_obj_combine/s_node_3d_obj_combine.yy",}, diff --git a/PixelComposer.yyp b/PixelComposer.yyp index 29a2132cd..6c9d58e54 100644 --- a/PixelComposer.yyp +++ b/PixelComposer.yyp @@ -27,6 +27,7 @@ {"resourceType":"GMFolder","resourceVersion":"1.0","name":"Gameframe","folderPath":"folders/_extensions/Gameframe.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"GMD3D11","folderPath":"folders/_extensions/GMD3D11.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"MAC","folderPath":"folders/_extensions/MAC.yy",}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"Shader replace","folderPath":"folders/_extensions/Shader replace.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"addons","folderPath":"folders/addons.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"custom","folderPath":"folders/addons/custom.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"key displayer","folderPath":"folders/addons/key displayer.yy",}, @@ -59,7 +60,6 @@ {"resourceType":"GMFolder","resourceVersion":"1.0","name":"delaunay","folderPath":"folders/functions/delaunay.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"draw","folderPath":"folders/functions/draw.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"ds","folderPath":"folders/functions/ds.yy",}, - {"resourceType":"GMFolder","resourceVersion":"1.0","name":"eval","folderPath":"folders/functions/eval.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"files","folderPath":"folders/functions/files.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"fluid sim","folderPath":"folders/functions/fluid sim.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"API","folderPath":"folders/functions/fluid sim/API.yy",}, @@ -76,18 +76,21 @@ {"resourceType":"GMFolder","resourceVersion":"1.0","name":"view","folderPath":"folders/functions/fluid sim/Internal/Compatibility/view.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"Shaders","folderPath":"folders/functions/fluid sim/Shaders.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"geometry","folderPath":"folders/functions/geometry.yy",}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"GLSL","folderPath":"folders/functions/GLSL.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"importers","folderPath":"folders/functions/importers.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"inputs","folderPath":"folders/functions/inputs.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"lua","folderPath":"folders/functions/lua.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"migration","folderPath":"folders/functions/migration.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"nodes","folderPath":"folders/functions/nodes.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"packing","folderPath":"folders/functions/packing.yy",}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"PCX","folderPath":"folders/functions/PCX.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"physics","folderPath":"folders/functions/physics.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"project","folderPath":"folders/functions/project.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"shader","folderPath":"folders/functions/shader.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"string","folderPath":"folders/functions/string.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"surface","folderPath":"folders/functions/surface.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"test","folderPath":"folders/functions/test.yy",}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"tooltip","folderPath":"folders/functions/tooltip.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"tween","folderPath":"folders/functions/tween.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"value","folderPath":"folders/functions/value.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"variables","folderPath":"folders/functions/variables.yy",}, @@ -202,6 +205,7 @@ {"resourceType":"GMFolder","resourceVersion":"1.0","name":"color picker","folderPath":"folders/shader/color picker.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"color selector","folderPath":"folders/shader/color selector.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"draw","folderPath":"folders/shader/draw.yy",}, + {"resourceType":"GMFolder","resourceVersion":"1.0","name":"dummy","folderPath":"folders/shader/dummy.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"filter","folderPath":"folders/shader/filter.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"color","folderPath":"folders/shader/filter/color.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"shadow caster","folderPath":"folders/shader/filter/shadow caster.yy",}, @@ -232,7 +236,6 @@ {"resourceType":"GMFolder","resourceVersion":"1.0","name":"biterator","folderPath":"folders/VCT/biterator.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"widget","folderPath":"folders/VCT/widget.yy",}, {"resourceType":"GMFolder","resourceVersion":"1.0","name":"widgets","folderPath":"folders/widgets.yy",}, - {"resourceType":"GMFolder","resourceVersion":"1.0","name":"tooltip","folderPath":"folders/functions/tooltip.yy",}, ], "IncludedFiles": [ {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"ApolloHelp.html","ConfigValues":{"Itch":{"CopyToMask":"0",},},"CopyToMask":-1,"filePath":"datafiles",}, @@ -373,6 +376,7 @@ {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_loop_16.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_minus_24.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_name.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, + {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_new_line_shift.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_new.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_node_create.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_node_goto.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, @@ -420,6 +424,7 @@ {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_strandSim.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_tab_exit.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_text_bullet_strip2.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, + {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_text_popup.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_timeline_clock.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_timeline_graph.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"s_timeline_keyframe_strip4.png","CopyToMask":-1,"filePath":"datafiles/data/themes/default/graphics/icon",}, @@ -671,6 +676,18 @@ {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"gifski.h","CopyToMask":-1,"filePath":"datafiles/gifski/win/developer",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"gifski.exe","CopyToMask":-1,"filePath":"datafiles/gifski/win",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"GMD3D11.dll","CopyToMask":-1,"filePath":"datafiles",}, + {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"D3D11ShaderParser.exe","CopyToMask":-1,"filePath":"datafiles/HLSL",}, + {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"D3D12ShaderParser.exe","CopyToMask":-1,"filePath":"datafiles/HLSL",}, + {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"d3dcompiler_46.dll","CopyToMask":-1,"filePath":"datafiles/HLSL",}, + {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"FShaderCommon.shader","CopyToMask":-1,"filePath":"datafiles/HLSL",}, + {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"HLSL11_PShaderCommon.shader","CopyToMask":-1,"filePath":"datafiles/HLSL",}, + {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"HLSL11_VShaderCommon.shader","CopyToMask":-1,"filePath":"datafiles/HLSL",}, + {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"HLSL9_PShaderCommon.shader","CopyToMask":-1,"filePath":"datafiles/HLSL",}, + {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"HLSL9_VShaderCommon.shader","CopyToMask":-1,"filePath":"datafiles/HLSL",}, + {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"HLSLCompiler.exe","CopyToMask":-1,"filePath":"datafiles/HLSL",}, + {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"libEGL.dll","CopyToMask":-1,"filePath":"datafiles/HLSL",}, + {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"libGLESv2.dll","CopyToMask":-1,"filePath":"datafiles/HLSL",}, + {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"VShaderCommon.shader","CopyToMask":-1,"filePath":"datafiles/HLSL",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"convert.exe","CopyToMask":-1,"filePath":"datafiles/ImageMagick",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"LICENSE.txt","CopyToMask":-1,"filePath":"datafiles/ImageMagick",}, {"resourceType":"GMIncludedFile","resourceVersion":"1.0","name":"magick.exe","CopyToMask":-1,"filePath":"datafiles/ImageMagick",}, @@ -713,7 +730,7 @@ "isEcma": false, "LibraryEmitters": [], "MetaData": { - "IDEVersion": "2023.6.0.92", + "IDEVersion": "2023.8.0.98", }, "resources": [ {"id":{"name":"s_node_corner","path":"sprites/s_node_corner/s_node_corner.yy",},}, @@ -734,6 +751,7 @@ {"id":{"name":"sh_fd_add_velocity_glsl","path":"shaders/sh_fd_add_velocity_glsl/sh_fd_add_velocity_glsl.yy",},}, {"id":{"name":"s_node_normal","path":"sprites/s_node_normal/s_node_normal.yy",},}, {"id":{"name":"node_pixel_sort","path":"scripts/node_pixel_sort/node_pixel_sort.yy",},}, + {"id":{"name":"node_glsl","path":"scripts/node_glsl/node_glsl.yy",},}, {"id":{"name":"sh_dither","path":"shaders/sh_dither/sh_dither.yy",},}, {"id":{"name":"__vec2","path":"scripts/__vec2/__vec2.yy",},}, {"id":{"name":"control_function","path":"scripts/control_function/control_function.yy",},}, @@ -949,6 +967,7 @@ {"id":{"name":"fd_rectangle_update_view","path":"scripts/fd_rectangle_update_view/fd_rectangle_update_view.yy",},}, {"id":{"name":"s_node_rigidSim_renderer","path":"sprites/s_node_rigidSim_renderer/s_node_rigidSim_renderer.yy",},}, {"id":{"name":"__init_background","path":"scripts/__init_background/__init_background.yy",},}, + {"id":{"name":"shader_replace_simple_macros","path":"scripts/shader_replace_simple_macros/shader_replace_simple_macros.yy",},}, {"id":{"name":"s_textbox","path":"sprites/s_textbox/s_textbox.yy",},}, {"id":{"name":"__node","path":"scripts/__node/__node.yy",},}, {"id":{"name":"fd_rectangle_add_velocity","path":"scripts/fd_rectangle_add_velocity/fd_rectangle_add_velocity.yy",},}, @@ -1108,6 +1127,7 @@ {"id":{"name":"s_node_pack_sprite","path":"sprites/s_node_pack_sprite/s_node_pack_sprite.yy",},}, {"id":{"name":"surface_valid","path":"scripts/surface_valid/surface_valid.yy",},}, {"id":{"name":"steam_ugc_collection","path":"scripts/steam_ugc_collection/steam_ugc_collection.yy",},}, + {"id":{"name":"sh_dummy_0","path":"shaders/sh_dummy_0/sh_dummy_0.yy",},}, {"id":{"name":"sh_blur_zoom","path":"shaders/sh_blur_zoom/sh_blur_zoom.yy",},}, {"id":{"name":"node_VFX_renderer","path":"scripts/node_VFX_renderer/node_VFX_renderer.yy",},}, {"id":{"name":"s_node_pb_fx_stack","path":"sprites/s_node_pb_fx_stack/s_node_pb_fx_stack.yy",},}, @@ -1501,6 +1521,7 @@ {"id":{"name":"sh_surface_replace_replace","path":"shaders/sh_surface_replace_replace/sh_surface_replace_replace.yy",},}, {"id":{"name":"node_ase_file_read","path":"scripts/node_ase_file_read/node_ase_file_read.yy",},}, {"id":{"name":"s_workshop_frame","path":"sprites/s_workshop_frame/s_workshop_frame.yy",},}, + {"id":{"name":"glsl_draw","path":"scripts/glsl_draw/glsl_draw.yy",},}, {"id":{"name":"s_node_print","path":"sprites/s_node_print/s_node_print.yy",},}, {"id":{"name":"sh_seperate_shape_counter","path":"shaders/sh_seperate_shape_counter/sh_seperate_shape_counter.yy",},}, {"id":{"name":"s_node_stack","path":"sprites/s_node_stack/s_node_stack.yy",},}, @@ -1529,6 +1550,7 @@ {"id":{"name":"sh_d3d_shadow_depth","path":"shaders/sh_d3d_shadow_depth/sh_d3d_shadow_depth.yy",},}, {"id":{"name":"s_node_noise_fbm","path":"sprites/s_node_noise_fbm/s_node_noise_fbm.yy",},}, {"id":{"name":"sh_color_select_content","path":"shaders/sh_color_select_content/sh_color_select_content.yy",},}, + {"id":{"name":"scr_cmd_arg","path":"scripts/scr_cmd_arg/scr_cmd_arg.yy",},}, {"id":{"name":"sh_outline","path":"shaders/sh_outline/sh_outline.yy",},}, {"id":{"name":"s_node_strandSim_break","path":"sprites/s_node_strandSim_break/s_node_strandSim_break.yy",},}, {"id":{"name":"s_node_scatter_point","path":"sprites/s_node_scatter_point/s_node_scatter_point.yy",},}, @@ -1638,6 +1660,7 @@ {"id":{"name":"number_function","path":"scripts/number_function/number_function.yy",},}, {"id":{"name":"s_node_array_shift","path":"sprites/s_node_array_shift/s_node_array_shift.yy",},}, {"id":{"name":"s_node_statistic","path":"sprites/s_node_statistic/s_node_statistic.yy",},}, + {"id":{"name":"execute_program_pipe","path":"extensions/execute_program_pipe/execute_program_pipe.yy",},}, {"id":{"name":"s_node_cache_array","path":"sprites/s_node_cache_array/s_node_cache_array.yy",},}, {"id":{"name":"sh_blend_alpha_addition","path":"shaders/sh_blend_alpha_addition/sh_blend_alpha_addition.yy",},}, {"id":{"name":"widget","path":"scripts/widget/widget.yy",},}, @@ -1975,6 +1998,7 @@ {"id":{"name":"string_decimal","path":"scripts/string_decimal/string_decimal.yy",},}, {"id":{"name":"_f_h3","path":"fonts/_f_h3/_f_h3.yy",},}, {"id":{"name":"s_node_math","path":"sprites/s_node_math/s_node_math.yy",},}, + {"id":{"name":"panel_text_editor","path":"scripts/panel_text_editor/panel_text_editor.yy",},}, {"id":{"name":"node_iterator_index","path":"scripts/node_iterator_index/node_iterator_index.yy",},}, {"id":{"name":"s_node_palette_sort","path":"sprites/s_node_palette_sort/s_node_palette_sort.yy",},}, {"id":{"name":"node_greyscale","path":"scripts/node_greyscale/node_greyscale.yy",},}, @@ -2177,6 +2201,7 @@ {"id":{"name":"fd_rectangle_get_material_surface","path":"scripts/fd_rectangle_get_material_surface/fd_rectangle_get_material_surface.yy",},}, {"id":{"name":"fd_rectangle_clear","path":"scripts/fd_rectangle_clear/fd_rectangle_clear.yy",},}, {"id":{"name":"instance_create","path":"scripts/instance_create/instance_create.yy",},}, + {"id":{"name":"shader_replace_simple","path":"extensions/shader_replace_simple/shader_replace_simple.yy",},}, {"id":{"name":"d3d_cone","path":"scripts/d3d_cone/d3d_cone.yy",},}, {"id":{"name":"__rectangle","path":"scripts/__rectangle/__rectangle.yy",},}, {"id":{"name":"s_node_iterator_index","path":"sprites/s_node_iterator_index/s_node_iterator_index.yy",},}, @@ -2259,6 +2284,7 @@ "RoomOrderNodes": [ {"roomId":{"name":"rm_main","path":"rooms/rm_main/rm_main.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/datafiles/HLSL/D3D11ShaderParser.exe b/datafiles/HLSL/D3D11ShaderParser.exe new file mode 100644 index 000000000..48c34db15 Binary files /dev/null and b/datafiles/HLSL/D3D11ShaderParser.exe differ diff --git a/datafiles/HLSL/D3D12ShaderParser.exe b/datafiles/HLSL/D3D12ShaderParser.exe new file mode 100644 index 000000000..8a6840f8b Binary files /dev/null and b/datafiles/HLSL/D3D12ShaderParser.exe differ diff --git a/datafiles/HLSL/FShaderCommon.shader b/datafiles/HLSL/FShaderCommon.shader new file mode 100644 index 000000000..c9b456caa --- /dev/null +++ b/datafiles/HLSL/FShaderCommon.shader @@ -0,0 +1,28 @@ +// Uniforms look like they're shared between vertex and fragment shaders in GLSL, so we have to be careful to avoid name clashes + +uniform sampler2D gm_BaseTexture; + +uniform bool gm_PS_FogEnabled; +uniform vec4 gm_FogColour; +uniform bool gm_AlphaTestEnabled; +uniform float gm_AlphaRefValue; + +void DoAlphaTest(vec4 SrcColour) +{ + if (gm_AlphaTestEnabled) + { + if (SrcColour.a <= gm_AlphaRefValue) + { + discard; + } + } +} + +void DoFog(inout vec4 SrcColour, float fogval) +{ + if (gm_PS_FogEnabled) + { + SrcColour = mix(SrcColour, gm_FogColour, clamp(fogval, 0.0, 1.0)); + } +} + diff --git a/datafiles/HLSL/HLSL11_PShaderCommon.shader b/datafiles/HLSL/HLSL11_PShaderCommon.shader new file mode 100644 index 000000000..9be8b99c5 --- /dev/null +++ b/datafiles/HLSL/HLSL11_PShaderCommon.shader @@ -0,0 +1,12 @@ +// GameMaker reserved and common types/inputs + +Texture2D gm_BaseTextureObject : register(t0); +SamplerState gm_BaseTexture : register(S0); + +cbuffer gm_PSMaterialConstantBuffer +{ + bool gm_PS_FogEnabled; + float4 gm_FogColour; + bool gm_AlphaTestEnabled; + float4 gm_AlphaRefValue; +}; diff --git a/datafiles/HLSL/HLSL11_VShaderCommon.shader b/datafiles/HLSL/HLSL11_VShaderCommon.shader new file mode 100644 index 000000000..4d03a86f0 --- /dev/null +++ b/datafiles/HLSL/HLSL11_VShaderCommon.shader @@ -0,0 +1,30 @@ +#define MATRIX_VIEW 0 +#define MATRIX_PROJECTION 1 +#define MATRIX_WORLD 2 +#define MATRIX_WORLD_VIEW 3 +#define MATRIX_WORLD_VIEW_PROJECTION 4 +#define MATRICES_MAX 5 + +cbuffer gm_VSTransformBuffer +{ + float4x4 gm_Matrices[MATRICES_MAX]; +}; + +cbuffer gm_VSMaterialConstantBuffer +{ + bool gm_LightingEnabled; + bool gm_VS_FogEnabled; + float gm_FogStart; + float gm_RcpFogRange; +}; + +#define MAX_VS_LIGHTS 8 + +cbuffer gm_VSLightingConstantBuffer +{ + float4 gm_AmbientColour; // rgb=colour, a=1 + float3 gm_Lights_Direction[MAX_VS_LIGHTS]; // normalised direction + float4 gm_Lights_PosRange[MAX_VS_LIGHTS]; // X,Y,Z position, W range + float4 gm_Lights_Colour[MAX_VS_LIGHTS]; // rgb=colour, a=1 +} + diff --git a/datafiles/HLSL/HLSL9_PShaderCommon.shader b/datafiles/HLSL/HLSL9_PShaderCommon.shader new file mode 100644 index 000000000..e951b89f5 --- /dev/null +++ b/datafiles/HLSL/HLSL9_PShaderCommon.shader @@ -0,0 +1,8 @@ +// GameMaker reserved and common types/inputs + +sampler2D gm_BaseTexture : register(S0); + +bool gm_PS_FogEnabled; +float4 gm_FogColour; +bool gm_AlphaTestEnabled; +float4 gm_AlphaRefValue; diff --git a/datafiles/HLSL/HLSL9_VShaderCommon.shader b/datafiles/HLSL/HLSL9_VShaderCommon.shader new file mode 100644 index 000000000..9518b36c5 --- /dev/null +++ b/datafiles/HLSL/HLSL9_VShaderCommon.shader @@ -0,0 +1,20 @@ +#define MATRIX_VIEW 0 +#define MATRIX_PROJECTION 1 +#define MATRIX_WORLD 2 +#define MATRIX_WORLD_VIEW 3 +#define MATRIX_WORLD_VIEW_PROJECTION 4 +#define MATRICES_MAX 5 + +float4x4 gm_Matrices[MATRICES_MAX] : register(c0); + +bool gm_LightingEnabled; +bool gm_VS_FogEnabled; +float gm_FogStart; +float gm_RcpFogRange; + +#define MAX_VS_LIGHTS 8 +float4 gm_AmbientColour; // rgb=colour, a=1 +float3 gm_Lights_Direction[MAX_VS_LIGHTS]; // normalised direction +float4 gm_Lights_PosRange[MAX_VS_LIGHTS]; // X,Y,Z position, W range +float4 gm_Lights_Colour[MAX_VS_LIGHTS]; // rgb=colour, a=1 + diff --git a/datafiles/HLSL/HLSLCompiler.exe b/datafiles/HLSL/HLSLCompiler.exe new file mode 100644 index 000000000..20cf53244 Binary files /dev/null and b/datafiles/HLSL/HLSLCompiler.exe differ diff --git a/datafiles/HLSL/VShaderCommon.shader b/datafiles/HLSL/VShaderCommon.shader new file mode 100644 index 000000000..d59f716f1 --- /dev/null +++ b/datafiles/HLSL/VShaderCommon.shader @@ -0,0 +1,118 @@ +#define MATRIX_VIEW 0 +#define MATRIX_PROJECTION 1 +#define MATRIX_WORLD 2 +#define MATRIX_WORLD_VIEW 3 +#define MATRIX_WORLD_VIEW_PROJECTION 4 +#define MATRICES_MAX 5 + +uniform mat4 gm_Matrices[MATRICES_MAX]; + +uniform bool gm_LightingEnabled; +uniform bool gm_VS_FogEnabled; +uniform float gm_FogStart; +uniform float gm_RcpFogRange; + +#define MAX_VS_LIGHTS 8 +#define MIRROR_WIN32_LIGHTING_EQUATION + + +//#define MAX_VS_LIGHTS 8 +uniform vec4 gm_AmbientColour; // rgb=colour, a=1 +uniform vec4 gm_Lights_Direction[MAX_VS_LIGHTS]; // normalised direction +uniform vec4 gm_Lights_PosRange[MAX_VS_LIGHTS]; // X,Y,Z position, W range +uniform vec4 gm_Lights_Colour[MAX_VS_LIGHTS]; // rgb=colour, a=1 + +float CalcFogFactor(vec4 pos) +{ + if (gm_VS_FogEnabled) + { + vec4 viewpos = gm_Matrices[MATRIX_WORLD_VIEW] * pos; + float fogfactor = ((viewpos.z - gm_FogStart) * gm_RcpFogRange); + return fogfactor; + } + else + { + return 0.0; + } +} + +vec4 DoDirLight(vec3 ws_normal, vec4 dir, vec4 diffusecol) +{ + float dotresult = dot(ws_normal, dir.xyz); + dotresult = min(dotresult, dir.w); // the w component is 1 if the directional light is active, or 0 if it isn't + dotresult = max(0.0, dotresult); + + return dotresult * diffusecol; +} + +vec4 DoPointLight(vec3 ws_pos, vec3 ws_normal, vec4 posrange, vec4 diffusecol) +{ + vec3 diffvec = ws_pos - posrange.xyz; + float veclen = length(diffvec); + diffvec /= veclen; // normalise + float atten; + if (posrange.w == 0.0) // the w component of posrange is 0 if the point light is disabled - if we don't catch it here we might end up generating INFs or NaNs + { + atten = 0.0; + } + else + { +#ifdef MIRROR_WIN32_LIGHTING_EQUATION + // This is based on the Win32 D3D and OpenGL falloff model, where: + // Attenuation = 1.0f / (factor0 + (d * factor1) + (d*d * factor2)) + // For some reason, factor0 is set to 0.0f while factor1 is set to 1.0f/lightrange (on both D3D and OpenGL) + // This'll result in no visible falloff as 1.0f / (d / lightrange) will always be larger than 1.0f (if the vertex is within range) + + atten = 1.0 / (veclen / posrange.w); + if (veclen > posrange.w) + { + atten = 0.0; + } +#else + atten = clamp( (1.0 - (veclen / posrange.w)), 0.0, 1.0); // storing 1.0f/range instead would save a rcp +#endif + } + float dotresult = dot(ws_normal, diffvec); + dotresult = max(0.0, dotresult); + + return dotresult * atten * diffusecol; +} + +vec4 DoLighting(vec4 vertexcolour, vec4 objectspacepos, vec3 objectspacenormal) +{ + if (gm_LightingEnabled) + { + // Normally we'd have the light positions\\directions back-transformed from world to object space + // But to keep things simple for the moment we'll just transform the normal to world space + vec4 objectspacenormal4 = vec4(objectspacenormal, 0.0); + vec3 ws_normal; + ws_normal = (gm_Matrices[MATRIX_WORLD] * objectspacenormal4).xyz; + ws_normal = normalize(ws_normal); + + vec3 ws_pos; + ws_pos = (gm_Matrices[MATRIX_WORLD] * objectspacepos).xyz; + + // Accumulate lighting from different light types + vec4 accumcol = vec4(0.0, 0.0, 0.0, 0.0); + for(int i = 0; i < MAX_VS_LIGHTS; i++) + { + accumcol += DoDirLight(ws_normal, gm_Lights_Direction[i], gm_Lights_Colour[i]); + } + + for(int i = 0; i < MAX_VS_LIGHTS; i++) + { + accumcol += DoPointLight(ws_pos, ws_normal, gm_Lights_PosRange[i], gm_Lights_Colour[i]); + } + + accumcol *= vertexcolour; + accumcol += gm_AmbientColour; + accumcol = min(vec4(1.0, 1.0, 1.0, 1.0), accumcol); + accumcol.a = vertexcolour.a; + return accumcol; + } + else + { + return vertexcolour; + } +} + diff --git a/datafiles/HLSL/d3dcompiler_46.dll b/datafiles/HLSL/d3dcompiler_46.dll new file mode 100644 index 000000000..c7063287e Binary files /dev/null and b/datafiles/HLSL/d3dcompiler_46.dll differ diff --git a/datafiles/HLSL/libEGL.dll b/datafiles/HLSL/libEGL.dll new file mode 100644 index 000000000..eb490691a Binary files /dev/null and b/datafiles/HLSL/libEGL.dll differ diff --git a/datafiles/HLSL/libGLESv2.dll b/datafiles/HLSL/libGLESv2.dll new file mode 100644 index 000000000..56c9ddb5d Binary files /dev/null and b/datafiles/HLSL/libGLESv2.dll differ diff --git a/datafiles/data/themes/default.zip b/datafiles/data/themes/default.zip index a928ff1b5..a8e54c869 100644 Binary files a/datafiles/data/themes/default.zip and b/datafiles/data/themes/default.zip differ diff --git a/objects/o_dialog_lua_reference/Create_0.gml b/objects/o_dialog_lua_reference/Create_0.gml index a74388f30..3a5a704e8 100644 --- a/objects/o_dialog_lua_reference/Create_0.gml +++ b/objects/o_dialog_lua_reference/Create_0.gml @@ -65,7 +65,7 @@ event_inherited(); draw_sprite_ui(THEME.arrow, is_open[i]? 3 : 0, ui(16), yy + pad + line_get_height() / 2,,,, COLORS._main_icon); draw_set_text(f_code, fa_left, fa_top, COLORS._main_text); - draw_code(ui(28), yy + pad, _func); + draw_code_lua(ui(28), yy + pad, _func); if(is_open[i]) { var ty = yy + pad + line_get_height() + ui(4); diff --git a/objects/o_dialog_panel/Create_0.gml b/objects/o_dialog_panel/Create_0.gml index 8df9fe114..2c74b8b16 100644 --- a/objects/o_dialog_panel/Create_0.gml +++ b/objects/o_dialog_panel/Create_0.gml @@ -61,6 +61,8 @@ event_inherited(); function onDestroy() { if(!content) return; content.onClose(); + + print("On close on panel"); } function remove() { diff --git a/scripts/addon_lua_constant/addon_lua_constant.gml b/scripts/addon_lua_constant/addon_lua_constant.gml index 271afac2a..4fac4ecaa 100644 --- a/scripts/addon_lua_constant/addon_lua_constant.gml +++ b/scripts/addon_lua_constant/addon_lua_constant.gml @@ -136,7 +136,6 @@ function __addon_lua_setup_constants(lua, context) { lua_add_code(lua, $"s_ui_panel_active = {THEME.ui_panel_active}"); lua_add_code(lua, $"s_ui_panel_bg = {THEME.ui_panel_bg}"); - lua_add_code(lua, $"s_ui_panel_bg_dark = {THEME.ui_panel_bg_dark}"); lua_add_code(lua, $"s_ui_scrollbar = {THEME.ui_scrollbar}"); } diff --git a/scripts/buttonGroup/buttonGroup.gml b/scripts/buttonGroup/buttonGroup.gml index 514e79879..4036b1d6d 100644 --- a/scripts/buttonGroup/buttonGroup.gml +++ b/scripts/buttonGroup/buttonGroup.gml @@ -67,6 +67,7 @@ function buttonGroup(_data, _onClick) : widget() constructor { if(display_button) { var bx = _x; + var draw_sel = []; for(var i = 0; i < amo; i++) { buttons[i].setFocusHover(active, hover); @@ -75,7 +76,7 @@ function buttonGroup(_data, _onClick) : widget() constructor { if(_selecting == i) { draw_sprite_stretched(spr, 2, bx, _y, ww, _h); - draw_sprite_stretched_ext(spr, 3, bx, _y, ww, _h, COLORS._main_accent, 1); + draw_sel = [spr, bx]; } else { buttons[i].draw(bx, _y, ww, _h, _m, spr); if(buttons[i].clicked) onClick(i); @@ -91,6 +92,8 @@ function buttonGroup(_data, _onClick) : widget() constructor { bx += ww; } + draw_sprite_stretched_ext(draw_sel[0], 3, draw_sel[1], _y, ww, _h, COLORS._main_accent, 1); + if(point_in_rectangle(_m[0], _m[1], _x, _y, _x + w, _y + _h)) { if(is_array(data) && key_mod_press(SHIFT)) { var len = array_length(data); diff --git a/scripts/directory_object/directory_object.gml b/scripts/directory_object/directory_object.gml index 294550ace..2870ea564 100644 --- a/scripts/directory_object/directory_object.gml +++ b/scripts/directory_object/directory_object.gml @@ -60,11 +60,11 @@ function FileObject(_name, _path) constructor { sprFetchID = sprite_add_ext(self.path, 0, 0, 0, true); IMAGE_FETCH_MAP[? sprFetchID] = function(load_result) { spr = load_result[? "id"]; - sprite_set_offset(spr, sprite_get_width(spr) / 2, sprite_get_height(spr) / 2); + if(spr) sprite_set_offset(spr, sprite_get_width(spr) / 2, sprite_get_height(spr) / 2); }; } else { spr = sprite_add(self.path, 0, false, false, 0, 0); - sprite_set_offset(spr, sprite_get_width(spr) / 2, sprite_get_height(spr) / 2); + if(spr) sprite_set_offset(spr, sprite_get_width(spr) / 2, sprite_get_height(spr) / 2); } return spr; } @@ -78,13 +78,13 @@ function FileObject(_name, _path) constructor { sprFetchID = sprite_add_ext(path, amo, 0, 0, true); IMAGE_FETCH_MAP[? sprFetchID] = function(load_result) { spr = load_result[? "id"]; - if(array_safe_get(spr_path, 2)) + if(spr && array_safe_get(spr_path, 2)) sprite_set_offset(spr, sprite_get_width(spr) / 2, sprite_get_height(spr) / 2); - }; + } } else { - spr = sprite_add(path, amo, false, false, 0, 0); - if(array_safe_get(spr_path, 2)) - sprite_set_offset(spr, sprite_get_width(spr) / 2, sprite_get_height(spr) / 2); + spr = sprite_add(path, amo, false, false, 0, 0); + if(spr && array_safe_get(spr_path, 2)) + sprite_set_offset(spr, sprite_get_width(spr) / 2, sprite_get_height(spr) / 2); } return spr; diff --git a/scripts/glsl_draw/glsl_draw.gml b/scripts/glsl_draw/glsl_draw.gml new file mode 100644 index 000000000..fb9978051 --- /dev/null +++ b/scripts/glsl_draw/glsl_draw.gml @@ -0,0 +1,42 @@ +global.glsl_reserved = ds_map_create(); +global.glsl_constant = ds_map_create(); + +var reserved = ["int", "float", "bool", "vec2", "vec3", "vec4", "mat3", "mat4", "sampler2D", + "gl_position", "gm_Matrices", "gl_FragColor", "gm_BaseTexture", + "and", "break", "do", "else", "elseif", "end", "false", + "for", "function", "if", "in", "local", "nil", "not", + "or", "repeat", "return", "then", "true", "until", "while"]; + +for( var i = 0, n = array_length(reserved); i < n; i++ ) + global.glsl_reserved[? reserved[i]] = 1; + +var constant = ["MATRIX_VIEW", "MATRIX_PROJECTION", "MATRIX_WORLD", "MATRIX_WORLD_VIEW", "MATRIX_WORLD_VIEW_PROJECTION" ]; + +for( var i = 0, n = array_length(constant); i < n; i++ ) + global.glsl_constant[? constant[i]] = 1; + +function draw_code_glsl(_x, _y, str) { + var tx = _x; + var ty = _y; + var words = token_splice(str); + + for( var j = 0; j < array_length(words); j++ ) { + var word = words[j]; + var wordNoS = string_trim(word); + + draw_set_color(COLORS._main_text); + + if(word == "(" || word == ")" || word == "[" || word == "]" || word == "{" || word == "}") + draw_set_color(COLORS.lua_highlight_bracklet); + else if(ds_map_exists(global.glsl_reserved, word)) + draw_set_color(COLORS.lua_highlight_keyword); + else if(wordNoS == string_decimal(wordNoS) || ds_map_exists(global.glsl_constant, word)) + draw_set_color(COLORS.lua_highlight_number); + else if(j < array_length(words) - 1) { + if(words[j + 1] == "(") draw_set_color(COLORS.lua_highlight_function); + } + + draw_text_add(tx, ty, word); + tx += string_width(word); + } +} \ No newline at end of file diff --git a/scripts/glsl_draw/glsl_draw.yy b/scripts/glsl_draw/glsl_draw.yy new file mode 100644 index 000000000..9e857a972 --- /dev/null +++ b/scripts/glsl_draw/glsl_draw.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "glsl_draw", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "GLSL", + "path": "folders/functions/GLSL.yy", + }, +} \ No newline at end of file diff --git a/scripts/luaHighlight/luaHighlight.gml b/scripts/luaHighlight/luaHighlight.gml index e284eeb6c..9d86ed1b3 100644 --- a/scripts/luaHighlight/luaHighlight.gml +++ b/scripts/luaHighlight/luaHighlight.gml @@ -11,7 +11,7 @@ function token_splice(str) { var ss = str; var sp; var cc; - var tk = [" ", "(", ")", "[", "]", "{", "}", ",", ";", "+", "-", "*", "/", "="]; + var tk = [" ", "(", ")", "[", "]", "{", "}", ",", ";", "+", "-", "*", "/", "^", "="]; do { sp = 999999; @@ -37,9 +37,8 @@ function token_splice(str) { return st; } -function draw_code(_x, _y, str) { - //print(" > Drawing: " + str); - var tx = _x +function draw_code_lua(_x, _y, str) { + var tx = _x; var ty = _y; var isStr = true; @@ -67,7 +66,7 @@ function draw_code(_x, _y, str) { for( var j = 0; j < array_length(words); j++ ) { word = words[j]; - var wordNoS = string_replace_all(word, " ", ""); + var wordNoS = string_trim(word); draw_set_color(COLORS._main_text); if(word == "(" || word == ")" || word == "[" || word == "]" || word == "{" || word == "}") diff --git a/scripts/luaRenderer/luaRenderer.gml b/scripts/luaRenderer/luaRenderer.gml index 844d72fad..a372d940e 100644 --- a/scripts/luaRenderer/luaRenderer.gml +++ b/scripts/luaRenderer/luaRenderer.gml @@ -1,4 +1,4 @@ -function luaArgumentRenderer() { +function argumentRenderer() { argument_renderer = new Inspector_Custom_Renderer(function(_x, _y, _w, _m, _hover, _focus) { argument_renderer.x = _x; argument_renderer.y = _y; diff --git a/scripts/nodeValue_drawer/nodeValue_drawer.gml b/scripts/nodeValue_drawer/nodeValue_drawer.gml index 704fc5194..d03a77ec2 100644 --- a/scripts/nodeValue_drawer/nodeValue_drawer.gml +++ b/scripts/nodeValue_drawer/nodeValue_drawer.gml @@ -13,7 +13,10 @@ function drawWidget(xx, yy, ww, _m, jun, global_var = true, _hover = false, _foc var lb_h = line_get_height(f_p0) + ui(8); var lb_y = yy + lb_h / 2; - + + var breakLine = lineBreak || jun.expUse; + if(jun.type == VALUE_TYPE.text) breakLine = true; + var butx = xx; if(jun.connect_type == JUNCTION_CONNECT.input && jun.isAnimable() && !jun.expUse) { #region animation var index = jun.value_from == noone? jun.is_anim : 2; @@ -73,7 +76,7 @@ function drawWidget(xx, yy, ww, _m, jun, global_var = true, _hover = false, _foc if(global_var) if(string_pos(" ", jun.name)) cc = COLORS._main_value_negative; - draw_set_text(lineBreak? f_p0 : f_p1, fa_left, fa_center, cc); + draw_set_text(breakLine? f_p0 : f_p1, fa_left, fa_center, cc); draw_text_add(xx + ui(40), lb_y - ui(2), jun.name); var lb_w = string_width(jun.name) + ui(48); @@ -96,7 +99,7 @@ function drawWidget(xx, yy, ww, _m, jun, global_var = true, _hover = false, _foc #endregion #region anim - if(jun.connect_type == JUNCTION_CONNECT.input && lineBreak && jun.is_anim) { + if(jun.connect_type == JUNCTION_CONNECT.input && breakLine && jun.is_anim) { var bx = xx + ww - ui(12); var by = lb_y; if(buttonInstant(THEME.button_hide, bx - ui(12), by - ui(12), ui(24), ui(24), _m, _focus, _hover, "", THEME.prop_keyframe, 2) == 2) { @@ -163,8 +166,8 @@ function drawWidget(xx, yy, ww, _m, jun, global_var = true, _hover = false, _foc } #endregion - #region use expression - if(jun.connect_type == JUNCTION_CONNECT.input && lineBreak && !jun.is_anim && !global_var) { + #region right buttons + if(jun.connect_type == JUNCTION_CONNECT.input && breakLine && !jun.is_anim && !global_var) { var bx = xx + ww - ui(12); var by = lb_y; var ic_b = jun.expUse? c_white : COLORS._main_icon; @@ -174,25 +177,36 @@ function drawWidget(xx, yy, ww, _m, jun, global_var = true, _hover = false, _foc if(jun.expUse) { bx -= ui(28); var cc = NODE_DROPPER_TARGET == jun? COLORS._main_value_positive : COLORS._main_icon; - if(buttonInstant(THEME.button_hide, bx - ui(12), by - ui(12), ui(24), ui(24), _m, _focus, _hover, __txtx("panel_inspector_dropper", "Node dropper"), THEME.node_dropper, 0, cc) == 2) + if(buttonInstant(THEME.button_hide, bx - ui(12), by - ui(12), ui(24), ui(24), _m, _focus, _hover, __txtx("panel_inspector_dropper", "Node Dropper"), THEME.node_dropper, 0, cc) == 2) NODE_DROPPER_TARGET = NODE_DROPPER_TARGET == jun? noone : jun; } + + if(jun.expUse || jun.type == VALUE_TYPE.text) { + bx -= ui(28); + if(buttonInstant(THEME.button_hide, bx - ui(12), by - ui(12), ui(24), ui(24), _m, _focus, _hover, __txtx("panel_inspector_pop_text", "Pop up Editor"), THEME.text_popup, 0, COLORS._main_icon) == 2) { + var _panel = noone; + + if(jun.expUse) _panel = dialogPanelCall(new Panel_Text_Editor(jun.express_edit, function() { return context.expression; }, jun)); + else _panel = dialogPanelCall(new Panel_Text_Editor(jun.editWidget, function() { return context.showValue(); }, jun)); + _panel.content.title = $"{jun.node.name} - {jun.name}"; + } + } } #endregion var _hsy = yy + lb_h; var padd = ui(8); - + var labelWidth = max(lb_w, min(ui(80) + ww * 0.2, ui(200))); - var editBoxX = xx + !lineBreak * labelWidth; - var editBoxY = lineBreak? _hsy : yy; + var editBoxX = xx + !breakLine * labelWidth; + var editBoxY = breakLine? _hsy : yy; var editBoxW = (xx + ww) - editBoxX; - var editBoxH = lineBreak? TEXTBOX_HEIGHT : lb_h; + var editBoxH = breakLine? TEXTBOX_HEIGHT : lb_h; - var widH = lineBreak? editBoxH : 0; - var mbRight = true; - + var widH = breakLine? editBoxH : 0; + var mbRight = true; + if(jun.expUse) { #region expression editor var expValid = jun.expTree != noone && jun.expTree.validate(); jun.express_edit.boxColor = expValid? COLORS._main_value_positive : COLORS._main_value_negative; @@ -203,7 +217,7 @@ function drawWidget(xx, yy, ww, _m, jun, global_var = true, _hover = false, _foc if(_focus) jun.express_edit.register(_scrollPane); var wd_h = jun.express_edit.draw(editBoxX, editBoxY, editBoxW, editBoxH, jun.expression, _m); - widH = wd_h - (TEXTBOX_HEIGHT * !lineBreak); + widH = wd_h - (TEXTBOX_HEIGHT * !breakLine); #endregion } else if(jun.editWidget) { #region edit widget jun.editWidget.setFocusHover(_focus, _hover); @@ -230,7 +244,7 @@ function drawWidget(xx, yy, ww, _m, jun, global_var = true, _hover = false, _foc break; case VALUE_TYPE.boolean : - param.halign = lineBreak? fa_left : fa_center; + param.halign = breakLine? fa_left : fa_center; break; case VALUE_TYPE.d3Material : @@ -246,7 +260,7 @@ function drawWidget(xx, yy, ww, _m, jun, global_var = true, _hover = false, _foc } var _widH = jun.editWidget.drawParam(param) ?? 0; - widH = _widH - (TEXTBOX_HEIGHT * !lineBreak); + widH = _widH - (TEXTBOX_HEIGHT * !breakLine); #endregion } else if(jun.display_type == VALUE_DISPLAY.label) { #region label draw_set_text(f_p1, fa_left, fa_top, COLORS._main_text_sub); diff --git a/scripts/node_glsl/node_glsl.gml b/scripts/node_glsl/node_glsl.gml new file mode 100644 index 000000000..579cb8d07 --- /dev/null +++ b/scripts/node_glsl/node_glsl.gml @@ -0,0 +1,237 @@ +globalvar CUSTOM_SHADER_SLOT, CUSTOM_SHADER_UNIFORM; +CUSTOM_SHADER_SLOT = ds_map_create(); +CUSTOM_SHADER_SLOT[? sh_dummy_0] = noone; + +CUSTOM_SHADER_UNIFORM = @" +uniform float u_float_0, u_float_1, u_float_2, u_float_3, u_float_4, u_float_5, u_float_6, u_float_7; +uniform float u_float_8, u_float_9, u_float_10, u_float_11, u_float_12, u_float_13, u_float_14, u_float_15; + +uniform int u_int_0, u_int_1, u_int_2, u_int_3, u_int_4, u_int_5, u_int_6, u_int_7; +uniform int u_int_8, u_int_9, u_int_10, u_int_11, u_int_12, u_int_13, u_int_14, u_int_15; + +uniform vec2 u_vec2_0, u_vec2_1, u_vec2_2, u_vec2_3, u_vec2_4, u_vec2_5, u_vec2_6, u_vec2_7; +uniform vec2 u_vec2_8, u_vec2_9, u_vec2_10, u_vec2_11, u_vec2_12, u_vec2_13, u_vec2_14, u_vec2_15; + +uniform vec3 u_vec3_0, u_vec3_1, u_vec3_2, u_vec3_3, u_vec3_4, u_vec3_5, u_vec3_6, u_vec3_7; +uniform vec3 u_vec3_8, u_vec3_9, u_vec3_10, u_vec3_11, u_vec3_12, u_vec3_13, u_vec3_14, u_vec3_15; + +uniform vec4 u_vec4_0, u_vec4_1, u_vec4_2, u_vec4_3, u_vec4_4, u_vec4_5, u_vec4_6, u_vec4_7; +uniform vec4 u_vec4_8, u_vec4_9, u_vec4_10, u_vec4_11, u_vec4_12, u_vec4_13, u_vec4_14, u_vec4_15; + +uniform mat3 u_mat3_0, u_mat3_1, u_mat3_2, u_mat3_3, u_mat3_4, u_mat3_5, u_mat3_6, u_mat3_7; +uniform mat3 u_mat3_8, u_mat3_9, u_mat3_10, u_mat3_11, u_mat3_12, u_mat3_13, u_mat3_14, u_mat3_15; + +uniform mat4 u_mat4_0, u_mat4_1, u_mat4_2, u_mat4_3, u_mat4_4, u_mat4_5, u_mat4_6, u_mat4_7; +uniform mat4 u_mat4_8, u_mat4_9, u_mat4_10, u_mat4_11, u_mat4_12, u_mat4_13, u_mat4_14, u_mat4_15; + +uniform sampler2D u_sampler2D_0, u_sampler2D_1, u_sampler2D_2, u_sampler2D_3, u_sampler2D_4, u_sampler2D_5, u_sampler2D_6; "; + +function custom_shader_reserve(node) { + var keys = ds_map_keys_to_array(CUSTOM_SHADER_SLOT); + for( var i = 0, n = array_length(keys); i < n; i++ ) { + if(CUSTOM_SHADER_SLOT[? keys[i]] == noone) { + CUSTOM_SHADER_SLOT[? keys[i]] = node; + return keys[i]; + } + } + + return noone; +} + +function custom_shader_free(node) { + var keys = ds_map_keys_to_array(CUSTOM_SHADER_SLOT); + for( var i = 0, n = array_length(keys); i < n; i++ ) { + if(CUSTOM_SHADER_SLOT[? keys[i]] == node) + CUSTOM_SHADER_SLOT[? keys[i]] = noone; + } +} + +function glsl_wrap_vertex(content) { + return @" +attribute vec3 in_Position; +attribute vec4 in_Colour; +attribute vec2 in_TextureCoord; +" + CUSTOM_SHADER_UNIFORM + @" +varying vec2 v_vTexcoord; + +void main() { +" + string(content) + "\n}"; +} + +function glsl_wrap_fragment(content) { + return @" +varying vec2 v_vTexcoord; +" + CUSTOM_SHADER_UNIFORM + @" +void main() { +" + string(content) + "\n}"; +} + +function Node_GLSL(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) constructor { + name = "GLSL"; + shader = custom_shader_reserve(self); + + hlslCompiler = working_directory + "HLSL/HLSLCompiler.exe"; + + inputs[| 0] = nodeValue("Vertex", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, +@"vec4 object_space_pos = vec4( in_Position.x, in_Position.y, in_Position.z, 1.0); +gl_Position = gm_Matrices[MATRIX_WORLD_VIEW_PROJECTION] * object_space_pos; +v_vTexcoord = in_TextureCoord;") + .setDisplay(VALUE_DISPLAY.codeGLSL) + .rejectArray(); + + inputs[| 1] = nodeValue("Fragment", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, +@"gl_FragColor = texture2D( gm_BaseTexture, v_vTexcoord );") + .setDisplay(VALUE_DISPLAY.codeGLSL) + .rejectArray(); + + inputs[| 2] = nodeValue("Base Texture", self, JUNCTION_CONNECT.input, VALUE_TYPE.surface, noone); + + outputs[| 0] = nodeValue("Surface", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone ); + + static createNewInput = function() { + var index = ds_list_size(inputs); + inputs[| index + 0] = nodeValue("Argument name", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "" ); + + inputs[| index + 1] = nodeValue("Argument type", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0 ) + .setDisplay(VALUE_DISPLAY.enum_scroll, [ "Float", "Int", "Vec2", "Vec3", "Vec4", "Mat3", "Mat4", "Sampler2D" ], { update_hover: false }); + inputs[| index + 1].editWidget.interactable = false; + + inputs[| index + 2] = nodeValue("Argument value", self, JUNCTION_CONNECT.input, VALUE_TYPE.float, 0 ) + .setVisible(true, true); + inputs[| index + 2].editWidget.interactable = false; + } + + argumentRenderer(); + + input_display_list = [ 2, + ["Shader", false], 1, + ["Arguments", false], argument_renderer, + ]; + + setIsDynamicInput(3); + + uniform_name = [ + "u_float_", + "u_int_", + "u_vec2_", + "u_vec3_", + "u_vec4_", + "u_mat3_", + "u_mat4_", + "u_sampler2D_", + ]; + + insp1UpdateTooltip = __txt("Compile"); + insp1UpdateIcon = [ THEME.refresh, 1, COLORS._main_value_positive ]; + + static onInspector1Update = function() { //compile + refreshShader(); + } + + static refreshShader = function() { + var vs = inputs[| 0].getValue(); + var fs = inputs[| 1].getValue(); + + var uTypes = array_create(8, 0); + for( var i = input_fix_len, n = ds_list_size(inputs); i < n; i += data_length ) { + var _arg_name = inputs[| i + 0].getValue(); + var _arg_type = inputs[| i + 1].getValue(); + + var _index = uTypes[_arg_type]; + uTypes[_arg_type]++; + var _uni_name = uniform_name + string(_index); + + vs = string_replace_all(vs, _arg_name, _uni_name); + fs = string_replace_all(fs, _arg_name, _uni_name); + } + + vs = glsl_wrap_vertex(vs); + fs = glsl_wrap_fragment(fs); + + var _dir = DIRECTORY + "shadertemp/"; + directory_create(_dir); + + file_text_write_all(_dir + "temp.shader", + vs + + "\n//######################_==_YOYO_SHADER_MARKER_==_######################@~\n" + + fs + ); + + //print(file_text_read_all(_dir + "temp.shader")); + //print(hlslCompiler); + + var cmd = (scr_cmd_arg(hlslCompiler) + + " -hlsl11" + + " -shader " + scr_cmd_arg(_dir + "temp.shader") + + " -name temp" + + " -out " + scr_cmd_arg(_dir) + + " -typedefine " + scr_cmd_arg("#define _YY_HLSL11_ 1") + + " -preamble " + scr_cmd_arg(filename_dir(hlslCompiler)) + ); + // + var ex = execute_program_pipe(cmd, 0 + | program_pipe_flags_hide_window + | program_pipe_flags_capture_stdout + | program_pipe_flags_capture_stderr + ); + + //print(ex) + + if (ex[0] != 0) { // didn't even run + noti_warning($"Error executing HLSLCompiler: {ex[2]}"); + } else if (ex[1] != 0) { // errored out + noti_warning($"Error compiling the shader: {ex[2]}"); + } else { // OK! Let's pick up those shaders + var vsh = file_text_read_all(_dir + "vout.shader"); + var fsh = file_text_read_all(_dir + "fout.shader"); + var e = shader_replace_simple(shader, vsh, fsh); + if (e != "") noti_warning($"Error applying the shader: {e}"); + } + } + + static onValueUpdate = function(index) { + refreshShader(); + } + + static processData = function(_output, _data, _output_index, _array_index = 0) { + var _surf = _data[2]; + _output = surface_verify(_output, surface_get_width(_surf), surface_get_height(_surf)); + + surface_set_shader(_output, shader); + + var uTypes = array_create(8, 0); + for( var i = input_fix_len, n = array_length(_data); i < n; i += data_length ) { + var _arg_name = _data[i + 0]; + var _arg_type = _data[i + 1]; + var _arg_valu = _data[i + 2]; + + var _index = uTypes[_arg_type]; + uTypes[_arg_type]++; + var _uni_name = uniform_name + string(_index); + + switch(_arg_type) { + case 0 : shader_set_f(_uni_name, _arg_valu); break; //u_float + case 1 : shader_set_i(_uni_name, _arg_valu); break; //u_int + case 2 : shader_set_f(_uni_name, _arg_valu); break; //u_vec2 + case 3 : shader_set_f(_uni_name, _arg_valu); break; //u_vec3 + case 4 : shader_set_f(_uni_name, _arg_valu); break; //u_vec4 + case 5 : shader_set_f(_uni_name, _arg_valu); break; //u_mat3 + case 6 : shader_set_f(_uni_name, _arg_valu); break; //u_mat4 + case 7 : shader_set_surface(_uni_name, _arg_valu); break; //u_sampler2D + } + } + + draw_surface_safe(_surf); + surface_reset_shader(); + + return _output; + } + + static postConnect = function() { + refreshShader(); + } + + static onCleanUp = function() { + custom_shader_free(self); + } +} \ No newline at end of file diff --git a/scripts/node_glsl/node_glsl.yy b/scripts/node_glsl/node_glsl.yy new file mode 100644 index 000000000..a5a1493ba --- /dev/null +++ b/scripts/node_glsl/node_glsl.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "node_glsl", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "node", + "path": "folders/nodes/data/node.yy", + }, +} \ No newline at end of file diff --git a/scripts/node_glsl/node_outline.yy b/scripts/node_glsl/node_outline.yy new file mode 100644 index 000000000..86468bc09 --- /dev/null +++ b/scripts/node_glsl/node_outline.yy @@ -0,0 +1,12 @@ +{ + "isDnD": false, + "isCompatibility": false, + "parent": { + "name": "process", + "path": "folders/nodes/data/process.yy", + }, + "resourceVersion": "1.0", + "name": "node_outline", + "tags": [], + "resourceType": "GMScript", +} \ No newline at end of file diff --git a/scripts/node_lua_compute/node_lua_compute.gml b/scripts/node_lua_compute/node_lua_compute.gml index 2f9a072b5..774fd04fe 100644 --- a/scripts/node_lua_compute/node_lua_compute.gml +++ b/scripts/node_lua_compute/node_lua_compute.gml @@ -8,7 +8,7 @@ function Node_Lua_Compute(_x, _y, _group = noone) : Node(_x, _y, _group) constru .setDisplay(VALUE_DISPLAY.enum_scroll, [ "Number", "String", "Struct" ], { update_hover: false }); inputs[| 2] = nodeValue("Lua code", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "", o_dialog_lua_reference) - .setDisplay(VALUE_DISPLAY.code); + .setDisplay(VALUE_DISPLAY.codeLUA); inputs[| 3] = nodeValue("Execution thread", self, JUNCTION_CONNECT.input, VALUE_TYPE.node, noone) .setVisible(false, true); @@ -32,7 +32,7 @@ function Node_Lua_Compute(_x, _y, _group = noone) : Node(_x, _y, _group) constru outputs[| 1] = nodeValue("Return value", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, 0); - luaArgumentRenderer(); + argumentRenderer(); input_display_list = [ 3, 4, ["Function", false], 0, 1, diff --git a/scripts/node_lua_global/node_lua_global.gml b/scripts/node_lua_global/node_lua_global.gml index 7b16b46e1..dca0531e3 100644 --- a/scripts/node_lua_global/node_lua_global.gml +++ b/scripts/node_lua_global/node_lua_global.gml @@ -4,7 +4,7 @@ function Node_Lua_Global(_x, _y, _group = noone) : Node(_x, _y, _group) construc previewable = false; inputs[| 0] = nodeValue("Lua code", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "", o_dialog_lua_reference) - .setDisplay(VALUE_DISPLAY.code); + .setDisplay(VALUE_DISPLAY.codeLUA); inputs[| 1] = nodeValue("Run order", self, JUNCTION_CONNECT.input, VALUE_TYPE.integer, 0) .setDisplay(VALUE_DISPLAY.enum_scroll, [ "On start", "Every frame" ]); diff --git a/scripts/node_lua_surface/node_lua_surface.gml b/scripts/node_lua_surface/node_lua_surface.gml index e5139eec6..7a105cacf 100644 --- a/scripts/node_lua_surface/node_lua_surface.gml +++ b/scripts/node_lua_surface/node_lua_surface.gml @@ -8,7 +8,7 @@ function Node_Lua_Surface(_x, _y, _group = noone) : Node(_x, _y, _group) constru .setDisplay(VALUE_DISPLAY.vector); inputs[| 2] = nodeValue("Lua code", self, JUNCTION_CONNECT.input, VALUE_TYPE.text, "", o_dialog_lua_reference) - .setDisplay(VALUE_DISPLAY.code); + .setDisplay(VALUE_DISPLAY.codeLUA); inputs[| 3] = nodeValue("Execution thread", self, JUNCTION_CONNECT.input, VALUE_TYPE.node, noone) .setVisible(false, true); @@ -33,7 +33,7 @@ function Node_Lua_Surface(_x, _y, _group = noone) : Node(_x, _y, _group) constru outputs[| 1] = nodeValue("Surface out", self, JUNCTION_CONNECT.output, VALUE_TYPE.surface, noone); attribute_surface_depth(); - luaArgumentRenderer(); + argumentRenderer(); input_display_list = [ 3, 4, ["Function", false], 0, 1, diff --git a/scripts/node_registry/node_registry.gml b/scripts/node_registry/node_registry.gml index dba86ae2f..0ee7c08e8 100644 --- a/scripts/node_registry/node_registry.gml +++ b/scripts/node_registry/node_registry.gml @@ -367,26 +367,26 @@ function NodeObject(_name, _spr, _node, _create, tags = []) constructor { addNodeObject(d3d, "Sprite Stack", s_node_stack, "Node_Sprite_Stack", [1, Node_Sprite_Stack],, "Create sprite stack either from repeating a single image or stacking different images using array."); ds_list_add(d3d, "3D"); - addNodeObject(d3d, "3D Camera", s_node_3d_camera, "Node_3D_Camera", [1, Node_3D_Camera]); - addNodeObject(d3d, "3D Material", s_node_3d_meterial, "Node_3D_Material", [1, Node_3D_Material]); + addNodeObject(d3d, "3D Camera", s_node_3d_camera, "Node_3D_Camera", [1, Node_3D_Camera]).setVersion(11510); + addNodeObject(d3d, "3D Material", s_node_3d_meterial, "Node_3D_Material", [1, Node_3D_Material]).setVersion(11510); ds_list_add(d3d, "Compose"); - addNodeObject(d3d, "3D Scene", s_node_3d_scene, "Node_3D_Scene", [1, Node_3D_Scene]); - addNodeObject(d3d, "3D Repeat", s_node_3d_array, "Node_3D_Repeat", [1, Node_3D_Repeat]); + addNodeObject(d3d, "3D Scene", s_node_3d_scene, "Node_3D_Scene", [1, Node_3D_Scene]).setVersion(11510); + addNodeObject(d3d, "3D Repeat", s_node_3d_array, "Node_3D_Repeat", [1, Node_3D_Repeat]).setVersion(11510); ds_list_add(d3d, "Mesh"); - addNodeObject(d3d, "3D Object", s_node_3d_obj, "Node_3D_Mesh_Obj", [0, Node_create_3D_Obj],, "Load .obj file from your computer as a 3D object."); - addNodeObject(d3d, "3D Plane", s_node_3d_plane, "Node_3D_Mesh_Plane", [1, Node_3D_Mesh_Plane],, "Put 2D image on a plane in 3D space."); - addNodeObject(d3d, "3D Cube", s_node_3d_cube, "Node_3D_Mesh_Cube", [1, Node_3D_Mesh_Cube]); - addNodeObject(d3d, "3D Cylinder", s_node_3d_cylinder, "Node_3D_Mesh_Cylinder", [1, Node_3D_Mesh_Cylinder]); - addNodeObject(d3d, "3D UV Sphere", s_node_3d_sphere_uv, "Node_3D_Mesh_Sphere_UV", [1, Node_3D_Mesh_Sphere_UV]); - addNodeObject(d3d, "3D Icosphere", s_node_3d_sphere_ico, "Node_3D_Mesh_Sphere_Ico", [1, Node_3D_Mesh_Sphere_Ico]); - addNodeObject(d3d, "3D Cone", s_node_3d_cone, "Node_3D_Mesh_Cone", [1, Node_3D_Mesh_Cone]) - addNodeObject(d3d, "Surface Extrude", s_node_3d_extrude, "Node_3D_Mesh_Extrude", [1, Node_3D_Mesh_Extrude],, "Extrude 2D image into 3D object."); + addNodeObject(d3d, "3D Object", s_node_3d_obj, "Node_3D_Mesh_Obj", [0, Node_create_3D_Obj],, "Load .obj file from your computer as a 3D object.").setVersion(11510); + addNodeObject(d3d, "3D Plane", s_node_3d_plane, "Node_3D_Mesh_Plane", [1, Node_3D_Mesh_Plane],, "Put 2D image on a plane in 3D space.").setVersion(11510); + addNodeObject(d3d, "3D Cube", s_node_3d_cube, "Node_3D_Mesh_Cube", [1, Node_3D_Mesh_Cube]).setVersion(11510); + addNodeObject(d3d, "3D Cylinder", s_node_3d_cylinder, "Node_3D_Mesh_Cylinder", [1, Node_3D_Mesh_Cylinder]).setVersion(11510); + addNodeObject(d3d, "3D UV Sphere", s_node_3d_sphere_uv, "Node_3D_Mesh_Sphere_UV", [1, Node_3D_Mesh_Sphere_UV]).setVersion(11510); + addNodeObject(d3d, "3D Icosphere", s_node_3d_sphere_ico, "Node_3D_Mesh_Sphere_Ico", [1, Node_3D_Mesh_Sphere_Ico]).setVersion(11510); + addNodeObject(d3d, "3D Cone", s_node_3d_cone, "Node_3D_Mesh_Cone", [1, Node_3D_Mesh_Cone]).setVersion(11510); + addNodeObject(d3d, "Surface Extrude", s_node_3d_extrude, "Node_3D_Mesh_Extrude", [1, Node_3D_Mesh_Extrude],, "Extrude 2D image into 3D object.").setVersion(11510); ds_list_add(d3d, "Light"); - addNodeObject(d3d, "Directional Light", s_node_3d_light_directi, "Node_3D_Light_Directional", [1, Node_3D_Light_Directional]); - addNodeObject(d3d, "Point Light", s_node_3d_light_point, "Node_3D_Light_Point", [1, Node_3D_Light_Point]); + addNodeObject(d3d, "Directional Light", s_node_3d_light_directi, "Node_3D_Light_Directional", [1, Node_3D_Light_Directional]).setVersion(11510); + addNodeObject(d3d, "Point Light", s_node_3d_light_point, "Node_3D_Light_Point", [1, Node_3D_Light_Point]).setVersion(11510); ds_list_add(d3d, "Legacy"); ////////////////////////////////////////////////////////////////////////////////////////////////////////////// addNodeObject(d3d, "3D Plane", s_node_3d_plane, "__Node_3D_Plane", [1, __Node_3D_Plane],, "Put 2D image on a plane in 3D space.").isDeprecated(); @@ -650,6 +650,9 @@ function NodeObject(_name, _spr, _node, _create, tags = []) constructor { addNodeObject(node, "Lua Surface", s_node_lua_surface, "Node_Lua_Surface", [1, Node_Lua_Surface]).setVersion(1090); addNodeObject(node, "Lua Compute", s_node_lua_compute, "Node_Lua_Compute", [1, Node_Lua_Compute]).setVersion(1090); + ds_list_add(node, "Shader"); + addNodeObject(node, "GLSL", s_node_lua_compute, "Node_GLSL", [1, Node_GLSL]).setVersion(11520); + ds_list_add(node, "Organize"); addNodeObject(node, "Pin", s_node_pin, "Node_Pin", [1, Node_Pin],, "Craete pin to organize your connection. Can be create by double clicking on a connection line."); addNodeObject(node, "Frame", s_node_frame, "Node_Frame", [1, Node_Frame],, "Create frame surrounding nodes."); diff --git a/scripts/node_value/node_value.gml b/scripts/node_value/node_value.gml index 2b6640514..6a0918c3a 100644 --- a/scripts/node_value/node_value.gml +++ b/scripts/node_value/node_value.gml @@ -92,7 +92,8 @@ enum VALUE_DISPLAY { path_array, //Text - code, + codeLUA, + codeGLSL, text_array, text_box, @@ -315,7 +316,8 @@ function nodeValueUnit(value) constructor { #region value.node.doUpdate(); }); triggerButton.icon_blend = COLORS._main_icon_light; - triggerButton.icon = THEME.unit_ref; + triggerButton.icon = THEME.unit_ref; + triggerButton.tooltip = new tooltipSelector("Unit", ["Pixel", "Fraction"]); static setMode = function(type) { #region if(type == "constant" && mode == VALUE_UNIT.constant) return; @@ -329,7 +331,7 @@ function nodeValueUnit(value) constructor { #region static draw = function(_x, _y, _w, _h, _m) { #region triggerButton.icon_index = mode; - triggerButton.tooltip = (mode? "Fraction" : "Pixel") + " unit"; + triggerButton.tooltip.index = mode; triggerButton.draw(_x, _y, _w, _h, _m, THEME.button_hide); } #endregion @@ -516,7 +518,7 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru express_edit.autocomplete_server = pxl_autocomplete_server; express_edit.function_guide_server = pxl_function_guide_server; express_edit.parser_server = pxl_document_parser; - express_edit.format = TEXT_AREA_FORMAT.code; + express_edit.format = TEXT_AREA_FORMAT.codeLUA; express_edit.font = f_code; express_edit.boxColor = COLORS._main_value_positive; express_edit.align = fa_left; @@ -962,13 +964,23 @@ function NodeValue(_name, _node, _connect, _type, _value, _tooltip = "") constru extract_node = "Node_String"; break; - case VALUE_DISPLAY.code : + case VALUE_DISPLAY.codeLUA : editWidget = new textArea(TEXTBOX_INPUT.text, function(str) { return setValueDirect(str); }); editWidget.font = f_code; - editWidget.format = TEXT_AREA_FORMAT.code; + editWidget.format = TEXT_AREA_FORMAT.codeLUA; + editWidget.min_lines = 4; + extract_node = "Node_String"; + break; + case VALUE_DISPLAY.codeGLSL: + editWidget = new textArea(TEXTBOX_INPUT.text, function(str) { + return setValueDirect(str); + }); + + editWidget.font = f_code; + editWidget.format = TEXT_AREA_FORMAT.codeGLSL; editWidget.min_lines = 4; extract_node = "Node_String"; break; diff --git a/scripts/panel_inspector/panel_inspector.gml b/scripts/panel_inspector/panel_inspector.gml index 00aff3790..0dd38d47d 100644 --- a/scripts/panel_inspector/panel_inspector.gml +++ b/scripts/panel_inspector/panel_inspector.gml @@ -438,20 +438,21 @@ function Panel_Inspector() : PanelContent() constructor { draw_text_add(ui(32), yy + ui(32) / 2, txt); hh += ui(32 + 8); - + if(coll) { - var j = i + 1; - while(j < amo) { - if(j >= array_length(inspecting.input_display_list)) break; + var j = i + 1; + var _len = array_length(inspecting.input_display_list); + + while(j < _len) { var j_jun = inspecting.input_display_list[j]; if(is_array(j_jun)) break; - else - j++; + j++; } + i = j - 1; - continue; } + continue; } else if(is_struct(jun_disp) && instanceof(jun_disp) == "Inspector_Custom_Renderer") { if(pFOCUS) jun_disp.register(contentPane); @@ -487,7 +488,7 @@ function Panel_Inspector() : PanelContent() constructor { if(pos == 0) continue; } - #region ++++ draw widget + #region ++++ draw widget ++++ var lb_h = line_get_height(f_p0) + ui(8); var lb_w = line_get_width(jun.name, f_p0) + ui(16); var padd = ui(8); diff --git a/scripts/panel_text_editor/panel_console.gml b/scripts/panel_text_editor/panel_console.gml new file mode 100644 index 000000000..5dff86a32 --- /dev/null +++ b/scripts/panel_text_editor/panel_console.gml @@ -0,0 +1,73 @@ +function Panel_Console() : PanelContent() constructor { + title = "Console"; + w = ui(640); + h = ui(320); + + command = ""; + history = []; + cmd_history = []; + + cmd_index = 0; + + keyboard_string = ""; + + static submit_command = function() { + if(command == "") return; + array_push(history, { txt: command, color: COLORS._main_text_sub }); + array_push(cmd_history, command); + + var cmd = string_splice(command, " "); + + switch(cmd[0]) { + case "flag": + if(array_length(cmd) < 2) break; + var flg = array_safe_get(cmd, 1, ""); + global.FLAG[$ flg] = !global.FLAG[$ flg]; + + array_push(history, { txt: $"Toggled debug flag: {flg} = {global.FLAG[$ flg]? "True" : "False"}", color: COLORS._main_value_positive }); + break; + } + + keyboard_string = ""; + command = ""; + } + + function drawContent(panel) { + HOTKEY_BLOCK = true; + command = keyboard_string; + + draw_clear_alpha(CDEF.main_dkblack, 1); + + draw_set_color(c_black); + draw_set_alpha(0.75); + draw_rectangle(0, h - ui(28), w, h, false); + draw_set_alpha(1); + + draw_set_text(f_code, fa_left, fa_bottom, COLORS._main_text); + draw_text(ui(8), h - ui(4), command); + draw_set_color(COLORS._main_text_sub); + draw_text(ui(8) + string_width(command), h - ui(4), "_"); + + var hy = h - ui(32); + for( var i = 0; i < array_length(history); i++ ) { + var his = history[array_length(history) - i - 1]; + var txt = his.txt; + + draw_set_color(his.color); + draw_text_ext(ui(8), hy, txt, -1, w - ui(16)); + hy -= string_height_ext(txt, -1, w - ui(16)); + + if(hy <= 0) break; + } + + if(keyboard_check_pressed(vk_enter)) + submit_command(); + + if(keyboard_check_pressed(vk_up)) { + cmd_index = max(0, cmd_index - 1); + keyboard_string = array_safe_get(cmd_history, cmd_index, ""); + command = keyboard_string; + } else if(keyboard_check_pressed(vk_anykey)) + cmd_index = array_length(cmd_history); + } +} \ No newline at end of file diff --git a/scripts/panel_text_editor/panel_text_editor.gml b/scripts/panel_text_editor/panel_text_editor.gml new file mode 100644 index 000000000..e63130418 --- /dev/null +++ b/scripts/panel_text_editor/panel_text_editor.gml @@ -0,0 +1,48 @@ +function Panel_Text_Editor(_textArea, _inputFunc, _context) : PanelContent() constructor { + title = ""; + w = ui(640); + h = ui(480); + + self._textArea = new textArea(_textArea.input, _textArea.onModify); + self._textArea.color = _textArea.color; + self._textArea.font = _textArea.font; + self._textArea.format = _textArea.format; + + self.inputFunc = method(self, _inputFunc); + self.context = _context; + + shift_new_line = false; + + function drawContent(panel) { + draw_clear_alpha(COLORS.panel_bg_clear, 0); + + var bx = ui(8); + var by = ui(4); + var bs = ui(32); + + var txt = shift_new_line? "New line with Shift + Enter" : "New line with Enter"; + if(buttonInstant(THEME.button_hide, bx, by, bs, bs, [ mx, my ], pFOCUS, pHOVER, txt, THEME.new_line_shift, shift_new_line) == 2) + shift_new_line = !shift_new_line; + bx += bs + ui(4); + + var bx = w - ui(8) - bs; + if(buttonInstant(THEME.button_hide, bx, by, bs, bs, [ mx, my ], pFOCUS, pHOVER, "Apply", THEME.accept,, COLORS._main_value_positive) == 2) + _textArea.apply(); + bx -= bs + ui(4); + + var tx = ui(8); + var ty = ui(4 + 36); + var tw = w - ui(8 + 8); + var th = h - ui(4 + 36 + 8); + + var _text = inputFunc(); + _textArea.register(); + _textArea.setFocusHover(pFOCUS, pHOVER); + _textArea.shift_new_line = shift_new_line; + _textArea.drawParam(new widgetParam(tx, ty, tw, th, _text,, [mx, my], x, y)); + } + + function onClose() { + _textArea.apply(); + } +} \ No newline at end of file diff --git a/scripts/panel_text_editor/panel_text_editor.yy b/scripts/panel_text_editor/panel_text_editor.yy new file mode 100644 index 000000000..a4338deb5 --- /dev/null +++ b/scripts/panel_text_editor/panel_text_editor.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "panel_text_editor", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "_others", + "path": "folders/panels/_others.yy", + }, +} \ No newline at end of file diff --git a/scripts/pcx_ast/pcx_ast.yy b/scripts/pcx_ast/pcx_ast.yy index 7fb4ae3e8..5df6e3f76 100644 --- a/scripts/pcx_ast/pcx_ast.yy +++ b/scripts/pcx_ast/pcx_ast.yy @@ -5,7 +5,7 @@ "isCompatibility": false, "isDnD": false, "parent": { - "name": "eval", - "path": "folders/functions/eval.yy", + "name": "PCX", + "path": "folders/functions/PCX.yy", }, } \ No newline at end of file diff --git a/scripts/pcx_parse/pcx_parse.yy b/scripts/pcx_parse/pcx_parse.yy index f8c92eacb..2b0205617 100644 --- a/scripts/pcx_parse/pcx_parse.yy +++ b/scripts/pcx_parse/pcx_parse.yy @@ -5,7 +5,7 @@ "isCompatibility": false, "isDnD": false, "parent": { - "name": "eval", - "path": "folders/functions/eval.yy", + "name": "PCX", + "path": "folders/functions/PCX.yy", }, } \ No newline at end of file diff --git a/scripts/pcx_server/pcx_server.yy b/scripts/pcx_server/pcx_server.yy index f08291ab2..aef9b9e15 100644 --- a/scripts/pcx_server/pcx_server.yy +++ b/scripts/pcx_server/pcx_server.yy @@ -5,7 +5,7 @@ "isCompatibility": false, "isDnD": false, "parent": { - "name": "eval", - "path": "folders/functions/eval.yy", + "name": "PCX", + "path": "folders/functions/PCX.yy", }, } \ No newline at end of file diff --git a/scripts/quarternionBox/quarternionBox.gml b/scripts/quarternionBox/quarternionBox.gml index d8314157e..298a33d6d 100644 --- a/scripts/quarternionBox/quarternionBox.gml +++ b/scripts/quarternionBox/quarternionBox.gml @@ -17,7 +17,7 @@ function quarternionBox(_onModify) : widget() constructor { size = 4; axis = [ "x", "y", "z", "w" ]; - tooltip = new tooltipSelector("Angle type", ["Quarternion", "Euler"]); + tooltip = new tooltipSelector("Angle type", ["Quaternion", "Euler"]); disp_w = noone; clickable = true; diff --git a/scripts/real_comparison/real_comparison.yy b/scripts/real_comparison/real_comparison.yy index 3c94927fa..20c82ac01 100644 --- a/scripts/real_comparison/real_comparison.yy +++ b/scripts/real_comparison/real_comparison.yy @@ -5,7 +5,7 @@ "isCompatibility": false, "isDnD": false, "parent": { - "name": "eval", - "path": "folders/functions/eval.yy", + "name": "PCX", + "path": "folders/functions/PCX.yy", }, } \ No newline at end of file diff --git a/scripts/scr_cmd_arg/scr_cmd_arg.gml b/scripts/scr_cmd_arg/scr_cmd_arg.gml new file mode 100644 index 000000000..e06373b16 --- /dev/null +++ b/scripts/scr_cmd_arg/scr_cmd_arg.gml @@ -0,0 +1,7 @@ +/// @param string +function scr_cmd_arg(argument0) { + var s = argument0; + if (string_pos(" ", s)) { + return @'"' + s + @'"'; + } else return s; +} \ No newline at end of file diff --git a/scripts/scr_cmd_arg/scr_cmd_arg.yy b/scripts/scr_cmd_arg/scr_cmd_arg.yy new file mode 100644 index 000000000..4e4800384 --- /dev/null +++ b/scripts/scr_cmd_arg/scr_cmd_arg.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "scr_cmd_arg", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "Shader replace", + "path": "folders/_extensions/Shader replace.yy", + }, +} \ No newline at end of file diff --git a/scripts/scrollPane/scrollPane.gml b/scripts/scrollPane/scrollPane.gml index 30260750b..4d63cef99 100644 --- a/scripts/scrollPane/scrollPane.gml +++ b/scripts/scrollPane/scrollPane.gml @@ -26,13 +26,6 @@ function scrollPane(_w, _h, ondraw) : widget() constructor { h = _h; surface_w = _w - is_scroll * ui(12); surface_h = _h; - - if(surface_w > 1 && surface_h > 1) { - if(is_surface(surface)) - surface_size_to(surface, surface_w, surface_h); - else - surface = surface_create_valid(surface_w, surface_h); - } } static draw = function(x, y, _mx = mouse_mx - x, _my = mouse_my - y) { @@ -40,9 +33,9 @@ function scrollPane(_w, _h, ondraw) : widget() constructor { self.y = y; var mx = _mx, my = _my; - hover &= point_in_rectangle(mx, my, 0, 0, surface_w, surface_h); + hover &= point_in_rectangle(mx, my, 0, 0, surface_w, surface_h); + surface = surface_verify(surface, surface_w, surface_h); - if(!is_surface(surface)) surface = surface_create_valid(surface_w, surface_h); surface_set_target(surface); draw_clear(COLORS.panel_bg_clear); var hh = drawFunc(scroll_y, [mx, my], [x, y]); diff --git a/scripts/shader_replace_simple_macros/shader_replace_simple_macros.gml b/scripts/shader_replace_simple_macros/shader_replace_simple_macros.gml new file mode 100644 index 000000000..471784359 --- /dev/null +++ b/scripts/shader_replace_simple_macros/shader_replace_simple_macros.gml @@ -0,0 +1,18 @@ +#macro shader_set shader_replace_simple_set_hook +#macro shader_replace_simple_set_base shader_set +#macro shader_reset shader_replace_simple_reset_hook +#macro shader_replace_simple_reset_base shader_reset +function shader_replace_simple_reset_hook() { + shader_replace_simple_reset_base(); + shader_replace_simple_sync(-1); +} +function shader_replace_simple_set_hook() { + shader_replace_simple_set_base(argument0); + shader_replace_simple_sync(argument0); +} +function shader_replace_simple_macros(){ + if (false) { + shader_replace_simple_set_base(0); + shader_replace_simple_reset_base(); + } +} \ No newline at end of file diff --git a/scripts/shader_replace_simple_macros/shader_replace_simple_macros.yy b/scripts/shader_replace_simple_macros/shader_replace_simple_macros.yy new file mode 100644 index 000000000..bc156ad37 --- /dev/null +++ b/scripts/shader_replace_simple_macros/shader_replace_simple_macros.yy @@ -0,0 +1,11 @@ +{ + "resourceType": "GMScript", + "resourceVersion": "1.0", + "name": "shader_replace_simple_macros", + "isCompatibility": false, + "isDnD": false, + "parent": { + "name": "Shader replace", + "path": "folders/_extensions/Shader replace.yy", + }, +} \ No newline at end of file diff --git a/scripts/sprite_loader/sprite_loader.gml b/scripts/sprite_loader/sprite_loader.gml index 98c6e7295..edd165299 100644 --- a/scripts/sprite_loader/sprite_loader.gml +++ b/scripts/sprite_loader/sprite_loader.gml @@ -32,7 +32,8 @@ function _sprite_load_from_struct(str, theme, key) { if(struct_has(str.slice, "tilemode")) slice.tilemode = str.slice.tilemode; - sprite_set_nineslice(s, slice); + if(s >= 0) sprite_set_nineslice(s, slice); + else log_message("THEME", $"Load sprite {path} failed."); } return s; } diff --git a/scripts/textArea/textArea.gml b/scripts/textArea/textArea.gml index df46a8b5a..cba7e2542 100644 --- a/scripts/textArea/textArea.gml +++ b/scripts/textArea/textArea.gml @@ -1,6 +1,7 @@ enum TEXT_AREA_FORMAT { _default, - code, + codeLUA, + codeGLSL, delimiter, path_template, node_title, @@ -53,6 +54,8 @@ function textArea(_input, _onModify, _extras = noone) : textInput(_input, _onMod function_guide_box.textbox = self; function_guide_server = noone; + shift_new_line = true; + _cl = -1; static activate = function() { #region @@ -80,7 +83,7 @@ function textArea(_input, _onModify, _extras = noone) : textInput(_input, _onMod } #endregion static onModified = function() { #region - if(format == TEXT_AREA_FORMAT.code && autocomplete_server != noone) { + if((format == TEXT_AREA_FORMAT.codeLUA || format == TEXT_AREA_FORMAT.codeGLSL) && autocomplete_server != noone) { var crop = string_copy(_input_text, 1, cursor); var slp = string_splice(crop, [" ", "(", ",", "\n"]); var pmt = array_safe_get(slp, -1,, ARRAY_OVERFLOW.loop); @@ -174,75 +177,75 @@ function textArea(_input, _onModify, _extras = noone) : textInput(_input, _onMod } } - if(format != TEXT_AREA_FORMAT.code || !autocomplete_box.active) - if(key == vk_up) { - var _target; + if(!(format == TEXT_AREA_FORMAT.codeLUA || format == TEXT_AREA_FORMAT.codeGLSL) || !autocomplete_box.active) { + if(key == vk_up) { + var _target; - if(cursor_line == 0) - _target = 0; - else { - var _l = cursor_line - 1; - var _str = _input_text_line[_l]; - var _run = cursor_tx; - var _char = 0; + if(cursor_line == 0) + _target = 0; + else { + var _l = cursor_line - 1; + var _str = _input_text_line[_l]; + var _run = cursor_tx; + var _char = 0; - for( var i = 0; i < _l; i++ ) - _char += string_length(_input_text_line[i]); + for( var i = 0; i < _l; i++ ) + _char += string_length(_input_text_line[i]); - for( var i = 1; i < string_length(_str); i++ ) { - var _chr = string_char_at(_str, i); - _run += string_width(_chr); - if(_run > cursor_pos_x_to) - break; - _char++; + for( var i = 1; i < string_length(_str); i++ ) { + var _chr = string_char_at(_str, i); + _run += string_width(_chr); + if(_run > cursor_pos_x_to) + break; + _char++; + } + + _target = _char; } - - _target = _char; + + if(key_mod_press(SHIFT)) { + if(cursor_select == -1) + cursor_select = cursor; + } else + cursor_select = -1; + + cursor = _target; + onModified(); } - - if(key_mod_press(SHIFT)) { - if(cursor_select == -1) - cursor_select = cursor; - } else - cursor_select = -1; - - cursor = _target; - onModified(); - } - if(format != TEXT_AREA_FORMAT.code || !autocomplete_box.active) - if(key == vk_down) { - var _target; + if(key == vk_down) { + var _target; - if(cursor_line == array_length(_input_text_line) - 1) - _target = string_length(_input_text); - else { - var _l = cursor_line + 1; - var _str = _input_text_line[_l]; - var _run = cursor_tx; - var _char = 0; + if(cursor_line == array_length(_input_text_line) - 1) + _target = string_length(_input_text); + else { + var _l = cursor_line + 1; + var _str = _input_text_line[_l]; + var _run = cursor_tx; + var _char = 0; - for( var i = 0; i < _l; i++ ) - _char += string_length(_input_text_line[i]); + for( var i = 0; i < _l; i++ ) + _char += string_length(_input_text_line[i]); - for( var i = 1; i < string_length(_str); i++ ) { - var _chr = string_char_at(_str, i); - _run += string_width(_chr); - if(_run > cursor_pos_x_to) break; - _char++; - } + for( var i = 1; i < string_length(_str); i++ ) { + var _chr = string_char_at(_str, i); + _run += string_width(_chr); + if(_run > cursor_pos_x_to) break; + _char++; + } - _target = _char; + _target = _char; + } + + if(key_mod_press(SHIFT)) { + if(cursor_select == -1) + cursor_select = cursor; + } else + cursor_select = -1; + + cursor = _target; + onModified(); } - - if(key_mod_press(SHIFT)) { - if(cursor_select == -1) - cursor_select = cursor; - } else - cursor_select = -1; - - cursor = _target; - onModified(); } } #endregion @@ -265,10 +268,17 @@ function textArea(_input, _onModify, _extras = noone) : textInput(_input, _onMod var _txtLines = string_splice(_input_text, "\n"); var ss = ""; + var _code = format == TEXT_AREA_FORMAT.codeLUA || format == TEXT_AREA_FORMAT.codeGLSL; for( var i = 0, n = array_length(_txtLines); i < n; i++ ) { var _txt = _txtLines[i] + (i < array_length(_txtLines)? "\n" : ""); - var words = string_splice(_txt, " "); + var words; + + if(_code) + words = token_splice(_txt); + else + words = string_splice(_txt, " "); + var currW = 0; var currL = ""; var cut = true; @@ -277,7 +287,7 @@ function textArea(_input, _onModify, _extras = noone) : textInput(_input, _onMod for( var j = 0; j < len; j++ ) { var word = words[j]; - if(j < len - 1) word = word + " "; + if(!_code && j < len - 1) word = word + " "; if(string_width(word) > line_width) { //the entire word is longer than a line for( var k = 1; k <= string_length(word); k++ ) { @@ -340,7 +350,8 @@ function textArea(_input, _onModify, _extras = noone) : textInput(_input, _onMod if(keyboard_check_pressed(vk_escape)) { } else if(keyboard_check_pressed(vk_tab)) { - } else if(keyboard_check_pressed(vk_enter) && key_mod_press(SHIFT)) { + } else if(( shift_new_line && keyboard_check_pressed(vk_enter) && key_mod_press(SHIFT)) || + (!shift_new_line && keyboard_check_pressed(vk_enter))) { var ch = "\n"; if(cursor_select == -1) { var str_before = string_copy(_input_text, 1, cursor); @@ -477,15 +488,16 @@ function textArea(_input, _onModify, _extras = noone) : textInput(_input, _onMod _input_text = _last_value; cut_line(); deactivate(); - } else if(keyboard_check_pressed(vk_enter) && !key_mod_press(SHIFT)) { + } else if(( shift_new_line && keyboard_check_pressed(vk_enter) && !key_mod_press(SHIFT)) || + (!shift_new_line && keyboard_check_pressed(vk_enter) && key_mod_press(SHIFT))) { deactivate(); } } #endregion - static display_text = function(_x, _y, _text, _w, _mx = -1, _my = -1) { #region + static display_text = function(_x, _y, _text, _mx = -1, _my = -1) { #region _text = string_real(_text); - if(_w != _prev_width) { - _prev_width = _w; + if(line_width != _prev_width) { + _prev_width = line_width; cut_line(); } @@ -517,8 +529,10 @@ function textArea(_input, _onModify, _extras = noone) : textInput(_input, _onMod if(format == TEXT_AREA_FORMAT._default) draw_text_add(ch_x, ch_y, _str); - else if(format == TEXT_AREA_FORMAT.code) - draw_code(ch_x, ch_y, _str); + else if(format == TEXT_AREA_FORMAT.codeLUA) + draw_code_lua(ch_x, ch_y, _str); + else if(format == TEXT_AREA_FORMAT.codeGLSL) + draw_code_glsl(ch_x, ch_y, _str); else if(format == TEXT_AREA_FORMAT.delimiter) draw_text_delimiter(ch_x, ch_y, _str); else if(format == TEXT_AREA_FORMAT.path_template) @@ -557,11 +571,12 @@ function textArea(_input, _onModify, _extras = noone) : textInput(_input, _onMod break; } - ch_x += _ch_w; + ch_x += _ch_w; ch_cxo = ch_cxn; } break; } + char_run += string_length(_input_text_line[i]); ch_y += _ch_h; } @@ -579,6 +594,9 @@ function textArea(_input, _onModify, _extras = noone) : textInput(_input, _onMod } #endregion static drawParam = function(params) { #region + rx = params.rx; + ry = params.ry; + return draw(params.x, params.y, params.w, params.h, params.data, params.m); } #endregion @@ -609,7 +627,7 @@ function textArea(_input, _onModify, _extras = noone) : textInput(_input, _onMod if(format == TEXT_AREA_FORMAT._default) { line_width = _w - ui(16); - } else if(format == TEXT_AREA_FORMAT.code) { + } else if(format == TEXT_AREA_FORMAT.codeLUA || format == TEXT_AREA_FORMAT.codeGLSL) { line_width = _w - ui(16 + code_line_width); tx += ui(code_line_width); } @@ -624,7 +642,7 @@ function textArea(_input, _onModify, _extras = noone) : textInput(_input, _onMod draw_sprite_stretched_ext(THEME.textbox, 3, _x, _y, _w, hh, boxColor, 1); - if(format == TEXT_AREA_FORMAT.code) { + if(format == TEXT_AREA_FORMAT.codeLUA || format == TEXT_AREA_FORMAT.codeGLSL) { draw_sprite_stretched_ext(THEME.textbox_code, 0, _x, _y, ui(code_line_width), hh, boxColor, 1); draw_set_text(f_code, fa_right, fa_top, COLORS._main_text_sub); @@ -712,7 +730,7 @@ function textArea(_input, _onModify, _extras = noone) : textInput(_input, _onMod _my = _m[1]; } - display_text(tx, _y + ui(7), _input_text, _w - ui(4), _mx, _my); + display_text(tx, _y + ui(7), _input_text, _mx, _my); if(cursor_pos_y != 0 && cursor_pos_x != 0) { draw_set_color(COLORS._main_text_accent); @@ -734,7 +752,7 @@ function textArea(_input, _onModify, _extras = noone) : textInput(_input, _onMod } else if(!hide) draw_sprite_stretched_ext(THEME.textbox, 0, _x, _y, _w, hh, boxColor, 0.5 + 0.5 * interactable); - display_text(tx, _y + ui(7), _text, _w - ui(4)); + display_text(tx, _y + ui(7), _text); autocomplete_box.active = 0; } @@ -746,6 +764,7 @@ function textArea(_input, _onModify, _extras = noone) : textInput(_input, _onMod } resetFocus(); + shift_new_line = true; return hh; } #endregion diff --git a/scripts/theme_definition/theme_definition.gml b/scripts/theme_definition/theme_definition.gml index afdbd7158..58030add9 100644 --- a/scripts/theme_definition/theme_definition.gml +++ b/scripts/theme_definition/theme_definition.gml @@ -201,7 +201,6 @@ function Theme() constructor { ui_panel_bg = noone; ui_panel_fg = noone; ui_panel_bg_cover = noone; - ui_panel_bg_dark = noone; ui_scrollbar = noone; ui_label_bg = noone; toolbar = noone; diff --git a/shaders/sh_dummy_0/sh_dummy_0.fsh b/shaders/sh_dummy_0/sh_dummy_0.fsh new file mode 100644 index 000000000..a19c75703 --- /dev/null +++ b/shaders/sh_dummy_0/sh_dummy_0.fsh @@ -0,0 +1,28 @@ +varying vec2 v_vTexcoord; + +uniform float u_float_0, u_float_1, u_float_2, u_float_3, u_float_4, u_float_5, u_float_6, u_float_7; +uniform float u_float_8, u_float_9, u_float_10, u_float_11, u_float_12, u_float_13, u_float_14, u_float_15; + +uniform int u_int_0, u_int_1, u_int_2, u_int_3, u_int_4, u_int_5, u_int_6, u_int_7; +uniform int u_int_8, u_int_9, u_int_10, u_int_11, u_int_12, u_int_13, u_int_14, u_int_15; + +uniform vec2 u_vec2_0, u_vec2_1, u_vec2_2, u_vec2_3, u_vec2_4, u_vec2_5, u_vec2_6, u_vec2_7; +uniform vec2 u_vec2_8, u_vec2_9, u_vec2_10, u_vec2_11, u_vec2_12, u_vec2_13, u_vec2_14, u_vec2_15; + +uniform vec3 u_vec3_0, u_vec3_1, u_vec3_2, u_vec3_3, u_vec3_4, u_vec3_5, u_vec3_6, u_vec3_7; +uniform vec3 u_vec3_8, u_vec3_9, u_vec3_10, u_vec3_11, u_vec3_12, u_vec3_13, u_vec3_14, u_vec3_15; + +uniform vec4 u_vec4_0, u_vec4_1, u_vec4_2, u_vec4_3, u_vec4_4, u_vec4_5, u_vec4_6, u_vec4_7; +uniform vec4 u_vec4_8, u_vec4_9, u_vec4_10, u_vec4_11, u_vec4_12, u_vec4_13, u_vec4_14, u_vec4_15; + +uniform mat3 u_mat3_0, u_mat3_1, u_mat3_2, u_mat3_3, u_mat3_4, u_mat3_5, u_mat3_6, u_mat3_7; +uniform mat3 u_mat3_8, u_mat3_9, u_mat3_10, u_mat3_11, u_mat3_12, u_mat3_13, u_mat3_14, u_mat3_15; + +uniform mat4 u_mat4_0, u_mat4_1, u_mat4_2, u_mat4_3, u_mat4_4, u_mat4_5, u_mat4_6, u_mat4_7; +uniform mat4 u_mat4_8, u_mat4_9, u_mat4_10, u_mat4_11, u_mat4_12, u_mat4_13, u_mat4_14, u_mat4_15; + +uniform sampler2D u_sampler2D_0, u_sampler2D_1, u_sampler2D_2, u_sampler2D_3, u_sampler2D_4, u_sampler2D_5, u_sampler2D_6; + +void main() { + gl_FragColor = texture2D( gm_BaseTexture, v_vTexcoord ); +} diff --git a/shaders/sh_dummy_0/sh_dummy_0.vsh b/shaders/sh_dummy_0/sh_dummy_0.vsh new file mode 100644 index 000000000..394c01ae4 --- /dev/null +++ b/shaders/sh_dummy_0/sh_dummy_0.vsh @@ -0,0 +1,35 @@ +attribute vec3 in_Position; +attribute vec4 in_Colour; +attribute vec2 in_TextureCoord; + +varying vec2 v_vTexcoord; + +uniform float u_float_0, u_float_1, u_float_2, u_float_3, u_float_4, u_float_5, u_float_6, u_float_7; +uniform float u_float_8, u_float_9, u_float_10, u_float_11, u_float_12, u_float_13, u_float_14, u_float_15; + +uniform int u_int_0, u_int_1, u_int_2, u_int_3, u_int_4, u_int_5, u_int_6, u_int_7; +uniform int u_int_8, u_int_9, u_int_10, u_int_11, u_int_12, u_int_13, u_int_14, u_int_15; + +uniform vec2 u_vec2_0, u_vec2_1, u_vec2_2, u_vec2_3, u_vec2_4, u_vec2_5, u_vec2_6, u_vec2_7; +uniform vec2 u_vec2_8, u_vec2_9, u_vec2_10, u_vec2_11, u_vec2_12, u_vec2_13, u_vec2_14, u_vec2_15; + +uniform vec3 u_vec3_0, u_vec3_1, u_vec3_2, u_vec3_3, u_vec3_4, u_vec3_5, u_vec3_6, u_vec3_7; +uniform vec3 u_vec3_8, u_vec3_9, u_vec3_10, u_vec3_11, u_vec3_12, u_vec3_13, u_vec3_14, u_vec3_15; + +uniform vec4 u_vec4_0, u_vec4_1, u_vec4_2, u_vec4_3, u_vec4_4, u_vec4_5, u_vec4_6, u_vec4_7; +uniform vec4 u_vec4_8, u_vec4_9, u_vec4_10, u_vec4_11, u_vec4_12, u_vec4_13, u_vec4_14, u_vec4_15; + +uniform mat3 u_mat3_0, u_mat3_1, u_mat3_2, u_mat3_3, u_mat3_4, u_mat3_5, u_mat3_6, u_mat3_7; +uniform mat3 u_mat3_8, u_mat3_9, u_mat3_10, u_mat3_11, u_mat3_12, u_mat3_13, u_mat3_14, u_mat3_15; + +uniform mat4 u_mat4_0, u_mat4_1, u_mat4_2, u_mat4_3, u_mat4_4, u_mat4_5, u_mat4_6, u_mat4_7; +uniform mat4 u_mat4_8, u_mat4_9, u_mat4_10, u_mat4_11, u_mat4_12, u_mat4_13, u_mat4_14, u_mat4_15; + +uniform sampler2D u_sampler2D_0, u_sampler2D_1, u_sampler2D_2, u_sampler2D_3, u_sampler2D_4, u_sampler2D_5, u_sampler2D_6; + +void main() { + vec4 object_space_pos = vec4( in_Position.x, in_Position.y, in_Position.z, 1.0); + gl_Position = gm_Matrices[MATRIX_WORLD_VIEW_PROJECTION] * object_space_pos; + + v_vTexcoord = in_TextureCoord; +} diff --git a/shaders/sh_dummy_0/sh_dummy_0.yy b/shaders/sh_dummy_0/sh_dummy_0.yy new file mode 100644 index 000000000..a8cc96c68 --- /dev/null +++ b/shaders/sh_dummy_0/sh_dummy_0.yy @@ -0,0 +1,10 @@ +{ + "resourceType": "GMShader", + "resourceVersion": "1.0", + "name": "sh_dummy_0", + "parent": { + "name": "dummy", + "path": "folders/shader/dummy.yy", + }, + "type": 1, +} \ No newline at end of file