├── tests
├── data
│ ├── text_document.txt
│ ├── 1.png
│ ├── 2.png
│ ├── 3.png
│ └── explosion.wav
├── projects
│ ├── GMLProject
│ │ ├── objects
│ │ │ ├── obj_child
│ │ │ │ ├── Step_0.gml
│ │ │ │ ├── Create_0.gml
│ │ │ │ └── obj_child.yy
│ │ │ ├── obj_child_child
│ │ │ │ ├── Step_0.gml
│ │ │ │ ├── Create_0.gml
│ │ │ │ └── obj_child_child.yy
│ │ │ ├── test_object1
│ │ │ │ ├── Step_0.gml
│ │ │ │ └── test_object1.yy
│ │ │ ├── obj_parent
│ │ │ │ ├── Create_0.gml
│ │ │ │ ├── Draw_0.gml
│ │ │ │ └── obj_parent.yy
│ │ │ ├── thisobjectshouldbegone
│ │ │ │ └── thisobjectshouldbegone.yy
│ │ │ ├── obj_using_simple_project
│ │ │ │ └── obj_using_simple_project.yy
│ │ │ ├── testing_shouldbe_here_test
│ │ │ │ └── testing_shouldbe_here_test.yy
│ │ │ ├── testing_shouldbe_gone_test2
│ │ │ │ └── testing_shouldbe_gone_test2.yy
│ │ │ └── thisobjectshouldnotbegone_test3
│ │ │ │ └── thisobjectshouldnotbegone_test3.yy
│ │ ├── datafiles
│ │ │ └── text_document.txt
│ │ ├── notes
│ │ │ ├── note_inside_group.txt
│ │ │ ├── note_not_in_group.txt
│ │ │ ├── note_inside_group.yy
│ │ │ └── note_not_in_group.yy
│ │ ├── timelines
│ │ │ └── tl_one
│ │ │ │ ├── moment_0.gml
│ │ │ │ ├── moment_30.gml
│ │ │ │ └── tl_one.yy
│ │ ├── run.sh
│ │ ├── fonts
│ │ │ └── fnt_arial_8
│ │ │ │ ├── fnt_arial_8.png
│ │ │ │ └── fnt_arial_8.old.png
│ │ ├── sounds
│ │ │ └── snd_explosion
│ │ │ │ ├── snd_explosion
│ │ │ │ └── snd_explosion.yy
│ │ ├── scripts
│ │ │ ├── scr_multiply
│ │ │ │ ├── scr_multiply.gml
│ │ │ │ └── scr_multiply.yy
│ │ │ ├── test_script1
│ │ │ │ └── test_script1.yy
│ │ │ ├── script_gone_test2
│ │ │ │ └── script_gone_test2.yy
│ │ │ ├── script_notgone_test3
│ │ │ │ └── script_notgone_test3.yy
│ │ │ └── scr_in_group_to_ignore
│ │ │ │ └── scr_in_group_to_ignore.yy
│ │ ├── tilesets
│ │ │ └── ts_numbers
│ │ │ │ ├── output_tileset.png
│ │ │ │ └── ts_numbers.yy
│ │ ├── sprites
│ │ │ ├── spr_numbers
│ │ │ │ ├── 55f3e0fd-28e0-4673-8555-1eb43a7a3fcd.png
│ │ │ │ ├── 624bbd80-09ca-4c9d-a977-61b54baa2dac.png
│ │ │ │ ├── 81f2cbda-0b2b-45cf-9fbd-beced1b583cf.png
│ │ │ │ └── layers
│ │ │ │ │ ├── 55f3e0fd-28e0-4673-8555-1eb43a7a3fcd
│ │ │ │ │ └── 1ce14796-9b17-4cb7-bf02-74f8475e41a1.png
│ │ │ │ │ ├── 624bbd80-09ca-4c9d-a977-61b54baa2dac
│ │ │ │ │ └── 1ce14796-9b17-4cb7-bf02-74f8475e41a1.png
│ │ │ │ │ └── 81f2cbda-0b2b-45cf-9fbd-beced1b583cf
│ │ │ │ │ └── 1ce14796-9b17-4cb7-bf02-74f8475e41a1.png
│ │ │ └── spr_to_ignore
│ │ │ │ ├── bc3ca4da-3afb-4fb9-9ed0-5353691cc828.png
│ │ │ │ └── layers
│ │ │ │ └── bc3ca4da-3afb-4fb9-9ed0-5353691cc828
│ │ │ │ └── 320be551-5d29-4ad9-9b4a-77d1851f6a89.png
│ │ ├── shaders
│ │ │ └── sh_passthrough
│ │ │ │ ├── sh_passthrough.yy
│ │ │ │ ├── sh_passthrough.fsh
│ │ │ │ └── sh_passthrough.vsh
│ │ ├── options
│ │ │ ├── main
│ │ │ │ ├── newconfig
│ │ │ │ │ └── options_main.newconfig.yy
│ │ │ │ └── inherited
│ │ │ │ │ └── options_main.inherited.yy
│ │ │ ├── linux
│ │ │ │ └── options_linux.yy
│ │ │ ├── mac
│ │ │ │ └── options_mac.yy
│ │ │ ├── tvos
│ │ │ │ └── options_tvos.yy
│ │ │ └── html5
│ │ │ │ └── options_html5.yy
│ │ ├── views
│ │ │ ├── 98a7ede6-69c9-45f5-91ac-ccdd8db943eb.yy
│ │ │ ├── dc2198bd-3230-42f1-ae22-4df860543f85.yy
│ │ │ ├── 75e726a7-cf89-40a6-bfa5-64f058241ec7.yy
│ │ │ ├── 119cbe88-3522-4eb0-9a65-67592f368412.yy
│ │ │ ├── e021792b-59ca-418e-a054-232fc8f68838.yy
│ │ │ ├── 982c8bc9-bdab-4c71-b840-f77890b3ae9d.yy
│ │ │ ├── 9d00475e-9e02-4d87-af66-74b7237b5d1e.yy
│ │ │ ├── 2c6daa16-0197-401d-bb95-207f2b2990e3.yy
│ │ │ ├── 5214ea11-2cc7-4e91-acd4-136b41310eef.yy
│ │ │ ├── dd6a3339-5c46-41af-9c68-0eae5b436837.yy
│ │ │ ├── f4ec481c-9aee-4d6b-92eb-bf29130bac47.yy
│ │ │ ├── 6738071c-ba15-4757-9551-d747dd8a3597.yy
│ │ │ ├── c1ba437e-11e9-4da7-928b-a432fa73885c.yy
│ │ │ ├── c3314a25-3fa0-4251-bd84-390475eb2c27.yy
│ │ │ ├── dcb3b9aa-efa0-4fc9-b29c-cd1a5e1d39ea.yy
│ │ │ ├── 98d50ca0-61c1-4538-9b7c-2a7c2ba66602.yy
│ │ │ ├── b3b45f12-a0aa-47c3-8eaa-8396e6a8967d.yy
│ │ │ ├── b1ae34bc-a358-4ef9-af35-978fa1a8c21f.yy
│ │ │ ├── 7e49f719-39c6-4bc4-8675-9db2de6fbca2.yy
│ │ │ ├── 58d409a0-91fb-4c73-a851-274797e5000c.yy
│ │ │ ├── 1980e77a-3df2-4b78-acdb-55b36295e218.yy
│ │ │ ├── d23e5b4f-56e2-4fae-b64d-b60abeb2675b.yy
│ │ │ ├── 0bb36c74-dc11-4a76-8ff5-0d89046b21bf.yy
│ │ │ ├── ab958c18-ec8c-4be4-9684-62713fbc0cae.yy
│ │ │ ├── 2ed040a7-59f4-4c9c-ad9b-001f105af88a.yy
│ │ │ └── e8f3e171-c9ef-4af7-9f68-151e2f5ba191.yy
│ │ ├── catalyst.json
│ │ └── datafiles_yy
│ │ │ └── text_document.txt.yy
│ ├── SimpleProject
│ │ ├── objects
│ │ │ └── obj_simple_test
│ │ │ │ ├── Step_0.gml
│ │ │ │ └── obj_simple_test.yy
│ │ ├── scripts
│ │ │ └── scr_simple_test
│ │ │ │ ├── scr_simple_test.gml
│ │ │ │ └── scr_simple_test.yy
│ │ ├── sprites
│ │ │ ├── spr_simple_dots
│ │ │ │ ├── 5400d35f-d01c-4b4f-90ee-8295547fc872.png
│ │ │ │ └── layers
│ │ │ │ │ └── 5400d35f-d01c-4b4f-90ee-8295547fc872
│ │ │ │ │ └── 0fa6dbb1-f565-4b84-a839-8ad094426a4d.png
│ │ │ └── spr_inside_folder_dots
│ │ │ │ ├── c9613987-4ffa-4cfd-ae00-3fa6edb7e0f0.png
│ │ │ │ └── layers
│ │ │ │ └── c9613987-4ffa-4cfd-ae00-3fa6edb7e0f0
│ │ │ │ └── 5211538f-d4c6-4514-8cdd-f4f3c6026a96.png
│ │ ├── catalyst.json
│ │ ├── options
│ │ │ ├── main
│ │ │ │ └── inherited
│ │ │ │ │ └── options_main.inherited.yy
│ │ │ ├── linux
│ │ │ │ └── options_linux.yy
│ │ │ ├── mac
│ │ │ │ └── options_mac.yy
│ │ │ ├── html5
│ │ │ │ └── options_html5.yy
│ │ │ └── tvos
│ │ │ │ └── options_tvos.yy
│ │ └── views
│ │ │ ├── 3313e2df-ca01-46f9-8cfd-517e06112e8d.yy
│ │ │ ├── 6ecd5bab-50f7-48d5-b91b-da519300c634.yy
│ │ │ ├── 93af89d6-828e-47c2-a1ba-45c67bebab37.yy
│ │ │ ├── fd89cb67-7627-4450-bde9-03b21b1c940b.yy
│ │ │ ├── 2fc98116-4e16-4014-98ba-0dc73dee61d5.yy
│ │ │ ├── 7b7762a9-7c75-40a6-b161-1e203e869b69.yy
│ │ │ ├── c31d0bbe-7836-49df-a8ce-a16ceff33973.yy
│ │ │ ├── 35f4465f-a185-4d7b-85dd-6f265c4b4751.yy
│ │ │ ├── 8374236d-0ffc-44ad-938f-0647ad835ca5.yy
│ │ │ ├── ee0fd327-783c-4b64-aa2c-f01fe661b5a1.yy
│ │ │ ├── f5811685-7896-4f7a-b24a-9cd14b421568.yy
│ │ │ ├── ab73e87c-6346-426e-84c9-79ae8db8af38.yy
│ │ │ ├── 08d87e74-32e9-44ea-87e8-36f76d214eed.yy
│ │ │ ├── 60857659-fb3d-4020-9265-c5cf5d7cb5f2.yy
│ │ │ ├── a0578d58-5e16-480e-9122-0b63cfd2eb41.yy
│ │ │ ├── 155ae852-d984-4d5e-b8de-ec6bcd1e8a87.yy
│ │ │ └── 94893bb6-4984-483b-9d8d-5a21df1483e3.yy
│ └── OtherProject
│ │ ├── sprites
│ │ └── spr_other_squares
│ │ │ ├── ba4199d9-cef2-4b68-baab-cae33026ff02.png
│ │ │ └── layers
│ │ │ └── ba4199d9-cef2-4b68-baab-cae33026ff02
│ │ │ └── 328a249e-f08b-46de-bb7d-20798c15d31d.png
│ │ ├── catalyst.json
│ │ ├── options
│ │ ├── main
│ │ │ └── inherited
│ │ │ │ └── options_main.inherited.yy
│ │ ├── linux
│ │ │ └── options_linux.yy
│ │ ├── mac
│ │ │ └── options_mac.yy
│ │ ├── html5
│ │ │ └── options_html5.yy
│ │ └── tvos
│ │ │ └── options_tvos.yy
│ │ └── views
│ │ ├── 3313e2df-ca01-46f9-8cfd-517e06112e8d.yy
│ │ ├── 6ecd5bab-50f7-48d5-b91b-da519300c634.yy
│ │ ├── 93af89d6-828e-47c2-a1ba-45c67bebab37.yy
│ │ ├── fd89cb67-7627-4450-bde9-03b21b1c940b.yy
│ │ ├── 08d87e74-32e9-44ea-87e8-36f76d214eed.yy
│ │ ├── 2fc98116-4e16-4014-98ba-0dc73dee61d5.yy
│ │ ├── 60857659-fb3d-4020-9265-c5cf5d7cb5f2.yy
│ │ ├── 7b7762a9-7c75-40a6-b161-1e203e869b69.yy
│ │ ├── c31d0bbe-7836-49df-a8ce-a16ceff33973.yy
│ │ ├── 35f4465f-a185-4d7b-85dd-6f265c4b4751.yy
│ │ ├── 8374236d-0ffc-44ad-938f-0647ad835ca5.yy
│ │ ├── ee0fd327-783c-4b64-aa2c-f01fe661b5a1.yy
│ │ ├── f5811685-7896-4f7a-b24a-9cd14b421568.yy
│ │ ├── a0578d58-5e16-480e-9122-0b63cfd2eb41.yy
│ │ ├── 155ae852-d984-4d5e-b8de-ec6bcd1e8a87.yy
│ │ └── 94893bb6-4984-483b-9d8d-5a21df1483e3.yy
├── sandbox
│ └── .gitignore
├── mocks
│ ├── projects
│ │ ├── 21_UninstalledNewFiles
│ │ │ ├── scripts
│ │ │ │ ├── newScript
│ │ │ │ │ ├── newScript.gml
│ │ │ │ │ └── newScript.yy
│ │ │ │ ├── test_suite_init
│ │ │ │ │ ├── test_suite_init.gml
│ │ │ │ │ └── test_suite_init.yy
│ │ │ │ ├── bit_from_byte
│ │ │ │ │ ├── bit_from_byte.gml
│ │ │ │ │ └── bit_from_byte.yy
│ │ │ │ ├── pulse
│ │ │ │ │ ├── pulse.gml
│ │ │ │ │ └── pulse.yy
│ │ │ │ ├── dectohex
│ │ │ │ │ ├── dectohex.yy
│ │ │ │ │ └── dectohex.gml
│ │ │ │ ├── hextodec
│ │ │ │ │ ├── hextodec.yy
│ │ │ │ │ └── hextodec.gml
│ │ │ │ ├── debug_log
│ │ │ │ │ ├── debug_log.yy
│ │ │ │ │ └── debug_log.gml
│ │ │ │ ├── color_lerp
│ │ │ │ │ ├── color_lerp.yy
│ │ │ │ │ └── color_lerp.gml
│ │ │ │ ├── round_whole
│ │ │ │ │ ├── round_whole.yy
│ │ │ │ │ └── round_whole.gml
│ │ │ │ ├── string_mask
│ │ │ │ │ ├── string_mask.yy
│ │ │ │ │ └── string_mask.gml
│ │ │ │ ├── string_trim
│ │ │ │ │ ├── string_trim.yy
│ │ │ │ │ └── string_trim.gml
│ │ │ │ ├── url_decode
│ │ │ │ │ ├── url_decode.yy
│ │ │ │ │ └── url_decode.gml
│ │ │ │ ├── url_encode
│ │ │ │ │ ├── url_encode.yy
│ │ │ │ │ └── url_encode.gml
│ │ │ │ ├── array_implode
│ │ │ │ │ ├── array_implode.yy
│ │ │ │ │ └── array_implode.gml
│ │ │ │ ├── string_append
│ │ │ │ │ ├── string_append.yy
│ │ │ │ │ └── string_append.gml
│ │ │ │ ├── string_explode
│ │ │ │ │ ├── string_explode.yy
│ │ │ │ │ └── string_explode.gml
│ │ │ │ ├── string_prepend
│ │ │ │ │ ├── string_prepend.yy
│ │ │ │ │ └── string_prepend.gml
│ │ │ │ ├── string_reverse
│ │ │ │ │ ├── string_reverse.yy
│ │ │ │ │ └── string_reverse.gml
│ │ │ │ ├── test_suite_end
│ │ │ │ │ ├── test_suite_end.yy
│ │ │ │ │ └── test_suite_end.gml
│ │ │ │ ├── string_ends_with
│ │ │ │ │ ├── string_ends_with.yy
│ │ │ │ │ └── string_ends_with.gml
│ │ │ │ ├── test_assert_same
│ │ │ │ │ ├── test_assert_same.yy
│ │ │ │ │ └── test_assert_same.gml
│ │ │ │ ├── netevent_to_string
│ │ │ │ │ ├── netevent_to_string.yy
│ │ │ │ │ └── netevent_to_string.gml
│ │ │ │ ├── string_starts_with
│ │ │ │ │ ├── string_starts_with.yy
│ │ │ │ │ └── string_starts_with.gml
│ │ │ │ ├── get_nearest_instances
│ │ │ │ │ └── get_nearest_instances.yy
│ │ │ │ ├── get_furthest_instances
│ │ │ │ │ └── get_furthest_instances.yy
│ │ │ │ └── extract_header_from_string
│ │ │ │ │ ├── extract_header_from_string.yy
│ │ │ │ │ └── extract_header_from_string.gml
│ │ │ ├── objects
│ │ │ │ ├── ExtendedFunctions_obj_near_instance
│ │ │ │ │ ├── Draw_0.gml
│ │ │ │ │ └── ExtendedFunctions_obj_near_instance.yy
│ │ │ │ ├── ExtendedFunctions_obj_test_near_instances
│ │ │ │ │ ├── Create_0.gml
│ │ │ │ │ ├── Draw_0.gml
│ │ │ │ │ └── ExtendedFunctions_obj_test_near_instances.yy
│ │ │ │ ├── obj_test
│ │ │ │ │ └── obj_test.yy
│ │ │ │ └── ExtendedFunctions_obj_test
│ │ │ │ │ └── ExtendedFunctions_obj_test.yy
│ │ │ ├── sprites
│ │ │ │ └── newSprite
│ │ │ │ │ ├── e131be19-5848-45f2-b020-57f4410cf2a5.png
│ │ │ │ │ └── layers
│ │ │ │ │ └── e131be19-5848-45f2-b020-57f4410cf2a5
│ │ │ │ │ └── 1fb31644-396c-40ab-95b2-00d06ba69873.png
│ │ │ ├── catalyst.json
│ │ │ ├── views
│ │ │ │ ├── 026561d7-8e33-44e9-893c-9590e5254bfc.yy
│ │ │ │ ├── 8c78d3d6-d356-45e9-b6a4-59c2dc18999e.yy
│ │ │ │ ├── 8f4db28c-0f1f-49ba-ae88-4cb90aede7f4.yy
│ │ │ │ ├── 2f9b3f7b-9b45-4290-b15f-f0dc4d5ac60d.yy
│ │ │ │ ├── 33af6a91-194b-45c3-9783-97215e43a166.yy
│ │ │ │ ├── c068ca74-7c47-456c-b103-02f4c25ddb83.yy
│ │ │ │ ├── 479594f0-6da0-46fc-b0a0-97616daa4418.yy
│ │ │ │ ├── df4293b2-a9c5-4173-8aa5-42d84930d8f5.yy
│ │ │ │ ├── efeeaba1-bf8b-4494-9b6f-c02af20fa2ed.yy
│ │ │ │ ├── 07a5c14a-1669-529d-15f9-07aca623ae5e.yy
│ │ │ │ ├── 2b926b36-4456-ea86-e7cb-988601cd996e.yy
│ │ │ │ ├── 38c881ae-10eb-4b96-bd4b-b20aa7094996.yy
│ │ │ │ ├── 9e33827b-4dfb-a705-9d51-1b9855b9f63f.yy
│ │ │ │ ├── e82be4ff-fe27-7360-234a-428d1eed32c9.yy
│ │ │ │ ├── f7c27459-f01b-2208-c908-74c52eddfd69.yy
│ │ │ │ ├── 857db639-f610-3c74-fb50-13ef1718f1b8.yy
│ │ │ │ ├── 20d9d509-f96a-8c02-b2bd-0c6bd10380e8.yy
│ │ │ │ ├── 2cc409bc-7fb6-888c-0cbe-970dbac6b6dd.yy
│ │ │ │ ├── be569bd8-e7f1-49c5-9cbf-d6c735c774e2.yy
│ │ │ │ ├── 1ce2ee19-8869-2da7-fa91-c3c0671e3285.yy
│ │ │ │ ├── 20bdde62-c74a-4ed7-aceb-7381cff39e81.yy
│ │ │ │ ├── eee014e8-3a24-3e03-097b-5139840b6272.yy
│ │ │ │ ├── 86336395-3fd9-67e2-0521-61854eb28499.yy
│ │ │ │ ├── c448d3d6-759b-4896-8e64-381f8bf22430.yy
│ │ │ │ ├── 16eb5455-9985-4392-bba7-fada383da40d.yy
│ │ │ │ ├── f3c2bf76-84d6-4fa4-80c4-8c8882dec302.yy
│ │ │ │ ├── 5bf26e5c-6b8d-6f85-6855-ba5a8c7eb901.yy
│ │ │ │ ├── 9b614e31-b06f-e488-824e-5c5b74294740.yy
│ │ │ │ ├── 06592b8c-6360-98c3-7674-38b1132a6d28.yy
│ │ │ │ ├── 99147da0-4268-bf21-da8f-70bc1d7c1795.yy
│ │ │ │ ├── bf289c15-a08c-49cb-a473-506dcff64a02.yy
│ │ │ │ ├── 044962af-a181-1b1c-cbba-bcd8f9e3e061.yy
│ │ │ │ └── 1a99a9b8-fbb2-4a16-9537-a6272875a373.yy
│ │ │ ├── options
│ │ │ │ ├── main
│ │ │ │ │ └── inherited
│ │ │ │ │ │ └── options_main.inherited.yy
│ │ │ │ ├── linux
│ │ │ │ │ └── options_linux.yy
│ │ │ │ ├── mac
│ │ │ │ │ └── options_mac.yy
│ │ │ │ ├── html5
│ │ │ │ │ └── options_html5.yy
│ │ │ │ └── tvos
│ │ │ │ │ └── options_tvos.yy
│ │ │ └── .gitignore
│ │ └── 20_IgnorableFiles
│ │ │ ├── catalyst.json
│ │ │ ├── views
│ │ │ ├── 1661de33-c10c-47d4-8563-e9e6796ab2ae.yy
│ │ │ ├── 4e2e3fde-6384-460f-87b7-66e6e85c8fe4.yy
│ │ │ ├── a4cafe4b-ddd8-4cf9-9b98-49363c222b53.yy
│ │ │ ├── 02c768e4-f6b6-48b4-a2e4-98b847481b97.yy
│ │ │ ├── 0308bfe6-e741-4462-a822-b51973aaf568.yy
│ │ │ ├── 1f697a03-bb14-404b-9364-2aa049382c15.yy
│ │ │ ├── 2eba1da1-802b-4ca3-94a3-9e3e28bddf5c.yy
│ │ │ ├── 407dcbed-d554-40f8-85af-eead7752aeb4.yy
│ │ │ ├── e9b2c9b8-7a80-4238-b305-1b78ce69d927.yy
│ │ │ ├── 878df58d-a95c-4aaa-ae30-69a4cc33ad75.yy
│ │ │ ├── 69c57755-590b-466f-8faa-c1a7012243a4.yy
│ │ │ ├── 80a02540-d0a1-41f2-a644-47cd8c8ee0a5.yy
│ │ │ ├── 454e7cf0-c931-47fe-a2ad-d08fa830bd21.yy
│ │ │ ├── dc0b760b-c9f3-440a-971e-e4c2a683c395.yy
│ │ │ ├── 2a8652aa-30b7-45f6-bda2-82bf8fc8a54d.yy
│ │ │ └── 4f95d0b1-21de-4c79-95e6-c6d42fa11ba2.yy
│ │ │ └── options
│ │ │ ├── main
│ │ │ └── inherited
│ │ │ │ └── options_main.inherited.yy
│ │ │ ├── linux
│ │ │ └── options_linux.yy
│ │ │ ├── mac
│ │ │ └── options_mac.yy
│ │ │ ├── html5
│ │ │ └── options_html5.yy
│ │ │ └── tvos
│ │ │ └── options_tvos.yy
│ └── catalyst
│ │ └── empty.json
└── src
│ ├── Exception
│ └── PackageNotFoundExceptionTest.php
│ ├── Command
│ ├── CommandTestCase.php
│ ├── HelpCommandTest.php
│ └── InitCommandTest.php
│ ├── MockStorageTestCase.php
│ ├── Entity
│ ├── YoYoProjectEntityTest.php
│ └── CatalystEntityTest.php
│ ├── TestHelper.php
│ ├── Model
│ └── UuidTest.php
│ └── Service
│ └── JsonServiceTest.php
├── files
├── icon.ico
├── icon.png
├── installer.bmp
├── installer.png
├── repository-open-graph-template.png
└── php.ini
├── src
├── Model
│ ├── YoYo
│ │ └── Resource
│ │ │ └── GM
│ │ │ ├── GMFont.php
│ │ │ ├── GMPath.php
│ │ │ ├── GMNotes.php
│ │ │ ├── GMObject.php
│ │ │ ├── GMRoom.php
│ │ │ ├── GMScript.php
│ │ │ ├── GMShader.php
│ │ │ ├── GMSound.php
│ │ │ ├── GMSprite.php
│ │ │ ├── GMExtension.php
│ │ │ ├── GMTileSet.php
│ │ │ ├── GMTimeline.php
│ │ │ ├── GMIncludedFile.php
│ │ │ ├── Options
│ │ │ ├── GMIosOptions.php
│ │ │ ├── GMMacOptions.php
│ │ │ ├── GMHtml5Options.php
│ │ │ ├── GMLinuxOptions.php
│ │ │ ├── GMTVOSOptions.php
│ │ │ ├── GMAndroidOptions.php
│ │ │ ├── GMWindowsOptions.php
│ │ │ ├── GMAmazonFireOptions.php
│ │ │ └── GMMainOptions.php
│ │ │ └── GMFolder.php
│ └── Uuid.php
├── Exception
│ ├── MalformedJsonException.php
│ ├── FileNotFoundException.php
│ ├── PackageNotSatisfiableException.php
│ ├── MalformedProjectFileException.php
│ ├── UnresolveableDependenciesException.php
│ └── PackageNotFoundException.php
├── Interfaces
│ └── SaveableEntityInterface.php
├── Command
│ ├── HelpCommand.php
│ ├── ClearCacheCommand.php
│ ├── CleanCommand.php
│ └── ResourcesCommand.php
├── DependencyInjection
│ └── CompilerPass
│ │ └── CollectCommandsToApplicationCompilerPass.php
├── Service
│ └── CatalystService.php
└── Kernel.php
├── bin
├── catalyst.cmd
└── catalyst_help.cmd
├── config
├── services.yml
└── services.php
├── .gitignore
├── .travis.yml
├── index.php
├── bumpversion.sh
├── phpunit.xml
├── LICENSE
└── composer.json
/tests/data/text_document.txt:
--------------------------------------------------------------------------------
1 | Included text file.
--------------------------------------------------------------------------------
/tests/projects/GMLProject/objects/obj_child/Step_0.gml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/tests/projects/GMLProject/objects/obj_child_child/Step_0.gml:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/tests/projects/GMLProject/objects/test_object1/Step_0.gml:
--------------------------------------------------------------------------------
1 | // Okay
--------------------------------------------------------------------------------
/tests/projects/GMLProject/datafiles/text_document.txt:
--------------------------------------------------------------------------------
1 | Included text file.
--------------------------------------------------------------------------------
/tests/projects/GMLProject/notes/note_inside_group.txt:
--------------------------------------------------------------------------------
1 | This note is inside the group.
--------------------------------------------------------------------------------
/tests/projects/GMLProject/objects/obj_parent/Create_0.gml:
--------------------------------------------------------------------------------
1 | myvalue = "Parent object";
--------------------------------------------------------------------------------
/tests/projects/SimpleProject/objects/obj_simple_test/Step_0.gml:
--------------------------------------------------------------------------------
1 | scr_simple_test();
--------------------------------------------------------------------------------
/files/icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GameMakerHub/Catalyst/HEAD/files/icon.ico
--------------------------------------------------------------------------------
/files/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GameMakerHub/Catalyst/HEAD/files/icon.png
--------------------------------------------------------------------------------
/tests/data/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GameMakerHub/Catalyst/HEAD/tests/data/1.png
--------------------------------------------------------------------------------
/tests/data/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GameMakerHub/Catalyst/HEAD/tests/data/2.png
--------------------------------------------------------------------------------
/tests/data/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GameMakerHub/Catalyst/HEAD/tests/data/3.png
--------------------------------------------------------------------------------
/tests/projects/GMLProject/notes/note_not_in_group.txt:
--------------------------------------------------------------------------------
1 | Some text for the note NOT in the group
--------------------------------------------------------------------------------
/files/installer.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GameMakerHub/Catalyst/HEAD/files/installer.bmp
--------------------------------------------------------------------------------
/files/installer.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GameMakerHub/Catalyst/HEAD/files/installer.png
--------------------------------------------------------------------------------
/tests/projects/GMLProject/timelines/tl_one/moment_0.gml:
--------------------------------------------------------------------------------
1 | show_debug_message("Timeline moment 0");
--------------------------------------------------------------------------------
/tests/projects/GMLProject/timelines/tl_one/moment_30.gml:
--------------------------------------------------------------------------------
1 | show_debug_message("Timeline moment 30");
--------------------------------------------------------------------------------
/tests/sandbox/.gitignore:
--------------------------------------------------------------------------------
1 | # This folder is to mess around in and test the software
2 | *
3 | !.gitignore
--------------------------------------------------------------------------------
/tests/data/explosion.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GameMakerHub/Catalyst/HEAD/tests/data/explosion.wav
--------------------------------------------------------------------------------
/tests/mocks/projects/21_UninstalledNewFiles/scripts/newScript/newScript.gml:
--------------------------------------------------------------------------------
1 | show_debug_message(argument0);
--------------------------------------------------------------------------------
/tests/projects/GMLProject/objects/obj_child/Create_0.gml:
--------------------------------------------------------------------------------
1 | event_inherited();
2 | myvalue = "Child object";
--------------------------------------------------------------------------------
/tests/projects/GMLProject/objects/obj_child_child/Create_0.gml:
--------------------------------------------------------------------------------
1 | event_inherited();
2 | myvalue = "Child object of child";
--------------------------------------------------------------------------------
/tests/projects/GMLProject/run.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | git clean -f; git checkout -- .; ../../../index.php install --verbose
3 |
--------------------------------------------------------------------------------
/tests/projects/SimpleProject/scripts/scr_simple_test/scr_simple_test.gml:
--------------------------------------------------------------------------------
1 | show_message("Message from a simple test project");
--------------------------------------------------------------------------------
/src/Model/YoYo/Resource/GM/GMFont.php:
--------------------------------------------------------------------------------
1 | > argument1;
--------------------------------------------------------------------------------
/tests/projects/GMLProject/fonts/fnt_arial_8/fnt_arial_8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GameMakerHub/Catalyst/HEAD/tests/projects/GMLProject/fonts/fnt_arial_8/fnt_arial_8.png
--------------------------------------------------------------------------------
/tests/projects/GMLProject/sounds/snd_explosion/snd_explosion:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GameMakerHub/Catalyst/HEAD/tests/projects/GMLProject/sounds/snd_explosion/snd_explosion
--------------------------------------------------------------------------------
/src/Exception/PackageNotSatisfiableException.php:
--------------------------------------------------------------------------------
1 | =1.2"
9 | }
10 | }
--------------------------------------------------------------------------------
/tests/projects/SimpleProject/sprites/spr_inside_folder_dots/layers/c9613987-4ffa-4cfd-ae00-3fa6edb7e0f0/5211538f-d4c6-4514-8cdd-f4f3c6026a96.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GameMakerHub/Catalyst/HEAD/tests/projects/SimpleProject/sprites/spr_inside_folder_dots/layers/c9613987-4ffa-4cfd-ae00-3fa6edb7e0f0/5211538f-d4c6-4514-8cdd-f4f3c6026a96.png
--------------------------------------------------------------------------------
/tests/mocks/projects/20_IgnorableFiles/catalyst.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "gmh/test",
3 | "description": "",
4 | "license": "BSD-4-Clause",
5 | "homepage": "",
6 | "yyp": "20_IgnorableFiles.yyp",
7 | "repositories": {
8 | "../../../projects": "directory"
9 | },
10 | "require": {
11 | "dukesoft/gml-project": "*"
12 | }
13 | }
--------------------------------------------------------------------------------
/tests/mocks/projects/21_UninstalledNewFiles/sprites/newSprite/layers/e131be19-5848-45f2-b020-57f4410cf2a5/1fb31644-396c-40ab-95b2-00d06ba69873.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/GameMakerHub/Catalyst/HEAD/tests/mocks/projects/21_UninstalledNewFiles/sprites/newSprite/layers/e131be19-5848-45f2-b020-57f4410cf2a5/1fb31644-396c-40ab-95b2-00d06ba69873.png
--------------------------------------------------------------------------------
/tests/mocks/projects/21_UninstalledNewFiles/objects/ExtendedFunctions_obj_test_near_instances/Create_0.gml:
--------------------------------------------------------------------------------
1 | instnumber = get_integer("How many instances?", 30);
2 | nearnum = get_integer("How many to fetch near?", 8);
3 | repeat (instnumber) {
4 | instance_create_depth(random(room_width), random(room_height), 0, ExtendedFunctions_obj_near_instance);
5 | }
6 |
7 |
--------------------------------------------------------------------------------
/tests/mocks/projects/21_UninstalledNewFiles/scripts/test_suite_end/test_suite_end.gml:
--------------------------------------------------------------------------------
1 | if (global.testnumber == global.testssucceeded) {
2 | show_message(string(global.testssucceeded) + "/" + string(global.testnumber) + " tests OK!");
3 | } else {
4 | show_message(string(global.testssucceeded) + "/" + string(global.testnumber) + " tests OK! (FAILED TESTS)");
5 | }
--------------------------------------------------------------------------------
/tests/mocks/projects/21_UninstalledNewFiles/scripts/round_whole/round_whole.gml:
--------------------------------------------------------------------------------
1 | /// @description round_whole(number, round);
2 | /// @function round_whole
3 | /// @param number
4 | /// @param round
5 | /**
6 | * Round number on big numbers
7 | * ex: round_whole(1234, 10) = 1230
8 | * @return int
9 | */
10 | return round(round((argument0/argument1))*argument1);
--------------------------------------------------------------------------------
/src/Exception/PackageNotFoundException.php:
--------------------------------------------------------------------------------
1 | assertSame($exception->getMessage(), 'package/name with version 1.0.0 was not found');
13 | }
14 | }
--------------------------------------------------------------------------------
/tests/mocks/projects/20_IgnorableFiles/options/main/inherited/options_main.inherited.yy:
--------------------------------------------------------------------------------
1 | 1.0.0←ed6a955d-5826-4f98-a450-10b414266c27←ed6a955d-5826-4f98-a450-10b414266c27|{
2 | "option_window_colour": {
3 | "Value": 4278190080
4 | },
5 | "option_gameguid": "619e81d8-6f02-4fbb-9c2b-61a322e78440",
6 | "option_game_speed": 60
7 | }←1225f6b0-ac20-43bd-a82e-be73fa0b6f4f|{
8 | "targets": 461609314234257646
9 | }←7b2c4976-1e09-44e5-8256-c527145e03bb|{
10 | "targets": 461609314234257646
11 | }
--------------------------------------------------------------------------------
/tests/mocks/projects/21_UninstalledNewFiles/scripts/string_trim/string_trim.gml:
--------------------------------------------------------------------------------
1 | ///@param string
2 | ///@desc trim a string (" trim . . spaces " -> "trim . . spaces")
3 | var str = argument0;
4 | var strlen = string_length(str);
5 | while (strlen > 0 && string_char_at(str, 0) == " ") {
6 | str = string_copy(str, 2, strlen-1);
7 | strlen -= 1;
8 | }
9 |
10 | while (strlen > 0 && string_char_at(str, strlen) == " ") {
11 | str = string_copy(str, 0, strlen-1);
12 | strlen -= 1;
13 | }
14 |
15 | return str;
--------------------------------------------------------------------------------
/tests/projects/GMLProject/views/b1ae34bc-a358-4ef9-af35-978fa1a8c21f.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "b1ae34bc-a358-4ef9-af35-978fa1a8c21f",
3 | "modelName": "GMFolder",
4 | "mvc": "1.1",
5 | "name": "b1ae34bc-a358-4ef9-af35-978fa1a8c21f",
6 | "children": [
7 | "fcb42a9e-cf5c-478f-aa06-8bcbe9e92af2",
8 | "982c8bc9-bdab-4c71-b840-f77890b3ae9d"
9 | ],
10 | "filterType": "GMObject",
11 | "folderName": "children",
12 | "isDefaultView": false,
13 | "localisedFolderName": ""
14 | }
--------------------------------------------------------------------------------
/tests/mocks/projects/21_UninstalledNewFiles/options/main/inherited/options_main.inherited.yy:
--------------------------------------------------------------------------------
1 | 1.0.0←ed6a955d-5826-4f98-a450-10b414266c27←ed6a955d-5826-4f98-a450-10b414266c27|{
2 | "option_window_colour": {
3 | "Value": 4278190080
4 | },
5 | "option_gameguid": "acde4a44-790d-4482-94c6-3bb3a0c40473",
6 | "option_game_speed": 60
7 | }←1225f6b0-ac20-43bd-a82e-be73fa0b6f4f|{
8 | "targets": 461609314234257646
9 | }←7b2c4976-1e09-44e5-8256-c527145e03bb|{
10 | "targets": 461609314234257646
11 | }
--------------------------------------------------------------------------------
/tests/projects/GMLProject/views/7e49f719-39c6-4bc4-8675-9db2de6fbca2.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "7e49f719-39c6-4bc4-8675-9db2de6fbca2",
3 | "modelName": "GMFolder",
4 | "mvc": "1.1",
5 | "name": "7e49f719-39c6-4bc4-8675-9db2de6fbca2",
6 | "children": [
7 | "bc0f367b-e859-4b79-a39d-481caf1878b8",
8 | "a990669d-efdf-44de-b0ef-ad4d2fc92724"
9 | ],
10 | "filterType": "GMScript",
11 | "folderName": "group_notgone_test2",
12 | "isDefaultView": false,
13 | "localisedFolderName": ""
14 | }
--------------------------------------------------------------------------------
/tests/projects/GMLProject/views/58d409a0-91fb-4c73-a851-274797e5000c.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "58d409a0-91fb-4c73-a851-274797e5000c",
3 | "modelName": "GMFolder",
4 | "mvc": "1.1",
5 | "name": "58d409a0-91fb-4c73-a851-274797e5000c",
6 | "children": [
7 | "e021792b-59ca-418e-a054-232fc8f68838",
8 | "ffc9fb66-f6b4-45ec-b163-aeed4b967285"
9 | ],
10 | "filterType": "GMNotes",
11 | "folderName": "notes",
12 | "isDefaultView": false,
13 | "localisedFolderName": "ResourceTree_Notes"
14 | }
--------------------------------------------------------------------------------
/tests/mocks/projects/21_UninstalledNewFiles/scripts/hextodec/hextodec.gml:
--------------------------------------------------------------------------------
1 | /// @description hextodec(string);
2 | /// @function hextodec
3 | /// @param string
4 | /**
5 | * Convert hexadecimal string to decimal number
6 | * @param string argument0 The string to convert
7 | * @return integer
8 | */
9 | var d,r,l;
10 | r=0;
11 | d=string_upper(argument0);
12 | l=string_length(d);
13 | if(l>6) return -1;
14 | for (i=l;i>0;i-=1) {
15 | r+=(string_pos(string_char_at(d,i),"0123456789ABCDEF")-1) * power(16,l-i);
16 | }
17 | return r;
--------------------------------------------------------------------------------
/tests/projects/GMLProject/views/1980e77a-3df2-4b78-acdb-55b36295e218.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "1980e77a-3df2-4b78-acdb-55b36295e218",
3 | "modelName": "GMFolder",
4 | "mvc": "1.1",
5 | "name": "1980e77a-3df2-4b78-acdb-55b36295e218",
6 | "children": [
7 | "60dd397d-bc63-4ce0-90e9-c1c8ab08e8b7",
8 | "6778d752-1985-4c5b-9810-c7d2b486051c"
9 | ],
10 | "filterType": "GMSprite",
11 | "folderName": "sprites",
12 | "isDefaultView": false,
13 | "localisedFolderName": "ResourceTree_Sprites"
14 | }
--------------------------------------------------------------------------------
/tests/mocks/projects/21_UninstalledNewFiles/views/1ce2ee19-8869-2da7-fa91-c3c0671e3285.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "1ce2ee19-8869-2da7-fa91-c3c0671e3285",
3 | "modelName": "GMFolder",
4 | "mvc": "1.1",
5 | "name": "1ce2ee19-8869-2da7-fa91-c3c0671e3285",
6 | "children": [
7 | "04d5a8b0-ce83-4872-be7e-cb84abf8ac29",
8 | "b3448ea4-5fdb-4287-9d53-6ba4568c2dd3"
9 | ],
10 | "filterType": "Room",
11 | "folderName": "extended-functions",
12 | "isDefaultView": false,
13 | "localisedFolderName": ""
14 | }
--------------------------------------------------------------------------------
/tests/mocks/projects/21_UninstalledNewFiles/views/20bdde62-c74a-4ed7-aceb-7381cff39e81.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "20bdde62-c74a-4ed7-aceb-7381cff39e81",
3 | "modelName": "GMFolder",
4 | "mvc": "1.1",
5 | "name": "20bdde62-c74a-4ed7-aceb-7381cff39e81",
6 | "children": [
7 | "15b91ad5-7025-42f5-b277-ba17c26613be",
8 | "9c623872-826d-4ed7-b721-c1484e147a32"
9 | ],
10 | "filterType": "Script",
11 | "folderName": "find_instances",
12 | "isDefaultView": false,
13 | "localisedFolderName": ""
14 | }
--------------------------------------------------------------------------------
/tests/mocks/projects/21_UninstalledNewFiles/views/eee014e8-3a24-3e03-097b-5139840b6272.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "eee014e8-3a24-3e03-097b-5139840b6272",
3 | "modelName": "GMFolder",
4 | "mvc": "1.1",
5 | "name": "eee014e8-3a24-3e03-097b-5139840b6272",
6 | "children": [
7 | "0a9e51a6-1e72-464d-a390-e5159c883ce1",
8 | "525deb0d-8ac5-4355-81f7-a6be738454e9"
9 | ],
10 | "filterType": "Script",
11 | "folderName": "dechexfunctions",
12 | "isDefaultView": false,
13 | "localisedFolderName": ""
14 | }
--------------------------------------------------------------------------------
/tests/projects/GMLProject/catalyst.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "dukesoft/gml-project",
3 | "description": "A testing project with some contents",
4 | "license": "MIT",
5 | "homepage": "http://www.dukesoft.nl",
6 | "yyp": "GMLProject.yyp",
7 | "repositories": {
8 | "../projects": "directory"
9 | },
10 | "ignore": {
11 | "spr_to_ignore": "resource",
12 | "group_to_ignore": "group",
13 | "test_*": "all",
14 | "*_test2": "resource",
15 | "*_test3": "group"
16 | }
17 | }
--------------------------------------------------------------------------------
/tests/projects/SimpleProject/views/a0578d58-5e16-480e-9122-0b63cfd2eb41.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "a0578d58-5e16-480e-9122-0b63cfd2eb41",
3 | "modelName": "GMFolder",
4 | "mvc": "1.1",
5 | "name": "a0578d58-5e16-480e-9122-0b63cfd2eb41",
6 | "children": [
7 | "2c06e728-9bcc-48ab-bbe4-82c08afddf60",
8 | "ab73e87c-6346-426e-84c9-79ae8db8af38"
9 | ],
10 | "filterType": "GMSprite",
11 | "folderName": "sprites",
12 | "isDefaultView": false,
13 | "localisedFolderName": "ResourceTree_Sprites"
14 | }
--------------------------------------------------------------------------------
/tests/mocks/projects/21_UninstalledNewFiles/views/86336395-3fd9-67e2-0521-61854eb28499.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "86336395-3fd9-67e2-0521-61854eb28499",
3 | "modelName": "GMFolder",
4 | "mvc": "1.1",
5 | "name": "86336395-3fd9-67e2-0521-61854eb28499",
6 | "children": [
7 | "c9b6b1ee-01e8-4dbe-b5e6-d8341b5cba87",
8 | "7c058ab3-5489-4814-be08-cbce0ec50f68"
9 | ],
10 | "filterType": "Script",
11 | "folderName": "animations and tweening",
12 | "isDefaultView": false,
13 | "localisedFolderName": ""
14 | }
--------------------------------------------------------------------------------
/tests/mocks/projects/21_UninstalledNewFiles/views/c448d3d6-759b-4896-8e64-381f8bf22430.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "c448d3d6-759b-4896-8e64-381f8bf22430",
3 | "modelName": "GMFolder",
4 | "mvc": "1.1",
5 | "name": "c448d3d6-759b-4896-8e64-381f8bf22430",
6 | "children": [
7 | "c4e53fd2-f1b5-4be5-964f-8f12891409c2",
8 | "9e33827b-4dfb-a705-9d51-1b9855b9f63f"
9 | ],
10 | "filterType": "GMRoom",
11 | "folderName": "rooms",
12 | "isDefaultView": false,
13 | "localisedFolderName": "ResourceTree_Rooms"
14 | }
--------------------------------------------------------------------------------
/tests/mocks/projects/21_UninstalledNewFiles/views/16eb5455-9985-4392-bba7-fada383da40d.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "16eb5455-9985-4392-bba7-fada383da40d",
3 | "modelName": "GMFolder",
4 | "mvc": "1.1",
5 | "name": "16eb5455-9985-4392-bba7-fada383da40d",
6 | "children": [
7 | "07a5c14a-1669-529d-15f9-07aca623ae5e",
8 | "6f831bda-4962-431b-8eb2-c45c8bba950e"
9 | ],
10 | "filterType": "GMObject",
11 | "folderName": "objects",
12 | "isDefaultView": false,
13 | "localisedFolderName": "ResourceTree_Objects"
14 | }
--------------------------------------------------------------------------------
/tests/mocks/projects/21_UninstalledNewFiles/views/f3c2bf76-84d6-4fa4-80c4-8c8882dec302.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "f3c2bf76-84d6-4fa4-80c4-8c8882dec302",
3 | "modelName": "GMFolder",
4 | "mvc": "1.1",
5 | "name": "f3c2bf76-84d6-4fa4-80c4-8c8882dec302",
6 | "children": [
7 | "f7c27459-f01b-2208-c908-74c52eddfd69",
8 | "75b7ff54-9869-4609-b472-4097ae69b2ac"
9 | ],
10 | "filterType": "GMScript",
11 | "folderName": "scripts",
12 | "isDefaultView": false,
13 | "localisedFolderName": "ResourceTree_Scripts"
14 | }
--------------------------------------------------------------------------------
/tests/mocks/projects/21_UninstalledNewFiles/scripts/string_prepend/string_prepend.gml:
--------------------------------------------------------------------------------
1 | /// @description string_prepend(string, prependchar, length); Prepend a string to a set length
2 | /// @function string_prepend
3 | /// @param string
4 | /// @param prependchar
5 | /// @param length
6 | var str = string(argument0);
7 | var prependchar = string(argument1);
8 | if (string_length(str) >= argument2) {
9 | return str;
10 | }
11 | while (string_length(str) < argument2) {
12 | str = prependchar + str;
13 | }
14 | return string_copy(str, 1, argument2);
--------------------------------------------------------------------------------
/tests/mocks/projects/21_UninstalledNewFiles/views/5bf26e5c-6b8d-6f85-6855-ba5a8c7eb901.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "5bf26e5c-6b8d-6f85-6855-ba5a8c7eb901",
3 | "modelName": "GMFolder",
4 | "mvc": "1.1",
5 | "name": "5bf26e5c-6b8d-6f85-6855-ba5a8c7eb901",
6 | "children": [
7 | "bf559592-fd8b-412a-b23f-f5e377954aa7",
8 | "687d82f8-8c08-4a9e-babc-3c3fafd281c3",
9 | "1a96beaf-0abb-41a8-bdd2-719de3fc434c"
10 | ],
11 | "filterType": "Script",
12 | "folderName": "general",
13 | "isDefaultView": false,
14 | "localisedFolderName": ""
15 | }
--------------------------------------------------------------------------------
/tests/projects/GMLProject/views/d23e5b4f-56e2-4fae-b64d-b60abeb2675b.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "d23e5b4f-56e2-4fae-b64d-b60abeb2675b",
3 | "modelName": "GMFolder",
4 | "mvc": "1.1",
5 | "name": "d23e5b4f-56e2-4fae-b64d-b60abeb2675b",
6 | "children": [
7 | "b9f7dc62-7c1b-4e68-b58d-8a2a4470e4be",
8 | "49f54f46-7362-4647-8ca9-9208e0790e00",
9 | "139d8ed0-90dd-4cce-a812-dcc8ae91bdb2"
10 | ],
11 | "filterType": "GMObject",
12 | "folderName": "Group for testing ignoring",
13 | "isDefaultView": false,
14 | "localisedFolderName": ""
15 | }
--------------------------------------------------------------------------------
/tests/mocks/projects/21_UninstalledNewFiles/views/9b614e31-b06f-e488-824e-5c5b74294740.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "9b614e31-b06f-e488-824e-5c5b74294740",
3 | "modelName": "GMFolder",
4 | "mvc": "1.1",
5 | "name": "9b614e31-b06f-e488-824e-5c5b74294740",
6 | "children": [
7 | "6a0bc185-8e95-4d74-afda-1dc1443e7fe6",
8 | "c86e7bc6-ae4a-4b5c-b1fc-464149a0a693",
9 | "2681e4fc-a4c0-4bbc-ba94-525fac34d34c"
10 | ],
11 | "filterType": "Script",
12 | "folderName": "testfunctions",
13 | "isDefaultView": false,
14 | "localisedFolderName": ""
15 | }
--------------------------------------------------------------------------------
/tests/projects/GMLProject/datafiles_yy/text_document.txt.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "8a9c5eec-725f-485c-a371-5e24a2741193",
3 | "modelName": "GMIncludedFile",
4 | "mvc": "1.0",
5 | "name": "text_document.txt",
6 | "CopyToMask": 153685337284018414,
7 | "exists": false,
8 | "exportAction": 0,
9 | "exportDir": "",
10 | "fileName": "text_document.txt",
11 | "filePath": "datafiles",
12 | "freeData": false,
13 | "origName": "",
14 | "overwrite": false,
15 | "removeEnd": false,
16 | "size": 0,
17 | "store": false,
18 | "tags": ""
19 | }
--------------------------------------------------------------------------------
/tests/mocks/projects/21_UninstalledNewFiles/views/06592b8c-6360-98c3-7674-38b1132a6d28.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "06592b8c-6360-98c3-7674-38b1132a6d28",
3 | "modelName": "GMFolder",
4 | "mvc": "1.1",
5 | "name": "06592b8c-6360-98c3-7674-38b1132a6d28",
6 | "children": [
7 | "9f6ee3b0-f949-4238-a860-52e0261760eb",
8 | "68eaaff9-b1cb-4134-bdac-0ace16037b41",
9 | "c8a37efc-8cdc-43ec-b319-ba0ba6bc7584"
10 | ],
11 | "filterType": "Object",
12 | "folderName": "extended-functions",
13 | "isDefaultView": false,
14 | "localisedFolderName": ""
15 | }
--------------------------------------------------------------------------------
/tests/src/Command/CommandTestCase.php:
--------------------------------------------------------------------------------
1 | application = new Application();
15 | }
16 |
17 | protected function initCommand(Command $command)
18 | {
19 | $this->application->add($command);
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/tests/mocks/projects/21_UninstalledNewFiles/scripts/string_append/string_append.gml:
--------------------------------------------------------------------------------
1 | /// @description string_append(string, appendchar, length); Append a string to a set length
2 | /// @function string_append
3 | /// @param string
4 | /// @param appendchar
5 | /// @param length
6 | var str = string(argument0);
7 | var appendchar = string(argument1);
8 | if (string_length(str) >= argument2) {
9 | return str;
10 | }
11 | while (string_length(str) < argument2) {
12 | str = str + appendchar;
13 | }
14 |
15 | var overflow = string_length(str) - argument2;
16 |
17 | return string_copy(str, overflow, argument2);
--------------------------------------------------------------------------------
/index.php:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env php
2 | boot();
9 |
10 | $container = $kernel->getContainer();
11 |
12 | //Override symfony's settings for the help generation...
13 | $_SERVER['PHP_SELF'] = 'catalyst';
14 | $GLOBALS['SYMFONY_KERNEL'] = $kernel;
15 |
16 | /** @var Application $application */
17 | $application = $container->get(Application::class);
18 | $application->setName('GameMakerHub Catalyst');
19 | $application->setVersion('0.2.2-alpha');
20 | $application->run();
--------------------------------------------------------------------------------
/config/services.php:
--------------------------------------------------------------------------------
1 | setAutowired(true)
7 | ->setAutoconfigured(true)
8 | ->setPublic(false);
9 |
10 | $this->registerClasses($definition, 'Catalyst\\', '../src/*');
11 |
12 | $definitionPublic = new Definition();
13 |
14 | $definitionPublic->setAutowired(true)
15 | ->setAutoconfigured(true)
16 | ->setPublic(true);
17 |
18 | /** @var \Symfony\Component\DependencyInjection\ContainerBuilder $container */
19 | $container->getDefinition('Symfony\\Component\\Console\\Application')->setPublic(true);
--------------------------------------------------------------------------------
/src/Model/YoYo/Resource/GM/Options/GMMainOptions.php:
--------------------------------------------------------------------------------
1 | name = '~MAIN OPTIONS FILE~';
12 | $stdClass->is_options_file = true;
13 | return self::createFromObject($_filePath, $stdClass, '');
14 | }
15 | }
--------------------------------------------------------------------------------
/tests/projects/GMLProject/views/0bb36c74-dc11-4a76-8ff5-0d89046b21bf.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "0bb36c74-dc11-4a76-8ff5-0d89046b21bf",
3 | "modelName": "GMFolder",
4 | "mvc": "1.1",
5 | "name": "0bb36c74-dc11-4a76-8ff5-0d89046b21bf",
6 | "children": [
7 | "e3b52a1a-e925-4144-bd8e-191c7c32e021",
8 | "9d00475e-9e02-4d87-af66-74b7237b5d1e",
9 | "292afb30-c1ad-4eae-bcc3-2584d4961c47",
10 | "7e49f719-39c6-4bc4-8675-9db2de6fbca2"
11 | ],
12 | "filterType": "GMScript",
13 | "folderName": "scripts",
14 | "isDefaultView": false,
15 | "localisedFolderName": "ResourceTree_Scripts"
16 | }
--------------------------------------------------------------------------------
/tests/src/MockStorageTestCase.php:
--------------------------------------------------------------------------------
1 | mockStorage = \Mockery::mock(StorageService::class);
15 | StorageService::setInstance($this->mockStorage);
16 | }
17 |
18 | protected function tearDown(): void
19 | {
20 | StorageService::setInstance(null); //Reset!
21 | }
22 | }
--------------------------------------------------------------------------------
/tests/mocks/projects/21_UninstalledNewFiles/scripts/extract_header_from_string/extract_header_from_string.gml:
--------------------------------------------------------------------------------
1 | ///@param string
2 | ///@return array|false
3 | ///@description turns a header like "Host: www.dukesoft.nl" into an array: ["Host", "www.dukesoft.nl"]
4 | var str = argument0;
5 | var cut = string_pos(":", str);
6 | if (cut == 0) {
7 | return false;
8 | }
9 |
10 | //Remove all newlines
11 | str = string_replace_all(str, "\r", "");
12 | str = string_replace_all(str, "\n", "");
13 |
14 | var header = string_trim(string_copy(str, 0, cut-1));
15 | var value = string_trim(string_copy(str, cut+1, string_length(str)-cut));
16 | return [header, value];
--------------------------------------------------------------------------------
/tests/mocks/projects/21_UninstalledNewFiles/objects/ExtendedFunctions_obj_test_near_instances/Draw_0.gml:
--------------------------------------------------------------------------------
1 | x = mouse_x;
2 | y = mouse_y;
3 |
4 | nearest = get_nearest_instances(ExtendedFunctions_obj_near_instance, id, nearnum);
5 |
6 | while (!ds_stack_empty(nearest)) {
7 | inst = ds_stack_pop(nearest);
8 | draw_set_color(c_red);
9 | draw_ellipse(inst.x-8, inst.y-8, inst.x+8, inst.y+8, true);
10 | draw_ellipse(inst.x-10, inst.y-10, inst.x+10, inst.y+10, true);
11 | }
12 |
13 | ds_stack_destroy(nearest);
14 |
15 | draw_set_color(c_black);
16 | draw_text(10,10,string_hash_to_newline("FPS:" + string(fps) + " - REAL: " + string(fps_real)));
17 |
18 |
--------------------------------------------------------------------------------
/bumpversion.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | if [ ! $# -eq 1 ]; then
3 | echo "Error: missing version parameter"
4 | exit 1
5 | else
6 | if [[ $1 =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
7 | echo "Bumping version to $1"
8 | else
9 | echo "$1: Not a valid version number"
10 | exit 1
11 | fi
12 | fi
13 |
14 | sed -i -E -e "s/'[0-9]+\.[0-9]+\.[0-9]+'/'$1'/g" index.php
15 | sed -i -E -e "s/\"[0-9]+\.[0-9]+\.[0-9]\"+/\"$1\"/g" installer.nsi
16 | echo "Now making commit for version bump... Adding everything and tagging! Make sure you're on master branch"
17 | pause
18 | git add .
19 | git commit -m "Bump version to $1"
20 | git tag
21 | git push origin --tags
--------------------------------------------------------------------------------
/tests/src/Entity/YoYoProjectEntityTest.php:
--------------------------------------------------------------------------------
1 | assertEquals(
19 | file_get_contents(__DIR__ . '/../../projects/GMLProject/GMLProject.yyp'),
20 | $subject->getJson()
21 | );
22 | }
23 | }
--------------------------------------------------------------------------------
/tests/mocks/projects/21_UninstalledNewFiles/scripts/url_encode/url_encode.gml:
--------------------------------------------------------------------------------
1 | /// @description url_encode(string);
2 | /// @function url_encode
3 | /// @param string
4 | /**
5 | * Encode a string based on RFC 1738
6 | * @param string argument0 The string to encode
7 | * @return string
8 | */
9 | //@todo - doesn't work over ord(255) (hex FF) characters...
10 | var char, i;
11 | var output = "";
12 | for (i = 1; i <= string_length(argument0); i += 1) {
13 | char = string_char_at(argument0, i);
14 | if (string_pos(char, " {}[]|\\^`\"#%<>;/@$=:?&") > 0 || ord(char) > 126 && ord(char) < 255) {
15 | char = "%" + dectohex(ord(char));
16 | }
17 | output += char;
18 | }
19 | return output;
--------------------------------------------------------------------------------
/tests/mocks/projects/21_UninstalledNewFiles/scripts/string_starts_with/string_starts_with.gml:
--------------------------------------------------------------------------------
1 | /// @description string_starts_with(haystack, needle);
2 | /// @function string_starts_with
3 | /// @param haystack
4 | /// @param needle
5 | /**
6 | * Check if string starts with string
7 | * @param string argument0 haystack
8 | * @param string argument1 needle
9 | * @return boolean
10 | */
11 | var sl0 = string_length(argument0);
12 | var sl1 = string_length(argument1);
13 | if (sl0+sl1 == 0) { return true; }
14 | if (argument0 == argument1) { return true; }
15 | if (sl0 == 0) { return false; }
16 | if (sl1 == 0) { return true; }
17 | if (sl1 > sl0) { return false; }
18 |
19 | return (string_copy(argument0, 1, sl1) == argument1);
--------------------------------------------------------------------------------
/tests/projects/GMLProject/shaders/sh_passthrough/sh_passthrough.vsh:
--------------------------------------------------------------------------------
1 | //
2 | // Simple passthrough vertex shader
3 | //
4 | attribute vec3 in_Position; // (x,y,z)
5 | //attribute vec3 in_Normal; // (x,y,z) unused in this shader.
6 | attribute vec4 in_Colour; // (r,g,b,a)
7 | attribute vec2 in_TextureCoord; // (u,v)
8 |
9 | varying vec2 v_vTexcoord;
10 | varying vec4 v_vColour;
11 |
12 | void main()
13 | {
14 | vec4 object_space_pos = vec4( in_Position.x, in_Position.y, in_Position.z, 1.0);
15 | gl_Position = gm_Matrices[MATRIX_WORLD_VIEW_PROJECTION] * object_space_pos;
16 |
17 | v_vColour = in_Colour;
18 | v_vTexcoord = in_TextureCoord;
19 | }
20 |
--------------------------------------------------------------------------------
/tests/mocks/projects/21_UninstalledNewFiles/scripts/string_ends_with/string_ends_with.gml:
--------------------------------------------------------------------------------
1 | /// @description string_ends_with(haystack, needle);
2 | /// @function string_ends_with
3 | /// @param haystack
4 | /// @param needle
5 | /**
6 | * Check if string ends with string
7 | * @param string argument0 haystack
8 | * @param string argument1 needle
9 | * @return boolean
10 | */
11 | var sl0 = string_length(argument0);
12 | var sl1 = string_length(argument1);
13 |
14 | if (sl0+sl1 == 0) { return true; }
15 | if (argument0 == argument1) { return true; }
16 | if (sl1 == 0) { return true; }
17 | if (sl0 == 0) { return false; }
18 | if (sl1 > sl0) { return false; } //Quite sure.
19 |
20 | return (string_copy(argument0, sl0-sl1+1, sl1) == argument1);
--------------------------------------------------------------------------------
/src/Command/HelpCommand.php:
--------------------------------------------------------------------------------
1 | setHelp(<<<'EOF'
13 | The %command.name% command displays help for a given command:
14 |
15 | %command.full_name% list
16 |
17 | You can also output the help in other formats by using the --format option:
18 |
19 | %command.full_name% --format=xml list
20 |
21 | To display the list of available commands, please use the list command.
22 | EOF
23 | )
24 | ;
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/tests/mocks/projects/21_UninstalledNewFiles/scripts/test_assert_same/test_assert_same.gml:
--------------------------------------------------------------------------------
1 | ///@param expected
2 | ///@param actual
3 | ///@desc Run a unit test (has nothing to do with scripts. Just testing of the scripts).
4 | var expected = argument0;
5 | var given = argument1;
6 | global.testnumber++;
7 |
8 | show_debug_message("Testing #" + string(global.testnumber));
9 |
10 | if (expected == given) {
11 | show_debug_message("OK");
12 | global.testssucceeded++;
13 | return true;
14 | } else {
15 | global.testsuccess = false;
16 | show_debug_message(" FAIL!");
17 | show_debug_message("Expected (+) Given (=)");
18 | show_debug_message("+" + string(expected));
19 | show_debug_message("=" + string(given));
20 | return false;
21 | }
--------------------------------------------------------------------------------
/tests/src/TestHelper.php:
--------------------------------------------------------------------------------
1 | initCommand(new HelpCommand());
13 | }
14 |
15 | public function testExecute()
16 | {
17 | $command = $this->application->find('help');
18 | $commandTester = new CommandTester($command);
19 |
20 | $commandTester->execute([
21 | 'command' => $command->getName()
22 | ]);
23 |
24 | $output = $commandTester->getDisplay();
25 | $this->assertStringContainsString('command displays help for a given command', $output);
26 | $this->assertStringNotContainsString(' php ', $output);
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/tests/src/Entity/CatalystEntityTest.php:
--------------------------------------------------------------------------------
1 | markTestSkipped();
11 | return true;
12 | $subject = TestHelper::getTestCatalystEntity();
13 |
14 | $this->assertSame(realpath('.'), $subject->path());
15 |
16 | $this->assertSame('project/name', $subject->name());
17 | $this->assertSame('A description for the project', $subject->description());
18 | $this->assertSame('MIT', $subject->license());
19 | $this->assertSame('https://github.com/my/repository', $subject->homepage());
20 | $this->assertSame('somefile.yyp', $subject->yyp());
21 |
22 | $this->assertSame([], $subject->require());
23 | $this->assertSame([], $subject->repositories());
24 | }
25 | }
--------------------------------------------------------------------------------
/phpunit.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | tests
15 |
16 |
17 |
18 |
19 |
20 | src
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/tests/mocks/projects/21_UninstalledNewFiles/objects/obj_test/obj_test.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "6f831bda-4962-431b-8eb2-c45c8bba950e",
3 | "modelName": "GMObject",
4 | "mvc": "1.0",
5 | "name": "obj_test",
6 | "eventList": [
7 |
8 | ],
9 | "maskSpriteId": "00000000-0000-0000-0000-000000000000",
10 | "overriddenProperties": null,
11 | "parentObjectId": "00000000-0000-0000-0000-000000000000",
12 | "persistent": false,
13 | "physicsAngularDamping": 0.1,
14 | "physicsDensity": 0.5,
15 | "physicsFriction": 0.2,
16 | "physicsGroup": 0,
17 | "physicsKinematic": false,
18 | "physicsLinearDamping": 0.1,
19 | "physicsObject": false,
20 | "physicsRestitution": 0.1,
21 | "physicsSensor": false,
22 | "physicsShape": 1,
23 | "physicsShapePoints": null,
24 | "physicsStartAwake": true,
25 | "properties": null,
26 | "solid": false,
27 | "spriteId": "027bd1c0-6337-4c31-bd47-ce6ac0c36238",
28 | "visible": true
29 | }
--------------------------------------------------------------------------------
/tests/mocks/projects/21_UninstalledNewFiles/views/044962af-a181-1b1c-cbba-bcd8f9e3e061.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "044962af-a181-1b1c-cbba-bcd8f9e3e061",
3 | "modelName": "GMFolder",
4 | "mvc": "1.1",
5 | "name": "044962af-a181-1b1c-cbba-bcd8f9e3e061",
6 | "children": [
7 | "f83411bf-0399-49ac-b2a2-e5b64094a60e",
8 | "5a91fe81-2c01-47f8-be11-c40932803e69",
9 | "b63484cb-ee59-44ed-b5de-332d5a5b17ea",
10 | "7c5af833-d15c-400f-ac4c-b169f2cd457b",
11 | "43223091-4066-4306-abe3-d34db8360e1c",
12 | "60d4a9eb-5df4-456e-8da4-788b4485eca3",
13 | "6c989c40-3f2d-4053-a43f-7c53c0927e2f",
14 | "0d4b292a-8a22-40f2-8ec8-bb44c8638cb9",
15 | "070a9150-886e-4734-857f-67d1d10c54d9",
16 | "16a094ef-d247-45e6-bfe3-2135c926f6cb",
17 | "3e6d6aa1-48d2-476e-9b40-4d45af977ab4"
18 | ],
19 | "filterType": "Script",
20 | "folderName": "stringfunctions",
21 | "isDefaultView": false,
22 | "localisedFolderName": ""
23 | }
--------------------------------------------------------------------------------
/src/DependencyInjection/CompilerPass/CollectCommandsToApplicationCompilerPass.php:
--------------------------------------------------------------------------------
1 | getDefinition(Application::class);
15 |
16 | foreach ($containerBuilder->getDefinitions() as $name => $definition) {
17 | if (is_a($definition->getClass(), Command::class, true)) {
18 | $applicationDefinition->addMethodCall('add', [new Reference($name)]);
19 | }
20 | }
21 | }
22 | }
--------------------------------------------------------------------------------
/tests/projects/GMLProject/objects/thisobjectshouldbegone/thisobjectshouldbegone.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "9e0a8f77-da97-42de-953f-a4c3fc786f9f",
3 | "modelName": "GMObject",
4 | "mvc": "1.0",
5 | "name": "thisobjectshouldbegone",
6 | "eventList": [
7 |
8 | ],
9 | "maskSpriteId": "00000000-0000-0000-0000-000000000000",
10 | "overriddenProperties": null,
11 | "parentObjectId": "00000000-0000-0000-0000-000000000000",
12 | "persistent": false,
13 | "physicsAngularDamping": 0.1,
14 | "physicsDensity": 0.5,
15 | "physicsFriction": 0.2,
16 | "physicsGroup": 0,
17 | "physicsKinematic": false,
18 | "physicsLinearDamping": 0.1,
19 | "physicsObject": false,
20 | "physicsRestitution": 0.1,
21 | "physicsSensor": false,
22 | "physicsShape": 1,
23 | "physicsShapePoints": null,
24 | "physicsStartAwake": true,
25 | "properties": null,
26 | "solid": false,
27 | "spriteId": "00000000-0000-0000-0000-000000000000",
28 | "visible": true
29 | }
--------------------------------------------------------------------------------
/tests/projects/GMLProject/objects/obj_using_simple_project/obj_using_simple_project.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "6fd70c5a-55a8-4c35-842d-5e0cb43993d6",
3 | "modelName": "GMObject",
4 | "mvc": "1.0",
5 | "name": "obj_using_simple_project",
6 | "eventList": [
7 |
8 | ],
9 | "maskSpriteId": "00000000-0000-0000-0000-000000000000",
10 | "overriddenProperties": null,
11 | "parentObjectId": "00000000-0000-0000-0000-000000000000",
12 | "persistent": false,
13 | "physicsAngularDamping": 0.1,
14 | "physicsDensity": 0.5,
15 | "physicsFriction": 0.2,
16 | "physicsGroup": 0,
17 | "physicsKinematic": false,
18 | "physicsLinearDamping": 0.1,
19 | "physicsObject": false,
20 | "physicsRestitution": 0.1,
21 | "physicsSensor": false,
22 | "physicsShape": 1,
23 | "physicsShapePoints": null,
24 | "physicsStartAwake": true,
25 | "properties": null,
26 | "solid": false,
27 | "spriteId": "00000000-0000-0000-0000-000000000000",
28 | "visible": true
29 | }
--------------------------------------------------------------------------------
/tests/projects/GMLProject/objects/testing_shouldbe_here_test/testing_shouldbe_here_test.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "49f54f46-7362-4647-8ca9-9208e0790e00",
3 | "modelName": "GMObject",
4 | "mvc": "1.0",
5 | "name": "testing_shouldbe_here_test",
6 | "eventList": [
7 |
8 | ],
9 | "maskSpriteId": "00000000-0000-0000-0000-000000000000",
10 | "overriddenProperties": null,
11 | "parentObjectId": "00000000-0000-0000-0000-000000000000",
12 | "persistent": false,
13 | "physicsAngularDamping": 0.1,
14 | "physicsDensity": 0.5,
15 | "physicsFriction": 0.2,
16 | "physicsGroup": 0,
17 | "physicsKinematic": false,
18 | "physicsLinearDamping": 0.1,
19 | "physicsObject": false,
20 | "physicsRestitution": 0.1,
21 | "physicsSensor": false,
22 | "physicsShape": 1,
23 | "physicsShapePoints": null,
24 | "physicsStartAwake": true,
25 | "properties": null,
26 | "solid": false,
27 | "spriteId": "00000000-0000-0000-0000-000000000000",
28 | "visible": true
29 | }
--------------------------------------------------------------------------------
/tests/projects/GMLProject/objects/testing_shouldbe_gone_test2/testing_shouldbe_gone_test2.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "139d8ed0-90dd-4cce-a812-dcc8ae91bdb2",
3 | "modelName": "GMObject",
4 | "mvc": "1.0",
5 | "name": "testing_shouldbe_gone_test2",
6 | "eventList": [
7 |
8 | ],
9 | "maskSpriteId": "00000000-0000-0000-0000-000000000000",
10 | "overriddenProperties": null,
11 | "parentObjectId": "00000000-0000-0000-0000-000000000000",
12 | "persistent": false,
13 | "physicsAngularDamping": 0.1,
14 | "physicsDensity": 0.5,
15 | "physicsFriction": 0.2,
16 | "physicsGroup": 0,
17 | "physicsKinematic": false,
18 | "physicsLinearDamping": 0.1,
19 | "physicsObject": false,
20 | "physicsRestitution": 0.1,
21 | "physicsSensor": false,
22 | "physicsShape": 1,
23 | "physicsShapePoints": null,
24 | "physicsStartAwake": true,
25 | "properties": null,
26 | "solid": false,
27 | "spriteId": "00000000-0000-0000-0000-000000000000",
28 | "visible": true
29 | }
--------------------------------------------------------------------------------
/tests/projects/GMLProject/objects/thisobjectshouldnotbegone_test3/thisobjectshouldnotbegone_test3.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "cc343efd-a931-4fb1-9960-3e4a10f728eb",
3 | "modelName": "GMObject",
4 | "mvc": "1.0",
5 | "name": "thisobjectshouldnotbegone_test3",
6 | "eventList": [
7 |
8 | ],
9 | "maskSpriteId": "00000000-0000-0000-0000-000000000000",
10 | "overriddenProperties": null,
11 | "parentObjectId": "00000000-0000-0000-0000-000000000000",
12 | "persistent": false,
13 | "physicsAngularDamping": 0.1,
14 | "physicsDensity": 0.5,
15 | "physicsFriction": 0.2,
16 | "physicsGroup": 0,
17 | "physicsKinematic": false,
18 | "physicsLinearDamping": 0.1,
19 | "physicsObject": false,
20 | "physicsRestitution": 0.1,
21 | "physicsSensor": false,
22 | "physicsShape": 1,
23 | "physicsShapePoints": null,
24 | "physicsStartAwake": true,
25 | "properties": null,
26 | "solid": false,
27 | "spriteId": "00000000-0000-0000-0000-000000000000",
28 | "visible": true
29 | }
--------------------------------------------------------------------------------
/tests/mocks/projects/21_UninstalledNewFiles/scripts/string_explode/string_explode.gml:
--------------------------------------------------------------------------------
1 | /// @description string_explode(seperator, data);
2 | /// @function string_explode
3 | /// @param seperator
4 | /// @param data
5 | /**
6 | * Explode a string based on a key
7 | * @param string argument0 Seperator - Explode on what character(s)
8 | * @param string argument1 String to explode
9 | * @return array|null (Returns null if no seperator was found)
10 | */
11 | var array, seperator, data, length;
12 |
13 | seperator = argument0;
14 | data = argument1;
15 |
16 | //Check if the seperator was found in the string.
17 | if (!string_count(seperator,data)) {
18 | array[0] = data;
19 | } else {
20 | length = string_length(seperator);
21 | i = 0;
22 | repeat (string_count(seperator,data)) {
23 | p = string_pos(seperator,data)-1;
24 | array[i] = string_copy(data,1,p);
25 | data = string_delete(data,1,p+length);
26 | i += 1;
27 | }
28 | array[i] = data; //Append final data to end
29 | }
30 | return array;
31 |
--------------------------------------------------------------------------------
/src/Model/Uuid.php:
--------------------------------------------------------------------------------
1 | value = \Ramsey\Uuid\Uuid::fromString($value);
22 | }
23 |
24 | public function __toString(): string
25 | {
26 | return (string) $this->value;
27 | }
28 |
29 | public function jsonSerialize(): string
30 | {
31 | return (string) $this;
32 | }
33 |
34 | public function internalValue(): \Ramsey\Uuid\Uuid
35 | {
36 | return $this->value;
37 | }
38 |
39 | public function equals(Uuid $uuid):bool {
40 | return $this->value->equals($uuid->internalValue());
41 | }
42 | }
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 GameMakerHub
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/tests/projects/GMLProject/views/e8f3e171-c9ef-4af7-9f68-151e2f5ba191.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "e8f3e171-c9ef-4af7-9f68-151e2f5ba191",
3 | "modelName": "GMFolder",
4 | "mvc": "1.1",
5 | "name": "e8f3e171-c9ef-4af7-9f68-151e2f5ba191",
6 | "children": [
7 | "1980e77a-3df2-4b78-acdb-55b36295e218",
8 | "dcb3b9aa-efa0-4fc9-b29c-cd1a5e1d39ea",
9 | "c3314a25-3fa0-4251-bd84-390475eb2c27",
10 | "2c6daa16-0197-401d-bb95-207f2b2990e3",
11 | "0bb36c74-dc11-4a76-8ff5-0d89046b21bf",
12 | "c1ba437e-11e9-4da7-928b-a432fa73885c",
13 | "f4ec481c-9aee-4d6b-92eb-bf29130bac47",
14 | "98d50ca0-61c1-4538-9b7c-2a7c2ba66602",
15 | "ab958c18-ec8c-4be4-9684-62713fbc0cae",
16 | "5214ea11-2cc7-4e91-acd4-136b41310eef",
17 | "58d409a0-91fb-4c73-a851-274797e5000c",
18 | "b3b45f12-a0aa-47c3-8eaa-8396e6a8967d",
19 | "75e726a7-cf89-40a6-bfa5-64f058241ec7",
20 | "2ed040a7-59f4-4c9c-ad9b-001f105af88a",
21 | "dc2198bd-3230-42f1-ae22-4df860543f85"
22 | ],
23 | "filterType": "root",
24 | "folderName": "Default",
25 | "isDefaultView": true,
26 | "localisedFolderName": ""
27 | }
--------------------------------------------------------------------------------
/tests/projects/OtherProject/views/94893bb6-4984-483b-9d8d-5a21df1483e3.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "94893bb6-4984-483b-9d8d-5a21df1483e3",
3 | "modelName": "GMFolder",
4 | "mvc": "1.1",
5 | "name": "94893bb6-4984-483b-9d8d-5a21df1483e3",
6 | "children": [
7 | "a0578d58-5e16-480e-9122-0b63cfd2eb41",
8 | "35f4465f-a185-4d7b-85dd-6f265c4b4751",
9 | "7b7762a9-7c75-40a6-b161-1e203e869b69",
10 | "3313e2df-ca01-46f9-8cfd-517e06112e8d",
11 | "60857659-fb3d-4020-9265-c5cf5d7cb5f2",
12 | "2fc98116-4e16-4014-98ba-0dc73dee61d5",
13 | "6ecd5bab-50f7-48d5-b91b-da519300c634",
14 | "8374236d-0ffc-44ad-938f-0647ad835ca5",
15 | "08d87e74-32e9-44ea-87e8-36f76d214eed",
16 | "fd89cb67-7627-4450-bde9-03b21b1c940b",
17 | "93af89d6-828e-47c2-a1ba-45c67bebab37",
18 | "f5811685-7896-4f7a-b24a-9cd14b421568",
19 | "ee0fd327-783c-4b64-aa2c-f01fe661b5a1",
20 | "155ae852-d984-4d5e-b8de-ec6bcd1e8a87",
21 | "c31d0bbe-7836-49df-a8ce-a16ceff33973"
22 | ],
23 | "filterType": "root",
24 | "folderName": "Default",
25 | "isDefaultView": true,
26 | "localisedFolderName": ""
27 | }
--------------------------------------------------------------------------------
/tests/projects/SimpleProject/views/94893bb6-4984-483b-9d8d-5a21df1483e3.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "94893bb6-4984-483b-9d8d-5a21df1483e3",
3 | "modelName": "GMFolder",
4 | "mvc": "1.1",
5 | "name": "94893bb6-4984-483b-9d8d-5a21df1483e3",
6 | "children": [
7 | "a0578d58-5e16-480e-9122-0b63cfd2eb41",
8 | "35f4465f-a185-4d7b-85dd-6f265c4b4751",
9 | "7b7762a9-7c75-40a6-b161-1e203e869b69",
10 | "3313e2df-ca01-46f9-8cfd-517e06112e8d",
11 | "60857659-fb3d-4020-9265-c5cf5d7cb5f2",
12 | "2fc98116-4e16-4014-98ba-0dc73dee61d5",
13 | "6ecd5bab-50f7-48d5-b91b-da519300c634",
14 | "8374236d-0ffc-44ad-938f-0647ad835ca5",
15 | "08d87e74-32e9-44ea-87e8-36f76d214eed",
16 | "fd89cb67-7627-4450-bde9-03b21b1c940b",
17 | "93af89d6-828e-47c2-a1ba-45c67bebab37",
18 | "f5811685-7896-4f7a-b24a-9cd14b421568",
19 | "ee0fd327-783c-4b64-aa2c-f01fe661b5a1",
20 | "155ae852-d984-4d5e-b8de-ec6bcd1e8a87",
21 | "c31d0bbe-7836-49df-a8ce-a16ceff33973"
22 | ],
23 | "filterType": "root",
24 | "folderName": "Default",
25 | "isDefaultView": true,
26 | "localisedFolderName": ""
27 | }
--------------------------------------------------------------------------------
/tests/mocks/projects/20_IgnorableFiles/views/4f95d0b1-21de-4c79-95e6-c6d42fa11ba2.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "4f95d0b1-21de-4c79-95e6-c6d42fa11ba2",
3 | "modelName": "GMFolder",
4 | "mvc": "1.1",
5 | "name": "4f95d0b1-21de-4c79-95e6-c6d42fa11ba2",
6 | "children": [
7 | "407dcbed-d554-40f8-85af-eead7752aeb4",
8 | "878df58d-a95c-4aaa-ae30-69a4cc33ad75",
9 | "0308bfe6-e741-4462-a822-b51973aaf568",
10 | "a4cafe4b-ddd8-4cf9-9b98-49363c222b53",
11 | "02c768e4-f6b6-48b4-a2e4-98b847481b97",
12 | "2eba1da1-802b-4ca3-94a3-9e3e28bddf5c",
13 | "1661de33-c10c-47d4-8563-e9e6796ab2ae",
14 | "80a02540-d0a1-41f2-a644-47cd8c8ee0a5",
15 | "1f697a03-bb14-404b-9364-2aa049382c15",
16 | "dc0b760b-c9f3-440a-971e-e4c2a683c395",
17 | "4e2e3fde-6384-460f-87b7-66e6e85c8fe4",
18 | "454e7cf0-c931-47fe-a2ad-d08fa830bd21",
19 | "69c57755-590b-466f-8faa-c1a7012243a4",
20 | "2a8652aa-30b7-45f6-bda2-82bf8fc8a54d",
21 | "e9b2c9b8-7a80-4238-b305-1b78ce69d927"
22 | ],
23 | "filterType": "root",
24 | "folderName": "Default",
25 | "isDefaultView": true,
26 | "localisedFolderName": ""
27 | }
--------------------------------------------------------------------------------
/tests/mocks/projects/21_UninstalledNewFiles/views/1a99a9b8-fbb2-4a16-9537-a6272875a373.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "1a99a9b8-fbb2-4a16-9537-a6272875a373",
3 | "modelName": "GMFolder",
4 | "mvc": "1.1",
5 | "name": "1a99a9b8-fbb2-4a16-9537-a6272875a373",
6 | "children": [
7 | "be569bd8-e7f1-49c5-9cbf-d6c735c774e2",
8 | "479594f0-6da0-46fc-b0a0-97616daa4418",
9 | "2f9b3f7b-9b45-4290-b15f-f0dc4d5ac60d",
10 | "8f4db28c-0f1f-49ba-ae88-4cb90aede7f4",
11 | "f3c2bf76-84d6-4fa4-80c4-8c8882dec302",
12 | "33af6a91-194b-45c3-9783-97215e43a166",
13 | "8c78d3d6-d356-45e9-b6a4-59c2dc18999e",
14 | "efeeaba1-bf8b-4494-9b6f-c02af20fa2ed",
15 | "16eb5455-9985-4392-bba7-fada383da40d",
16 | "c448d3d6-759b-4896-8e64-381f8bf22430",
17 | "026561d7-8e33-44e9-893c-9590e5254bfc",
18 | "38c881ae-10eb-4b96-bd4b-b20aa7094996",
19 | "df4293b2-a9c5-4173-8aa5-42d84930d8f5",
20 | "bf289c15-a08c-49cb-a473-506dcff64a02",
21 | "c068ca74-7c47-456c-b103-02f4c25ddb83"
22 | ],
23 | "filterType": "root",
24 | "folderName": "Default",
25 | "isDefaultView": true,
26 | "localisedFolderName": ""
27 | }
--------------------------------------------------------------------------------
/tests/projects/GMLProject/options/linux/options_linux.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "a9188620-a624-4a5a-83ae-a1b53faf038b",
3 | "modelName": "GMLinuxOptions",
4 | "mvc": "1.0",
5 | "name": "Linux",
6 | "option_linux_allow_fullscreen": false,
7 | "option_linux_display_cursor": true,
8 | "option_linux_display_name": "Made in GameMaker Studio 2",
9 | "option_linux_display_splash": false,
10 | "option_linux_enable_steam": false,
11 | "option_linux_homepage": "http:\/\/www.yoyogames.com",
12 | "option_linux_icon": "${base_options_dir}\/linux\/icons\/64.png",
13 | "option_linux_interpolate_pixels": false,
14 | "option_linux_long_desc": "",
15 | "option_linux_maintainer_email": "",
16 | "option_linux_resize_window": false,
17 | "option_linux_scale": 0,
18 | "option_linux_short_desc": "",
19 | "option_linux_splash_screen": "${base_options_dir}\/linux\/splash\/splash.png",
20 | "option_linux_start_fullscreen": false,
21 | "option_linux_sync": false,
22 | "option_linux_texture_page": "2048x2048",
23 | "option_linux_version": {
24 | "build": 0,
25 | "major": 1,
26 | "minor": 0,
27 | "revision": 0
28 | }
29 | }
--------------------------------------------------------------------------------
/tests/projects/OtherProject/options/linux/options_linux.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "a9188620-a624-4a5a-83ae-a1b53faf038b",
3 | "modelName": "GMLinuxOptions",
4 | "mvc": "1.0",
5 | "name": "Linux",
6 | "option_linux_allow_fullscreen": false,
7 | "option_linux_display_cursor": true,
8 | "option_linux_display_name": "Made in GameMaker Studio 2",
9 | "option_linux_display_splash": false,
10 | "option_linux_enable_steam": false,
11 | "option_linux_homepage": "http:\/\/www.yoyogames.com",
12 | "option_linux_icon": "${base_options_dir}\/linux\/icons\/64.png",
13 | "option_linux_interpolate_pixels": false,
14 | "option_linux_long_desc": "",
15 | "option_linux_maintainer_email": "",
16 | "option_linux_resize_window": false,
17 | "option_linux_scale": 0,
18 | "option_linux_short_desc": "",
19 | "option_linux_splash_screen": "${base_options_dir}\/linux\/splash\/splash.png",
20 | "option_linux_start_fullscreen": false,
21 | "option_linux_sync": false,
22 | "option_linux_texture_page": "2048x2048",
23 | "option_linux_version": {
24 | "build": 0,
25 | "major": 1,
26 | "minor": 0,
27 | "revision": 0
28 | }
29 | }
--------------------------------------------------------------------------------
/tests/projects/SimpleProject/options/linux/options_linux.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "a9188620-a624-4a5a-83ae-a1b53faf038b",
3 | "modelName": "GMLinuxOptions",
4 | "mvc": "1.0",
5 | "name": "Linux",
6 | "option_linux_allow_fullscreen": false,
7 | "option_linux_display_cursor": true,
8 | "option_linux_display_name": "Made in GameMaker Studio 2",
9 | "option_linux_display_splash": false,
10 | "option_linux_enable_steam": false,
11 | "option_linux_homepage": "http:\/\/www.yoyogames.com",
12 | "option_linux_icon": "${base_options_dir}\/linux\/icons\/64.png",
13 | "option_linux_interpolate_pixels": false,
14 | "option_linux_long_desc": "",
15 | "option_linux_maintainer_email": "",
16 | "option_linux_resize_window": false,
17 | "option_linux_scale": 0,
18 | "option_linux_short_desc": "",
19 | "option_linux_splash_screen": "${base_options_dir}\/linux\/splash\/splash.png",
20 | "option_linux_start_fullscreen": false,
21 | "option_linux_sync": false,
22 | "option_linux_texture_page": "2048x2048",
23 | "option_linux_version": {
24 | "build": 0,
25 | "major": 1,
26 | "minor": 0,
27 | "revision": 0
28 | }
29 | }
--------------------------------------------------------------------------------
/tests/mocks/projects/20_IgnorableFiles/options/linux/options_linux.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "a9188620-a624-4a5a-83ae-a1b53faf038b",
3 | "modelName": "GMLinuxOptions",
4 | "mvc": "1.0",
5 | "name": "Linux",
6 | "option_linux_allow_fullscreen": false,
7 | "option_linux_disable_sandbox": false,
8 | "option_linux_display_cursor": true,
9 | "option_linux_display_name": "Made in GameMaker Studio 2",
10 | "option_linux_display_splash": false,
11 | "option_linux_enable_steam": false,
12 | "option_linux_homepage": "http:\/\/www.yoyogames.com",
13 | "option_linux_icon": "${base_options_dir}\/linux\/icons\/64.png",
14 | "option_linux_interpolate_pixels": false,
15 | "option_linux_long_desc": "",
16 | "option_linux_maintainer_email": "",
17 | "option_linux_resize_window": false,
18 | "option_linux_scale": 0,
19 | "option_linux_short_desc": "",
20 | "option_linux_splash_screen": "${base_options_dir}\/linux\/splash\/splash.png",
21 | "option_linux_start_fullscreen": false,
22 | "option_linux_sync": false,
23 | "option_linux_texture_page": "2048x2048",
24 | "option_linux_version": {
25 | "build": 0,
26 | "major": 1,
27 | "minor": 0,
28 | "revision": 0
29 | }
30 | }
--------------------------------------------------------------------------------
/tests/mocks/projects/21_UninstalledNewFiles/options/linux/options_linux.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "a9188620-a624-4a5a-83ae-a1b53faf038b",
3 | "modelName": "GMLinuxOptions",
4 | "mvc": "1.0",
5 | "name": "Linux",
6 | "option_linux_allow_fullscreen": false,
7 | "option_linux_disable_sandbox": false,
8 | "option_linux_display_cursor": true,
9 | "option_linux_display_name": "Made in GameMaker Studio 2",
10 | "option_linux_display_splash": false,
11 | "option_linux_enable_steam": false,
12 | "option_linux_homepage": "http:\/\/www.yoyogames.com",
13 | "option_linux_icon": "${base_options_dir}\/linux\/icons\/64.png",
14 | "option_linux_interpolate_pixels": false,
15 | "option_linux_long_desc": "",
16 | "option_linux_maintainer_email": "",
17 | "option_linux_resize_window": false,
18 | "option_linux_scale": 0,
19 | "option_linux_short_desc": "",
20 | "option_linux_splash_screen": "${base_options_dir}\/linux\/splash\/splash.png",
21 | "option_linux_start_fullscreen": false,
22 | "option_linux_sync": false,
23 | "option_linux_texture_page": "2048x2048",
24 | "option_linux_version": {
25 | "build": 0,
26 | "major": 1,
27 | "minor": 0,
28 | "revision": 0
29 | }
30 | }
--------------------------------------------------------------------------------
/src/Service/CatalystService.php:
--------------------------------------------------------------------------------
1 | persist();
12 | }
13 |
14 | public function createNew(
15 | string $name,
16 | string $description,
17 | string $license,
18 | string $homepage,
19 | string $yyp
20 | ) : CatalystEntity {
21 | $entity = CatalystEntity::createNew(
22 | '.', $name, $description, $license, $homepage, $yyp
23 | );
24 |
25 | StorageService::getInstance()->saveEntity($entity);
26 | return $entity;
27 | }
28 |
29 | public function load(string $path = null, $ignoreMissing = false) : CatalystEntity
30 | {
31 | if (null === $path) {
32 | $path = realpath('.');
33 | }
34 | $entity = CatalystEntity::createFromPath($path, $ignoreMissing);
35 | return $entity;
36 | }
37 |
38 | public function existsHere() : bool
39 | {
40 | return $this->existsAt('.');
41 | }
42 |
43 | public function existsAt(string $path) : bool
44 | {
45 | return StorageService::getInstance()->fileExists($path . '/catalyst.json');
46 | }
47 | }
--------------------------------------------------------------------------------
/src/Kernel.php:
--------------------------------------------------------------------------------
1 | load(__DIR__ . '/../config/services.yml');
26 | //$loader->load(__DIR__ . '/../config/services.php'); //@todo, so we can remove YAML + yaml parser
27 | }
28 |
29 | public function getCacheDir()
30 | {
31 | return sys_get_temp_dir().'/gmh_catalyst/cache';
32 | }
33 |
34 | public function getLogDir()
35 | {
36 | return sys_get_temp_dir().'/gmh_catalyst/log';
37 | }
38 |
39 | protected function build(ContainerBuilder $containerBuilder): void
40 | {
41 | $containerBuilder->addCompilerPass(new CollectCommandsToApplicationCompilerPass);
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/tests/projects/GMLProject/objects/test_object1/test_object1.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "b9f7dc62-7c1b-4e68-b58d-8a2a4470e4be",
3 | "modelName": "GMObject",
4 | "mvc": "1.0",
5 | "name": "test_object1",
6 | "eventList": [
7 | {
8 | "id": "90a0d7d0-f7c1-4307-828a-ee150af454be",
9 | "modelName": "GMEvent",
10 | "mvc": "1.0",
11 | "IsDnD": false,
12 | "collisionObjectId": "00000000-0000-0000-0000-000000000000",
13 | "enumb": 0,
14 | "eventtype": 3,
15 | "m_owner": "b9f7dc62-7c1b-4e68-b58d-8a2a4470e4be"
16 | }
17 | ],
18 | "maskSpriteId": "00000000-0000-0000-0000-000000000000",
19 | "overriddenProperties": null,
20 | "parentObjectId": "00000000-0000-0000-0000-000000000000",
21 | "persistent": false,
22 | "physicsAngularDamping": 0.1,
23 | "physicsDensity": 0.5,
24 | "physicsFriction": 0.2,
25 | "physicsGroup": 0,
26 | "physicsKinematic": false,
27 | "physicsLinearDamping": 0.1,
28 | "physicsObject": false,
29 | "physicsRestitution": 0.1,
30 | "physicsSensor": false,
31 | "physicsShape": 1,
32 | "physicsShapePoints": null,
33 | "physicsStartAwake": true,
34 | "properties": null,
35 | "solid": false,
36 | "spriteId": "00000000-0000-0000-0000-000000000000",
37 | "visible": true
38 | }
--------------------------------------------------------------------------------
/tests/projects/SimpleProject/objects/obj_simple_test/obj_simple_test.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "5ebd0507-54c7-4a11-9bbe-0d3fe2b57d85",
3 | "modelName": "GMObject",
4 | "mvc": "1.0",
5 | "name": "obj_simple_test",
6 | "eventList": [
7 | {
8 | "id": "84791f78-8ab7-44ee-99db-76cfc336e82e",
9 | "modelName": "GMEvent",
10 | "mvc": "1.0",
11 | "IsDnD": false,
12 | "collisionObjectId": "00000000-0000-0000-0000-000000000000",
13 | "enumb": 0,
14 | "eventtype": 3,
15 | "m_owner": "5ebd0507-54c7-4a11-9bbe-0d3fe2b57d85"
16 | }
17 | ],
18 | "maskSpriteId": "00000000-0000-0000-0000-000000000000",
19 | "overriddenProperties": null,
20 | "parentObjectId": "00000000-0000-0000-0000-000000000000",
21 | "persistent": false,
22 | "physicsAngularDamping": 0.1,
23 | "physicsDensity": 0.5,
24 | "physicsFriction": 0.2,
25 | "physicsGroup": 0,
26 | "physicsKinematic": false,
27 | "physicsLinearDamping": 0.1,
28 | "physicsObject": false,
29 | "physicsRestitution": 0.1,
30 | "physicsSensor": false,
31 | "physicsShape": 1,
32 | "physicsShapePoints": null,
33 | "physicsStartAwake": true,
34 | "properties": null,
35 | "solid": false,
36 | "spriteId": "2c06e728-9bcc-48ab-bbe4-82c08afddf60",
37 | "visible": true
38 | }
--------------------------------------------------------------------------------
/files/php.ini:
--------------------------------------------------------------------------------
1 | [PHP]
2 | ; required settings for Catalyst
3 |
4 | engine = On
5 | short_open_tag = Off
6 | precision = 14
7 | output_buffering = 4096
8 | zlib.output_compression = Off
9 | implicit_flush = Off
10 | unserialize_callback_func =
11 | serialize_precision = -1
12 | zend.enable_gc = On
13 | expose_php = On
14 |
15 | max_execution_time = 30
16 | max_input_time = 60
17 | memory_limit = 128M
18 | error_reporting = E_ALL
19 | display_errors = On
20 | display_startup_errors = On
21 | log_errors = On
22 | log_errors_max_len = 1024
23 | ignore_repeated_errors = Off
24 | ignore_repeated_source = Off
25 | report_memleaks = On
26 |
27 | html_errors = On
28 | variables_order = "GPCS"
29 | request_order = "GP"
30 | register_argc_argv = Off
31 | auto_globals_jit = On
32 |
33 | post_max_size = 8M
34 | default_mimetype = "text/html"
35 | default_charset = "UTF-8"
36 | extension_dir = "${PHPDIR}\ext"
37 | enable_dl = Off
38 |
39 | file_uploads = On
40 | upload_max_filesize = 2M
41 | max_file_uploads = 20
42 |
43 | allow_url_fopen = On
44 | allow_url_include = Off
45 | default_socket_timeout = 60
46 |
47 |
48 | extension=php_mbstring.dll
49 | extension=php_curl.dll
50 | extension=php_openssl.dll
51 | extension=php_sockets.dll
52 |
53 |
54 | [CLI Server]
55 | cli_server.color = On
56 |
57 | [Assertion]
58 | zend.assertions = 1
59 |
60 | [openssl]
61 | openssl.cafile="${PHPDIR}\cacert.pem"
62 | openssl.capath="${PHPDIR}\ext"
--------------------------------------------------------------------------------
/tests/mocks/projects/21_UninstalledNewFiles/objects/ExtendedFunctions_obj_test/ExtendedFunctions_obj_test.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "9f6ee3b0-f949-4238-a860-52e0261760eb",
3 | "modelName": "GMObject",
4 | "mvc": "1.0",
5 | "name": "ExtendedFunctions_obj_test",
6 | "eventList": [
7 | {
8 | "id": "d6607564-c6ba-4301-a0e3-9964ad9fb8c7",
9 | "modelName": "GMEvent",
10 | "mvc": "1.0",
11 | "IsDnD": false,
12 | "collisionObjectId": "00000000-0000-0000-0000-000000000000",
13 | "enumb": 0,
14 | "eventtype": 0,
15 | "m_owner": "9f6ee3b0-f949-4238-a860-52e0261760eb"
16 | }
17 | ],
18 | "maskSpriteId": "00000000-0000-0000-0000-000000000000",
19 | "overriddenProperties": null,
20 | "parentObjectId": "00000000-0000-0000-0000-000000000000",
21 | "persistent": false,
22 | "physicsAngularDamping": 0.1,
23 | "physicsDensity": 0.5,
24 | "physicsFriction": 0.2,
25 | "physicsGroup": 0,
26 | "physicsKinematic": false,
27 | "physicsLinearDamping": 0.1,
28 | "physicsObject": false,
29 | "physicsRestitution": 0.1,
30 | "physicsSensor": false,
31 | "physicsShape": 0,
32 | "physicsShapePoints": [
33 |
34 | ],
35 | "physicsStartAwake": true,
36 | "properties": null,
37 | "solid": false,
38 | "spriteId": "00000000-0000-0000-0000-000000000000",
39 | "visible": true
40 | }
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "gamemakerhub/catalyst",
3 | "description": "A tool for Game Maker Studio 2 to manage dependencies and speed up your process",
4 | "type": "project",
5 | "config": {
6 | "platform": {
7 | "php": "7.2"
8 | }
9 | },
10 | "require": {
11 | "php": "^7.2",
12 | "ext-ctype": "*",
13 | "ext-iconv": "*",
14 | "symfony/console": "^4.2",
15 | "beberlei/assert": "^3.2",
16 | "guzzlehttp/guzzle": "^6.3",
17 | "composer/semver": "^1.5",
18 | "ramsey/uuid": "^3.8",
19 | "symfony/dependency-injection": "^4.2",
20 | "symfony/config": "^4.2",
21 | "symfony/yaml": "^4.2",
22 | "symfony/process": "^4.2",
23 | "symfony/http-kernel": "^4.2",
24 | "ext-json": "*"
25 | },
26 | "license": "MIT",
27 | "authors": [
28 | {
29 | "name": "RobQuistNL",
30 | "email": "rob.quist@dukesoft.nl"
31 | }
32 | ],
33 | "autoload": {
34 | "psr-4": {
35 | "Catalyst\\": "src/"
36 | }
37 | },
38 | "autoload-dev": {
39 | "psr-4": {
40 | "Catalyst\\Tests\\": "tests/src/"
41 | }
42 | },
43 | "minimum-stability": "stable",
44 | "require-dev": {
45 | "phpunit/phpunit": "^8.0",
46 | "mockery/mockery": "^1.0",
47 | "symfony/phpunit-bridge": "^4.2"
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/tests/src/Model/UuidTest.php:
--------------------------------------------------------------------------------
1 | assertEquals(
13 | Uuid::createFromString($this->randomUuid),
14 | Uuid::createFromString($this->randomUuid)
15 | );
16 | }
17 |
18 | public function testEquals()
19 | {
20 | $this->assertTrue(
21 | Uuid::createFromString($this->randomUuid)->equals(
22 | Uuid::createFromString($this->randomUuid)
23 | )
24 | );
25 | }
26 |
27 | public function testCreateRandom()
28 | {
29 | $this->assertNotSame(
30 | Uuid::createRandom(),
31 | Uuid::createRandom()
32 | );
33 |
34 | $this->assertNotSame(
35 | (string) Uuid::createRandom(),
36 | (string) Uuid::createRandom()
37 | );
38 | }
39 |
40 | public function testJsonSerialize()
41 | {
42 | $this->assertSame($this->randomUuid, Uuid::createFromString($this->randomUuid)->jsonSerialize());
43 | }
44 |
45 | public function testInternalValue()
46 | {
47 | $this->assertEquals(\Ramsey\Uuid\Uuid::fromString($this->randomUuid), Uuid::createFromString($this->randomUuid)->internalValue());
48 | }
49 | }
--------------------------------------------------------------------------------
/src/Model/YoYo/Resource/GM/GMFolder.php:
--------------------------------------------------------------------------------
1 | id = (string) $uuid;
26 | $yyFile->modelName = 'GMFolder';
27 | $yyFile->mvc = '1.1';
28 | $yyFile->name = (string) $uuid;
29 | $yyFile->children = [];
30 | $yyFile->filterType = $forType;
31 | $yyFile->folderName = basename($fullPath);
32 | $yyFile->isDefaultView = false;
33 | $yyFile->localisedFolderName = '';
34 |
35 | StorageService::getInstance()->writeYYFile($filePath, $yyFile);
36 |
37 | return self::createFromFile($filePath);
38 | }
39 |
40 | public function setFullName($fullName)
41 | {
42 | $this->_fullName = $fullName;
43 | }
44 |
45 | public function getFullName()
46 | {
47 | return $this->_fullName;
48 | }
49 | }
--------------------------------------------------------------------------------
/tests/mocks/projects/21_UninstalledNewFiles/objects/ExtendedFunctions_obj_near_instance/ExtendedFunctions_obj_near_instance.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "68eaaff9-b1cb-4134-bdac-0ace16037b41",
3 | "modelName": "GMObject",
4 | "mvc": "1.0",
5 | "name": "ExtendedFunctions_obj_near_instance",
6 | "eventList": [
7 | {
8 | "id": "17f1e7e7-1ddc-428c-93fd-7b92e488aa42",
9 | "modelName": "GMEvent",
10 | "mvc": "1.0",
11 | "IsDnD": false,
12 | "collisionObjectId": "00000000-0000-0000-0000-000000000000",
13 | "enumb": 0,
14 | "eventtype": 8,
15 | "m_owner": "68eaaff9-b1cb-4134-bdac-0ace16037b41"
16 | }
17 | ],
18 | "maskSpriteId": "00000000-0000-0000-0000-000000000000",
19 | "overriddenProperties": null,
20 | "parentObjectId": "00000000-0000-0000-0000-000000000000",
21 | "persistent": false,
22 | "physicsAngularDamping": 0.1,
23 | "physicsDensity": 0.5,
24 | "physicsFriction": 0.2,
25 | "physicsGroup": 0,
26 | "physicsKinematic": false,
27 | "physicsLinearDamping": 0.1,
28 | "physicsObject": false,
29 | "physicsRestitution": 0.1,
30 | "physicsSensor": false,
31 | "physicsShape": 0,
32 | "physicsShapePoints": [
33 |
34 | ],
35 | "physicsStartAwake": true,
36 | "properties": null,
37 | "solid": false,
38 | "spriteId": "00000000-0000-0000-0000-000000000000",
39 | "visible": true
40 | }
--------------------------------------------------------------------------------
/tests/projects/GMLProject/options/mac/options_mac.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "f418569b-3bdd-4706-a0e4-364317f54032",
3 | "modelName": "GMMacOptions",
4 | "mvc": "1.0",
5 | "name": "macOS",
6 | "option_mac_allow_fullscreen": false,
7 | "option_mac_allow_incoming_network": false,
8 | "option_mac_allow_outgoing_network": false,
9 | "option_mac_app_category": "Games",
10 | "option_mac_app_id": "com.company.game",
11 | "option_mac_build_app_store": false,
12 | "option_mac_copyright": "(c) 2018 CompanyName",
13 | "option_mac_display_cursor": true,
14 | "option_mac_display_name": "Made in GameMaker Studio 2",
15 | "option_mac_enable_retina": false,
16 | "option_mac_enable_steam": false,
17 | "option_mac_icon_png": "${base_options_dir}\/mac\/icons\/1024.png",
18 | "option_mac_interpolate_pixels": false,
19 | "option_mac_menu_dock": false,
20 | "option_mac_output_dir": "~\/GameMakerStudio2\/Mac",
21 | "option_mac_resize_window": false,
22 | "option_mac_scale": 0,
23 | "option_mac_signing_identity": "Developer ID Application:",
24 | "option_mac_splash_png": "${base_options_dir}\/mac\/splash\/splash.png",
25 | "option_mac_start_fullscreen": false,
26 | "option_mac_team_id": null,
27 | "option_mac_texture_page": "2048x2048",
28 | "option_mac_version": {
29 | "build": 0,
30 | "major": 1,
31 | "minor": 0,
32 | "revision": 0
33 | },
34 | "option_mac_vsync": false
35 | }
--------------------------------------------------------------------------------
/tests/projects/OtherProject/options/mac/options_mac.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "f418569b-3bdd-4706-a0e4-364317f54032",
3 | "modelName": "GMMacOptions",
4 | "mvc": "1.0",
5 | "name": "macOS",
6 | "option_mac_allow_fullscreen": false,
7 | "option_mac_allow_incoming_network": false,
8 | "option_mac_allow_outgoing_network": false,
9 | "option_mac_app_category": "Games",
10 | "option_mac_app_id": "com.company.game",
11 | "option_mac_build_app_store": false,
12 | "option_mac_copyright": "(c) 2018 CompanyName",
13 | "option_mac_display_cursor": true,
14 | "option_mac_display_name": "Made in GameMaker Studio 2",
15 | "option_mac_enable_retina": false,
16 | "option_mac_enable_steam": false,
17 | "option_mac_icon_png": "${base_options_dir}\/mac\/icons\/1024.png",
18 | "option_mac_interpolate_pixels": false,
19 | "option_mac_menu_dock": false,
20 | "option_mac_output_dir": "~\/GameMakerStudio2\/Mac",
21 | "option_mac_resize_window": false,
22 | "option_mac_scale": 0,
23 | "option_mac_signing_identity": "Developer ID Application:",
24 | "option_mac_splash_png": "${base_options_dir}\/mac\/splash\/splash.png",
25 | "option_mac_start_fullscreen": false,
26 | "option_mac_team_id": null,
27 | "option_mac_texture_page": "2048x2048",
28 | "option_mac_version": {
29 | "build": 0,
30 | "major": 1,
31 | "minor": 0,
32 | "revision": 0
33 | },
34 | "option_mac_vsync": false
35 | }
--------------------------------------------------------------------------------
/tests/projects/SimpleProject/options/mac/options_mac.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "f418569b-3bdd-4706-a0e4-364317f54032",
3 | "modelName": "GMMacOptions",
4 | "mvc": "1.0",
5 | "name": "macOS",
6 | "option_mac_allow_fullscreen": false,
7 | "option_mac_allow_incoming_network": false,
8 | "option_mac_allow_outgoing_network": false,
9 | "option_mac_app_category": "Games",
10 | "option_mac_app_id": "com.company.game",
11 | "option_mac_build_app_store": false,
12 | "option_mac_copyright": "(c) 2018 CompanyName",
13 | "option_mac_display_cursor": true,
14 | "option_mac_display_name": "Made in GameMaker Studio 2",
15 | "option_mac_enable_retina": false,
16 | "option_mac_enable_steam": false,
17 | "option_mac_icon_png": "${base_options_dir}\/mac\/icons\/1024.png",
18 | "option_mac_interpolate_pixels": false,
19 | "option_mac_menu_dock": false,
20 | "option_mac_output_dir": "~\/GameMakerStudio2\/Mac",
21 | "option_mac_resize_window": false,
22 | "option_mac_scale": 0,
23 | "option_mac_signing_identity": "Developer ID Application:",
24 | "option_mac_splash_png": "${base_options_dir}\/mac\/splash\/splash.png",
25 | "option_mac_start_fullscreen": false,
26 | "option_mac_team_id": null,
27 | "option_mac_texture_page": "2048x2048",
28 | "option_mac_version": {
29 | "build": 0,
30 | "major": 1,
31 | "minor": 0,
32 | "revision": 0
33 | },
34 | "option_mac_vsync": false
35 | }
--------------------------------------------------------------------------------
/src/Command/ClearCacheCommand.php:
--------------------------------------------------------------------------------
1 | setDescription('Clear all cache files that Catalyst generated')
18 | ->setHelp('Clear all cache files that Catalyst generated. This includes cached and downloaded packages!');
19 | }
20 |
21 | protected function execute(InputInterface $input, OutputInterface $output): int
22 | {
23 | //@todo do a double check with the user?
24 | $output->writeln('Clearing cache at ' . $GLOBALS['SYMFONY_KERNEL']->getCacheDir() . '>');
25 | $this->rrmdir($GLOBALS['SYMFONY_KERNEL']->getCacheDir());
26 |
27 | return 0;
28 | }
29 |
30 | private function rrmdir($path) {
31 | // @todo make this work with persist as well
32 | $i = new \DirectoryIterator($path);
33 | foreach($i as $f) {
34 | if($f->isFile()) {
35 | unlink($f->getRealPath());
36 | } else if(!$f->isDot() && $f->isDir()) {
37 | $this->rrmdir($f->getRealPath());
38 | }
39 | }
40 | rmdir($path);
41 | }
42 |
43 | }
--------------------------------------------------------------------------------
/tests/src/Command/InitCommandTest.php:
--------------------------------------------------------------------------------
1 | application = new Application();
18 |
19 | //$this->application->add(new InitCommand(new CatalystService()));
20 | }
21 |
22 | public function testExecute()
23 | {
24 | $this->assertTrue(true);
25 | $this->markTestIncomplete('Todo');
26 | return true;
27 | $command = $this->application->find('init');
28 | $commandTester = new CommandTester($command);
29 |
30 | $commandTester->setInputs([
31 | 'test/test',
32 | 'description',
33 | 0,
34 | 'http://www.dukesoft.nl/',
35 | __DIR__ . '/../../projects/GMLProject/GMLProject.yyp'
36 | ]);
37 |
38 | $commandTester->execute([
39 | 'command' => $command->getName()
40 | ]);
41 |
42 | $output = $commandTester->getDisplay();
43 | $this->assertStringContainsString('Catalyst file initialized', $output);
44 |
45 | //@todo
46 | //unlink('catalyst.json');
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/tests/projects/GMLProject/timelines/tl_one/tl_one.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "dcd740e7-91f4-4b74-89cb-8c77d91dae56",
3 | "modelName": "GMTimeline",
4 | "mvc": "1.0",
5 | "name": "tl_one",
6 | "momentList": [
7 | {
8 | "id": "59466e4c-831f-4f51-8790-5087bb8a66c7",
9 | "modelName": "GMMoment",
10 | "mvc": "1.0",
11 | "name": "",
12 | "evnt": {
13 | "id": "28393fc1-96fe-4a23-8e6d-e82ba9e013c0",
14 | "modelName": "GMEvent",
15 | "mvc": "1.0",
16 | "IsDnD": false,
17 | "collisionObjectId": "00000000-0000-0000-0000-000000000000",
18 | "enumb": 0,
19 | "eventtype": 0,
20 | "m_owner": "dcd740e7-91f4-4b74-89cb-8c77d91dae56"
21 | },
22 | "moment": 0
23 | },
24 | {
25 | "id": "3ab607da-b7e5-4edc-9649-0e10669be623",
26 | "modelName": "GMMoment",
27 | "mvc": "1.0",
28 | "name": "",
29 | "evnt": {
30 | "id": "76047097-beea-4cae-a029-f63049f35330",
31 | "modelName": "GMEvent",
32 | "mvc": "1.0",
33 | "IsDnD": false,
34 | "collisionObjectId": "00000000-0000-0000-0000-000000000000",
35 | "enumb": 30,
36 | "eventtype": 0,
37 | "m_owner": "dcd740e7-91f4-4b74-89cb-8c77d91dae56"
38 | },
39 | "moment": 30
40 | }
41 | ]
42 | }
--------------------------------------------------------------------------------
/tests/mocks/projects/20_IgnorableFiles/options/mac/options_mac.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "f418569b-3bdd-4706-a0e4-364317f54032",
3 | "modelName": "GMMacOptions",
4 | "mvc": "1.0",
5 | "name": "macOS",
6 | "option_mac_allow_fullscreen": false,
7 | "option_mac_allow_incoming_network": false,
8 | "option_mac_allow_outgoing_network": false,
9 | "option_mac_app_category": "Games",
10 | "option_mac_app_id": "com.company.game",
11 | "option_mac_apple_sign_in": false,
12 | "option_mac_build_app_store": false,
13 | "option_mac_copyright": "(c) 2018 CompanyName",
14 | "option_mac_disable_sandbox": false,
15 | "option_mac_display_cursor": true,
16 | "option_mac_display_name": "Made in GameMaker Studio 2",
17 | "option_mac_enable_retina": false,
18 | "option_mac_enable_steam": false,
19 | "option_mac_icon_png": "${base_options_dir}\/mac\/icons\/1024.png",
20 | "option_mac_interpolate_pixels": false,
21 | "option_mac_menu_dock": false,
22 | "option_mac_output_dir": "~\/GameMakerStudio2\/Mac",
23 | "option_mac_resize_window": false,
24 | "option_mac_scale": 0,
25 | "option_mac_signing_identity": "Developer ID Application:",
26 | "option_mac_splash_png": "${base_options_dir}\/mac\/splash\/splash.png",
27 | "option_mac_start_fullscreen": false,
28 | "option_mac_team_id": null,
29 | "option_mac_texture_page": "2048x2048",
30 | "option_mac_version": {
31 | "build": 0,
32 | "major": 1,
33 | "minor": 0,
34 | "revision": 0
35 | },
36 | "option_mac_vsync": false
37 | }
--------------------------------------------------------------------------------
/tests/mocks/projects/21_UninstalledNewFiles/options/mac/options_mac.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "f418569b-3bdd-4706-a0e4-364317f54032",
3 | "modelName": "GMMacOptions",
4 | "mvc": "1.0",
5 | "name": "macOS",
6 | "option_mac_allow_fullscreen": false,
7 | "option_mac_allow_incoming_network": false,
8 | "option_mac_allow_outgoing_network": false,
9 | "option_mac_app_category": "Games",
10 | "option_mac_app_id": "com.company.game",
11 | "option_mac_apple_sign_in": false,
12 | "option_mac_build_app_store": false,
13 | "option_mac_copyright": "(c) 2018 CompanyName",
14 | "option_mac_disable_sandbox": false,
15 | "option_mac_display_cursor": true,
16 | "option_mac_display_name": "Made in GameMaker Studio 2",
17 | "option_mac_enable_retina": false,
18 | "option_mac_enable_steam": false,
19 | "option_mac_icon_png": "${base_options_dir}\/mac\/icons\/1024.png",
20 | "option_mac_interpolate_pixels": false,
21 | "option_mac_menu_dock": false,
22 | "option_mac_output_dir": "~\/GameMakerStudio2\/Mac",
23 | "option_mac_resize_window": false,
24 | "option_mac_scale": 0,
25 | "option_mac_signing_identity": "Developer ID Application:",
26 | "option_mac_splash_png": "${base_options_dir}\/mac\/splash\/splash.png",
27 | "option_mac_start_fullscreen": false,
28 | "option_mac_team_id": null,
29 | "option_mac_texture_page": "2048x2048",
30 | "option_mac_version": {
31 | "build": 0,
32 | "major": 1,
33 | "minor": 0,
34 | "revision": 0
35 | },
36 | "option_mac_vsync": false
37 | }
--------------------------------------------------------------------------------
/tests/projects/GMLProject/options/tvos/options_tvos.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "93566aad-c3b3-48a9-8fa7-9c5ee19f74ac",
3 | "modelName": "GMtvOSOptions",
4 | "mvc": "1.0",
5 | "name": "tvOS",
6 | "option_tvos_bundle_name": "com.company.game",
7 | "option_tvos_display_cursor": false,
8 | "option_tvos_display_name": "Made in GameMaker Studio 2",
9 | "option_tvos_icon_1280": "${base_options_dir}\\tvos\\icons\\1280.png",
10 | "option_tvos_icon_400": "${base_options_dir}\\tvos\\icons\\400.png",
11 | "option_tvos_icon_400_2x": "${base_options_dir}\\tvos\\icons\\400_2x.png",
12 | "option_tvos_interpolate_pixels": true,
13 | "option_tvos_output_dir": "~\/GameMakerStudio2\/tvOS",
14 | "option_tvos_push_notifications": false,
15 | "option_tvos_scale": 0,
16 | "option_tvos_splash_time": 10,
17 | "option_tvos_splashscreen": "${base_options_dir}\\tvos\\splash\\splash.png",
18 | "option_tvos_splashscreen_2x": "${base_options_dir}\\tvos\\splash\\splash_2x.png",
19 | "option_tvos_team_id": "",
20 | "option_tvos_texture_page": "2048x2048",
21 | "option_tvos_topshelf": "${base_options_dir}\\tvos\\topshelf\\topshelf.png",
22 | "option_tvos_topshelf_2x": "${base_options_dir}\\tvos\\topshelf\\topshelf_2x.png",
23 | "option_tvos_topshelf_wide": "${base_options_dir}\\tvos\\topshelf\\topshelf_wide.png",
24 | "option_tvos_topshelf_wide_2x": "${base_options_dir}\\tvos\\topshelf\\topshelf_wide_2x.png",
25 | "option_tvos_version": {
26 | "build": 0,
27 | "major": 1,
28 | "minor": 0,
29 | "revision": 0
30 | }
31 | }
--------------------------------------------------------------------------------
/tests/projects/GMLProject/options/html5/options_html5.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "75ac291e-7061-4bcb-8e8a-3b3545332d41",
3 | "modelName": "GMHtml5Options",
4 | "mvc": "1.0",
5 | "name": "HTML5",
6 | "option_html5_allow_fullscreen": true,
7 | "option_html5_browser_title": "Made in GameMaker Studio 2",
8 | "option_html5_centregame": false,
9 | "option_html5_display_cursor": true,
10 | "option_html5_facebook_app_display_name": "",
11 | "option_html5_facebook_id": "",
12 | "option_html5_flurry_enable": false,
13 | "option_html5_flurry_id": "",
14 | "option_html5_foldername": "html5game",
15 | "option_html5_google_analytics_enable": false,
16 | "option_html5_google_tracking_id": "",
17 | "option_html5_icon": "${base_options_dir}\/html5\/fav.ico",
18 | "option_html5_index": "",
19 | "option_html5_interpolate_pixels": false,
20 | "option_html5_jsprepend": "",
21 | "option_html5_loadingbar": "",
22 | "option_html5_localrunalert": true,
23 | "option_html5_outputdebugtoconsole": true,
24 | "option_html5_outputname": "index.html",
25 | "option_html5_scale": 0,
26 | "option_html5_splash_png": "${base_options_dir}\/html5\/splash.png",
27 | "option_html5_texture_page": "2048x2048",
28 | "option_html5_use_facebook": false,
29 | "option_html5_usebuiltinfont": true,
30 | "option_html5_usebuiltinparticles": true,
31 | "option_html5_usesplash": false,
32 | "option_html5_version": {
33 | "build": 0,
34 | "major": 1,
35 | "minor": 0,
36 | "revision": 0
37 | },
38 | "option_html5_webgl": 2
39 | }
--------------------------------------------------------------------------------
/tests/projects/OtherProject/options/html5/options_html5.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "75ac291e-7061-4bcb-8e8a-3b3545332d41",
3 | "modelName": "GMHtml5Options",
4 | "mvc": "1.0",
5 | "name": "HTML5",
6 | "option_html5_allow_fullscreen": true,
7 | "option_html5_browser_title": "Made in GameMaker Studio 2",
8 | "option_html5_centregame": false,
9 | "option_html5_display_cursor": true,
10 | "option_html5_facebook_app_display_name": "",
11 | "option_html5_facebook_id": "",
12 | "option_html5_flurry_enable": false,
13 | "option_html5_flurry_id": "",
14 | "option_html5_foldername": "html5game",
15 | "option_html5_google_analytics_enable": false,
16 | "option_html5_google_tracking_id": "",
17 | "option_html5_icon": "${base_options_dir}\/html5\/fav.ico",
18 | "option_html5_index": "",
19 | "option_html5_interpolate_pixels": false,
20 | "option_html5_jsprepend": "",
21 | "option_html5_loadingbar": "",
22 | "option_html5_localrunalert": true,
23 | "option_html5_outputdebugtoconsole": true,
24 | "option_html5_outputname": "index.html",
25 | "option_html5_scale": 0,
26 | "option_html5_splash_png": "${base_options_dir}\/html5\/splash.png",
27 | "option_html5_texture_page": "2048x2048",
28 | "option_html5_use_facebook": false,
29 | "option_html5_usebuiltinfont": true,
30 | "option_html5_usebuiltinparticles": true,
31 | "option_html5_usesplash": false,
32 | "option_html5_version": {
33 | "build": 0,
34 | "major": 1,
35 | "minor": 0,
36 | "revision": 0
37 | },
38 | "option_html5_webgl": 2
39 | }
--------------------------------------------------------------------------------
/tests/projects/SimpleProject/options/html5/options_html5.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "75ac291e-7061-4bcb-8e8a-3b3545332d41",
3 | "modelName": "GMHtml5Options",
4 | "mvc": "1.0",
5 | "name": "HTML5",
6 | "option_html5_allow_fullscreen": true,
7 | "option_html5_browser_title": "Made in GameMaker Studio 2",
8 | "option_html5_centregame": false,
9 | "option_html5_display_cursor": true,
10 | "option_html5_facebook_app_display_name": "",
11 | "option_html5_facebook_id": "",
12 | "option_html5_flurry_enable": false,
13 | "option_html5_flurry_id": "",
14 | "option_html5_foldername": "html5game",
15 | "option_html5_google_analytics_enable": false,
16 | "option_html5_google_tracking_id": "",
17 | "option_html5_icon": "${base_options_dir}\/html5\/fav.ico",
18 | "option_html5_index": "",
19 | "option_html5_interpolate_pixels": false,
20 | "option_html5_jsprepend": "",
21 | "option_html5_loadingbar": "",
22 | "option_html5_localrunalert": true,
23 | "option_html5_outputdebugtoconsole": true,
24 | "option_html5_outputname": "index.html",
25 | "option_html5_scale": 0,
26 | "option_html5_splash_png": "${base_options_dir}\/html5\/splash.png",
27 | "option_html5_texture_page": "2048x2048",
28 | "option_html5_use_facebook": false,
29 | "option_html5_usebuiltinfont": true,
30 | "option_html5_usebuiltinparticles": true,
31 | "option_html5_usesplash": false,
32 | "option_html5_version": {
33 | "build": 0,
34 | "major": 1,
35 | "minor": 0,
36 | "revision": 0
37 | },
38 | "option_html5_webgl": 2
39 | }
--------------------------------------------------------------------------------
/tests/mocks/projects/20_IgnorableFiles/options/html5/options_html5.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "75ac291e-7061-4bcb-8e8a-3b3545332d41",
3 | "modelName": "GMHtml5Options",
4 | "mvc": "1.0",
5 | "name": "HTML5",
6 | "option_html5_allow_fullscreen": true,
7 | "option_html5_browser_title": "Made in GameMaker Studio 2",
8 | "option_html5_centregame": false,
9 | "option_html5_display_cursor": true,
10 | "option_html5_facebook_app_display_name": "",
11 | "option_html5_facebook_id": "",
12 | "option_html5_flurry_enable": false,
13 | "option_html5_flurry_id": "",
14 | "option_html5_foldername": "html5game",
15 | "option_html5_google_analytics_enable": false,
16 | "option_html5_google_tracking_id": "",
17 | "option_html5_icon": "${base_options_dir}\/html5\/fav.ico",
18 | "option_html5_index": "",
19 | "option_html5_interpolate_pixels": false,
20 | "option_html5_jsprepend": "",
21 | "option_html5_loadingbar": "",
22 | "option_html5_localrunalert": true,
23 | "option_html5_outputdebugtoconsole": true,
24 | "option_html5_outputname": "index.html",
25 | "option_html5_scale": 0,
26 | "option_html5_splash_png": "${base_options_dir}\/html5\/splash.png",
27 | "option_html5_texture_page": "2048x2048",
28 | "option_html5_use_facebook": false,
29 | "option_html5_usebuiltinfont": true,
30 | "option_html5_usebuiltinparticles": true,
31 | "option_html5_usesplash": false,
32 | "option_html5_version": {
33 | "build": 0,
34 | "major": 1,
35 | "minor": 0,
36 | "revision": 0
37 | },
38 | "option_html5_webgl": 2
39 | }
--------------------------------------------------------------------------------
/tests/mocks/projects/21_UninstalledNewFiles/options/html5/options_html5.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "75ac291e-7061-4bcb-8e8a-3b3545332d41",
3 | "modelName": "GMHtml5Options",
4 | "mvc": "1.0",
5 | "name": "HTML5",
6 | "option_html5_allow_fullscreen": true,
7 | "option_html5_browser_title": "Made in GameMaker Studio 2",
8 | "option_html5_centregame": false,
9 | "option_html5_display_cursor": true,
10 | "option_html5_facebook_app_display_name": "",
11 | "option_html5_facebook_id": "",
12 | "option_html5_flurry_enable": false,
13 | "option_html5_flurry_id": "",
14 | "option_html5_foldername": "html5game",
15 | "option_html5_google_analytics_enable": false,
16 | "option_html5_google_tracking_id": "",
17 | "option_html5_icon": "${base_options_dir}\/html5\/fav.ico",
18 | "option_html5_index": "",
19 | "option_html5_interpolate_pixels": false,
20 | "option_html5_jsprepend": "",
21 | "option_html5_loadingbar": "",
22 | "option_html5_localrunalert": true,
23 | "option_html5_outputdebugtoconsole": true,
24 | "option_html5_outputname": "index.html",
25 | "option_html5_scale": 0,
26 | "option_html5_splash_png": "${base_options_dir}\/html5\/splash.png",
27 | "option_html5_texture_page": "2048x2048",
28 | "option_html5_use_facebook": false,
29 | "option_html5_usebuiltinfont": true,
30 | "option_html5_usebuiltinparticles": true,
31 | "option_html5_usesplash": false,
32 | "option_html5_version": {
33 | "build": 0,
34 | "major": 1,
35 | "minor": 0,
36 | "revision": 0
37 | },
38 | "option_html5_webgl": 2
39 | }
--------------------------------------------------------------------------------
/tests/projects/OtherProject/options/tvos/options_tvos.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "93566aad-c3b3-48a9-8fa7-9c5ee19f74ac",
3 | "modelName": "GMtvOSOptions",
4 | "mvc": "1.0",
5 | "name": "tvOS",
6 | "option_tvos_apple_sign_in": false,
7 | "option_tvos_bundle_name": "com.company.game",
8 | "option_tvos_display_cursor": false,
9 | "option_tvos_display_name": "Made in GameMaker Studio 2",
10 | "option_tvos_icon_1280": "${base_options_dir}\\tvos\\icons\\1280.png",
11 | "option_tvos_icon_400": "${base_options_dir}\\tvos\\icons\\400.png",
12 | "option_tvos_icon_400_2x": "${base_options_dir}\\tvos\\icons\\400_2x.png",
13 | "option_tvos_interpolate_pixels": true,
14 | "option_tvos_output_dir": "~\/GameMakerStudio2\/tvOS",
15 | "option_tvos_push_notifications": false,
16 | "option_tvos_scale": 0,
17 | "option_tvos_splash_time": 10,
18 | "option_tvos_splashscreen": "${base_options_dir}\\tvos\\splash\\splash.png",
19 | "option_tvos_splashscreen_2x": "${base_options_dir}\\tvos\\splash\\splash_2x.png",
20 | "option_tvos_team_id": "",
21 | "option_tvos_texture_page": "2048x2048",
22 | "option_tvos_topshelf": "${base_options_dir}\\tvos\\topshelf\\topshelf.png",
23 | "option_tvos_topshelf_2x": "${base_options_dir}\\tvos\\topshelf\\topshelf_2x.png",
24 | "option_tvos_topshelf_wide": "${base_options_dir}\\tvos\\topshelf\\topshelf_wide.png",
25 | "option_tvos_topshelf_wide_2x": "${base_options_dir}\\tvos\\topshelf\\topshelf_wide_2x.png",
26 | "option_tvos_version": {
27 | "build": 0,
28 | "major": 1,
29 | "minor": 0,
30 | "revision": 0
31 | }
32 | }
--------------------------------------------------------------------------------
/tests/projects/SimpleProject/options/tvos/options_tvos.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "93566aad-c3b3-48a9-8fa7-9c5ee19f74ac",
3 | "modelName": "GMtvOSOptions",
4 | "mvc": "1.0",
5 | "name": "tvOS",
6 | "option_tvos_apple_sign_in": false,
7 | "option_tvos_bundle_name": "com.company.game",
8 | "option_tvos_display_cursor": false,
9 | "option_tvos_display_name": "Made in GameMaker Studio 2",
10 | "option_tvos_icon_1280": "${base_options_dir}\\tvos\\icons\\1280.png",
11 | "option_tvos_icon_400": "${base_options_dir}\\tvos\\icons\\400.png",
12 | "option_tvos_icon_400_2x": "${base_options_dir}\\tvos\\icons\\400_2x.png",
13 | "option_tvos_interpolate_pixels": true,
14 | "option_tvos_output_dir": "~\/GameMakerStudio2\/tvOS",
15 | "option_tvos_push_notifications": false,
16 | "option_tvos_scale": 0,
17 | "option_tvos_splash_time": 10,
18 | "option_tvos_splashscreen": "${base_options_dir}\\tvos\\splash\\splash.png",
19 | "option_tvos_splashscreen_2x": "${base_options_dir}\\tvos\\splash\\splash_2x.png",
20 | "option_tvos_team_id": "",
21 | "option_tvos_texture_page": "2048x2048",
22 | "option_tvos_topshelf": "${base_options_dir}\\tvos\\topshelf\\topshelf.png",
23 | "option_tvos_topshelf_2x": "${base_options_dir}\\tvos\\topshelf\\topshelf_2x.png",
24 | "option_tvos_topshelf_wide": "${base_options_dir}\\tvos\\topshelf\\topshelf_wide.png",
25 | "option_tvos_topshelf_wide_2x": "${base_options_dir}\\tvos\\topshelf\\topshelf_wide_2x.png",
26 | "option_tvos_version": {
27 | "build": 0,
28 | "major": 1,
29 | "minor": 0,
30 | "revision": 0
31 | }
32 | }
--------------------------------------------------------------------------------
/tests/mocks/projects/20_IgnorableFiles/options/tvos/options_tvos.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "93566aad-c3b3-48a9-8fa7-9c5ee19f74ac",
3 | "modelName": "GMtvOSOptions",
4 | "mvc": "1.0",
5 | "name": "tvOS",
6 | "option_tvos_apple_sign_in": false,
7 | "option_tvos_bundle_name": "com.company.game",
8 | "option_tvos_display_cursor": false,
9 | "option_tvos_display_name": "Made in GameMaker Studio 2",
10 | "option_tvos_icon_1280": "${base_options_dir}\\tvos\\icons\\1280.png",
11 | "option_tvos_icon_400": "${base_options_dir}\\tvos\\icons\\400.png",
12 | "option_tvos_icon_400_2x": "${base_options_dir}\\tvos\\icons\\400_2x.png",
13 | "option_tvos_interpolate_pixels": true,
14 | "option_tvos_output_dir": "~\/GameMakerStudio2\/tvOS",
15 | "option_tvos_push_notifications": false,
16 | "option_tvos_scale": 0,
17 | "option_tvos_splash_time": 10,
18 | "option_tvos_splashscreen": "${base_options_dir}\\tvos\\splash\\splash.png",
19 | "option_tvos_splashscreen_2x": "${base_options_dir}\\tvos\\splash\\splash_2x.png",
20 | "option_tvos_team_id": "",
21 | "option_tvos_texture_page": "2048x2048",
22 | "option_tvos_topshelf": "${base_options_dir}\\tvos\\topshelf\\topshelf.png",
23 | "option_tvos_topshelf_2x": "${base_options_dir}\\tvos\\topshelf\\topshelf_2x.png",
24 | "option_tvos_topshelf_wide": "${base_options_dir}\\tvos\\topshelf\\topshelf_wide.png",
25 | "option_tvos_topshelf_wide_2x": "${base_options_dir}\\tvos\\topshelf\\topshelf_wide_2x.png",
26 | "option_tvos_version": {
27 | "build": 0,
28 | "major": 1,
29 | "minor": 0,
30 | "revision": 0
31 | }
32 | }
--------------------------------------------------------------------------------
/tests/mocks/projects/21_UninstalledNewFiles/options/tvos/options_tvos.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "93566aad-c3b3-48a9-8fa7-9c5ee19f74ac",
3 | "modelName": "GMtvOSOptions",
4 | "mvc": "1.0",
5 | "name": "tvOS",
6 | "option_tvos_apple_sign_in": false,
7 | "option_tvos_bundle_name": "com.company.game",
8 | "option_tvos_display_cursor": false,
9 | "option_tvos_display_name": "Made in GameMaker Studio 2",
10 | "option_tvos_icon_1280": "${base_options_dir}\\tvos\\icons\\1280.png",
11 | "option_tvos_icon_400": "${base_options_dir}\\tvos\\icons\\400.png",
12 | "option_tvos_icon_400_2x": "${base_options_dir}\\tvos\\icons\\400_2x.png",
13 | "option_tvos_interpolate_pixels": true,
14 | "option_tvos_output_dir": "~\/GameMakerStudio2\/tvOS",
15 | "option_tvos_push_notifications": false,
16 | "option_tvos_scale": 0,
17 | "option_tvos_splash_time": 10,
18 | "option_tvos_splashscreen": "${base_options_dir}\\tvos\\splash\\splash.png",
19 | "option_tvos_splashscreen_2x": "${base_options_dir}\\tvos\\splash\\splash_2x.png",
20 | "option_tvos_team_id": "",
21 | "option_tvos_texture_page": "2048x2048",
22 | "option_tvos_topshelf": "${base_options_dir}\\tvos\\topshelf\\topshelf.png",
23 | "option_tvos_topshelf_2x": "${base_options_dir}\\tvos\\topshelf\\topshelf_2x.png",
24 | "option_tvos_topshelf_wide": "${base_options_dir}\\tvos\\topshelf\\topshelf_wide.png",
25 | "option_tvos_topshelf_wide_2x": "${base_options_dir}\\tvos\\topshelf\\topshelf_wide_2x.png",
26 | "option_tvos_version": {
27 | "build": 0,
28 | "major": 1,
29 | "minor": 0,
30 | "revision": 0
31 | }
32 | }
--------------------------------------------------------------------------------
/tests/src/Service/JsonServiceTest.php:
--------------------------------------------------------------------------------
1 | value = 'some string';
14 | $testClass->boolean = true;
15 | $testClass->array = ['item 1', 'item 2', true, 1234];
16 |
17 | $this->assertEquals(
18 | JsonService::decode(json_encode($testClass)),
19 | $testClass
20 | );
21 | }
22 |
23 | public function testGetBrokenJson()
24 | {
25 | $this->expectException(MalformedJsonException::class);
26 | JsonService::decode('borked json');
27 | }
28 |
29 | public function testGetBrokenJsonWithJustCommas()
30 | {
31 | $this->expectException(MalformedJsonException::class);
32 | JsonService::decode('{"test":["data", "data2",]}');
33 | }
34 |
35 | /**
36 | * @dataProvider provideEncode
37 | */
38 | public function testEncode($string)
39 | {
40 | $this->assertSame(
41 | $string,
42 | JsonService::encode(JsonService::decode($string))
43 | );
44 | }
45 |
46 | public function provideEncode()
47 | {
48 | return [
49 | [file_get_contents(__DIR__ . '/../../projects/GMLProject/GMLProject.yyp')],
50 | [file_get_contents(__DIR__ . '/../../projects/OtherProject/OtherProject.yyp')],
51 | [file_get_contents(__DIR__ . '/../../projects/SimpleProject/SimpleProject.yyp')],
52 | ];
53 | }
54 | }
--------------------------------------------------------------------------------
/tests/projects/GMLProject/objects/obj_child/obj_child.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "fcb42a9e-cf5c-478f-aa06-8bcbe9e92af2",
3 | "modelName": "GMObject",
4 | "mvc": "1.0",
5 | "name": "obj_child",
6 | "eventList": [
7 | {
8 | "id": "1ccf6dd8-99a6-47fb-b7b9-69370dba6f07",
9 | "modelName": "GMEvent",
10 | "mvc": "1.0",
11 | "IsDnD": false,
12 | "collisionObjectId": "00000000-0000-0000-0000-000000000000",
13 | "enumb": 0,
14 | "eventtype": 3,
15 | "m_owner": "fcb42a9e-cf5c-478f-aa06-8bcbe9e92af2"
16 | },
17 | {
18 | "id": "7f46d566-bce8-4f2e-87e0-5e5f66f7d765",
19 | "modelName": "GMEvent",
20 | "mvc": "1.0",
21 | "IsDnD": false,
22 | "collisionObjectId": "00000000-0000-0000-0000-000000000000",
23 | "enumb": 0,
24 | "eventtype": 0,
25 | "m_owner": "fcb42a9e-cf5c-478f-aa06-8bcbe9e92af2"
26 | }
27 | ],
28 | "maskSpriteId": "00000000-0000-0000-0000-000000000000",
29 | "overriddenProperties": null,
30 | "parentObjectId": "b337607e-fe49-4e33-8428-d3728b9d9b23",
31 | "persistent": false,
32 | "physicsAngularDamping": 0.1,
33 | "physicsDensity": 0.5,
34 | "physicsFriction": 0.2,
35 | "physicsGroup": 0,
36 | "physicsKinematic": false,
37 | "physicsLinearDamping": 0.1,
38 | "physicsObject": false,
39 | "physicsRestitution": 0.1,
40 | "physicsSensor": false,
41 | "physicsShape": 1,
42 | "physicsShapePoints": null,
43 | "physicsStartAwake": true,
44 | "properties": null,
45 | "solid": false,
46 | "spriteId": "00000000-0000-0000-0000-000000000000",
47 | "visible": true
48 | }
--------------------------------------------------------------------------------
/tests/projects/GMLProject/objects/obj_parent/obj_parent.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "b337607e-fe49-4e33-8428-d3728b9d9b23",
3 | "modelName": "GMObject",
4 | "mvc": "1.0",
5 | "name": "obj_parent",
6 | "eventList": [
7 | {
8 | "id": "233adccc-c743-40d6-b90e-9da28019d250",
9 | "modelName": "GMEvent",
10 | "mvc": "1.0",
11 | "IsDnD": false,
12 | "collisionObjectId": "00000000-0000-0000-0000-000000000000",
13 | "enumb": 0,
14 | "eventtype": 0,
15 | "m_owner": "b337607e-fe49-4e33-8428-d3728b9d9b23"
16 | },
17 | {
18 | "id": "33a098f8-1cda-4a13-af9b-ef2eb71c6ae0",
19 | "modelName": "GMEvent",
20 | "mvc": "1.0",
21 | "IsDnD": false,
22 | "collisionObjectId": "00000000-0000-0000-0000-000000000000",
23 | "enumb": 0,
24 | "eventtype": 8,
25 | "m_owner": "b337607e-fe49-4e33-8428-d3728b9d9b23"
26 | }
27 | ],
28 | "maskSpriteId": "00000000-0000-0000-0000-000000000000",
29 | "overriddenProperties": null,
30 | "parentObjectId": "00000000-0000-0000-0000-000000000000",
31 | "persistent": false,
32 | "physicsAngularDamping": 0.1,
33 | "physicsDensity": 0.5,
34 | "physicsFriction": 0.2,
35 | "physicsGroup": 0,
36 | "physicsKinematic": false,
37 | "physicsLinearDamping": 0.1,
38 | "physicsObject": false,
39 | "physicsRestitution": 0.1,
40 | "physicsSensor": false,
41 | "physicsShape": 1,
42 | "physicsShapePoints": null,
43 | "physicsStartAwake": true,
44 | "properties": null,
45 | "solid": false,
46 | "spriteId": "00000000-0000-0000-0000-000000000000",
47 | "visible": true
48 | }
--------------------------------------------------------------------------------
/tests/projects/GMLProject/objects/obj_child_child/obj_child_child.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "ae41f6aa-5862-414b-8738-99e04eab6356",
3 | "modelName": "GMObject",
4 | "mvc": "1.0",
5 | "name": "obj_child_child",
6 | "eventList": [
7 | {
8 | "id": "b4dddd27-8de4-4614-997d-00866ec7eb98",
9 | "modelName": "GMEvent",
10 | "mvc": "1.0",
11 | "IsDnD": false,
12 | "collisionObjectId": "00000000-0000-0000-0000-000000000000",
13 | "enumb": 0,
14 | "eventtype": 3,
15 | "m_owner": "ae41f6aa-5862-414b-8738-99e04eab6356"
16 | },
17 | {
18 | "id": "8ac5118d-8083-4ad0-aec5-c142dc776cbb",
19 | "modelName": "GMEvent",
20 | "mvc": "1.0",
21 | "IsDnD": false,
22 | "collisionObjectId": "00000000-0000-0000-0000-000000000000",
23 | "enumb": 0,
24 | "eventtype": 0,
25 | "m_owner": "ae41f6aa-5862-414b-8738-99e04eab6356"
26 | }
27 | ],
28 | "maskSpriteId": "00000000-0000-0000-0000-000000000000",
29 | "overriddenProperties": null,
30 | "parentObjectId": "fcb42a9e-cf5c-478f-aa06-8bcbe9e92af2",
31 | "persistent": false,
32 | "physicsAngularDamping": 0.1,
33 | "physicsDensity": 0.5,
34 | "physicsFriction": 0.2,
35 | "physicsGroup": 0,
36 | "physicsKinematic": false,
37 | "physicsLinearDamping": 0.1,
38 | "physicsObject": false,
39 | "physicsRestitution": 0.1,
40 | "physicsSensor": false,
41 | "physicsShape": 1,
42 | "physicsShapePoints": null,
43 | "physicsStartAwake": true,
44 | "properties": null,
45 | "solid": false,
46 | "spriteId": "00000000-0000-0000-0000-000000000000",
47 | "visible": true
48 | }
--------------------------------------------------------------------------------
/src/Command/CleanCommand.php:
--------------------------------------------------------------------------------
1 | catalystService = $catalystService;
27 | $this->cleanService = $cleanService;
28 |
29 | parent::__construct();
30 | }
31 |
32 | protected function configure()
33 | {
34 | $this
35 | ->setDescription('Removes all dependencies')
36 | ->setHelp('Remove all dependencies, files and folders installed by Catalyst')
37 | ->addOption('dry-run', 'd', InputOption::VALUE_NONE, 'Don\'t touch any files');
38 | }
39 |
40 | protected function execute(InputInterface $input, OutputInterface $output): int
41 | {
42 | $output->writeln('Loading project...>');
43 | $thisProject = $this->catalystService->load();
44 |
45 | $this->cleanService->setOutput($output);
46 | $this->cleanService->clean($thisProject);
47 |
48 | $thisProject->save();
49 |
50 | StorageService::getInstance()->persist($input->getOption('dry-run'));
51 |
52 | return 0;
53 | }
54 |
55 | }
--------------------------------------------------------------------------------
/tests/projects/GMLProject/tilesets/ts_numbers/ts_numbers.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "809833bc-8be7-46e6-a95b-d75f9a4ae2ec",
3 | "modelName": "GMTileSet",
4 | "mvc": "1.11",
5 | "name": "ts_numbers",
6 | "auto_tile_sets": [
7 | {
8 | "id": "53b0c123-e55c-41f3-a504-f0ed302ea3b4",
9 | "modelName": "GMAutoTileSet",
10 | "mvc": "1.0",
11 | "closed_edge": false,
12 | "name": "autotile_1",
13 | "tiles": [
14 | 0,
15 | 0,
16 | 0,
17 | 0,
18 | 0,
19 | 0,
20 | 0,
21 | 0,
22 | 0,
23 | 0,
24 | 0,
25 | 0,
26 | 0,
27 | 0,
28 | 0,
29 | 0
30 | ]
31 | }
32 | ],
33 | "macroPageTiles": {
34 | "SerialiseData": null,
35 | "SerialiseHeight": 0,
36 | "SerialiseWidth": 0,
37 | "TileSerialiseData": [
38 |
39 | ]
40 | },
41 | "out_columns": 1,
42 | "out_tilehborder": 2,
43 | "out_tilevborder": 2,
44 | "spriteId": "60dd397d-bc63-4ce0-90e9-c1c8ab08e8b7",
45 | "sprite_no_export": false,
46 | "textureGroupId": "1225f6b0-ac20-43bd-a82e-be73fa0b6f4f",
47 | "tile_animation": {
48 | "AnimationCreationOrder": null,
49 | "FrameData": [
50 | 0
51 | ],
52 | "SerialiseFrameCount": 1
53 | },
54 | "tile_animation_frames": [
55 |
56 | ],
57 | "tile_animation_speed": 15,
58 | "tile_count": 1,
59 | "tileheight": 16,
60 | "tilehsep": 0,
61 | "tilevsep": 0,
62 | "tilewidth": 16,
63 | "tilexoff": 0,
64 | "tileyoff": 0
65 | }
--------------------------------------------------------------------------------
/tests/mocks/projects/21_UninstalledNewFiles/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | ### CATALYST ###
3 | views/f7c27459-f01b-2208-c908-74c52eddfd69.yy
4 | views/20d9d509-f96a-8c02-b2bd-0c6bd10380e8.yy
5 | views/99147da0-4268-bf21-da8f-70bc1d7c1795.yy
6 | views/9b614e31-b06f-e488-824e-5c5b74294740.yy
7 | scripts/test_suite_end
8 | scripts/test_suite_init
9 | scripts/test_assert_same
10 | views/eee014e8-3a24-3e03-097b-5139840b6272.yy
11 | scripts/dectohex
12 | scripts/hextodec
13 | views/044962af-a181-1b1c-cbba-bcd8f9e3e061.yy
14 | scripts/string_explode
15 | scripts/array_implode
16 | scripts/string_reverse
17 | scripts/string_mask
18 | scripts/url_encode
19 | scripts/url_decode
20 | scripts/string_ends_with
21 | scripts/string_starts_with
22 | scripts/string_prepend
23 | scripts/string_append
24 | scripts/string_trim
25 | views/5bf26e5c-6b8d-6f85-6855-ba5a8c7eb901.yy
26 | scripts/round_whole
27 | scripts/netevent_to_string
28 | scripts/debug_log
29 | views/20bdde62-c74a-4ed7-aceb-7381cff39e81.yy
30 | scripts/get_nearest_instances
31 | scripts/get_furthest_instances
32 | views/e82be4ff-fe27-7360-234a-428d1eed32c9.yy
33 | scripts/bit_from_byte
34 | views/2b926b36-4456-ea86-e7cb-988601cd996e.yy
35 | scripts/extract_header_from_string
36 | views/86336395-3fd9-67e2-0521-61854eb28499.yy
37 | scripts/pulse
38 | scripts/color_lerp
39 | views/07a5c14a-1669-529d-15f9-07aca623ae5e.yy
40 | views/2cc409bc-7fb6-888c-0cbe-970dbac6b6dd.yy
41 | views/06592b8c-6360-98c3-7674-38b1132a6d28.yy
42 | objects/ExtendedFunctions_obj_test
43 | objects/ExtendedFunctions_obj_near_instance
44 | objects/ExtendedFunctions_obj_test_near_instances
45 | views/9e33827b-4dfb-a705-9d51-1b9855b9f63f.yy
46 | views/857db639-f610-3c74-fb50-13ef1718f1b8.yy
47 | views/1ce2ee19-8869-2da7-fa91-c3c0671e3285.yy
48 | rooms/ExtendedFunctions_rm_test
49 | rooms/ExtendedFunctions_test_nearest
50 | ### CATALYST ###
--------------------------------------------------------------------------------
/src/Command/ResourcesCommand.php:
--------------------------------------------------------------------------------
1 | catalystService = $catalystService;
20 |
21 | parent::__construct();
22 | }
23 |
24 | protected function configure()
25 | {
26 | $this
27 | ->setDescription('List the projects resources')
28 | ->setHelp('List all project resources');
29 | }
30 |
31 | protected function execute(InputInterface $input, OutputInterface $output): int
32 | {
33 | try {
34 | $catalyst = $this->catalystService->load(realpath('.'));
35 | } catch (\Exception $e) {
36 | $output->writeLn('ERROR LOADING CATALYST PROJECT FILE: >' . $e->getMessage());
37 | return 126;
38 | }
39 |
40 | foreach ($catalyst->YoYoProjectEntity()->resources as $resource) {
41 | $output->writeln(
42 | sprintf(
43 | '[%s>] [%s>%s>] - %s',
44 | $resource->gmResource()->id,
45 | $resource->gmResource()->modelName,
46 | $resource->gmResource()->filterType ? ' / ' . $resource->gmResource()->filterType : '',
47 | $resource->gmResource()->getName()
48 | )
49 | );
50 | }
51 |
52 | return 0;
53 | }
54 | }
--------------------------------------------------------------------------------
/tests/mocks/projects/21_UninstalledNewFiles/objects/ExtendedFunctions_obj_test_near_instances/ExtendedFunctions_obj_test_near_instances.yy:
--------------------------------------------------------------------------------
1 | {
2 | "id": "c8a37efc-8cdc-43ec-b319-ba0ba6bc7584",
3 | "modelName": "GMObject",
4 | "mvc": "1.0",
5 | "name": "ExtendedFunctions_obj_test_near_instances",
6 | "eventList": [
7 | {
8 | "id": "118941ed-d13e-465b-bf03-d6cfb932c6cb",
9 | "modelName": "GMEvent",
10 | "mvc": "1.0",
11 | "IsDnD": false,
12 | "collisionObjectId": "00000000-0000-0000-0000-000000000000",
13 | "enumb": 0,
14 | "eventtype": 0,
15 | "m_owner": "c8a37efc-8cdc-43ec-b319-ba0ba6bc7584"
16 | },
17 | {
18 | "id": "5a1a8ab3-ec60-45fa-ace8-aebc3137bf0c",
19 | "modelName": "GMEvent",
20 | "mvc": "1.0",
21 | "IsDnD": false,
22 | "collisionObjectId": "00000000-0000-0000-0000-000000000000",
23 | "enumb": 0,
24 | "eventtype": 8,
25 | "m_owner": "c8a37efc-8cdc-43ec-b319-ba0ba6bc7584"
26 | }
27 | ],
28 | "maskSpriteId": "00000000-0000-0000-0000-000000000000",
29 | "overriddenProperties": null,
30 | "parentObjectId": "00000000-0000-0000-0000-000000000000",
31 | "persistent": false,
32 | "physicsAngularDamping": 0.1,
33 | "physicsDensity": 0.5,
34 | "physicsFriction": 0.2,
35 | "physicsGroup": 0,
36 | "physicsKinematic": false,
37 | "physicsLinearDamping": 0.1,
38 | "physicsObject": false,
39 | "physicsRestitution": 0.1,
40 | "physicsSensor": false,
41 | "physicsShape": 0,
42 | "physicsShapePoints": [
43 |
44 | ],
45 | "physicsStartAwake": true,
46 | "properties": null,
47 | "solid": false,
48 | "spriteId": "00000000-0000-0000-0000-000000000000",
49 | "visible": true
50 | }
--------------------------------------------------------------------------------