From 1907a38575c0c1c6618c5effc70dafc3337afa81 Mon Sep 17 00:00:00 2001 From: Marco Date: Fri, 27 Jun 2025 17:43:15 +0200 Subject: [PATCH] Teleporters --- 3D/BlockbenchModels/Barrel/Barrel.bbmodel | 1 + 3D/BlockbenchModels/Barrel/Barrel.gltf | 1 + 3D/BlockbenchModels/Barrel/Barrel.gltf.import | 37 ++++ 3D/BlockbenchModels/Barrel/Barrel_0.png | 3 + .../Barrel/Barrel_0.png.import | 37 ++++ 3D/BlockbenchModels/Barrel/Barrel_1.png | 3 + .../Barrel/Barrel_1.png.import | 37 ++++ 3D/MapScenes/TestLevel.tscn | 13 +- 3D/Scenes/Props/Teleporter_3D.tscn | 19 +- ExternalMaterial/Barrel/Barrel.mtl | 26 +++ ExternalMaterial/Barrel/Barrel.obj | 4 + ExternalMaterial/Barrel/Barrel_texture1.png | 3 + .../Barrel/Barrel_texture1.png.import | 34 +++ ExternalMaterial/Barrel/Barrel_texture2.png | 3 + .../Barrel/Barrel_texture2.png.import | 34 +++ Scenes/Actors/IsoPlayer_FSM.tscn | 18 +- Scripts/Activables/3D/Teleporter3D.cs | 197 ++++++++++++++++++ Scripts/Activables/3D/Teleporter3D.cs.uid | 1 + Scripts/Components/FSM/3DPlayer/Cutscene.cs | 54 +++++ .../Components/FSM/3DPlayer/Cutscene.cs.uid | 1 + .../FSM/3DPlayer/IsoMovementModule.cs | 1 - .../Components/FSM/3DPlayer/Teleporting.cs | 46 ++++ .../FSM/3DPlayer/Teleporting.cs.uid | 1 + .../Components/FSM/3DPlayer/UnTeleporting.cs | 45 ++++ .../FSM/3DPlayer/UnTeleporting.cs.uid | 1 + 25 files changed, 616 insertions(+), 4 deletions(-) create mode 100644 3D/BlockbenchModels/Barrel/Barrel.bbmodel create mode 100644 3D/BlockbenchModels/Barrel/Barrel.gltf create mode 100644 3D/BlockbenchModels/Barrel/Barrel.gltf.import create mode 100644 3D/BlockbenchModels/Barrel/Barrel_0.png create mode 100644 3D/BlockbenchModels/Barrel/Barrel_0.png.import create mode 100644 3D/BlockbenchModels/Barrel/Barrel_1.png create mode 100644 3D/BlockbenchModels/Barrel/Barrel_1.png.import create mode 100644 ExternalMaterial/Barrel/Barrel.mtl create mode 100644 ExternalMaterial/Barrel/Barrel_texture1.png create mode 100644 ExternalMaterial/Barrel/Barrel_texture1.png.import create mode 100644 ExternalMaterial/Barrel/Barrel_texture2.png create mode 100644 ExternalMaterial/Barrel/Barrel_texture2.png.import create mode 100644 Scripts/Activables/3D/Teleporter3D.cs create mode 100644 Scripts/Activables/3D/Teleporter3D.cs.uid create mode 100644 Scripts/Components/FSM/3DPlayer/Cutscene.cs create mode 100644 Scripts/Components/FSM/3DPlayer/Cutscene.cs.uid create mode 100644 Scripts/Components/FSM/3DPlayer/Teleporting.cs create mode 100644 Scripts/Components/FSM/3DPlayer/Teleporting.cs.uid create mode 100644 Scripts/Components/FSM/3DPlayer/UnTeleporting.cs create mode 100644 Scripts/Components/FSM/3DPlayer/UnTeleporting.cs.uid diff --git a/3D/BlockbenchModels/Barrel/Barrel.bbmodel b/3D/BlockbenchModels/Barrel/Barrel.bbmodel new file mode 100644 index 00000000..8bea1f6d --- /dev/null +++ b/3D/BlockbenchModels/Barrel/Barrel.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"4.10","model_format":"free","box_uv":false},"name":"Barrel","model_identifier":"","visible_box":[1,1,0],"variable_placeholders":"","variable_placeholder_buttons":[],"timeline_setups":[],"unhandled_root_fields":{},"resolution":{"width":16,"height":16},"elements":[{"name":"shape0","color":0,"origin":[0,0,0],"rotation":[90,0,0],"export":true,"visibility":true,"locked":false,"render_order":"default","allow_mirror_modeling":true,"vertices":{"JkBB":[6.28768,4.94624,-8],"KSFX":[6.28768,4.94624,8],"GmHE":[2.97216,7.42736,-8],"BkmB":[2.97216,7.42736,8],"4DA4":[-1.13968,7.9184,-8],"kh6D":[-1.13968,7.9184,8],"EV4c":[-4.94624,6.28768,-8],"5V5A":[-4.94624,6.28768,8],"eJVG":[-7.42736,2.97216,-8],"zhtE":[-7.42736,2.97216,8],"USlm":[-7.9184,-1.13968,-8],"8yQW":[-7.9184,-1.13968,8],"7eO3":[-6.28768,-4.94624,-8],"z0kb":[-6.28768,-4.94624,8],"CJoP":[-2.97216,-7.42736,-8],"buLg":[-2.97216,-7.42736,8],"SrqG":[1.13968,-7.9184,-8],"WNV9":[1.13968,-7.9184,8],"E2Tm":[4.94624,-6.28768,-8],"Yj2R":[4.94624,-6.28768,8],"6dV3":[7.42736,-2.97216,-8],"I8o6":[7.42736,-2.97216,8],"0JVc":[7.9184,1.13968,-8],"jxPT":[7.9184,1.13968,8],"5XHf":[0,0,-8],"h3uq":[6.28768,4.94624,-8],"eL2v":[2.97216,7.42736,-8],"7eZ2":[-1.13968,7.9184,-8],"W6CW":[-4.94624,6.28768,-8],"sC9Z":[-7.42736,2.97216,-8],"WZsu":[-7.9184,-1.13968,-8],"5YpN":[-6.28768,-4.94624,-8],"F0ka":[-2.97216,-7.42736,-8],"cHmv":[1.13968,-7.9184,-8],"wCz2":[4.94624,-6.28768,-8],"PCd6":[7.42736,-2.97216,-8],"SoMj":[7.9184,1.13968,-8],"5F37":[0,0,8],"sDYr":[2.97216,7.42736,8],"G9Qa":[6.28768,4.94624,8],"Z04K":[-1.13968,7.9184,8],"RY0T":[-4.94624,6.28768,8],"4DCS":[-7.42736,2.97216,8],"GiOQ":[-7.9184,-1.13968,8],"J6bs":[-6.28768,-4.94624,8],"z0PO":[-2.97216,-7.42736,8],"NRpe":[1.13968,-7.9184,8],"JKqj":[4.94624,-6.28768,8],"ZbwS":[7.42736,-2.97216,8],"7ItM":[7.9184,1.13968,8]},"faces":{"WEEhdzmY":{"uv":{"GmHE":[1.33328,0],"KSFX":[0,16],"JkBB":[0,0]},"vertices":["KSFX","JkBB","GmHE"],"texture":0},"DRB8usxw":{"uv":{"GmHE":[1.33328,0],"BkmB":[1.33328,16],"KSFX":[0,16]},"vertices":["BkmB","KSFX","GmHE"],"texture":0},"1B5Jzsb1":{"uv":{"4DA4":[2.66672,0],"BkmB":[1.33328,16],"GmHE":[1.33328,0]},"vertices":["BkmB","GmHE","4DA4"],"texture":0},"cG4PsdlK":{"uv":{"4DA4":[2.66672,0],"kh6D":[2.66672,16],"BkmB":[1.33328,16]},"vertices":["kh6D","BkmB","4DA4"],"texture":0},"tKBqW3io":{"uv":{"EV4c":[4,0],"kh6D":[2.66672,16],"4DA4":[2.66672,0]},"vertices":["kh6D","4DA4","EV4c"],"texture":0},"bc6lKXqz":{"uv":{"EV4c":[4,0],"5V5A":[4,16],"kh6D":[2.66672,16]},"vertices":["5V5A","kh6D","EV4c"],"texture":0},"sXZUtnBb":{"uv":{"eJVG":[5.33328,0],"5V5A":[4,16],"EV4c":[4,0]},"vertices":["5V5A","EV4c","eJVG"],"texture":0},"vorXCQt0":{"uv":{"eJVG":[5.33328,0],"zhtE":[5.33328,16],"5V5A":[4,16]},"vertices":["zhtE","5V5A","eJVG"],"texture":0},"g7svVcUb":{"uv":{"USlm":[6.66672,0],"zhtE":[5.33328,16],"eJVG":[5.33328,0]},"vertices":["zhtE","eJVG","USlm"],"texture":0},"CGmzMEWM":{"uv":{"USlm":[6.66672,0],"8yQW":[6.66672,16],"zhtE":[5.33328,16]},"vertices":["8yQW","zhtE","USlm"],"texture":0},"tlw3XZTV":{"uv":{"7eO3":[8,0],"8yQW":[6.66672,16],"USlm":[6.66672,0]},"vertices":["8yQW","USlm","7eO3"],"texture":0},"fwh91cfY":{"uv":{"7eO3":[8,0],"z0kb":[8,16],"8yQW":[6.66672,16]},"vertices":["z0kb","8yQW","7eO3"],"texture":0},"4eTPkkUJ":{"uv":{"CJoP":[9.33328,0],"z0kb":[8,16],"7eO3":[8,0]},"vertices":["z0kb","7eO3","CJoP"],"texture":0},"Ni2ILaZy":{"uv":{"CJoP":[9.33328,0],"buLg":[9.33328,16],"z0kb":[8,16]},"vertices":["buLg","z0kb","CJoP"],"texture":0},"ndnnaC0O":{"uv":{"SrqG":[10.66672,0],"buLg":[9.33328,16],"CJoP":[9.33328,0]},"vertices":["buLg","CJoP","SrqG"],"texture":0},"BE5YFpUa":{"uv":{"SrqG":[10.66672,0],"WNV9":[10.66672,16],"buLg":[9.33328,16]},"vertices":["WNV9","buLg","SrqG"],"texture":0},"OTMfxqwH":{"uv":{"E2Tm":[12,0],"WNV9":[10.66672,16],"SrqG":[10.66672,0]},"vertices":["WNV9","SrqG","E2Tm"],"texture":0},"u1pEx2j1":{"uv":{"E2Tm":[12,0],"Yj2R":[12,16],"WNV9":[10.66672,16]},"vertices":["Yj2R","WNV9","E2Tm"],"texture":0},"duRLSagd":{"uv":{"6dV3":[13.33328,0],"Yj2R":[12,16],"E2Tm":[12,0]},"vertices":["Yj2R","E2Tm","6dV3"],"texture":0},"OukaUP3p":{"uv":{"6dV3":[13.33328,0],"I8o6":[13.33328,16],"Yj2R":[12,16]},"vertices":["I8o6","Yj2R","6dV3"],"texture":0},"JGGiVEpP":{"uv":{"0JVc":[14.66672,0],"I8o6":[13.33328,16],"6dV3":[13.33328,0]},"vertices":["I8o6","6dV3","0JVc"],"texture":0},"1RvUVK9z":{"uv":{"0JVc":[14.66672,0],"jxPT":[14.66672,16],"I8o6":[13.33328,16]},"vertices":["jxPT","I8o6","0JVc"],"texture":0},"91MUs79d":{"uv":{"JkBB":[16,0],"jxPT":[14.66672,16],"0JVc":[14.66672,0]},"vertices":["jxPT","0JVc","JkBB"],"texture":0},"E91WDgjR":{"uv":{"JkBB":[16,0],"KSFX":[16,16],"jxPT":[14.66672,16]},"vertices":["KSFX","jxPT","JkBB"],"texture":0},"QqDE9L8z":{"uv":{"eL2v":[14.92816,12],"5XHf":[8,8],"h3uq":[16,8]},"vertices":["h3uq","5XHf","eL2v"],"texture":1},"1SImr6LL":{"uv":{"7eZ2":[12,14.92816],"5XHf":[8,8],"eL2v":[14.92816,12]},"vertices":["eL2v","5XHf","7eZ2"],"texture":1},"OPundqrc":{"uv":{"W6CW":[8,16],"5XHf":[8,8],"7eZ2":[12,14.92816]},"vertices":["7eZ2","5XHf","W6CW"],"texture":1},"G5oL6Ik3":{"uv":{"sC9Z":[4,14.92816],"5XHf":[8,8],"W6CW":[8,16]},"vertices":["W6CW","5XHf","sC9Z"],"texture":1},"q4JqLfaE":{"uv":{"WZsu":[1.07184,12],"5XHf":[8,8],"sC9Z":[4,14.92816]},"vertices":["sC9Z","5XHf","WZsu"],"texture":1},"K5SUoyQV":{"uv":{"5YpN":[0,8],"5XHf":[8,8],"WZsu":[1.07184,12]},"vertices":["WZsu","5XHf","5YpN"],"texture":1},"GEyEsnnW":{"uv":{"F0ka":[1.07184,4],"5XHf":[8,8],"5YpN":[0,8]},"vertices":["5YpN","5XHf","F0ka"],"texture":1},"SQP0MxqO":{"uv":{"cHmv":[4,1.07184],"5XHf":[8,8],"F0ka":[1.07184,4]},"vertices":["F0ka","5XHf","cHmv"],"texture":1},"dmJybLWd":{"uv":{"wCz2":[8,0],"5XHf":[8,8],"cHmv":[4,1.07184]},"vertices":["cHmv","5XHf","wCz2"],"texture":1},"xpRMCMoO":{"uv":{"PCd6":[12,1.07184],"5XHf":[8,8],"wCz2":[8,0]},"vertices":["wCz2","5XHf","PCd6"],"texture":1},"RM3TNJM0":{"uv":{"SoMj":[14.92816,4],"5XHf":[8,8],"PCd6":[12,1.07184]},"vertices":["PCd6","5XHf","SoMj"],"texture":1},"MeOAoHXG":{"uv":{"h3uq":[16,8],"5XHf":[8,8],"SoMj":[14.92816,4]},"vertices":["SoMj","5XHf","h3uq"],"texture":1},"XusOJ3Tc":{"uv":{"G9Qa":[16,8],"5F37":[8,8],"sDYr":[14.92816,12]},"vertices":["sDYr","5F37","G9Qa"],"texture":1},"zk6Ciyz4":{"uv":{"sDYr":[14.92816,12],"5F37":[8,8],"Z04K":[12,14.92816]},"vertices":["Z04K","5F37","sDYr"],"texture":1},"8PYK3AbE":{"uv":{"Z04K":[12,14.92816],"5F37":[8,8],"RY0T":[8,16]},"vertices":["RY0T","5F37","Z04K"],"texture":1},"tHEIzlig":{"uv":{"RY0T":[8,16],"5F37":[8,8],"4DCS":[4,14.92816]},"vertices":["4DCS","5F37","RY0T"],"texture":1},"pCbCm87h":{"uv":{"4DCS":[4,14.92816],"5F37":[8,8],"GiOQ":[1.07184,12]},"vertices":["GiOQ","5F37","4DCS"],"texture":1},"iOANxYzk":{"uv":{"GiOQ":[1.07184,12],"5F37":[8,8],"J6bs":[0,8]},"vertices":["J6bs","5F37","GiOQ"],"texture":1},"OWryWnkL":{"uv":{"J6bs":[0,8],"5F37":[8,8],"z0PO":[1.07184,4]},"vertices":["z0PO","5F37","J6bs"],"texture":1},"FUCawpJr":{"uv":{"z0PO":[1.07184,4],"5F37":[8,8],"NRpe":[4,1.07184]},"vertices":["NRpe","5F37","z0PO"],"texture":1},"zPvQgZF7":{"uv":{"NRpe":[4,1.07184],"5F37":[8,8],"JKqj":[8,0]},"vertices":["JKqj","5F37","NRpe"],"texture":1},"UpPKPB4h":{"uv":{"JKqj":[8,0],"5F37":[8,8],"ZbwS":[12,1.07184]},"vertices":["ZbwS","5F37","JKqj"],"texture":1},"UkkB6d7W":{"uv":{"ZbwS":[12,1.07184],"5F37":[8,8],"7ItM":[14.92816,4]},"vertices":["7ItM","5F37","ZbwS"],"texture":1},"0I78AHgh":{"uv":{"7ItM":[14.92816,4],"5F37":[8,8],"G9Qa":[16,8]},"vertices":["G9Qa","5F37","7ItM"],"texture":1}},"type":"mesh","uuid":"397dbfa1-ca31-e913-cc05-390f5cf67a64"}],"outliner":["397dbfa1-ca31-e913-cc05-390f5cf67a64"],"textures":[{"path":"D:\\Maddo\\cirnogodot\\ExternalMaterial\\Barrel\\Barrel_texture1.png","name":"Barrel_texture1.png","folder":"","namespace":"","id":"0","group":"","width":24,"height":8,"uv_width":16,"uv_height":16,"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":"c3009ad6-44e3-d8d2-256f-08fe752f701f","relative_path":"../../../ExternalMaterial/Barrel/Barrel_texture1.png","source":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAICAYAAADjoT9jAAAAAXNSR0IArs4c6QAAAbhJREFUOE9Fkr2KVFEQhL8+92dm7oyuaOoL+AomrriRhgbGghiYC0ZGBgoGi0ZGmooghma+iumKwezMzs7c35bqo3jgwuWc7qquqraP91d+tpu46J1xgrqAIhmFweTQVMTRv973g7Oq/787MCuMbnTKZLSjboiapjTs9N7S/11WxwWHHyPDRBBUSWTQjeAOap2XkMzY9x7DCLQq4KLz6NMRx7wAMzJBMihPCp692PDp9Ihf33o2nVMaLGuLJtUIWAQi19QiENi2dXa9046EAtVK7VwKXt9pguDag5Knzzd8/nDE2ZeBy2hQcSaY/QUT6PrgQSIAWSFlUiCV/aTPwx4pszfHjd96XDOfGbtLZ39wzrfOz699FCyrTCCb5L/ArtZGKftkY2Fhx3nrDJ7JRZBQnoa9vdv4zUcVVWk8fLLm3asrTBP8/j6EVBUpi6aykL1pReJhUc4kv2sJZKsIRnfqZGGvvT9Z+qLMXsqNbechd9061+cpQJoyA2lihb7rYZicrC2Hr4DDTanQEJ5ttZe3Fy7mG4sUBQo25CcLmYPn8PQvcJHEliVYVRZ14+R0WnFt3JTzkCKdPxu324CXPtbwAAAAAElFTkSuQmCC"},{"path":"D:\\Maddo\\cirnogodot\\ExternalMaterial\\Barrel\\Barrel_texture2.png","name":"Barrel_texture2.png","folder":"","namespace":"","id":"2","group":"","width":32,"height":32,"uv_width":16,"uv_height":16,"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":"d9c6d2e0-3163-1045-010e-c5ba3b6eaa1f","relative_path":"../../../ExternalMaterial/Barrel/Barrel_texture2.png","source":"data:image/png;base64,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"}]} \ No newline at end of file diff --git a/3D/BlockbenchModels/Barrel/Barrel.gltf b/3D/BlockbenchModels/Barrel/Barrel.gltf new file mode 100644 index 00000000..53eae911 --- /dev/null +++ b/3D/BlockbenchModels/Barrel/Barrel.gltf @@ -0,0 +1 @@ +{"asset":{"version":"2.0","generator":"Blockbench 4.12.5 glTF exporter"},"scenes":[{"nodes":[1],"name":"blockbench_export"}],"scene":0,"nodes":[{"rotation":[0.7071067811865475,0,0,0.7071067811865476],"name":"shape0","mesh":0},{"children":[0]}],"bufferViews":[{"buffer":0,"byteOffset":0,"byteLength":1728,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":1728,"byteLength":1728,"target":34962,"byteStride":12},{"buffer":0,"byteOffset":3456,"byteLength":1152,"target":34962,"byteStride":8},{"buffer":0,"byteOffset":4608,"byteLength":144,"target":34963},{"buffer":0,"byteOffset":4752,"byteLength":144,"target":34963}],"buffers":[{"byteLength":4896,"uri":"data:application/octet-stream;base64,rTTJPplHnj4AAAA/rTTJPplHnj4AAAC/3zc+Pu+s7T4AAAC/3zc+Pu+s7T4AAAA/rTTJPplHnj4AAAA/3zc+Pu+s7T4AAAC/3zc+Pu+s7T4AAAA/3zc+Pu+s7T4AAAC/CeGRvYhj/T4AAAC/CeGRvYhj/T4AAAA/3zc+Pu+s7T4AAAA/CeGRvYhj/T4AAAC/CeGRvYhj/T4AAAA/CeGRvYhj/T4AAAC/mUeevq00yT4AAAC/mUeevq00yT4AAAA/CeGRvYhj/T4AAAA/mUeevq00yT4AAAC/mUeevq00yT4AAAA/mUeevq00yT4AAAC/76ztvt83Pj4AAAC/76ztvt83Pj4AAAA/mUeevq00yT4AAAA/76ztvt83Pj4AAAC/76ztvt83Pj4AAAA/76ztvt83Pj4AAAC/iGP9vgnhkb0AAAC/iGP9vgnhkb0AAAA/76ztvt83Pj4AAAA/iGP9vgnhkb0AAAC/iGP9vgnhkb0AAAA/iGP9vgnhkb0AAAC/rTTJvplHnr4AAAC/rTTJvplHnr4AAAA/iGP9vgnhkb0AAAA/rTTJvplHnr4AAAC/rTTJvplHnr4AAAA/rTTJvplHnr4AAAC/3zc+vu+s7b4AAAC/3zc+vu+s7b4AAAA/rTTJvplHnr4AAAA/3zc+vu+s7b4AAAC/3zc+vu+s7b4AAAA/3zc+vu+s7b4AAAC/CeGRPYhj/b4AAAC/CeGRPYhj/b4AAAA/3zc+vu+s7b4AAAA/CeGRPYhj/b4AAAC/CeGRPYhj/b4AAAA/CeGRPYhj/b4AAAC/mUeePq00yb4AAAC/mUeePq00yb4AAAA/CeGRPYhj/b4AAAA/mUeePq00yb4AAAC/mUeePq00yb4AAAA/mUeePq00yb4AAAC/76ztPt83Pr4AAAC/76ztPt83Pr4AAAA/mUeePq00yb4AAAA/76ztPt83Pr4AAAC/76ztPt83Pr4AAAA/76ztPt83Pr4AAAC/iGP9PgnhkT0AAAC/iGP9PgnhkT0AAAA/76ztPt83Pr4AAAA/iGP9PgnhkT0AAAC/iGP9PgnhkT0AAAA/iGP9PgnhkT0AAAC/rTTJPplHnj4AAAC/rTTJPplHnj4AAAA/iGP9PgnhkT0AAAA/rTTJPplHnj4AAAC/rTTJPplHnj4AAAC/AAAAAAAAAAAAAAC/3zc+Pu+s7T4AAAC/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"}],"accessors":[{"bufferView":0,"componentType":5126,"count":144,"max":[0.4948999881744385,0.4948999881744385,0.5],"min":[-0.4948999881744385,-0.4948999881744385,-0.5],"type":"VEC3"},{"bufferView":1,"componentType":5126,"count":144,"max":[0.9929447174072266,0.9929447174072266,1],"min":[-0.9929447174072266,-0.9929447174072266,-1],"type":"VEC3"},{"bufferView":2,"componentType":5126,"count":144,"max":[1,1],"min":[0,0],"type":"VEC2"},{"bufferView":3,"componentType":5123,"count":72,"max":[71],"min":[0],"type":"SCALAR"},{"bufferView":4,"componentType":5123,"count":72,"max":[143],"min":[72],"type":"SCALAR"}],"materials":[{"pbrMetallicRoughness":{"metallicFactor":0,"roughnessFactor":1,"baseColorTexture":{"index":0}},"alphaMode":"MASK","alphaCutoff":0.05,"doubleSided":true},{"pbrMetallicRoughness":{"metallicFactor":0,"roughnessFactor":1,"baseColorTexture":{"index":1}},"alphaMode":"MASK","alphaCutoff":0.05,"doubleSided":true}],"textures":[{"sampler":0,"source":0},{"sampler":1,"source":1}],"samplers":[{"magFilter":9728,"minFilter":9728,"wrapS":33071,"wrapT":33071},{"magFilter":9728,"minFilter":9728,"wrapS":33071,"wrapT":33071}],"images":[{"mimeType":"image/png","uri":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAICAYAAACYhf2vAAAAAXNSR0IArs4c6QAAAehJREFUOE+FkzuLVEEQhU/1486dO6MrmvoH/AsmrriRhgbGC2JgviAIG4iggsGikZGmIoiRmC0oiD/DdBeD2XnfV5ecahcT8TYMXKar63x9TrW8vT3Vk1XCslX0CSg84J3AC5AUqCJs8Zv7m04xLf7uK4CRFzS9IjhB3fMfWE0VBPufl5I7/HvJ0a2Jnh+Kux7b4x5dggFERxig6QFVgK3LADgRbFo1WIpGDywbtXNcZCg9IAIcHK+HAZwAYc/j4aM53h3t4PRTi3mjCAJMinyeNRQmAOF4awJQbFErVq2i7mEOsJZulUHw+OsAwPMblfLApTsBDw7meP9mBycfOqytIZtlgNEfMYrOtmoQFKDVdIYO0KU28admP50ZdODFbqXX9guUI8FqrdhsFWcLxc+PrTWYxAzAGJg/xS4WgsB4GJMXs/usVnSa4QjgwHkSPPux+X8EL29WevVeRAyCu/dnePX0AlICfn3pzEo24SxUUczWeU0ItQjyTOR9DiljI0CvisKJxXf4bSCC13sTHYecJd1eNGp2zmrF5dKZSBWyEG/MoVy1QJcU51djDQfQ0qILhNQc25PvAw4cXh8rya+MnTXg4Jm9TszGTvNw8ZvihLBX4oBpFKvrk6LhE+aLSXke6AjX0BD+BoWF7Qm0yro2AAAAAElFTkSuQmCC"},{"mimeType":"image/png","uri":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAB/VJREFUWEdVV02PHcUVPVXVH+9zZph5w3gwzjBGNo5jjG0IUYgcRZaIZAUhBcEq2eTvsGAF/AeyMRs2WSTIAgmEYiVSBCREDuMoY8tjjzPz+n11dVVF51bXs9OjN/1ed/Wte88999zb6vqZUbA+QAEwmv+BXCs8mDdY6AxZbuB9gA9B7nGFUgqBfwEoMrP8bhuHxj1eS3vee6yogKdKAx8ArRQKo+RsvYeiA40PcJ4mIcb+6xS6vVI25EEHeI9npQCtFYKHOJVnWhyxzsla5+JaOhpCgNYajMvZBlulgoZCmWlwT+s81K/OjoJC9GZqHWxRcgd5iJEmB7gZP7zmbYNT3Tl62su6caNxaHPMVCFOOq6Dgg9e1mdaC7qu8RiGBv2CaARxQr15bjMYpTCxHpXJiRGcp+G4OY/GecynC6znGoPCINMKP92qJFIepQHmDfCXwyFqF3BnYtFoI8hw48xoQYo2aWvorKSB99Vb558O3OrfNWAyIxDK3oRaKdRzizXFSCL0dJYQvjyqJKe9HDAK2DsGDupVLBov0ZFX308aZEUmCBSZXgZkrcOG9pFPb/9oK9yuLJBlsgHDEqhJSltjs5OJN5LHEMQBIsDor4wqiZ6m/3xfw+sBaudRNz7yQAEPZg18WYpt8oxh87tdWJzsaKiru+thqjO5KayVNQFrcNjo5kv250aL8VQldIYo9HMljt38T4nMFLJmZp3YSox/NG8wywuxTQeERyGgsDXU5d0RCS2HVlpukCjPDktxilEQQl7nbxqJCAT8bKtCYYDKBnx2dyCspjPkgThqFLpZJOD9aYOZyZa8iRXjoV58bhSYd61jzrnk3EohxnjwYZKllYhYji3LX9saS64fzgNuHfTEOTI7raU9Pt/JNEqj8c3RAl4qgsXY2jl/ap2IS174wEtruWyS8shokwjRIa5N7KcDEwvcPgrYn/YEWqZA+CNiFdEiEnSidsA/p40YMEZHXREHBH6F3Du8sNaJgtIqHw0Qev5OZSX32/QwYl5n9KwG2uI1Oi2IsgxbJ7jmu6MFQpaJsyx3dWFnJAERqlMFa1ovN48w8R43jCpJgWEZEmZGy/uCUGDONcj/qIzxHteVmRF55/fKOtxZ0J6POnD59CZPQradIkbAhckwoxBZXeYeKIxGZigqkZREh1HT+ZR/cmPexHR0c4Myi1yyLuAfU7fsKerVsycEgaa2eK5nJFISMqNqSd08RoGuEAU6EKU0ouL5jFQLG43GglrgYoSpvOkEU8QK+fZogaIsJGj1k7MnhIRuvsCz/VwuSpfj6pYLSZaTRtBYKjmulTybqJI8JrVbcoEOMGVcwzQTtdvHC6iykN/iABe90B3jwjpw68FQIpebLTmF/Yw0Cpk4l9CJghNTlFBLOtD4yANxgO3X1VBhgUe1x5FeEZKqV8+cCIzm4qDCpRG9jCymxzxzsy8PVkUdmT/CKxu2vT3JcirOtngESW6+3Rnj5JAzBjBr4rW/PQT+ZYeClvrxma1gG4+dcoJrJxUoP1zM6PO2y7Ed3Ly7Ig7MGieb83iyvGIhxNIjD3gwsNe2Kglk4YGZZTkDfz3UOMQw9ovLp58OJNQANd453YisssGUktNYgiyhP+0PhVBkNgkm0xPz3+aehhMyfIZ8YCW8MhqjYal6YGIDah/w1aMurC7BFKmXdjfFAeryb3bn8hCjoQNEYljyrPDp/lDEY944TOvY7dhhGS3LkM5JTlVMIRnE71e3K6ksquCDWZT3z4+Y0lZX2AuYX154Y3sqRvlhCgjxaknhiSiM64CbdwfLjkkn0mCRiMszP2zVfIbNirasBw5nHrMm4IvjyCnhwKXdTSEhF20VC1x7xgv0hJMP0ZlOFivi0/2+8CCKTdQEQp2GWdpM1cHoL22MIyqitCzPgD/ua1Sq217TUBcFgccE+t3zs/+rAm7GTaTn7w9kdkz1nlQwCVCaFxgA03Vlo5LniEQi9O/vdGVE46Zcoy7sbIQkNDyvZhZv/cBGLrSyzAg+vzeUzUkmaUxRHJbMZ7fj9diUosPkxcubE0kTif3xXo7K548RI45XdteDB2f72BEJ57nuGBc3ICWZKeDL+0O5R7LOOG61mkAcuSE3Jwp0NE3EXMPnieCljQp/fwR8Pem3c0eUcrYu9dsXu+GbaSsKrRGZ9/rH2F2NDeSrg8GytqWmnZcaT6zP2TzaCSi16TQ30IGn8jFujQfLSjHtRPzD7hjq/df74cb3GY7RWUIjLykBOFOOMXUDKSfmkTXPkqL3U9ZVO3hKLqM2LTU/KeSd4wVcGV9yUt7pVM/P8OudBuq9az3hwEd7HQRTyCJOQ9yU2gDn8PwwXmfNM/ucEYkANZ/OpEGFz3BNmh9uTxqYPE7bT77elcrj+omJlLg4QJI8nAV8cq8H62N+aLXtxsIPTkvbXYMee3srtZTlNDeQeEn/96oaIcuF7QluCYYTkvK4Nqqw2eWYpqA+/GU/SDl54P7M4w/3eqhDLJNUnnFiitOtNCHvUMYSkAmIFeOVhily1PKC6mXm44QkL7LteBacw/XtCTY6WgSKpak+eL0faiJNBQtsGMCNvRK+jZJRpLfNlGc68+TbcRxaOJgwfU5SSGeTQMm5cXimE6vl6vYEvTy2cfXuL3ph7qKBgi04cCYY4GBqMQbf6YwQaKlwLK127hK5bqOU17F2c0GgnbIJ2YoOWGtfz5nun29HbaCZ/wGNiez8vkNLMQAAAABJRU5ErkJggg=="}],"meshes":[{"primitives":[{"mode":4,"attributes":{"POSITION":0,"NORMAL":1,"TEXCOORD_0":2},"indices":3,"material":0},{"mode":4,"attributes":{"POSITION":0,"NORMAL":1,"TEXCOORD_0":2},"indices":4,"material":1}]}]} \ No newline at end of file diff --git a/3D/BlockbenchModels/Barrel/Barrel.gltf.import b/3D/BlockbenchModels/Barrel/Barrel.gltf.import new file mode 100644 index 00000000..d392f712 --- /dev/null +++ b/3D/BlockbenchModels/Barrel/Barrel.gltf.import @@ -0,0 +1,37 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://c6k5ii0onbh3j" +path="res://.godot/imported/Barrel.gltf-033e7b9c1e31cb6511d8d8b9c8f09592.scn" + +[deps] + +source_file="res://3D/BlockbenchModels/Barrel/Barrel.gltf" +dest_files=["res://.godot/imported/Barrel.gltf-033e7b9c1e31cb6511d8d8b9c8f09592.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/Barrel/Barrel_0.png b/3D/BlockbenchModels/Barrel/Barrel_0.png new file mode 100644 index 00000000..1c66efca --- /dev/null +++ b/3D/BlockbenchModels/Barrel/Barrel_0.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db81114f1a807643b3692dadba3f2cf2c12626fecd24d04f8b53c1069dafeaae +size 558 diff --git a/3D/BlockbenchModels/Barrel/Barrel_0.png.import b/3D/BlockbenchModels/Barrel/Barrel_0.png.import new file mode 100644 index 00000000..c998b774 --- /dev/null +++ b/3D/BlockbenchModels/Barrel/Barrel_0.png.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ce12nbymqk7eu" +path="res://.godot/imported/Barrel_0.png-ea40281661ff45b381d803800b1f2f37.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "2534c8a8e4bbb92d500633735de1d414" +} + +[deps] + +source_file="res://3D/BlockbenchModels/Barrel/Barrel_0.png" +dest_files=["res://.godot/imported/Barrel_0.png-ea40281661ff45b381d803800b1f2f37.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/Barrel/Barrel_1.png b/3D/BlockbenchModels/Barrel/Barrel_1.png new file mode 100644 index 00000000..c67bca3c --- /dev/null +++ b/3D/BlockbenchModels/Barrel/Barrel_1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:36415fb79d7f185bf3029ac8156c115a9edb8313a3e89758e7288c53be4d9fd4 +size 2107 diff --git a/3D/BlockbenchModels/Barrel/Barrel_1.png.import b/3D/BlockbenchModels/Barrel/Barrel_1.png.import new file mode 100644 index 00000000..bc657018 --- /dev/null +++ b/3D/BlockbenchModels/Barrel/Barrel_1.png.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cd832q85enry5" +path="res://.godot/imported/Barrel_1.png-384929c143219694d75a2af907eabeac.ctex" +metadata={ +"vram_texture": false +} +generator_parameters={ +"md5": "02149eab1cadac3a944d26e9f49ac1ad" +} + +[deps] + +source_file="res://3D/BlockbenchModels/Barrel/Barrel_1.png" +dest_files=["res://.godot/imported/Barrel_1.png-384929c143219694d75a2af907eabeac.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/MapScenes/TestLevel.tscn b/3D/MapScenes/TestLevel.tscn index 5c8b2ac0..398f894f 100644 --- a/3D/MapScenes/TestLevel.tscn +++ b/3D/MapScenes/TestLevel.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=408 format=4 uid="uid://c8gtrjf2xeue7"] +[gd_scene load_steps=409 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"] @@ -90,6 +90,7 @@ [ext_resource type="Resource" uid="uid://bdpbekqhuuq4l" path="res://Resources/Items/Shield_Extend_Pickup.tres" id="77_mf5at"] [ext_resource type="Script" uid="uid://b5fesrd4lv8t1" path="res://Scripts/Resources/Events/EventResource.cs" id="82_rri8m"] [ext_resource type="PackedScene" uid="uid://dioiq4nb7kiet" path="res://3D/Scenes/Props/ForceField_3D.tscn" id="83_51d8c"] +[ext_resource type="PackedScene" uid="uid://dbv1l74q66rdr" path="res://3D/Scenes/Props/Teleporter_3D.tscn" id="83_rri8m"] [ext_resource type="Resource" uid="uid://c48vva6qw2h12" path="res://Resources/Enemies/Base_Fairy_Special_3D.tres" id="88_6uhge"] [ext_resource type="Resource" uid="uid://dau0s8ob7qnpc" path="res://Resources/Items/IceShotgun.tres" id="88_kob5s"] [ext_resource type="Resource" uid="uid://bgcgeg187vg1h" path="res://Resources/Items/IcicleRepeater.tres" id="89_awrmj"] @@ -3377,6 +3378,16 @@ shape = SubResource("SphereShape3D_rfncj") transform = Transform3D(1.31134e-07, 0, -1, 0, 1, 0, 1, 0, 1.31134e-07, 7.56185, 2.23262, 23.3804) Target = NodePath("../Door") +[node name="Teleporter" parent="Props" node_paths=PackedStringArray("Target") instance=ExtResource("83_rri8m")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 26.1629, 1, 8.69657) +IsEnabled = true +Target = NodePath("../Teleporter2") + +[node name="Teleporter2" parent="Props" node_paths=PackedStringArray("Target") instance=ExtResource("83_rri8m")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 11.2276, 1, 5.26922) +IsEnabled = true +Target = NodePath("../Teleporter") + [node name="Enemies" type="Node3D" parent="."] [node name="FloorEmitter" parent="Enemies" instance=ExtResource("63_r8ono")] diff --git a/3D/Scenes/Props/Teleporter_3D.tscn b/3D/Scenes/Props/Teleporter_3D.tscn index 1ec86c42..ab123f9b 100644 --- a/3D/Scenes/Props/Teleporter_3D.tscn +++ b/3D/Scenes/Props/Teleporter_3D.tscn @@ -1,14 +1,31 @@ -[gd_scene load_steps=3 format=3 uid="uid://dbv1l74q66rdr"] +[gd_scene load_steps=5 format=3 uid="uid://dbv1l74q66rdr"] [ext_resource type="PackedScene" uid="uid://dnofvejpr6lvx" path="res://3D/BlockbenchModels/Teleporter/Teleporter.gltf" id="1_1cq1b"] +[ext_resource type="Script" uid="uid://dmpd31aphufg7" path="res://Scripts/Activables/3D/Teleporter3D.cs" id="1_3138p"] [sub_resource type="BoxShape3D" id="BoxShape3D_jvaa5"] size = Vector3(0.855408, 0.0598755, 0.878296) +[sub_resource type="CylinderShape3D" id="CylinderShape3D_5c8o5"] +height = 0.949707 +radius = 0.257813 + [node name="Teleporter" type="StaticBody3D"] +script = ExtResource("1_3138p") +TeleportOffset = Vector3(0, 0.4, 0) [node name="CollisionShape3D" type="CollisionShape3D" parent="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.00344848, 0.0288237, 0.000671387) shape = SubResource("BoxShape3D_jvaa5") [node name="blockbench_export" parent="." instance=ExtResource("1_1cq1b")] + +[node name="TeleporterTrigger" type="Area3D" parent="."] +collision_layer = 0 +collision_mask = 2 + +[node name="CollisionShape3D" type="CollisionShape3D" parent="TeleporterTrigger"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.525146, 0) +shape = SubResource("CylinderShape3D_5c8o5") + +[connection signal="body_entered" from="TeleporterTrigger" to="." method="_on_body_entered"] diff --git a/ExternalMaterial/Barrel/Barrel.mtl b/ExternalMaterial/Barrel/Barrel.mtl new file mode 100644 index 00000000..5e391cc8 --- /dev/null +++ b/ExternalMaterial/Barrel/Barrel.mtl @@ -0,0 +1,26 @@ +# Pixel Composer +newmtl mat.1 +Kd 1.00 1.00 1.00 +Ks 0.00 0.00 0.00 +Ns 0.00 +Ni 1.00 +d 1.00 +illum 0 +map_Kd D:\Maddo\cirnogodot\ExternalMaterial\Barrel/Barrel_texture1.png +newmtl mat.2 +Kd 1.00 1.00 1.00 +Ks 0.00 0.00 0.00 +Ns 0.00 +Ni 1.00 +d 1.00 +illum 0 +map_Kd D:\Maddo\cirnogodot\ExternalMaterial\Barrel/Barrel_texture2.png +newmtl mat.3 +Kd 1.00 1.00 1.00 +Ks 0.00 0.00 0.00 +Ns 0.00 +Ni 1.00 +d 1.00 +illum 0 +map_Kd D:\Maddo\cirnogodot\ExternalMaterial\Barrel/Barrel_texture2.png + diff --git a/ExternalMaterial/Barrel/Barrel.obj b/ExternalMaterial/Barrel/Barrel.obj index 64e806c9..b0617437 100644 --- a/ExternalMaterial/Barrel/Barrel.obj +++ b/ExternalMaterial/Barrel/Barrel.obj @@ -1,5 +1,7 @@ # Pixel Composer +mtllib Barrel.mtl o shape0 +usemtl mat.1 v 0.39298 0.30914 -0.50000 v 0.39298 0.30914 0.50000 v 0.18576 0.46421 -0.50000 @@ -91,6 +93,7 @@ f 23/23/12 24/24/12 1/25/1 f 24/24/12 2/26/1 1/25/1 o shape1 +usemtl mat.2 v 0.00000 0.00000 -0.50000 vn 0.00000 0.00000 -1.00000 @@ -121,6 +124,7 @@ f 25/27/13 21/36/13 23/37/13 f 25/27/13 23/37/13 1/28/13 o shape2 +usemtl mat.3 v -0.00000 -0.00000 0.50000 vn -0.00000 -0.00000 1.00000 diff --git a/ExternalMaterial/Barrel/Barrel_texture1.png b/ExternalMaterial/Barrel/Barrel_texture1.png new file mode 100644 index 00000000..93c9783e --- /dev/null +++ b/ExternalMaterial/Barrel/Barrel_texture1.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c59e6c5a22adbe316fc13148aaec507ced72a6e0aa7768253d4cab7e3b42e32 +size 476 diff --git a/ExternalMaterial/Barrel/Barrel_texture1.png.import b/ExternalMaterial/Barrel/Barrel_texture1.png.import new file mode 100644 index 00000000..2c499642 --- /dev/null +++ b/ExternalMaterial/Barrel/Barrel_texture1.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cl0jvx7ipwvbh" +path="res://.godot/imported/Barrel_texture1.png-f9b8b7add393edcb26b1f24ca363265b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ExternalMaterial/Barrel/Barrel_texture1.png" +dest_files=["res://.godot/imported/Barrel_texture1.png-f9b8b7add393edcb26b1f24ca363265b.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/ExternalMaterial/Barrel/Barrel_texture2.png b/ExternalMaterial/Barrel/Barrel_texture2.png new file mode 100644 index 00000000..33d93842 --- /dev/null +++ b/ExternalMaterial/Barrel/Barrel_texture2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b29755af6c360906e29cbf6df5e44c12db8c4f0a056c2d18b810c686ccf1d3e2 +size 1876 diff --git a/ExternalMaterial/Barrel/Barrel_texture2.png.import b/ExternalMaterial/Barrel/Barrel_texture2.png.import new file mode 100644 index 00000000..ff83ebe4 --- /dev/null +++ b/ExternalMaterial/Barrel/Barrel_texture2.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bn0sxcg0mki7a" +path="res://.godot/imported/Barrel_texture2.png-81cb8e0274ad6253af45636fe5a85f3f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://ExternalMaterial/Barrel/Barrel_texture2.png" +dest_files=["res://.godot/imported/Barrel_texture2.png-81cb8e0274ad6253af45636fe5a85f3f.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/Scenes/Actors/IsoPlayer_FSM.tscn b/Scenes/Actors/IsoPlayer_FSM.tscn index c4ace5cd..5c8fae7b 100644 --- a/Scenes/Actors/IsoPlayer_FSM.tscn +++ b/Scenes/Actors/IsoPlayer_FSM.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=63 format=3 uid="uid://rimplblbptcd"] +[gd_scene load_steps=66 format=3 uid="uid://rimplblbptcd"] [ext_resource type="Script" uid="uid://88smibkin17p" path="res://Scripts/Components/FSM/3DPlayer/IsoPlayerFSMProxy.cs" id="1_cc7e7"] [ext_resource type="Texture2D" uid="uid://ddwhrlrgj6i00" path="res://Sprites/Actors/Cirno.png" id="1_vex34"] @@ -7,12 +7,15 @@ [ext_resource type="Script" uid="uid://d3ydlcdm8m3tg" path="res://Scripts/Components/FSM/3DPlayer/Active.cs" id="3_cc7e7"] [ext_resource type="Script" uid="uid://c5brx3ail1tlh" path="res://Scripts/Components/FSM/3DPlayer/IsoMovementModule.cs" id="5_fg04g"] [ext_resource type="Script" uid="uid://cmafvigtkg2qo" path="res://Scripts/Components/FSM/3DPlayer/Dead.cs" id="5_ok250"] +[ext_resource type="Script" uid="uid://ci87ilsfrj1xh" path="res://Scripts/Components/FSM/3DPlayer/Cutscene.cs" id="6_chmen"] [ext_resource type="Script" uid="uid://eop2ue3otxcs" path="res://Scripts/Components/FSM/3DPlayer/IsoPlayerStorageModule.cs" id="6_habpy"] [ext_resource type="Script" uid="uid://cq1joxgoj3jdp" path="res://Scripts/Components/Actors/3D/PlayerAnimationProvider3D.cs" id="6_onfm2"] [ext_resource type="SpriteFrames" uid="uid://c6exoa8pxbc6w" path="res://Resources/Sprites/player_float.tres" id="6_yq7h2"] [ext_resource type="Script" uid="uid://dq338w2lw5phl" path="res://Scripts/Components/Actors/KeyboardInputProvider.cs" id="7_4cdxq"] [ext_resource type="SpriteFrames" uid="uid://byb4cbb23cawf" path="res://Resources/Sprites/player_float_legs.tres" id="7_l4f8l"] +[ext_resource type="Script" uid="uid://dls68t7f8eoqb" path="res://Scripts/Components/FSM/3DPlayer/Teleporting.cs" id="7_nwocn"] [ext_resource type="Material" uid="uid://dsrsfpcpwmaql" path="res://Resources/Materials/Player_Blink_Teleport_Material_3D.tres" id="7_yarib"] +[ext_resource type="Script" uid="uid://bayjsi428yx83" path="res://Scripts/Components/FSM/3DPlayer/UnTeleporting.cs" id="8_nk07c"] [ext_resource type="Script" uid="uid://1fryvj4omkin" path="res://Scripts/Components/Actors/MouseAimProvider3D.cs" id="9_2ffwi"] [ext_resource type="Script" uid="uid://c8ar11sg0su2h" path="res://Scripts/Components/FSM/3DPlayer/ShadowModule.cs" id="9_fg04g"] [ext_resource type="Script" uid="uid://ceiworv2pgl1r" path="res://Scripts/Components/Actors/3D/AnimatedShaderSprite3D.cs" id="9_yarib"] @@ -221,6 +224,19 @@ _moduleNodes = [NodePath("../../InputProvider"), NodePath("../../MovementModule" [node name="Dead" type="Node" parent="StateMachine"] script = ExtResource("5_ok250") +[node name="Cutscene" type="Node" parent="StateMachine" node_paths=PackedStringArray("AnimationProvider", "PlayerStorage")] +script = ExtResource("6_chmen") +AnimationProvider = NodePath("../../AnimationProvider") +PlayerStorage = NodePath("../../Storage") + +[node name="Teleporting" type="Node" parent="StateMachine" node_paths=PackedStringArray("AnimationProvider")] +script = ExtResource("7_nwocn") +AnimationProvider = NodePath("../../AnimationProvider") + +[node name="UnTeleporting" type="Node" parent="StateMachine" node_paths=PackedStringArray("AnimationProvider")] +script = ExtResource("8_nk07c") +AnimationProvider = NodePath("../../AnimationProvider") + [node name="AnimationProvider" type="Node3D" parent="." node_paths=PackedStringArray("AnimatedSprite")] script = ExtResource("6_onfm2") AnimatedSprite = NodePath("AnimatedSprite3D") diff --git a/Scripts/Activables/3D/Teleporter3D.cs b/Scripts/Activables/3D/Teleporter3D.cs new file mode 100644 index 00000000..49b8baad --- /dev/null +++ b/Scripts/Activables/3D/Teleporter3D.cs @@ -0,0 +1,197 @@ +using System.Threading; +using System.Threading.Tasks; +using Cirno.Scripts.Components.FSM; +using Cirno.Scripts.Components.FSM._3DPlayer; +using Godot; +using GTweensGodot.Extensions; + +namespace Cirno.Scripts.Activables._3D; + +[Tool] +public partial class Teleporter3D : StaticBody3D, IActivable +{ + [Export] public bool IsEnabled { get; set; } + + [Export] public bool Invisible { get; set; } = false; + + public bool IsPrimed { get; private set; } + + [Export] public Teleporter3D Target { get; set; } + + [Export] public float ParticleEmitTime { get; private set; } = 2f; + + [Export] public float TeleportAnimationLength { get; private set; } = 0.5f; + [Export] public Vector3 TeleportOffset { get; private set; } = new Vector3(0, 4f, 0); + + [ExportCategory("Animations")] + [Export] + public StringName ActiveAnimationName { get; private set; } = "Active"; + + [Export] public StringName DefaultAnimationName { get; private set; } = "Default"; + + private void PlayAnimation(StringName name) + { + } + + private void StopParticles() + { + // _particles.Emitting = false; + // _particleTimer = 0; + } + + private void EmitParticles() + { + } + + public override void _Ready() + { + PlayAnimation(IsEnabled ? ActiveAnimationName : DefaultAnimationName); + + if (Engine.IsEditorHint()) return; + + + IsPrimed = true; + StopParticles(); + + this.Visible = !Invisible; + + // _teleportStartSound = GetNodeOrNull("TeleportStart"); + // _teleportEndSound = GetNodeOrNull("TeleportEnd"); + } + + public override void _Process(double delta) + { + if (Engine.IsEditorHint()) return; + // if (!_particles.Emitting) return; + // + // _particleTimer += delta; + // + // if (_particleTimer >= ParticleEmitTime) + // { + // _particleTimer = 0; + // _particles.Emitting = false; + // } + } + + public bool Activate(ActivationType activationType = ActivationType.Toggle) + { + switch (activationType) + { + case ActivationType.Toggle: + // Enables/Disables teleporter + break; + case ActivationType.Enable: + // Enables Teleporter + IsEnabled = true; + PlayAnimation(ActiveAnimationName); + break; + case ActivationType.Disable: + IsEnabled = false; + PlayAnimation(DefaultAnimationName); + // Disables Teleporter + break; + case ActivationType.Use: + // Teleports + break; + case ActivationType.Destroy: + // Destroys + break; + } + + return true; + } + + public void PrepareForReceiving() + { + IsPrimed = false; + EmitParticles(); + } + + public void FireParticles() + { + EmitParticles(); + } + + private void _on_body_entered(Node3D body) + { + GD.Print("Something entered the teleporter"); + if (!IsEnabled) return; + if (body is not IsoPlayerFSMProxy player) return; + GD.Print("Player entered the teleporter"); + + if (!IsPrimed) + { + IsPrimed = true; + //_particles.Emitting = false; + return; + } + + // Teleport player to target if active + if (!IsEnabled) return; + + GD.Print("Teleporting..."); + + // Call Teleport here + _ = Teleport(player.PlayerFSM); + } + + protected virtual async Task Teleport(IsoPlayerStateMachine player) + { + if (Target is null) return; + //player.RequestMovementDisable(true); + player.SetState(PlayerState.Cutscene); + + await TweenPlayer(player.MainObject); + + PlayTeleportStartSound(); + + //_particles.Emitting = true; + FireParticles(); + + //await player.Teleport(); + player.SetState(PlayerState.Teleporting); + await Task.Delay((int)(0.6f * 1000)); + + await Task.Delay((int)(TeleportAnimationLength * 1000)); + + Target.PrepareForReceiving(); + player.MainObject.GlobalPosition = Target.GlobalPosition + TeleportOffset; + Target.PlayTeleportEndSound(); + //await player.UnTeleport(); + + player.SetState(PlayerState.UnTeleporting); + await Task.Delay((int)(0.6f * 1000)); + + //player.RequestMovementDisable(false); + player.SetState(PlayerState.Active); + } + + public void PlayTeleportStartSound() + { + + } + + public void PlayTeleportEndSound() + { + + } + + protected async Task TweenPlayer(CharacterBody3D player) + { + await player.TweenGlobalPosition(GlobalPosition + TeleportOffset, TeleportAnimationLength) + .PlayAsync(CancellationToken.None); + + // Create a Tween for the teleport animation + // Tween tween = GetTree().CreateTween(); + // tween.SetEase(Tween.EaseType.InOut); + // tween.SetTrans(Tween.TransitionType.Sine); + // tween.TweenProperty(player, "global_position", GlobalPosition + new Vector2(0,-4f), TeleportAnimationLength); + // + // // Wait for the tween to finish + // await ToSignal(tween, "finished"); + } + + public void Toggle() + { + } +} \ No newline at end of file diff --git a/Scripts/Activables/3D/Teleporter3D.cs.uid b/Scripts/Activables/3D/Teleporter3D.cs.uid new file mode 100644 index 00000000..70dc5ff4 --- /dev/null +++ b/Scripts/Activables/3D/Teleporter3D.cs.uid @@ -0,0 +1 @@ +uid://dmpd31aphufg7 diff --git a/Scripts/Components/FSM/3DPlayer/Cutscene.cs b/Scripts/Components/FSM/3DPlayer/Cutscene.cs new file mode 100644 index 00000000..ad09d61b --- /dev/null +++ b/Scripts/Components/FSM/3DPlayer/Cutscene.cs @@ -0,0 +1,54 @@ +using Cirno.Scripts.Components.Actors._3D; +using Cirno.Scripts.Components.FSM.Player; +using Cirno.Scripts.Utils; +using Godot; + +namespace Cirno.Scripts.Components.FSM._3DPlayer; + +public partial class Cutscene : BaseState +{ + public override PlayerState StateId => PlayerState.Cutscene; + + [Export] public PlayerAnimationProvider3D AnimationProvider { get; set; } + + [Export] public IsoPlayerStorageModule PlayerStorage { get; private set; } + + public override void Init(IStateMachine machine) + { + base.Init(machine); + } + + public override void EnterState() + { + base.EnterState(); + MainObject.Show(); + MainObject.Velocity = Vector3.Zero; + PlayerStorage.MovementDirection = Vector3.Zero; + } + + public override void ExitState() + { + base.ExitState(); + + AnimationProvider.SetAnimationSpeed(Vector2.Zero); + } + + public override void ProcessState(double delta) + { + base.ProcessState(delta); + AnimationProvider.SetAnimationSpeed(MainObject.Velocity.ToVector2()); + AnimationProvider.SetAnimation(MainObject.Velocity.ToVector2()); + } + + public override void PhysicsProcessState(double delta) + { + // Reset at start of frame + //MainObject.Velocity = Vector2.Zero; + + // Process modules + base.PhysicsProcessState(delta); + + + } + +} \ No newline at end of file diff --git a/Scripts/Components/FSM/3DPlayer/Cutscene.cs.uid b/Scripts/Components/FSM/3DPlayer/Cutscene.cs.uid new file mode 100644 index 00000000..b54089a3 --- /dev/null +++ b/Scripts/Components/FSM/3DPlayer/Cutscene.cs.uid @@ -0,0 +1 @@ +uid://ci87ilsfrj1xh diff --git a/Scripts/Components/FSM/3DPlayer/IsoMovementModule.cs b/Scripts/Components/FSM/3DPlayer/IsoMovementModule.cs index 110bc832..33453119 100644 --- a/Scripts/Components/FSM/3DPlayer/IsoMovementModule.cs +++ b/Scripts/Components/FSM/3DPlayer/IsoMovementModule.cs @@ -74,7 +74,6 @@ public partial class IsoMovementModule : ModuleBase +{ + public override PlayerState StateId => PlayerState.Teleporting; + + [Export] public PlayerAnimationProvider3D AnimationProvider { get; set; } + + public override void Init(IStateMachine machine) + { + base.Init(machine); + } + + public override void EnterState() + { + base.EnterState(); + AnimationProvider.PlayTeleportAnimation(); + MainObject.Velocity = Vector3.Zero; + } + + public override void ExitState() + { + base.ExitState(); + + + } + + public override void ProcessState(double delta) + { + base.ProcessState(delta); + + } + + public override void PhysicsProcessState(double delta) + { + // Process modules + base.PhysicsProcessState(delta); + + } + +} \ No newline at end of file diff --git a/Scripts/Components/FSM/3DPlayer/Teleporting.cs.uid b/Scripts/Components/FSM/3DPlayer/Teleporting.cs.uid new file mode 100644 index 00000000..8af52e1c --- /dev/null +++ b/Scripts/Components/FSM/3DPlayer/Teleporting.cs.uid @@ -0,0 +1 @@ +uid://dls68t7f8eoqb diff --git a/Scripts/Components/FSM/3DPlayer/UnTeleporting.cs b/Scripts/Components/FSM/3DPlayer/UnTeleporting.cs new file mode 100644 index 00000000..a2ccd450 --- /dev/null +++ b/Scripts/Components/FSM/3DPlayer/UnTeleporting.cs @@ -0,0 +1,45 @@ +using Cirno.Scripts.Components.Actors._3D; +using Cirno.Scripts.Components.FSM.Player; +using Cirno.Scripts.Utils; +using Godot; + +namespace Cirno.Scripts.Components.FSM._3DPlayer; + +public partial class UnTeleporting : BaseState +{ + public override PlayerState StateId => PlayerState.UnTeleporting; + + [Export] public PlayerAnimationProvider3D AnimationProvider { get; set; } + + public override void Init(IStateMachine machine) + { + base.Init(machine); + } + + public override void EnterState() + { + base.EnterState(); + AnimationProvider.PlayUnteleportAnimation(); + } + + public override void ExitState() + { + base.ExitState(); + + + } + + public override void ProcessState(double delta) + { + base.ProcessState(delta); + + } + + public override void PhysicsProcessState(double delta) + { + // Process modules + base.PhysicsProcessState(delta); + + } + +} \ No newline at end of file diff --git a/Scripts/Components/FSM/3DPlayer/UnTeleporting.cs.uid b/Scripts/Components/FSM/3DPlayer/UnTeleporting.cs.uid new file mode 100644 index 00000000..d7d5b313 --- /dev/null +++ b/Scripts/Components/FSM/3DPlayer/UnTeleporting.cs.uid @@ -0,0 +1 @@ +uid://bayjsi428yx83