diff --git a/3D/BlockbenchModels/FloorEmitter/Floor_Emitter.bbmodel b/3D/BlockbenchModels/FloorEmitter/Floor_Emitter.bbmodel new file mode 100644 index 00000000..d038b144 --- /dev/null +++ b/3D/BlockbenchModels/FloorEmitter/Floor_Emitter.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.10","model_format":"free","box_uv":false},"name":"Floor_Emitter","model_identifier":"","visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"timeline_setups":[],"unhandled_root_fields":{},"reexport":{"codec":"gltf","codec_options":{"encoding":"ascii","scale":16,"embed_textures":true,"armature":false,"animations":true},"path":".\\Floor_Emitter.gltf","enabled":true},"resolution":{"width":32,"height":32},"elements":[{"name":"cylinder","color":3,"origin":[0,0,0],"rotation":[0,0,0],"export":true,"visibility":true,"locked":false,"render_order":"default","allow_mirror_modeling":true,"vertices":{"okFo":[0,-1,0],"2FhS":[0,3,0],"rUbL":[0.80385,-1,3],"kVan":[0.80385,3,3],"VVNw":[2.19615,-1,2.19615],"9DdX":[2.19615,3,2.19615],"jW1O":[3,-1,0.80385],"cOK8":[3,3,0.80385],"sUcg":[3,-1,-0.80385],"leax":[3,3,-0.80385],"WwIR":[2.19615,-1,-2.19615],"dr0G":[2.19615,3,-2.19615],"XMCw":[0.80385,-1,-3],"LUh9":[0.80385,3,-3],"LvIT":[-0.80385,-1,-3],"aXWA":[-0.80385,3,-3],"Va5r":[-2.19615,-1,-2.19615],"WPB0":[-2.19615,3,-2.19615],"J6oq":[-3,-1,-0.80385],"rWHf":[-3,3,-0.80385],"WTmS":[-3,-1,0.80385],"eSJv":[-3,3,0.80385],"m6hh":[-2.19615,-1,2.19615],"SrSS":[-2.19615,3,2.19615],"8YQd":[-0.80385,-1,3],"tgXm":[-0.80385,3,3]},"faces":{"YTrXMir9":{"uv":{"okFo":[3,11],"rUbL":[3.8038,8],"VVNw":[5.1962,8.8038]},"vertices":["VVNw","rUbL","okFo"],"texture":0},"cLOlpvM0":{"uv":{"kVan":[17.3038,4],"9DdX":[18.9114,4],"VVNw":[18.9114,8],"rUbL":[17.3038,8]},"vertices":["rUbL","VVNw","9DdX","kVan"],"texture":0},"ZG03m7fj":{"uv":{"2FhS":[11,3],"9DdX":[13.1962,5.1962],"kVan":[11.8038,6]},"vertices":["kVan","9DdX","2FhS"],"texture":0},"1LDwDO1m":{"uv":{"okFo":[3,11],"VVNw":[5.1962,8.8038],"jW1O":[6,10.1962]},"vertices":["jW1O","VVNw","okFo"],"texture":0},"wQTOmPbs":{"uv":{"9DdX":[0.0886,14],"cOK8":[1.6962,14],"jW1O":[1.6962,18],"VVNw":[0.0886,18]},"vertices":["VVNw","jW1O","cOK8","9DdX"],"texture":0},"H6y4VAG4":{"uv":{"2FhS":[11,3],"cOK8":[14,3.8038],"9DdX":[13.1962,5.1962]},"vertices":["9DdX","cOK8","2FhS"],"texture":0},"1M73dESG":{"uv":{"okFo":[3,11],"jW1O":[6,10.1962],"sUcg":[6,11.8038]},"vertices":["sUcg","jW1O","okFo"],"texture":0},"JkMoWenJ":{"uv":{"cOK8":[1.6962,14],"leax":[3.3038,14],"sUcg":[3.3038,18],"jW1O":[1.6962,18]},"vertices":["jW1O","sUcg","leax","cOK8"],"texture":0},"Xk6n6Nxt":{"uv":{"2FhS":[11,3],"leax":[14,2.1962],"cOK8":[14,3.8038]},"vertices":["cOK8","leax","2FhS"],"texture":0},"h182v64r":{"uv":{"okFo":[3,11],"sUcg":[6,11.8038],"WwIR":[5.1962,13.1962]},"vertices":["WwIR","sUcg","okFo"],"texture":0},"ZHw2g9cp":{"uv":{"leax":[3.3038,14],"dr0G":[4.9114,14],"WwIR":[4.9114,18],"sUcg":[3.3038,18]},"vertices":["sUcg","WwIR","dr0G","leax"],"texture":0},"hxvtWNIg":{"uv":{"2FhS":[11,3],"dr0G":[13.1962,0.8038],"leax":[14,2.1962]},"vertices":["leax","dr0G","2FhS"],"texture":0},"rZCOSNQa":{"uv":{"okFo":[3,11],"WwIR":[5.1962,13.1962],"XMCw":[3.8038,14]},"vertices":["XMCw","WwIR","okFo"],"texture":0},"mlxFLaNm":{"uv":{"dr0G":[14.0886,8],"LUh9":[15.6962,8],"XMCw":[15.6962,12],"WwIR":[14.0886,12]},"vertices":["WwIR","XMCw","LUh9","dr0G"],"texture":0},"kFg5zAtE":{"uv":{"2FhS":[11,3],"LUh9":[11.8038,0],"dr0G":[13.1962,0.8038]},"vertices":["dr0G","LUh9","2FhS"],"texture":0},"W1U2F1D9":{"uv":{"okFo":[3,11],"XMCw":[3.8038,14],"LvIT":[2.1962,14]},"vertices":["LvIT","XMCw","okFo"],"texture":0},"Xp9xZEMQ":{"uv":{"LUh9":[15.6962,8],"aXWA":[17.3038,8],"LvIT":[17.3038,12],"XMCw":[15.6962,12]},"vertices":["XMCw","LvIT","aXWA","LUh9"],"texture":0},"3bbTrogJ":{"uv":{"2FhS":[11,3],"aXWA":[10.1962,0],"LUh9":[11.8038,0]},"vertices":["LUh9","aXWA","2FhS"],"texture":0},"fVGrLEAh":{"uv":{"okFo":[3,11],"LvIT":[2.1962,14],"Va5r":[0.8038,13.1962]},"vertices":["Va5r","LvIT","okFo"],"texture":0},"spYlvh0i":{"uv":{"aXWA":[17.3038,8],"WPB0":[18.9114,8],"Va5r":[18.9114,12],"LvIT":[17.3038,12]},"vertices":["LvIT","Va5r","WPB0","aXWA"],"texture":0},"jvTcILOm":{"uv":{"2FhS":[11,3],"WPB0":[8.8038,0.8038],"aXWA":[10.1962,0]},"vertices":["aXWA","WPB0","2FhS"],"texture":0},"szWm5MfK":{"uv":{"okFo":[3,11],"Va5r":[0.8038,13.1962],"J6oq":[0,11.8038]},"vertices":["J6oq","Va5r","okFo"],"texture":0},"HKhpjA37":{"uv":{"WPB0":[14.0886,0],"rWHf":[15.6962,0],"J6oq":[15.6962,4],"Va5r":[14.0886,4]},"vertices":["Va5r","J6oq","rWHf","WPB0"],"texture":0},"DJKpuhmi":{"uv":{"2FhS":[11,3],"rWHf":[8,2.1962],"WPB0":[8.8038,0.8038]},"vertices":["WPB0","rWHf","2FhS"],"texture":0},"fCrulbjo":{"uv":{"okFo":[3,11],"J6oq":[0,11.8038],"WTmS":[0,10.1962]},"vertices":["WTmS","J6oq","okFo"],"texture":0},"qGYBiyeh":{"uv":{"rWHf":[15.6962,0],"eSJv":[17.3038,0],"WTmS":[17.3038,4],"J6oq":[15.6962,4]},"vertices":["J6oq","WTmS","eSJv","rWHf"],"texture":0},"rFE5WLQz":{"uv":{"2FhS":[11,3],"eSJv":[8,3.8038],"rWHf":[8,2.1962]},"vertices":["rWHf","eSJv","2FhS"],"texture":0},"R406WMgM":{"uv":{"okFo":[3,11],"WTmS":[0,10.1962],"m6hh":[0.8038,8.8038]},"vertices":["m6hh","WTmS","okFo"],"texture":0},"eNTLmHt3":{"uv":{"eSJv":[17.3038,0],"SrSS":[18.9114,0],"m6hh":[18.9114,4],"WTmS":[17.3038,4]},"vertices":["WTmS","m6hh","SrSS","eSJv"],"texture":0},"AO32U94O":{"uv":{"2FhS":[11,3],"SrSS":[8.8038,5.1962],"eSJv":[8,3.8038]},"vertices":["eSJv","SrSS","2FhS"],"texture":0},"h7jbGOJX":{"uv":{"okFo":[3,11],"m6hh":[0.8038,8.8038],"8YQd":[2.1962,8]},"vertices":["8YQd","m6hh","okFo"],"texture":0},"8D3fLgHi":{"uv":{"SrSS":[14.0886,4],"tgXm":[15.6962,4],"8YQd":[15.6962,8],"m6hh":[14.0886,8]},"vertices":["m6hh","8YQd","tgXm","SrSS"],"texture":0},"Tj9Mqie9":{"uv":{"2FhS":[11,3],"tgXm":[10.1962,6],"SrSS":[8.8038,5.1962]},"vertices":["SrSS","tgXm","2FhS"],"texture":0},"thp6hUEW":{"uv":{"okFo":[3,11],"8YQd":[2.1962,8],"rUbL":[3.8038,8]},"vertices":["rUbL","8YQd","okFo"],"texture":0},"dE2TSnKa":{"uv":{"tgXm":[15.6962,4],"kVan":[17.3038,4],"rUbL":[17.3038,8],"8YQd":[15.6962,8]},"vertices":["8YQd","rUbL","kVan","tgXm"],"texture":0},"Ak6e2Xj7":{"uv":{"2FhS":[11,3],"kVan":[11.8038,6],"tgXm":[10.1962,6]},"vertices":["tgXm","kVan","2FhS"],"texture":0}},"type":"mesh","uuid":"d65dc71b-cd05-fb98-b73f-7faa3c280d04"},{"name":"cylinder","color":4,"origin":[0,3,0],"rotation":[0,0,0],"export":true,"visibility":true,"locked":false,"render_order":"default","allow_mirror_modeling":true,"vertices":{"EQcx":[0,0,0],"JRjj":[0,1,0],"J0ur":[1.0718,0,4],"SZUL":[1.0718,1,4],"ozee":[2.9282,0,2.9282],"dx8E":[2.9282,1,2.9282],"NAjU":[4,0,1.0718],"wUZt":[4,1,1.0718],"N9hz":[4,0,-1.0718],"kYAs":[4,1,-1.0718],"H9UW":[2.9282,0,-2.9282],"QczS":[2.9282,1,-2.9282],"EPcI":[1.0718,0,-4],"uDEP":[1.0718,1,-4],"4jL2":[-1.0718,0,-4],"Bnvv":[-1.0718,1,-4],"QFxe":[-2.9282,0,-2.9282],"uwkm":[-2.9282,1,-2.9282],"Jc9n":[-4,0,-1.0718],"CvL8":[-4,1,-1.0718],"aszR":[-4,0,1.0718],"KAzn":[-4,1,1.0718],"DhWh":[-2.9282,0,2.9282],"TcPu":[-2.9282,1,2.9282],"I0sq":[-1.0718,0,4],"dj7x":[-1.0718,1,4]},"faces":{"yaLpClgA":{"uv":{"EQcx":[4,4],"J0ur":[5.0718,0],"ozee":[6.9282,1.0718]},"vertices":["ozee","J0ur","EQcx"],"texture":0},"VsbejqpY":{"uv":{"SZUL":[17.5718,14],"dx8E":[19.7154,14],"ozee":[19.7154,15],"J0ur":[17.5718,15]},"vertices":["J0ur","ozee","dx8E","SZUL"],"texture":0},"aRgOI9Pr":{"uv":{"JRjj":[10,11],"dx8E":[12.9282,13.9282],"SZUL":[11.0718,15]},"vertices":["SZUL","dx8E","JRjj"],"texture":0},"umVcGaoK":{"uv":{"EQcx":[4,4],"ozee":[6.9282,1.0718],"NAjU":[8,2.9282]},"vertices":["NAjU","ozee","EQcx"],"texture":0},"2aBsX8s0":{"uv":{"dx8E":[14.2846,12],"wUZt":[16.4282,12],"NAjU":[16.4282,13],"ozee":[14.2846,13]},"vertices":["ozee","NAjU","wUZt","dx8E"],"texture":0},"DE1RhlP6":{"uv":{"JRjj":[10,11],"wUZt":[14,12.0718],"dx8E":[12.9282,13.9282]},"vertices":["dx8E","wUZt","JRjj"],"texture":0},"1GMkMFa9":{"uv":{"EQcx":[4,4],"NAjU":[8,2.9282],"N9hz":[8,5.0718]},"vertices":["N9hz","NAjU","EQcx"],"texture":0},"z0gzCAMI":{"uv":{"wUZt":[16.4282,12],"kYAs":[18.5718,12],"N9hz":[18.5718,13],"NAjU":[16.4282,13]},"vertices":["NAjU","N9hz","kYAs","wUZt"],"texture":0},"TvmOitmR":{"uv":{"JRjj":[10,11],"kYAs":[14,9.9282],"wUZt":[14,12.0718]},"vertices":["wUZt","kYAs","JRjj"],"texture":0},"aWmuFst2":{"uv":{"EQcx":[4,4],"N9hz":[8,5.0718],"H9UW":[6.9282,6.9282]},"vertices":["H9UW","N9hz","EQcx"],"texture":0},"FdvVPBCX":{"uv":{"kYAs":[18.5718,12],"QczS":[20.7154,12],"H9UW":[20.7154,13],"N9hz":[18.5718,13]},"vertices":["N9hz","H9UW","QczS","kYAs"],"texture":0},"SzQCFuOP":{"uv":{"JRjj":[10,11],"QczS":[12.9282,8.0718],"kYAs":[14,9.9282]},"vertices":["kYAs","QczS","JRjj"],"texture":0},"W8zhmO8B":{"uv":{"EQcx":[4,4],"H9UW":[6.9282,6.9282],"EPcI":[5.0718,8]},"vertices":["EPcI","H9UW","EQcx"],"texture":0},"tANJ20RH":{"uv":{"QczS":[5.2846,15],"uDEP":[7.4282,15],"EPcI":[7.4282,16],"H9UW":[5.2846,16]},"vertices":["H9UW","EPcI","uDEP","QczS"],"texture":0},"FRr1slMD":{"uv":{"JRjj":[10,11],"uDEP":[11.0718,7],"QczS":[12.9282,8.0718]},"vertices":["QczS","uDEP","JRjj"],"texture":0},"r1fWhe8G":{"uv":{"EQcx":[4,4],"EPcI":[5.0718,8],"4jL2":[2.9282,8]},"vertices":["4jL2","EPcI","EQcx"],"texture":0},"kC8hW374":{"uv":{"uDEP":[7.4282,15],"Bnvv":[9.5718,15],"4jL2":[9.5718,16],"EPcI":[7.4282,16]},"vertices":["EPcI","4jL2","Bnvv","uDEP"],"texture":0},"hcwEa29I":{"uv":{"JRjj":[10,11],"Bnvv":[8.9282,7],"uDEP":[11.0718,7]},"vertices":["uDEP","Bnvv","JRjj"],"texture":0},"pjGMiLQn":{"uv":{"EQcx":[4,4],"4jL2":[2.9282,8],"QFxe":[1.0718,6.9282]},"vertices":["QFxe","4jL2","EQcx"],"texture":0},"jUwtWHes":{"uv":{"Bnvv":[9.5718,15],"uwkm":[11.7154,15],"QFxe":[11.7154,16],"4jL2":[9.5718,16]},"vertices":["4jL2","QFxe","uwkm","Bnvv"],"texture":0},"4Z8T2f5Y":{"uv":{"JRjj":[10,11],"uwkm":[7.0718,8.0718],"Bnvv":[8.9282,7]},"vertices":["Bnvv","uwkm","JRjj"],"texture":0},"v8RxGUNn":{"uv":{"EQcx":[4,4],"QFxe":[1.0718,6.9282],"Jc9n":[0,5.0718]},"vertices":["Jc9n","QFxe","EQcx"],"texture":0},"HddDUNRJ":{"uv":{"uwkm":[14.2846,13],"CvL8":[16.4282,13],"Jc9n":[16.4282,14],"QFxe":[14.2846,14]},"vertices":["QFxe","Jc9n","CvL8","uwkm"],"texture":0},"1P7b1Hy7":{"uv":{"JRjj":[10,11],"CvL8":[6,9.9282],"uwkm":[7.0718,8.0718]},"vertices":["uwkm","CvL8","JRjj"],"texture":0},"YO1GTcKc":{"uv":{"EQcx":[4,4],"Jc9n":[0,5.0718],"aszR":[0,2.9282]},"vertices":["aszR","Jc9n","EQcx"],"texture":0},"WvbF6MOj":{"uv":{"CvL8":[16.4282,13],"KAzn":[18.5718,13],"aszR":[18.5718,14],"Jc9n":[16.4282,14]},"vertices":["Jc9n","aszR","KAzn","CvL8"],"texture":0},"NVgY1QGa":{"uv":{"JRjj":[10,11],"KAzn":[6,12.0718],"CvL8":[6,9.9282]},"vertices":["CvL8","KAzn","JRjj"],"texture":0},"WoaWvkkg":{"uv":{"EQcx":[4,4],"aszR":[0,2.9282],"DhWh":[1.0718,1.0718]},"vertices":["DhWh","aszR","EQcx"],"texture":0},"kkS7LWRQ":{"uv":{"KAzn":[18.5718,13],"TcPu":[20.7154,13],"DhWh":[20.7154,14],"aszR":[18.5718,14]},"vertices":["aszR","DhWh","TcPu","KAzn"],"texture":0},"yolMVAMw":{"uv":{"JRjj":[10,11],"TcPu":[7.0718,13.9282],"KAzn":[6,12.0718]},"vertices":["KAzn","TcPu","JRjj"],"texture":0},"wbae6v6I":{"uv":{"EQcx":[4,4],"DhWh":[1.0718,1.0718],"I0sq":[2.9282,0]},"vertices":["I0sq","DhWh","EQcx"],"texture":0},"BIflV1l9":{"uv":{"TcPu":[13.2846,14],"dj7x":[15.4282,14],"I0sq":[15.4282,15],"DhWh":[13.2846,15]},"vertices":["DhWh","I0sq","dj7x","TcPu"],"texture":0},"OYOYgSjU":{"uv":{"JRjj":[10,11],"dj7x":[8.9282,15],"TcPu":[7.0718,13.9282]},"vertices":["TcPu","dj7x","JRjj"],"texture":0},"Fhe54raX":{"uv":{"EQcx":[4,4],"I0sq":[2.9282,0],"J0ur":[5.0718,0]},"vertices":["J0ur","I0sq","EQcx"],"texture":0},"Cb7Varxj":{"uv":{"dj7x":[15.4282,14],"SZUL":[17.5718,14],"J0ur":[17.5718,15],"I0sq":[15.4282,15]},"vertices":["I0sq","J0ur","SZUL","dj7x"],"texture":0},"hZZgfxva":{"uv":{"JRjj":[10,11],"SZUL":[11.0718,15],"dj7x":[8.9282,15]},"vertices":["dj7x","SZUL","JRjj"],"texture":0}},"type":"mesh","uuid":"314e1bd1-04f0-65ba-8d71-fbe0f805d1d1"}],"outliner":[{"name":"Model","origin":[0,0,0],"color":0,"uuid":"172a7459-a334-6d38-4af9-f38c91f53a49","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"selected":false,"children":[{"name":"Hole","origin":[0,0,0],"color":0,"uuid":"ca7b6b86-0f34-47ad-c68d-61eb8fc6a2fb","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"selected":false,"children":[]},{"name":"Emitter","origin":[0,0,0],"color":0,"uuid":"7622d56f-2dd5-4f77-15d3-fa5ba8670d91","export":true,"mirror_uv":false,"isOpen":true,"locked":false,"visibility":true,"autouv":0,"selected":false,"children":["d65dc71b-cd05-fb98-b73f-7faa3c280d04","314e1bd1-04f0-65ba-8d71-fbe0f805d1d1"]}]}],"textures":[{"path":"D:\\Maddo\\cirnogodot\\3D\\BlockbenchModels\\FloorEmitter\\Floor_Emitter_Texture.png","name":"Floor_Emitter_Texture.png","folder":"block","namespace":"","id":"0","group":"","width":32,"height":32,"uv_width":32,"uv_height":32,"particle":false,"use_as_default":false,"layers_enabled":false,"sync_to_project":"","render_mode":"default","render_sides":"auto","pbr_channel":"color","frame_time":1,"frame_order_type":"loop","frame_order":"","frame_interpolate":false,"visible":true,"internal":true,"saved":true,"uuid":"1f1e7f92-84c7-0a1c-71a7-62bd78417521","relative_path":"Floor_Emitter_Texture.png","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAARhJREFUWEdjZGBgYJi7ef9/EI0Okn0dGbdceYhV7uX9e1jVYzMHnxgjLsthmsQVlRgsVGRQzDhx5wkDzAHVyeFguda5KxlADh55DkD28YCEAF0cgC1e0RMhKC28ePWK+mkAV7CiJ16yHYAvG54+fBlrop7RlYc191A1DYAsv3vhJENEbgqKI1ZMnsOgbGDOYGqrS9tyAOQAkCXooQATA9HIZQDINVQPAWTLQBYgO2pQOABb0U21kpBQFIDSBy6we9dSorMjzrqAUCKkqQNgiSmjbBLWmpBaloNCkFFCTOw/qCZDBqCsRo3gJSY9YHUAOdmJGMuwqaFaiUa2A8jVSC19RGcXalmIbs6oA0ZDYDQERkNgNARGQwAA+pHTIWR+MO8AAAAASUVORK5CYII="}],"export_options":{"gltf":{"encoding":"ascii","scale":16,"embed_textures":true,"armature":false,"animations":true}}} \ No newline at end of file diff --git a/3D/BlockbenchModels/FloorEmitter/Floor_Emitter.gltf b/3D/BlockbenchModels/FloorEmitter/Floor_Emitter.gltf new file mode 100644 index 00000000..d6a43d54 --- /dev/null +++ b/3D/BlockbenchModels/FloorEmitter/Floor_Emitter.gltf @@ -0,0 +1 @@ +{"asset":{"version":"2.0","generator":"Blockbench 4.12.5 glTF exporter"},"scenes":[{"nodes":[5],"name":"blockbench_export"}],"scene":0,"nodes":[{"name":"Hole"},{"translation":[0,0.1875,0],"name":"cylinder","mesh":0},{"name":"cylinder","mesh":1},{"name":"Emitter","children":[1,2]},{"name":"Model","children":[0,3]},{"children":[4]}],"bufferViews":[{"buffer":0,"byteOffset":0,"byteLength":1440,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":1440,"byteLength":1440,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":2880,"byteLength":960,"target":34962,"byteStride":8},{"buffer":0,"byteOffset":3840,"byteLength":288,"target":34963},{"buffer":0,"byteOffset":4128,"byteLength":1440,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":5568,"byteLength":1440,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":7008,"byteLength":960,"target":34962,"byteStride":8},{"buffer":0,"byteOffset":7968,"byteLength":288,"target":34963}],"buffers":[{"byteLength":8256,"uri":"data:application/octet-stream;base64,r2c7PgAAAACvZzs+ozCJPQAAAAAAAIA+AAAAAAAAAAAAAAAAozCJPQAAAAAAAIA+r2c7PgAAAACvZzs+r2c7PgAAgD2vZzs+ozCJPQAAgD0AAIA+ozCJPQAAgD0AAIA+r2c7PgAAgD2vZzs+AAAAAAAAgD0AAAAAAACAPgAAAACjMIk9r2c7PgAAAACvZzs+AAAAAAAAAAAAAAAAr2c7PgAAAACvZzs+AACAPgAAAACjMIk9AACAPgAAgD2jMIk9r2c7PgAAgD2vZzs+r2c7PgAAgD2vZzs+AACAPgAAgD2jMIk9AAAAAAAAgD0AAAAAAACAPgAAAACjMIm9AACAPgAAAACjMIk9AAAAAAAAAAAAAAAAAACAPgAAAACjMIk9AACAPgAAAACjMIm9AACAPgAAgD2jMIm9AACAPgAAgD2jMIk9AACAPgAAgD2jMIk9AACAPgAAgD2jMIm9AAAAAAAAgD0AAAAAr2c7PgAAAACvZzu+AACAPgAAAACjMIm9AAAAAAAAAAAAAAAAAACAPgAAAACjMIm9r2c7PgAAAACvZzu+r2c7PgAAgD2vZzu+AACAPgAAgD2jMIm9AACAPgAAgD2jMIm9r2c7PgAAgD2vZzu+AAAAAAAAgD0AAAAAozCJPQAAAAAAAIC+r2c7PgAAAACvZzu+AAAAAAAAAAAAAAAAr2c7PgAAAACvZzu+ozCJPQAAAAAAAIC+ozCJPQAAgD0AAIC+r2c7PgAAgD2vZzu+r2c7PgAAgD2vZzu+ozCJPQAAgD0AAIC+AAAAAAAAgD0AAAAAozCJvQAAAAAAAIC+ozCJPQAAAAAAAIC+AAAAAAAAAAAAAAAAozCJPQAAAAAAAIC+ozCJvQAAAAAAAIC+ozCJvQAAgD0AAIC+ozCJPQAAgD0AAIC+ozCJPQAAgD0AAIC+ozCJvQAAgD0AAIC+AAAAAAAAgD0AAAAAr2c7vgAAAACvZzu+ozCJvQAAAAAAAIC+AAAAAAAAAAAAAAAAozCJvQAAAAAAAIC+r2c7vgAAAACvZzu+r2c7vgAAgD2vZzu+ozCJvQAAgD0AAIC+ozCJvQAAgD0AAIC+r2c7vgAAgD2vZzu+AAAAAAAAgD0AAAAAAACAvgAAAACjMIm9r2c7vgAAAACvZzu+AAAAAAAAAAAAAAAAr2c7vgAAAACvZzu+AACAvgAAAACjMIm9AACAvgAAgD2jMIm9r2c7vgAAgD2vZzu+r2c7vgAAgD2vZzu+AACAvgAAgD2jMIm9AAAAAAAAgD0AAAAAAACAvgAAAACjMIk9AACAvgAAAACjMIm9AAAAAAAAAAAAAAAAAACAvgAAAACjMIm9AACAvgAAAACjMIk9AACAvgAAgD2jMIk9AACAvgAAgD2jMIm9AACAvgAAgD2jMIm9AACAvgAAgD2jMIk9AAAAAAAAgD0AAAAAr2c7vgAAAACvZzs+AACAvgAAAACjMIk9AAAAAAAAAAAAAAAAAACAvgAAAACjMIk9r2c7vgAAAACvZzs+r2c7vgAAgD2vZzs+AACAvgAAgD2jMIk9AACAvgAAgD2jMIk9r2c7vgAAgD2vZzs+AAAAAAAAgD0AAAAAozCJvQAAAAAAAIA+r2c7vgAAAACvZzs+AAAAAAAAAAAAAAAAr2c7vgAAAACvZzs+ozCJvQAAAAAAAIA+ozCJvQAAgD0AAIA+r2c7vgAAgD2vZzs+r2c7vgAAgD2vZzs+ozCJvQAAgD0AAIA+AAAAAAAAgD0AAAAAozCJPQAAAAAAAIA+ozCJvQAAAAAAAIA+AAAAAAAAAAAAAAAAozCJvQAAAAAAAIA+ozCJPQAAAAAAAIA+ozCJPQAAgD0AAIA+ozCJvQAAgD0AAIA+ozCJvQAAgD0AAIA+ozCJPQAAgD0AAIA+AAAAAAAAgD0AAAAAAAAAgAAAgL8AAAAAAAAAgAAAgL8AAAAAAAAAgAAAgL8AAAAAAAAAPwAAAADXs10/AAAAPwAAAADXs10/AAAAPwAAAADXs10/AAAAPwAAAADXs10/AAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAgAAAgL8AAAAAAAAAgAAAgL8AAAAAAAAAgAAAgL8AAAAA17NdPwAAAAAAAAA/17NdPwAAAAAAAAA/17NdPwAAAAAAAAA/17NdPwAAAAAAAAA/AAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAA17NdPwAAAAAAAAC/17NdPwAAAAAAAAC/17NdPwAAAAAAAAC/17NdPwAAAAAAAAC/AAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAPwAAAADXs12/AAAAPwAAAADXs12/AAAAPwAAAADXs12/AAAAPwAAAADXs12/AAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAA7NnuJQAAAAAAAIC/7NnuJQAAAAAAAIC/7NnuJQAAAAAAAIC/7NnuJQAAAAAAAIC/AAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAvwAAAADXs12/AAAAvwAAAADXs12/AAAAvwAAAADXs12/AAAAvwAAAADXs12/AAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAA17NdvwAAAAAAAAC/17NdvwAAAAAAAAC/17NdvwAAAAAAAAC/17NdvwAAAAAAAAC/AAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAACAvwAAAADs2W6lAACAvwAAAADs2W6lAACAvwAAAADs2W6lAACAvwAAAADs2W6lAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgD8AAACAAAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAAAAAgL8AAACA17NdvwAAAAAAAAA/17NdvwAAAAAAAAA/17NdvwAAAAAAAAA/17NdvwAAAAAAAAA/AAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAvwAAAADXs10/AAAAvwAAAADXs10/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AABAPgAAgL30yE29AAAAAAAAgL0AAAAAAABAPgAAgL30yE29w40MPgAAgL3DjQy+w40MPgAAQD7DjQy+AABAPgAAQD70yE29AABAPgAAQD70yE29w40MPgAAQD7DjQy+AAAAAAAAQD4AAAAA9MhNPQAAgL0AAEC+w40MPgAAgL3DjQy+AAAAAAAAgL0AAAAAw40MPgAAgL3DjQy+9MhNPQAAgL0AAEC+9MhNPQAAQD4AAEC+w40MPgAAQD7DjQy+w40MPgAAQD7DjQy+9MhNPQAAQD4AAEC+AAAAAAAAQD4AAAAA9MhNvQAAgL0AAEC+9MhNPQAAgL0AAEC+AAAAAAAAgL0AAAAA9MhNPQAAgL0AAEC+9MhNvQAAgL0AAEC+9MhNvQAAQD4AAEC+9MhNPQAAQD4AAEC+9MhNPQAAQD4AAEC+9MhNvQAAQD4AAEC+AAAAAAAAQD4AAAAAw40MvgAAgL3DjQy+9MhNvQAAgL0AAEC+AAAAAAAAgL0AAAAA9MhNvQAAgL0AAEC+w40MvgAAgL3DjQy+w40MvgAAQD7DjQy+9MhNvQAAQD4AAEC+9MhNvQAAQD4AAEC+w40MvgAAQD7DjQy+AAAAAAAAQD4AAAAAAABAvgAAgL30yE29w40MvgAAgL3DjQy+AAAAAAAAgL0AAAAAw40MvgAAgL3DjQy+AABAvgAAgL30yE29AABAvgAAQD70yE29w40MvgAAQD7DjQy+w40MvgAAQD7DjQy+AABAvgAAQD70yE29AAAAAAAAQD4AAAAAAABAvgAAgL30yE09AABAvgAAgL30yE29AAAAAAAAgL0AAAAAAABAvgAAgL30yE29AABAvgAAgL30yE09AABAvgAAQD70yE09AABAvgAAQD70yE29AABAvgAAQD70yE29AABAvgAAQD70yE09AAAAAAAAQD4AAAAAw40MvgAAgL3DjQw+AABAvgAAgL30yE09AAAAAAAAgL0AAAAAAABAvgAAgL30yE09w40MvgAAgL3DjQw+w40MvgAAQD7DjQw+AABAvgAAQD70yE09AABAvgAAQD70yE09w40MvgAAQD7DjQw+AAAAAAAAQD4AAAAA9MhNvQAAgL0AAEA+w40MvgAAgL3DjQw+AAAAAAAAgL0AAAAAw40MvgAAgL3DjQw+9MhNvQAAgL0AAEA+9MhNvQAAQD4AAEA+w40MvgAAQD7DjQw+w40MvgAAQD7DjQw+9MhNvQAAQD4AAEA+AAAAAAAAQD4AAAAA9MhNPQAAgL0AAEA+9MhNvQAAgL0AAEA+AAAAAAAAgL0AAAAA9MhNvQAAgL0AAEA+9MhNPQAAgL0AAEA+9MhNPQAAQD4AAEA+9MhNvQAAQD4AAEA+9MhNvQAAQD4AAEA+9MhNPQAAQD4AAEA+AAAAAAAAQD4AAAAAAAAAgAAAgL8AAAAAAAAAgAAAgL8AAAAAAAAAgAAAgL8AAAAAAAAAPwAAAADXs10/AAAAPwAAAADXs10/AAAAPwAAAADXs10/AAAAPwAAAADXs10/AAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAgAAAgL8AAAAAAAAAgAAAgL8AAAAAAAAAgAAAgL8AAAAA17NdPwAAAAAAAAA/17NdPwAAAAAAAAA/17NdPwAAAAAAAAA/17NdPwAAAAAAAAA/AAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAA17NdPwAAAAAAAAC/17NdPwAAAAAAAAC/17NdPwAAAAAAAAC/17NdPwAAAAAAAAC/AAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAPwAAAADXs12/AAAAPwAAAADXs12/AAAAPwAAAADXs12/AAAAPwAAAADXs12/AAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAA8jufJQAAAAAAAIC/8jufJQAAAAAAAIC/8jufJQAAAAAAAIC/8jufJQAAAAAAAIC/AAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgL8AAAAA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"}],"accessors":[{"bufferView":0,"componentType":5126,"count":120,"max":[0.25,0.0625,0.25],"min":[-0.25,0,-0.25],"type":"VEC3"},{"bufferView":1,"componentType":5126,"count":120,"max":[1,1,1],"min":[-1,-1,-1],"type":"VEC3"},{"bufferView":2,"componentType":5126,"count":120,"max":[0.6473562717437744,0.5],"min":[0,0],"type":"VEC2"},{"bufferView":3,"componentType":5123,"count":144,"max":[119],"min":[0],"type":"SCALAR"},{"bufferView":4,"componentType":5126,"count":120,"max":[0.1875,0.1875,0.1875],"min":[-0.1875,-0.0625,-0.1875],"type":"VEC3"},{"bufferView":5,"componentType":5126,"count":120,"max":[1,1,1],"min":[-1,-1,-1],"type":"VEC3"},{"bufferView":6,"componentType":5126,"count":120,"max":[0.5909812450408936,0.5625],"min":[0,0],"type":"VEC2"},{"bufferView":7,"componentType":5123,"count":144,"max":[119],"min":[0],"type":"SCALAR"}],"materials":[{"pbrMetallicRoughness":{"metallicFactor":0,"roughnessFactor":1,"baseColorTexture":{"index":0}},"alphaMode":"MASK","alphaCutoff":0.05,"doubleSided":true}],"textures":[{"sampler":0,"source":0,"name":"Floor_Emitter_Texture"}],"samplers":[{"magFilter":9728,"minFilter":9728,"wrapS":33071,"wrapT":33071}],"images":[{"mimeType":"image/png","uri":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAARhJREFUWEdjZGBgYJi7ef9/EI0Okn0dGbdceYhV7uX9e1jVYzMHnxgjLsthmsQVlRgsVGRQzDhx5wkDzAHVyeFguda5KxlADh55DkD28YCEAF0cgC1e0RMhKC28ePWK+mkAV7CiJ16yHYAvG54+fBlrop7RlYc191A1DYAsv3vhJENEbgqKI1ZMnsOgbGDOYGqrS9tyAOQAkCXooQATA9HIZQDINVQPAWTLQBYgO2pQOABb0U21kpBQFIDSBy6we9dSorMjzrqAUCKkqQNgiSmjbBLWmpBaloNCkFFCTOw/qCZDBqCsRo3gJSY9YHUAOdmJGMuwqaFaiUa2A8jVSC19RGcXalmIbs6oA0ZDYDQERkNgNARGQwAA+pHTIWR+MO8AAAAASUVORK5CYII="}],"meshes":[{"primitives":[{"mode":4,"attributes":{"POSITION":0,"NORMAL":1,"TEXCOORD_0":2},"indices":3,"material":0}]},{"primitives":[{"mode":4,"attributes":{"POSITION":4,"NORMAL":5,"TEXCOORD_0":6},"indices":7,"material":0}]}]} \ No newline at end of file diff --git a/3D/BlockbenchModels/FloorEmitter/Floor_Emitter.gltf.import b/3D/BlockbenchModels/FloorEmitter/Floor_Emitter.gltf.import new file mode 100644 index 00000000..d27241f7 --- /dev/null +++ b/3D/BlockbenchModels/FloorEmitter/Floor_Emitter.gltf.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://sy821kigcoqx" +path="res://.godot/imported/Floor_Emitter.gltf-1cce213213ebe4efb5932c1347f0601f.scn" + +[deps] + +source_file="res://3D/BlockbenchModels/FloorEmitter/Floor_Emitter.gltf" +dest_files=["res://.godot/imported/Floor_Emitter.gltf-1cce213213ebe4efb5932c1347f0601f.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +nodes/use_node_type_suffixes=true +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/3D/BlockbenchModels/FloorEmitter/Floor_Emitter_0.png b/3D/BlockbenchModels/FloorEmitter/Floor_Emitter_0.png new file mode 100644 index 00000000..54f1d6ac --- /dev/null +++ b/3D/BlockbenchModels/FloorEmitter/Floor_Emitter_0.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:13dd7efcc3e37b332f3bb4434ace23b9896b438a9f1d9f220307d7a7b42f7a1d +size 350 diff --git a/3D/BlockbenchModels/FloorEmitter/Floor_Emitter_0.png.import b/3D/BlockbenchModels/FloorEmitter/Floor_Emitter_0.png.import new file mode 100644 index 00000000..3c37f248 --- /dev/null +++ b/3D/BlockbenchModels/FloorEmitter/Floor_Emitter_0.png.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://1cuticategid" +path="res://.godot/imported/Floor_Emitter_0.png-80f8ab069919460163571a408c1b25cc.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "03044050c81c04b0e47e67d76e9b6c81" +} + +[deps] + +source_file="res://3D/BlockbenchModels/FloorEmitter/Floor_Emitter_0.png" +dest_files=["res://.godot/imported/Floor_Emitter_0.png-80f8ab069919460163571a408c1b25cc.ctex"] + +[params] + +compress/mode=3 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/3D/BlockbenchModels/FloorEmitter/Floor_Emitter_Texture.png b/3D/BlockbenchModels/FloorEmitter/Floor_Emitter_Texture.png new file mode 100644 index 00000000..4b833b52 --- /dev/null +++ b/3D/BlockbenchModels/FloorEmitter/Floor_Emitter_Texture.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cb050586a3371bc0ddc8255b7ff1764f6fa6fba51a35bb19883eb8441868a7f8 +size 355 diff --git a/3D/BlockbenchModels/FloorEmitter/Floor_Emitter_Texture.png.import b/3D/BlockbenchModels/FloorEmitter/Floor_Emitter_Texture.png.import new file mode 100644 index 00000000..a0087cff --- /dev/null +++ b/3D/BlockbenchModels/FloorEmitter/Floor_Emitter_Texture.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://vak6buokgaem" +path="res://.godot/imported/Floor_Emitter_Texture.png-65ae20c317b4847f0ac11fbf70da0349.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://3D/BlockbenchModels/FloorEmitter/Floor_Emitter_Texture.png" +dest_files=["res://.godot/imported/Floor_Emitter_Texture.png-65ae20c317b4847f0ac11fbf70da0349.ctex"] + +[params] + +compress/mode=3 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/3D/MapModels/actor_capacitor_mini.glb b/3D/MapModels/actor_capacitor_mini.glb index ac9d2792..eb147c6c 100644 Binary files a/3D/MapModels/actor_capacitor_mini.glb and b/3D/MapModels/actor_capacitor_mini.glb differ diff --git a/3D/MapScenes/TestLevel.tscn b/3D/MapScenes/TestLevel.tscn index 4e380108..86eb9e5f 100644 --- a/3D/MapScenes/TestLevel.tscn +++ b/3D/MapScenes/TestLevel.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=270 format=4 uid="uid://c8gtrjf2xeue7"] +[gd_scene load_steps=272 format=4 uid="uid://c8gtrjf2xeue7"] [ext_resource type="Script" uid="uid://kno58homctew" path="res://addons/func_godot/src/map/func_godot_map.gd" id="1_n6h0p"] [ext_resource type="Script" uid="uid://crpgy1o73rtlx" path="res://Scripts/Utils/MapProxy3D.cs" id="1_pvlbf"] @@ -64,6 +64,8 @@ [ext_resource type="PackedScene" uid="uid://c0262d4ffxx1w" path="res://3D/Scenes/Props/Door_Path_3D.tscn" id="57_orfn6"] [ext_resource type="PackedScene" uid="uid://c0fu2ul3gg8fl" path="res://3D/BlockbenchModels/Tank/Tank_3D_Huge.tscn" id="57_r8ono"] [ext_resource type="PackedScene" uid="uid://dx4denbc7xkfm" path="res://3D/Scenes/Props/Posters/Poster_Warning.tscn" id="63_booe2"] +[ext_resource type="PackedScene" uid="uid://d4ek8xjuh6y11" path="res://3D/Scenes/Props/Floor_Emitter_3D.tscn" id="63_r8ono"] +[ext_resource type="Resource" uid="uid://bbogxl60hvdp1" path="res://Resources/BulletScripts/Emitter_Sprial_Test_Bullets.tres" id="64_fi82p"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_aq78g"] albedo_texture = ExtResource("25_btjo4") @@ -2199,6 +2201,10 @@ metadata/_edit_group_ = true [node name="Door" parent="Props" instance=ExtResource("57_orfn6")] transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 7.38277, 2, 25.0228) +[node name="FloorEmitter" parent="Props" instance=ExtResource("63_r8ono")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 24.9526, 1.32944, 25.5859) +Script = ExtResource("64_fi82p") + [node name="Light" type="Node3D" parent="."] [node name="OmniLight3D4" type="OmniLight3D" parent="Light"] diff --git a/3D/Maps/Level1.map b/3D/Maps/Level1.map index a0a3fc2e..446d92b4 100644 --- a/3D/Maps/Level1.map +++ b/3D/Maps/Level1.map @@ -1517,6 +1517,106 @@ ( 196 372 20 ) ( 197 372 20 ) ( 196 372 21 ) Floors/Floor26 [ 1 0 0 0 ] [ 0 0 -1 0 ] 270 1 1 ( 196 372 20 ) ( 196 372 21 ) ( 196 373 20 ) Floors/Floor26 [ 0 1 0 -4 ] [ 0 0 -1 0 ] 90 1 1 } +// brush 168 +{ +( 244 624 20 ) ( 244 596 20 ) ( 244 624 16 ) __TB_empty [ 0 1 0 -8 ] [ 0 0 -1 -4 ] 90 1 1 +( 252 596 16 ) ( 244 596 16 ) ( 252 596 20 ) __TB_empty [ 1 0 0 28 ] [ 0 0 -1 0 ] 180 1 1 +( 252 624 16 ) ( 244 624 16 ) ( 252 596 16 ) __TB_empty [ -1 0 0 0 ] [ 0 -1 0 8 ] 90 1 1 +( 252 596 20 ) ( 244 596 20 ) ( 252 624 20 ) __TB_empty [ 1 0 0 0 ] [ 0 -1 0 8 ] 90 1 1 +( 252 624 20 ) ( 244 624 20 ) ( 252 624 16 ) __TB_empty [ -1 0 0 -28 ] [ 0 0 -1 0 ] 90 1 1 +( 252 596 20 ) ( 252 624 20 ) ( 252 596 16 ) __TB_empty [ 0 1 0 0 ] [ 0 0 -1 0 ] 180 1 1 +} +// brush 169 +{ +( 224 596 16 ) ( 224 624 16 ) ( 224 596 20 ) __TB_empty [ 0 -1 0 0 ] [ 0 0 -1 0 ] 90 1 1 +( 224 596 20 ) ( 232 596 20 ) ( 224 596 16 ) __TB_empty [ 1 0 0 28 ] [ 0 0 -1 0 ] 180 1 1 +( 224 596 16 ) ( 232 596 16 ) ( 224 624 16 ) __TB_empty [ -1 0 0 0 ] [ 0 -1 0 8 ] 90 1 1 +( 224 624 20 ) ( 232 624 20 ) ( 224 596 20 ) __TB_empty [ 1 0 0 0 ] [ 0 -1 0 8 ] 90 1 1 +( 224 624 16 ) ( 232 624 16 ) ( 224 624 20 ) __TB_empty [ -1 0 0 -28 ] [ 0 0 -1 0 ] 90 1 1 +( 232 596 16 ) ( 232 596 20 ) ( 232 624 16 ) __TB_empty [ 0 -1 0 8 ] [ 0 0 -1 -4 ] 90 1 1 +} +// brush 170 +{ +( 244 611.6076951545867 20 ) ( 244 611.6076951545867 16 ) ( 236.84529946162075 624 20 ) __TB_empty [ -0.4999999999999999 0.8660254037844387 0 -6.928192 ] [ 0 0 -1 -4 ] 90 1 1 +( 244 624 16 ) ( 236.84529946162075 624 16 ) ( 244 611.6076951545867 16 ) __TB_empty [ -1 0 0 0 ] [ 0 -1 0 8 ] 90 1 1 +( 244 624 20 ) ( 244 611.6076951545867 20 ) ( 236.84529946162075 624 20 ) __TB_empty [ 1 0 0 0 ] [ 0 -1 0 8 ] 90 1 1 +( 244 624 20 ) ( 236.84529946162075 624 20 ) ( 244 624 16 ) __TB_empty [ -1 0 0 -28 ] [ 0 0 -1 0 ] 90 1 1 +( 244 624 16 ) ( 244 611.6076951545867 16 ) ( 244 624 20 ) __TB_empty [ 0 1 0 -8 ] [ 0 0 -1 -4 ] 90 1 1 +} +// brush 171 +{ +( 232 596 16 ) ( 232 608.3923048454133 16 ) ( 232 596 20 ) __TB_empty [ 0 -1 0 8 ] [ 0 0 -1 -4 ] 90 1 1 +( 232 596 20 ) ( 239.15470053837925 596 20 ) ( 232 596 16 ) __TB_empty [ 1 0 0 28 ] [ 0 0 -1 0 ] 180 1 1 +( 232 596 16 ) ( 239.15470053837925 596 16 ) ( 232 608.3923048454133 16 ) __TB_empty [ -1 0 0 0 ] [ 0 -1 0 8 ] 90 1 1 +( 232 596 20 ) ( 232 608.3923048454133 20 ) ( 239.15470053837925 596 20 ) __TB_empty [ 1 0 0 0 ] [ 0 -1 0 8 ] 90 1 1 +( 232 608.3923048454133 16 ) ( 239.15470053837925 596 16 ) ( 232 608.3923048454133 20 ) __TB_empty [ 0.4999999999999999 -0.8660254037844387 0 6.928192 ] [ 0 0 -1 -4 ] 90 1 1 +} +// brush 172 +{ +( 232 624 20 ) ( 232 611.6076951545867 20 ) ( 232 624 16 ) __TB_empty [ 0 -1 0 8 ] [ 0 0 -1 -4 ] 90 1 1 +( 232 624 16 ) ( 232 611.6076951545867 16 ) ( 236.84529946162075 624 16 ) __TB_empty [ -1 0 0 0 ] [ 0 -1 0 8 ] 90 1 1 +( 236.84529946162075 624 20 ) ( 238 622 20 ) ( 232 624 20 ) __TB_empty [ 1 0 0 0 ] [ 0 -1 0 8 ] 90 1 1 +( 232 624 16 ) ( 236.84529946162075 624 16 ) ( 232 624 20 ) __TB_empty [ -1 0 0 -28 ] [ 0 0 -1 0 ] 90 1 1 +( 238 622 20 ) ( 238 622 16 ) ( 232 611.6076951545867 20 ) __TB_empty [ -0.4999999999999999 -0.8660254037844387 0 6.9282227 ] [ 0 0 -1 -4 ] 90 1 1 +( 236.84529946162075 624 16 ) ( 238 622 16 ) ( 236.84529946162075 624 20 ) __TB_empty [ -0.4999999999999999 0.8660254037844387 0 -6.928192 ] [ 0 0 -1 -4 ] 90 1 1 +} +// brush 173 +{ +( 239.15470053837925 596 16 ) ( 238 598 16 ) ( 239.15470053837925 596 20 ) __TB_empty [ 0.4999999999999999 -0.8660254037844387 0 6.928192 ] [ 0 0 -1 -4 ] 90 1 1 +( 244 608.3923048454133 16 ) ( 244 608.3923048454133 20 ) ( 238 598 16 ) __TB_empty [ 0.4999999999999999 0.8660254037844387 0 -6.9282227 ] [ 0 0 -1 -4 ] 90 1 1 +( 244 596 16 ) ( 239.15470053837925 596 16 ) ( 244 596 20 ) __TB_empty [ 1 0 0 28 ] [ 0 0 -1 0 ] 180 1 1 +( 244 596 16 ) ( 244 608.3923048454133 16 ) ( 239.15470053837925 596 16 ) __TB_empty [ -1 0 0 0 ] [ 0 -1 0 8 ] 90 1 1 +( 239.15470053837925 596 20 ) ( 238 598 20 ) ( 244 596 20 ) __TB_empty [ 1 0 0 0 ] [ 0 -1 0 8 ] 90 1 1 +( 244 596 20 ) ( 244 608.3923048454133 20 ) ( 244 596 16 ) __TB_empty [ 0 1 0 -8 ] [ 0 0 -1 -4 ] 90 1 1 +} +// brush 174 +{ +( 238 622 20 ) ( 234.53589838486224 616 20 ) ( 238 622 16 ) __TB_empty [ -0.4999999999999999 -0.8660254037844387 0 0.92822266 ] [ 0 0 -1 0 ] 90 1 1 +( 234.53589838486224 616 16 ) ( 234.53589838486224 616 20 ) ( 241.46410161513776 616 16 ) __TB_empty [ -1 0 0 0 ] [ 0 0 -1 -4 ] 90 1 1 +( 238 622 16 ) ( 234.53589838486224 616 16 ) ( 241.46410161513776 616 16 ) __TB_empty [ -1 0 0 0 ] [ 0 -1 0 8 ] 90 1 1 +( 238 622 20 ) ( 241.46410161513776 616 20 ) ( 234.53589838486224 616 20 ) __TB_empty [ 1 0 0 0 ] [ 0 -1 0 8 ] 90 1 1 +( 238 622 16 ) ( 241.46410161513776 616 16 ) ( 238 622 20 ) __TB_empty [ -0.4999999999999999 0.8660254037844387 0 -6.928192 ] [ 0 0 -1 -4 ] 90 1 1 +} +// brush 175 +{ +( 238 598 16 ) ( 234.53589838486224 604 16 ) ( 238 598 20 ) __TB_empty [ 0.4999999999999999 -0.8660254037844387 0 6.928192 ] [ 0 0 -1 -4 ] 90 1 1 +( 238 598 16 ) ( 241.46410161513776 604 16 ) ( 234.53589838486224 604 16 ) __TB_empty [ -1 0 0 0 ] [ 0 -1 0 8 ] 90 1 1 +( 238 598 20 ) ( 234.53589838486224 604 20 ) ( 241.46410161513776 604 20 ) __TB_empty [ 1 0 0 0 ] [ 0 -1 0 8 ] 90 1 1 +( 241.46410161513776 604 16 ) ( 241.46410161513776 604 20 ) ( 234.53589838486224 604 16 ) __TB_empty [ 1 0 0 0 ] [ 0 0 -1 -4 ] 90 1 1 +( 238 598 20 ) ( 241.46410161513776 604 20 ) ( 238 598 16 ) __TB_empty [ 0.4999999999999999 0.8660254037844387 0 -6.9282227 ] [ 0 0 -1 -4 ] 90 1 1 +} +// brush 176 +{ +( 239.60769515458685 616 20 ) ( 242.39230484541324 614.3923048454133 20 ) ( 239.60769515458685 616 16 ) __TB_empty [ -0.8660254037844387 0.4999999999999999 0 -4 ] [ 0 0 -1 -4 ] 90 1 1 +( 241.46410161513776 616 16 ) ( 239.60769515458685 616 16 ) ( 242.39230484541324 614.3923048454133 16 ) __TB_empty [ -1 0 0 0 ] [ 0 -1 0 8 ] 90 1 1 +( 241.46410161513776 616 20 ) ( 242.39230484541324 614.3923048454133 20 ) ( 239.60769515458685 616 20 ) __TB_empty [ 1 0 0 0 ] [ 0 -1 0 8 ] 90 1 1 +( 241.46410161513776 616 20 ) ( 239.60769515458685 616 20 ) ( 241.46410161513776 616 16 ) __TB_empty [ -1 0 0 0 ] [ 0 0 -1 -4 ] 90 1 1 +( 241.46410161513776 616 16 ) ( 242.39230484541324 614.3923048454133 16 ) ( 241.46410161513776 616 20 ) __TB_empty [ -0.4999999999999999 0.8660254037844387 0 -6.928192 ] [ 0 0 -1 -4 ] 90 1 1 +} +// brush 177 +{ +( 234.53589838486224 604 16 ) ( 233.60769515458668 605.6076951545868 16 ) ( 234.53589838486224 604 20 ) __TB_empty [ 0.4999999999999999 -0.8660254037844387 0 6.928192 ] [ 0 0 -1 -4 ] 90 1 1 +( 234.53589838486224 604 20 ) ( 236.39230484541338 604 20 ) ( 234.53589838486224 604 16 ) __TB_empty [ 1 0 0 0 ] [ 0 0 -1 -4 ] 90 1 1 +( 234.53589838486224 604 16 ) ( 236.39230484541338 604 16 ) ( 233.60769515458668 605.6076951545868 16 ) __TB_empty [ -1 0 0 0 ] [ 0 -1 0 8 ] 90 1 1 +( 234.53589838486224 604 20 ) ( 233.60769515458668 605.6076951545868 20 ) ( 236.39230484541338 604 20 ) __TB_empty [ 1 0 0 0 ] [ 0 -1 0 8 ] 90 1 1 +( 236.39230484541338 604 20 ) ( 233.60769515458668 605.6076951545868 20 ) ( 236.39230484541338 604 16 ) __TB_empty [ 0.8660254037844387 -0.4999999999999999 0 4 ] [ 0 0 -1 -4 ] 90 1 1 +} +// brush 178 +{ +( 242.39230484541324 605.6076951545867 16 ) ( 242.39230484541324 605.6076951545867 20 ) ( 239.60769515458682 604 16 ) __TB_empty [ 0.8660254037844387 0.4999999999999999 0 -4 ] [ 0 0 -1 -4 ] 90 1 1 +( 241.46410161513776 604 16 ) ( 239.60769515458682 604 16 ) ( 241.46410161513776 604 20 ) __TB_empty [ 1 0 0 0 ] [ 0 0 -1 -4 ] 90 1 1 +( 241.46410161513776 604 16 ) ( 242.39230484541324 605.6076951545867 16 ) ( 239.60769515458682 604 16 ) __TB_empty [ -1 0 0 0 ] [ 0 -1 0 8 ] 90 1 1 +( 241.46410161513776 604 20 ) ( 239.60769515458682 604 20 ) ( 242.39230484541324 605.6076951545867 20 ) __TB_empty [ 1 0 0 0 ] [ 0 -1 0 8 ] 90 1 1 +( 241.46410161513776 604 20 ) ( 242.39230484541324 605.6076951545867 20 ) ( 241.46410161513776 604 16 ) __TB_empty [ 0.4999999999999999 0.8660254037844387 0 -0.92822266 ] [ 0 0 -1 0 ] 90 1 1 +} +// brush 179 +{ +( 234.53589838486224 616 20 ) ( 233.6076951545867 614.3923048454133 20 ) ( 234.53589838486224 616 16 ) __TB_empty [ -0.4999999999999999 -0.8660254037844387 0 0.92822266 ] [ 0 0 -1 0 ] 90 1 1 +( 234.53589838486224 616 16 ) ( 233.6076951545867 614.3923048454133 16 ) ( 236.39230484541332 616 16 ) __TB_empty [ -1 0 0 0 ] [ 0 -1 0 8 ] 90 1 1 +( 234.53589838486224 616 20 ) ( 236.39230484541332 616 20 ) ( 233.6076951545867 614.3923048454133 20 ) __TB_empty [ 1 0 0 0 ] [ 0 -1 0 8 ] 90 1 1 +( 234.53589838486224 616 16 ) ( 236.39230484541332 616 16 ) ( 234.53589838486224 616 20 ) __TB_empty [ -1 0 0 0 ] [ 0 0 -1 -4 ] 90 1 1 +( 236.39230484541332 616 20 ) ( 236.39230484541332 616 16 ) ( 233.6076951545867 614.3923048454133 20 ) __TB_empty [ -0.8660254037844387 -0.4999999999999999 0 4 ] [ 0 0 -1 -4 ] 90 1 1 +} } // entity 1 { @@ -2231,6 +2331,7 @@ "classname" "actor_box_red" "origin" "376 488 28" "targetname" "actor_elevator_test" +"angle" "45" } // entity 69 { @@ -2753,6 +2854,6 @@ // entity 148 { "classname" "actor_tank_large" -"origin" "432 464 32" -"angle" "90" +"origin" "429.93 463.728 32" +"angles" "0 90 0" } diff --git a/3D/Scenes/Props/Floor_Emitter_3D.tscn b/3D/Scenes/Props/Floor_Emitter_3D.tscn new file mode 100644 index 00000000..88914a21 --- /dev/null +++ b/3D/Scenes/Props/Floor_Emitter_3D.tscn @@ -0,0 +1,23 @@ +[gd_scene load_steps=5 format=3 uid="uid://d4ek8xjuh6y11"] + +[ext_resource type="Script" uid="uid://dpibtd73awwp7" path="res://Scripts/Actors/ScriptableBulletsEmitter3D.cs" id="1_dtfaj"] +[ext_resource type="PackedScene" uid="uid://sy821kigcoqx" path="res://3D/BlockbenchModels/FloorEmitter/Floor_Emitter.gltf" id="3_ro7iq"] +[ext_resource type="Script" uid="uid://bf5f2phitdqw8" path="res://Scripts/Actors/BulletSpawner3D.cs" id="4_0cjnq"] + +[sub_resource type="BoxShape3D" id="BoxShape3D_hsg1w"] +size = Vector3(0.763428, 0.469452, 0.77832) + +[node name="FloorEmitter" type="StaticBody3D"] +collision_layer = 16 +collision_mask = 0 +script = ExtResource("1_dtfaj") +EmitOnStart = true + +[node name="CollisionShape3D" type="CollisionShape3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00549316, 0.0253752, -0.000488281) +shape = SubResource("BoxShape3D_hsg1w") + +[node name="blockbench_export" parent="." instance=ExtResource("3_ro7iq")] + +[node name="BulletSpawner3D" type="Node3D" parent="."] +script = ExtResource("4_0cjnq") diff --git a/Resources/BulletScripts/Emitter_Sprial_Test_Bullets.tres b/Resources/BulletScripts/Emitter_Sprial_Test_Bullets.tres new file mode 100644 index 00000000..69110994 --- /dev/null +++ b/Resources/BulletScripts/Emitter_Sprial_Test_Bullets.tres @@ -0,0 +1,36 @@ +[gd_resource type="Resource" script_class="BulletScript3D" load_steps=6 format=3 uid="uid://bbogxl60hvdp1"] + +[ext_resource type="Resource" uid="uid://wbdspte0ch33" path="res://Resources/Bullets/simple_enemy_bullet_3D.tres" id="1_bjips"] +[ext_resource type="Script" uid="uid://b5s5mjuk1rng5" path="res://Scripts/Resources/TimeModifier.cs" id="2_yjtbi"] +[ext_resource type="Script" uid="uid://bxiprx5nwmpnu" path="res://Scripts/AttackPatterns/ShootingPattern3D.cs" id="3_2rxa2"] +[ext_resource type="Script" uid="uid://w8hcpu68ssq" path="res://Scripts/Resources/BulletScripts/BulletScript3D.cs" id="4_mksdg"] + +[sub_resource type="Resource" id="Resource_2y301"] +script = ExtResource("3_2rxa2") +BulletResource = ExtResource("1_bjips") +EmitterOffset = Vector3(0, 0, 0) +bulletCount = 2 +rotationSpeed = 60.0 +_rotationOffset = 0.0 +duration = 10.0 +spread = 360.0 +burstInterval = 0.1 +ShotsPerBurst = 6 +BurstRate = 0.5 +_targetPlayer = false +_predictPlayer = false +OverrideOwner = false +Owner = 0 +OverrideDamageType = false +DamageType = 0 +OverrideControllable = false +Controllable = false +OverrideCreationModifier = false +TimeModifiers = Array[ExtResource("2_yjtbi")]([]) +WaitForCompletion = true +metadata/_custom_type_script = "uid://bxiprx5nwmpnu" + +[resource] +script = ExtResource("4_mksdg") +Patterns = Array[Object]([SubResource("Resource_2y301")]) +metadata/_custom_type_script = "uid://w8hcpu68ssq" diff --git a/Resources/Bullets/simple_enemy_bullet_3D.tres b/Resources/Bullets/simple_enemy_bullet_3D.tres new file mode 100644 index 00000000..fbe3fcbb --- /dev/null +++ b/Resources/Bullets/simple_enemy_bullet_3D.tres @@ -0,0 +1,24 @@ +[gd_resource type="Resource" script_class="BulletResource" load_steps=3 format=3 uid="uid://wbdspte0ch33"] + +[ext_resource type="PackedScene" uid="uid://d28e1t2c0lwbp" path="res://Scenes/Weapons/base_enemy_bullet_3D.tscn" id="1_l7ter"] +[ext_resource type="Script" uid="uid://dslyrfcej3g2n" path="res://Scripts/Resources/BulletResource.cs" id="2_5nrie"] + +[resource] +script = ExtResource("2_5nrie") +BulletScene = ExtResource("1_l7ter") +BulletSpeed = 2.0 +Direction = Vector2(1, 0) +BulletDamage = 12.0 +MaxDamage = 1.0 +Knockback = 1.0 +LifeTime = 10.0 +DestroyOnCollision = true +Owner = 2 +DamageType = 0 +RotateSprite = false +Controllable = false +Freezable = true +Grazeable = true +GrazeValue = 1.0 +Attributes = 290 +TimeModifiers = [] diff --git a/Scenes/Weapons/base_enemy_bullet_3D.tscn b/Scenes/Weapons/base_enemy_bullet_3D.tscn new file mode 100644 index 00000000..07e84121 --- /dev/null +++ b/Scenes/Weapons/base_enemy_bullet_3D.tscn @@ -0,0 +1,29 @@ +[gd_scene load_steps=4 format=3 uid="uid://d28e1t2c0lwbp"] + +[ext_resource type="Script" uid="uid://cg6y36s7buapp" path="res://Scripts/Weapons/Bullet3D.cs" id="1_xnqcl"] +[ext_resource type="Texture2D" uid="uid://cfldr7l7dearo" path="res://Sprites/Bullets/mid_bullet_red.png" id="2_xnqcl"] + +[sub_resource type="SphereShape3D" id="SphereShape3D_pklkt"] +radius = 0.172059 + +[node name="Bullet" type="Area3D" groups=["bullets"]] +collision_layer = 128 +collision_mask = 23 +script = ExtResource("1_xnqcl") +Speed = 200.0 +metadata/_edit_group_ = true + +[node name="Sprite" type="Sprite3D" parent="."] +pixel_size = 0.05 +billboard = 1 +texture_filter = 0 +texture = ExtResource("2_xnqcl") + +[node name="CollisionShape" type="CollisionShape3D" parent="."] +shape = SubResource("SphereShape3D_pklkt") + +[node name="VisibleOnScreenNotifier" type="VisibleOnScreenNotifier3D" parent="."] + +[connection signal="area_entered" from="." to="." method="_on_area_entered"] +[connection signal="body_entered" from="." to="." method="_on_body_entered"] +[connection signal="screen_exited" from="VisibleOnScreenNotifier" to="." method="_on_visible_on_screen_notifier_2d_screen_exited"] diff --git a/Scripts/Actors/BulletSpawner3D.cs b/Scripts/Actors/BulletSpawner3D.cs new file mode 100644 index 00000000..67d6194f --- /dev/null +++ b/Scripts/Actors/BulletSpawner3D.cs @@ -0,0 +1,55 @@ +using Cirno.Scripts.Components; +using Cirno.Scripts.Controllers; +using Cirno.Scripts.Weapons; +using Godot; + +namespace Cirno.Scripts.Actors; + +public partial class BulletSpawner3D : Node3D +{ + [Export] public PackedScene BulletScene; + + public void SpawnBullet(BulletInfo bulletInfo, Vector3 position) + { + var bulletScene = bulletInfo.BulletScene ?? BulletScene; + Bullet3D bullet; + int count = bulletInfo.BulletCount; + float spreadRadians = Mathf.DegToRad(bulletInfo.Spread); + float step = count > 1 ? spreadRadians / (count - 1) : 0; + + for (int i = 0; i < count; i++) + { + + bullet = PoolingManager.Instance.SpawnBullet(bulletInfo.OriginalBulletResource); + bullet.GlobalPosition = position; + + if (bulletInfo.Modifier is not null) + { + bulletInfo = bulletInfo.Modifier.ModifyBullet(bulletInfo, i, count); + } + + bullet.Initialize(bulletInfo); + + Vector2 baseDirection = bulletInfo.Direction == Vector2.Zero ? Vector2.Right : bulletInfo.Direction.Normalized(); + float baseAngle = Mathf.Atan2(baseDirection.Y, baseDirection.X); + + // Spread centered: offset from center + float offsetFromCenter = (i - (count - 1) / 2.0f) * step; + float angle = baseAngle + Mathf.DegToRad(bulletInfo.RotationOffset) + offsetFromCenter; + + Vector2 bulletDirection = new Vector2(Mathf.Cos(angle), Mathf.Sin(angle)); + bullet.SetDirection(bulletDirection); + + // float offsetRadians = Mathf.DegToRad(bulletInfo.RotationOffset); + // float spreadStep = Mathf.DegToRad(bulletInfo.Spread) / Mathf.Max(1, bulletInfo.BulletCount - 1); // Ensure proper spread spacing, also add 1 if 0 + // float angle = baseAngle + offsetRadians + (spreadStep * i); + // + // + // Vector2 bulletDirection = new Vector2(Mathf.Cos(angle), Mathf.Sin(angle)); + // + // bullet.SetDirection(bulletDirection); + } + } + + +} \ No newline at end of file diff --git a/Scripts/Actors/BulletSpawner3D.cs.uid b/Scripts/Actors/BulletSpawner3D.cs.uid new file mode 100644 index 00000000..4becc5ad --- /dev/null +++ b/Scripts/Actors/BulletSpawner3D.cs.uid @@ -0,0 +1 @@ +uid://bf5f2phitdqw8 diff --git a/Scripts/Actors/ScriptableBulletsEmitter3D.cs b/Scripts/Actors/ScriptableBulletsEmitter3D.cs new file mode 100644 index 00000000..c64a2283 --- /dev/null +++ b/Scripts/Actors/ScriptableBulletsEmitter3D.cs @@ -0,0 +1,97 @@ +using Cirno.Scripts.AttackPatterns; +using Cirno.Scripts.Resources; +using Cirno.Scripts.Resources.BulletScripts; +using Godot; + +namespace Cirno.Scripts.Actors; + +public partial class ScriptableBulletsEmitter3D : Node3D, IActivable, IScriptHost3D +{ + public Node3D ParentObject => this; + + [Export] + public BulletScript3D Script { get; set; } + + [Export] + public bool InvertSignal { get; private set; } = false; + + [Export] + public bool EmitOnStart { get; set; } = false; + + [Signal] + public delegate void StateChangedEventHandler(bool isEmitting); + + private bool _isActive = false; + + //private BulletScript _scriptInstance; + + protected BulletScript3D.BulletScriptMachine ScriptMachine; + + public override void _Ready() + { + //_scriptInstance = Script.Duplicate(true) as BulletScript; + + ScriptMachine = Script.Make(this); + + _homePosition = this.GlobalPosition; + + if (EmitOnStart) + { + _isActive = true; + ScriptMachine.Start(); + } + EmitSignal(SignalName.StateChanged, _isActive); + } + + public bool Activate(ActivationType activationType = ActivationType.Toggle) + { + switch (activationType) + { + case ActivationType.Use: + case ActivationType.Toggle: + _isActive = !_isActive; + break; + case ActivationType.Open: + case ActivationType.Enable: + _isActive = !InvertSignal; + break; + case ActivationType.Close: + case ActivationType.Disable: + _isActive = InvertSignal; + break; + case ActivationType.Destroy: + _isActive = InvertSignal; + // TODO: Explode + break; + } + + if (_isActive) + { + ScriptMachine.Start(); + } + + EmitSignal(SignalName.StateChanged, _isActive); + + return true; + } + + public void Toggle() + { + this.Activate(); + } + + public override void _Process(double delta) + { + if (!_isActive) return; + + ScriptMachine.UpdatePhase(delta); + } + + private Vector3 _homePosition; + public Vector3 HomePosition => _homePosition; + + public void ChangeSpriteDirection(Vector2 direction) + { + + } +} \ No newline at end of file diff --git a/Scripts/Actors/ScriptableBulletsEmitter3D.cs.uid b/Scripts/Actors/ScriptableBulletsEmitter3D.cs.uid new file mode 100644 index 00000000..d9034153 --- /dev/null +++ b/Scripts/Actors/ScriptableBulletsEmitter3D.cs.uid @@ -0,0 +1 @@ +uid://dpibtd73awwp7 diff --git a/Scripts/AttackPatterns/IScriptHost3D.cs b/Scripts/AttackPatterns/IScriptHost3D.cs new file mode 100644 index 00000000..1762ab8f --- /dev/null +++ b/Scripts/AttackPatterns/IScriptHost3D.cs @@ -0,0 +1,10 @@ +using Godot; + +namespace Cirno.Scripts.AttackPatterns; + +public interface IScriptHost3D +{ + public Node3D ParentObject { get; } + public Vector3 HomePosition { get; } + public void ChangeSpriteDirection(Vector2 direction); +} \ No newline at end of file diff --git a/Scripts/AttackPatterns/IScriptHost3D.cs.uid b/Scripts/AttackPatterns/IScriptHost3D.cs.uid new file mode 100644 index 00000000..94d1d9d4 --- /dev/null +++ b/Scripts/AttackPatterns/IScriptHost3D.cs.uid @@ -0,0 +1 @@ +uid://c4mqs0ovhgk0x diff --git a/Scripts/AttackPatterns/ShootingPattern3D.cs b/Scripts/AttackPatterns/ShootingPattern3D.cs new file mode 100644 index 00000000..21926791 --- /dev/null +++ b/Scripts/AttackPatterns/ShootingPattern3D.cs @@ -0,0 +1,228 @@ +using Cirno.Scripts.Actors; +using Cirno.Scripts.Components; +using Cirno.Scripts.Resources; +using Cirno.Scripts.Utils; +using Godot; +using Godot.Collections; + +namespace Cirno.Scripts.AttackPatterns; + +[GlobalClass] +[Tool] +public partial class ShootingPattern3D : AttackPattern +{ + [Export] public BulletResource BulletResource { get; set; } + + [Export] public Vector3 EmitterOffset { get; set; } = Vector3.Zero; + + [Export] public int bulletCount = 16; + [Export] public float rotationSpeed = 0f; + [Export] public float _rotationOffset = 0f; + [Export] public float duration = 5f; + [Export] public float spread = 360f; + [Export] public float burstInterval = 0.5f; + + [ExportCategory("Burst")] [Export] public int ShotsPerBurst { get; private set; } = 100; + + [Export] public float BurstRate { get; private set; } = 0f; + + [ExportCategory("Other")] [Export] public bool _targetPlayer = false; + [ExportCategory("Other")] [Export] public bool _predictPlayer = false; + + [ExportCategory("Overrides")] + [Export] public bool OverrideOwner { get; private set; } = false; + [Export] public BulletOwner Owner { get; private set; } = BulletOwner.None; + [Export] public bool OverrideDamageType { get; private set; } = false; + [Export] public DamageType DamageType { get; private set; } = DamageType.Neutral; + [Export] public bool OverrideControllable { get; private set; } = false; + [Export] public bool Controllable { get; private set; } = false; + + [ExportCategory("Extra Modifiers")] + [Export] + public bool OverrideCreationModifier { get; private set; } = false; + + [Export] public BulletCreationModifier Modifier; + [Export] public Array TimeModifiers = []; + + protected virtual BulletInfo MakeBullet(Vector2 position, int count = 1, float spread = 0f, float rotationOffset = 0f) + { + var bullet = this.BulletResource.MakeBullet(position, count, + spread, rotationOffset); + + if (OverrideOwner) + { + bullet.Owner = this.Owner; + } + + if (OverrideDamageType) + { + bullet.DamageType = DamageType; + } + + if (OverrideControllable) + { + bullet.Controllabe = Controllable; + } + + if (OverrideCreationModifier) + { + bullet.Modifier = this.Modifier; + } + + if (TimeModifiers.Count != 0) + { + bullet.TimeModifiers.AddRange(TimeModifiers); + } + + return bullet; + } + + public override IPatternMachine MakeMachine(Node parent) + { + return new SpiralPatternMachine(this, parent); + } + + public class SpiralPatternMachine(ShootingPattern3D pattern, Node parent) : IPatternMachine + { + public Node Parent => parent; + public IScriptHost3D ScriptHost { get; private set; } + private double timer; + private double burstTimer; + //private double _burstRateTimer; + private BulletSpawner3D spawner; + + private ShootStatus _state = ShootStatus.Idle; + + private int _burstBullets; + + public void Start() + { + ScriptHost = Parent as IScriptHost3D; + + timer = 0; + _burstBullets = pattern.ShotsPerBurst; + burstTimer = pattern.burstInterval; // start immediately + + spawner = parent.GetNode("BulletSpawner3D"); + + _state = ShootStatus.Shooting; + } + + private void WaitingBurstUpdate(double delta) + { + timer += delta; + burstTimer += delta; + + if (burstTimer >= pattern.burstInterval) + { + _state = ShootStatus.Shooting; + } + } + + private void WaitingReloadUpdate(double delta) + { + timer += delta; + burstTimer += delta; + + if (burstTimer >= pattern.BurstRate) + { + _burstBullets = pattern.ShotsPerBurst; + _state = ShootStatus.Shooting; + } + } + + private void ShootingUpdate(double delta) + { + timer += delta; + burstTimer = 0; + Shoot(); + _burstBullets--; + + if (_burstBullets <= 0) + { + _state = ShootStatus.WaitingReload; + } + else + { + _state = ShootStatus.WaitingBurst; + } + } + + public void UpdatePattern(double delta) + { + switch (_state) + { + case ShootStatus.Idle: + case ShootStatus.Done: + return; + case ShootStatus.Shooting: + ShootingUpdate(delta); + break; + case ShootStatus.WaitingBurst: + WaitingBurstUpdate(delta); + break; + case ShootStatus.WaitingReload: + WaitingReloadUpdate(delta); + break; + } + + if (timer >= pattern.duration) + { + _state = ShootStatus.Done; + } + + } + + private void Shoot() + { + float angleOffset = pattern._rotationOffset + (float)(pattern.rotationSpeed * timer); + + Vector2 direction = pattern.BulletResource.Direction; + + // TODO: Fix player aiming for 3D + // if (pattern._targetPlayer && GameManager.Instance.PlayerPosition.HasValue) + // { + // if (pattern._predictPlayer && GameManager.Instance.PlayerVelocity.HasValue) + // { + // var predictedDirection = MathFunctions.PredictInterceptPosition(ScriptHost.ParentObject.GlobalPosition, + // GameManager.Instance.PlayerPosition.Value, GameManager.Instance.PlayerVelocity.Value, + // pattern.BulletResource.BulletSpeed); + // if (predictedDirection.HasValue) + // { + // direction = (predictedDirection.Value - ScriptHost.ParentObject.GlobalPosition).Normalized(); + // } + // } + // else + // { + // direction = (GameManager.Instance.PlayerPosition.Value - ScriptHost.ParentObject.GlobalPosition).Normalized(); + // } + // } + + var spawnPosition = ScriptHost.ParentObject.GlobalPosition + pattern.EmitterOffset; + + var bullet = pattern.MakeBullet(spawnPosition.ToVector2(), pattern.bulletCount, + pattern.spread, angleOffset); + + bullet.Direction = direction; + + //spawner.SpawnBullet(MakeBullet(Boss.GlobalPosition, direction, angleOffset)); + spawner.SpawnBullet(bullet, spawnPosition); + } + + + public bool IsComplete() + { + //return timer >= pattern.duration; + return _state is ShootStatus.Done; + } + + private enum ShootStatus + { + Idle, + Shooting, + WaitingBurst, + WaitingReload, + Done + } + } +} \ No newline at end of file diff --git a/Scripts/AttackPatterns/ShootingPattern3D.cs.uid b/Scripts/AttackPatterns/ShootingPattern3D.cs.uid new file mode 100644 index 00000000..b69e79ca --- /dev/null +++ b/Scripts/AttackPatterns/ShootingPattern3D.cs.uid @@ -0,0 +1 @@ +uid://bxiprx5nwmpnu diff --git a/Scripts/Resources/BulletScripts/BulletScript3D.cs b/Scripts/Resources/BulletScripts/BulletScript3D.cs new file mode 100644 index 00000000..c94fdc36 --- /dev/null +++ b/Scripts/Resources/BulletScripts/BulletScript3D.cs @@ -0,0 +1,52 @@ +using Cirno.Scripts.AttackPatterns; +using Godot; +using Godot.Collections; + +namespace Cirno.Scripts.Resources.BulletScripts; + +[GlobalClass] +[Tool] +public partial class BulletScript3D : Resource +{ + [Export] + public Array Patterns { get; private set; } + + public BulletScriptMachine Make(Node parent) + { + return new BulletScriptMachine(parent, Patterns); + } + + public class BulletScriptMachine(Node parent, Array patterns) + { + private int _currentPatternIndex = 0; + //private double _patternTimer; + + private AttackPattern CurrentPattern => patterns[_currentPatternIndex]; + + private IPatternMachine _currentPatternMachine; + + public void Start() + { + if (patterns.Count == 0) return; + _currentPatternIndex = 0; + + _currentPatternMachine = CurrentPattern.MakeMachine(parent); + _currentPatternMachine.Start(); + } + + public void UpdatePhase(double delta) + { + //_patternTimer += delta; + + _currentPatternMachine.UpdatePattern(delta); + //CurrentPattern.UpdatePattern(delta); + + if (!CurrentPattern.WaitForCompletion || _currentPatternMachine.IsComplete()) + { + _currentPatternIndex = (_currentPatternIndex + 1) % patterns.Count; + _currentPatternMachine = CurrentPattern.MakeMachine(parent); + _currentPatternMachine.Start(); + } + } + } +} \ No newline at end of file diff --git a/Scripts/Resources/BulletScripts/BulletScript3D.cs.uid b/Scripts/Resources/BulletScripts/BulletScript3D.cs.uid new file mode 100644 index 00000000..67e9ae10 --- /dev/null +++ b/Scripts/Resources/BulletScripts/BulletScript3D.cs.uid @@ -0,0 +1 @@ +uid://w8hcpu68ssq diff --git a/Scripts/Utils/VectorExtensions.cs b/Scripts/Utils/VectorExtensions.cs index 9b0b7fa4..225aba36 100644 --- a/Scripts/Utils/VectorExtensions.cs +++ b/Scripts/Utils/VectorExtensions.cs @@ -8,4 +8,9 @@ public static class VectorExtensions { return new Vector2(original.X, original.Z); } + + public static Vector3 ToVector3(this Vector2 original, float height = 0) + { + return new Vector3(original.X, height, original.Y); + } } \ No newline at end of file diff --git a/Sprites/Bullets/mid_bullet_red.png.import b/Sprites/Bullets/mid_bullet_red.png.import index 56fe0805..14390a67 100644 --- a/Sprites/Bullets/mid_bullet_red.png.import +++ b/Sprites/Bullets/mid_bullet_red.png.import @@ -3,25 +3,26 @@ importer="texture" type="CompressedTexture2D" uid="uid://cfldr7l7dearo" -path="res://.godot/imported/mid_bullet_red.png-5bc1e79f4456468a638cf530366492d7.ctex" +path.s3tc="res://.godot/imported/mid_bullet_red.png-5bc1e79f4456468a638cf530366492d7.s3tc.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc"], +"vram_texture": true } [deps] source_file="res://Sprites/Bullets/mid_bullet_red.png" -dest_files=["res://.godot/imported/mid_bullet_red.png-5bc1e79f4456468a638cf530366492d7.ctex"] +dest_files=["res://.godot/imported/mid_bullet_red.png-5bc1e79f4456468a638cf530366492d7.s3tc.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" @@ -31,4 +32,4 @@ process/normal_map_invert_y=false process/hdr_as_srgb=false process/hdr_clamp_exposure=false process/size_limit=0 -detect_3d/compress_to=1 +detect_3d/compress_to=0