diff --git a/Mods/ExampleMod/Content/Maps/ExampleLevel/Blueprints/MI_FrackingNode_Mid_Desert_Oil_01.uasset b/Mods/ExampleMod/Content/Maps/ExampleLevel/Blueprints/MI_FrackingNode_Mid_Desert_Oil_01.uasset new file mode 100644 index 0000000000..de25a7fcd4 Binary files /dev/null and b/Mods/ExampleMod/Content/Maps/ExampleLevel/Blueprints/MI_FrackingNode_Mid_Desert_Oil_01.uasset differ diff --git a/Mods/ExampleMod/Content/Maps/ExampleLevel/Blueprints/MI_FrackingNodes_Desert_Oil_01.uasset b/Mods/ExampleMod/Content/Maps/ExampleLevel/Blueprints/MI_FrackingNodes_Desert_Oil_01.uasset new file mode 100644 index 0000000000..127f471ba5 Binary files /dev/null and b/Mods/ExampleMod/Content/Maps/ExampleLevel/Blueprints/MI_FrackingNodes_Desert_Oil_01.uasset differ diff --git a/Mods/ExampleMod/Content/Maps/ExampleLevel/Blueprints/NodeMeshParams.uasset b/Mods/ExampleMod/Content/Maps/ExampleLevel/Blueprints/NodeMeshParams.uasset new file mode 100644 index 0000000000..ada828291b Binary files /dev/null and b/Mods/ExampleMod/Content/Maps/ExampleLevel/Blueprints/NodeMeshParams.uasset differ diff --git a/Mods/ExampleMod/Content/Maps/ExampleLevel/Blueprints/Node_ExampleDynamic.uasset b/Mods/ExampleMod/Content/Maps/ExampleLevel/Blueprints/Node_ExampleDynamic.uasset index 0fe7f3fb7c..cf2c912125 100644 Binary files a/Mods/ExampleMod/Content/Maps/ExampleLevel/Blueprints/Node_ExampleDynamic.uasset and b/Mods/ExampleMod/Content/Maps/ExampleLevel/Blueprints/Node_ExampleDynamic.uasset differ diff --git a/Mods/ExampleMod/Content/Maps/ExampleLevel/Blueprints/Node_ExampleFrackingCore.uasset b/Mods/ExampleMod/Content/Maps/ExampleLevel/Blueprints/Node_ExampleFrackingCore.uasset index 6f2e23973c..5147560948 100644 Binary files a/Mods/ExampleMod/Content/Maps/ExampleLevel/Blueprints/Node_ExampleFrackingCore.uasset and b/Mods/ExampleMod/Content/Maps/ExampleLevel/Blueprints/Node_ExampleFrackingCore.uasset differ diff --git a/Mods/ExampleMod/Content/Maps/ExampleLevel/Blueprints/Node_ExampleFrackingSatellite.uasset b/Mods/ExampleMod/Content/Maps/ExampleLevel/Blueprints/Node_ExampleFrackingSatellite.uasset index 830729e9a1..01a32de43a 100644 Binary files a/Mods/ExampleMod/Content/Maps/ExampleLevel/Blueprints/Node_ExampleFrackingSatellite.uasset and b/Mods/ExampleMod/Content/Maps/ExampleLevel/Blueprints/Node_ExampleFrackingSatellite.uasset differ diff --git a/Mods/ExampleMod/Content/Maps/ExampleLevel/Blueprints/Pickups/BP_PickupFlowers.uasset b/Mods/ExampleMod/Content/Maps/ExampleLevel/Blueprints/Pickups/BP_PickupFlowers.uasset deleted file mode 100644 index 15f037713d..0000000000 Binary files a/Mods/ExampleMod/Content/Maps/ExampleLevel/Blueprints/Pickups/BP_PickupFlowers.uasset and /dev/null differ diff --git a/Mods/ExampleMod/Content/Maps/ExampleLevel/Blueprints/Pickups/BP_PickupMercerSphere.uasset b/Mods/ExampleMod/Content/Maps/ExampleLevel/Blueprints/Pickups/BP_PickupMercerSphere.uasset new file mode 100644 index 0000000000..aa9f370951 Binary files /dev/null and b/Mods/ExampleMod/Content/Maps/ExampleLevel/Blueprints/Pickups/BP_PickupMercerSphere.uasset differ diff --git a/Mods/ExampleMod/Content/Maps/ExampleLevel/Blueprints/Pickups/BP_PickupMycelia.uasset b/Mods/ExampleMod/Content/Maps/ExampleLevel/Blueprints/Pickups/BP_PickupMycelia.uasset new file mode 100644 index 0000000000..20a222730c Binary files /dev/null and b/Mods/ExampleMod/Content/Maps/ExampleLevel/Blueprints/Pickups/BP_PickupMycelia.uasset differ diff --git a/Mods/ExampleMod/Content/Maps/ExampleLevel/Blueprints/Pickups/BP_PickupNuts.uasset b/Mods/ExampleMod/Content/Maps/ExampleLevel/Blueprints/Pickups/BP_PickupNuts.uasset index c26f7da102..4be29002f8 100644 Binary files a/Mods/ExampleMod/Content/Maps/ExampleLevel/Blueprints/Pickups/BP_PickupNuts.uasset and b/Mods/ExampleMod/Content/Maps/ExampleLevel/Blueprints/Pickups/BP_PickupNuts.uasset differ diff --git a/Mods/ExampleMod/Content/Maps/ExampleLevel/Blueprints/Pickups/BP_PickupSomerSloop.uasset b/Mods/ExampleMod/Content/Maps/ExampleLevel/Blueprints/Pickups/BP_PickupSomerSloop.uasset new file mode 100644 index 0000000000..9bf2f68a0c Binary files /dev/null and b/Mods/ExampleMod/Content/Maps/ExampleLevel/Blueprints/Pickups/BP_PickupSomerSloop.uasset differ diff --git a/Mods/ExampleMod/Content/Maps/ExampleLevel/ExampleLevel.umap b/Mods/ExampleMod/Content/Maps/ExampleLevel/ExampleLevel.umap index b1c7b26a34..ca21292a09 100644 Binary files a/Mods/ExampleMod/Content/Maps/ExampleLevel/ExampleLevel.umap and b/Mods/ExampleMod/Content/Maps/ExampleLevel/ExampleLevel.umap differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/0/2J/WQKGM2J179MBICLGVTCFH4.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/0/2J/WQKGM2J179MBICLGVTCFH4.uasset new file mode 100644 index 0000000000..137dd00eb5 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/0/2J/WQKGM2J179MBICLGVTCFH4.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/0/5O/12EFX59YZ9V42QWEDKXKY4.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/0/5O/12EFX59YZ9V42QWEDKXKY4.uasset new file mode 100644 index 0000000000..a89f559c5c Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/0/5O/12EFX59YZ9V42QWEDKXKY4.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/0/HY/G1929GB03ZIDSJMVRP4QDL.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/0/HY/G1929GB03ZIDSJMVRP4QDL.uasset new file mode 100644 index 0000000000..570a6216f3 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/0/HY/G1929GB03ZIDSJMVRP4QDL.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/0/KX/5MYWYKA8XN0XGBG5I8FH1U.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/0/KX/5MYWYKA8XN0XGBG5I8FH1U.uasset new file mode 100644 index 0000000000..31336dd0a1 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/0/KX/5MYWYKA8XN0XGBG5I8FH1U.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/0/UK/9Q2URIFYYCWBPMV9U5AABE.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/0/UK/9Q2URIFYYCWBPMV9U5AABE.uasset new file mode 100644 index 0000000000..6bd3093a5f Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/0/UK/9Q2URIFYYCWBPMV9U5AABE.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/0/XW/7966IYGBV2DBF24KJUNHZI.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/0/XW/7966IYGBV2DBF24KJUNHZI.uasset new file mode 100644 index 0000000000..25008a457d Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/0/XW/7966IYGBV2DBF24KJUNHZI.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/1/9L/AQH7MA8A3VXTL80QD3MO4F.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/1/9L/AQH7MA8A3VXTL80QD3MO4F.uasset new file mode 100644 index 0000000000..efde7b2d05 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/1/9L/AQH7MA8A3VXTL80QD3MO4F.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/1/PQ/BKX78AMOXRU2AX1AGML39C.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/1/PQ/BKX78AMOXRU2AX1AGML39C.uasset new file mode 100644 index 0000000000..b2936b44e2 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/1/PQ/BKX78AMOXRU2AX1AGML39C.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/1/RJ/9WMG2VQA55T09J5GF71I30.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/1/RJ/9WMG2VQA55T09J5GF71I30.uasset new file mode 100644 index 0000000000..fa1b16a527 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/1/RJ/9WMG2VQA55T09J5GF71I30.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/2/II/ORU1Z98Z0CQDG8UKOYPQH7.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/2/II/ORU1Z98Z0CQDG8UKOYPQH7.uasset new file mode 100644 index 0000000000..f31eda08a1 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/2/II/ORU1Z98Z0CQDG8UKOYPQH7.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/2/MF/0U3Y374Z77RJNJ7DFD99N0.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/2/MF/0U3Y374Z77RJNJ7DFD99N0.uasset new file mode 100644 index 0000000000..01b4e08295 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/2/MF/0U3Y374Z77RJNJ7DFD99N0.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/2/MO/ONFWJHUPREC9LL8B68AF5S.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/2/MO/ONFWJHUPREC9LL8B68AF5S.uasset new file mode 100644 index 0000000000..2c46348873 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/2/MO/ONFWJHUPREC9LL8B68AF5S.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/2/OW/RN2GXKKTM7VSDIKB9ZZP6R.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/2/OW/RN2GXKKTM7VSDIKB9ZZP6R.uasset new file mode 100644 index 0000000000..3be1531756 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/2/OW/RN2GXKKTM7VSDIKB9ZZP6R.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/2/S4/MSJ7XXOXOG0QEWNEGASHAY.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/2/S4/MSJ7XXOXOG0QEWNEGASHAY.uasset new file mode 100644 index 0000000000..31fbbd5f90 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/2/S4/MSJ7XXOXOG0QEWNEGASHAY.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/3/2V/W7PGLR6689EIH22KD98YV1.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/3/2V/W7PGLR6689EIH22KD98YV1.uasset new file mode 100644 index 0000000000..ed2016594d Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/3/2V/W7PGLR6689EIH22KD98YV1.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/3/GH/PJM2DH13Q3URBUVPOE69G0.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/3/GH/PJM2DH13Q3URBUVPOE69G0.uasset new file mode 100644 index 0000000000..de02d758ab Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/3/GH/PJM2DH13Q3URBUVPOE69G0.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/3/LA/AV3YSKOYA0QR4AK4B92N1K.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/3/LA/AV3YSKOYA0QR4AK4B92N1K.uasset new file mode 100644 index 0000000000..1e3ece5592 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/3/LA/AV3YSKOYA0QR4AK4B92N1K.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/3/MI/88PG7D1SNHHAHMD9EAF295.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/3/MI/88PG7D1SNHHAHMD9EAF295.uasset new file mode 100644 index 0000000000..39f7621b96 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/3/MI/88PG7D1SNHHAHMD9EAF295.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/3/QK/V5H14K3SD48Y27GSA54UCP.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/3/QK/V5H14K3SD48Y27GSA54UCP.uasset new file mode 100644 index 0000000000..e3fd3948c6 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/3/QK/V5H14K3SD48Y27GSA54UCP.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/3/XO/XGEJHNQSLBV34FD1YC3TW2.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/3/XO/XGEJHNQSLBV34FD1YC3TW2.uasset new file mode 100644 index 0000000000..9d887d8f30 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/3/XO/XGEJHNQSLBV34FD1YC3TW2.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/3/YI/TA9XC6075C705UON1D2H1Q.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/3/YI/TA9XC6075C705UON1D2H1Q.uasset new file mode 100644 index 0000000000..52455779ab Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/3/YI/TA9XC6075C705UON1D2H1Q.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/4/3G/GDP3DB13R4OT27WGVV6CGK.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/4/3G/GDP3DB13R4OT27WGVV6CGK.uasset new file mode 100644 index 0000000000..1168644816 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/4/3G/GDP3DB13R4OT27WGVV6CGK.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/4/98/BIOS4LBR4GEVQF2OD0QVQ9.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/4/98/BIOS4LBR4GEVQF2OD0QVQ9.uasset new file mode 100644 index 0000000000..5d2bd0ca4c Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/4/98/BIOS4LBR4GEVQF2OD0QVQ9.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/4/CG/91LGWEQI2YNTY9F2XQU9KI.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/4/CG/91LGWEQI2YNTY9F2XQU9KI.uasset new file mode 100644 index 0000000000..c3607021ef Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/4/CG/91LGWEQI2YNTY9F2XQU9KI.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/4/HZ/DK04EIMC9IA98EV66SOXQ3.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/4/HZ/DK04EIMC9IA98EV66SOXQ3.uasset new file mode 100644 index 0000000000..6d0f673096 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/4/HZ/DK04EIMC9IA98EV66SOXQ3.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/4/S2/4VUSINPZBAX8K43T7MV7ZM.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/4/S2/4VUSINPZBAX8K43T7MV7ZM.uasset new file mode 100644 index 0000000000..b3e6a5a7fe Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/4/S2/4VUSINPZBAX8K43T7MV7ZM.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/4/SH/NR73MV90OX5FV1OJFZ4DOP.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/4/SH/NR73MV90OX5FV1OJFZ4DOP.uasset new file mode 100644 index 0000000000..c4e45ed3a1 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/4/SH/NR73MV90OX5FV1OJFZ4DOP.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/5/28/LV6AYAXOGMGZB4XFH99HZH.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/5/28/LV6AYAXOGMGZB4XFH99HZH.uasset new file mode 100644 index 0000000000..92aff1ef80 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/5/28/LV6AYAXOGMGZB4XFH99HZH.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/5/42/D5CIR0K34DIF4O2F5TU73W.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/5/42/D5CIR0K34DIF4O2F5TU73W.uasset new file mode 100644 index 0000000000..7cb8341dad Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/5/42/D5CIR0K34DIF4O2F5TU73W.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/5/5P/FLY2NRKVAND2W2V7GHNCNV.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/5/5P/FLY2NRKVAND2W2V7GHNCNV.uasset new file mode 100644 index 0000000000..cb9b93a61a Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/5/5P/FLY2NRKVAND2W2V7GHNCNV.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/5/7X/56S0WKPIGXT4I6THZKDR32.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/5/7X/56S0WKPIGXT4I6THZKDR32.uasset new file mode 100644 index 0000000000..37b54048e9 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/5/7X/56S0WKPIGXT4I6THZKDR32.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/5/CU/RPBRJKE67Y4TD4MP3B3MR7.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/5/CU/RPBRJKE67Y4TD4MP3B3MR7.uasset new file mode 100644 index 0000000000..0ce2c5f61b Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/5/CU/RPBRJKE67Y4TD4MP3B3MR7.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/5/JG/6YUXMU1O2CBRX3RB2IQE9S.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/5/JG/6YUXMU1O2CBRX3RB2IQE9S.uasset new file mode 100644 index 0000000000..a1bf86c7ac Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/5/JG/6YUXMU1O2CBRX3RB2IQE9S.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/5/NM/1UQYST45AJIX6AAWKP5MLT.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/5/NM/1UQYST45AJIX6AAWKP5MLT.uasset new file mode 100644 index 0000000000..aaeda98d6d Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/5/NM/1UQYST45AJIX6AAWKP5MLT.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/6/0N/7SPY7FLWO7S1D0VHX7OF2O.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/6/0N/7SPY7FLWO7S1D0VHX7OF2O.uasset new file mode 100644 index 0000000000..1f234aee53 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/6/0N/7SPY7FLWO7S1D0VHX7OF2O.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/6/7J/W4J4RVCGO3MM3UPSQZ6HHR.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/6/7J/W4J4RVCGO3MM3UPSQZ6HHR.uasset new file mode 100644 index 0000000000..4b2d8bea3d Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/6/7J/W4J4RVCGO3MM3UPSQZ6HHR.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/6/8E/IVROA6P8OJR4V8YWCFTIEX.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/6/8E/IVROA6P8OJR4V8YWCFTIEX.uasset new file mode 100644 index 0000000000..c2174ba52d Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/6/8E/IVROA6P8OJR4V8YWCFTIEX.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/6/DE/0DOXE9QNTJADXH18KZDE38.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/6/DE/0DOXE9QNTJADXH18KZDE38.uasset new file mode 100644 index 0000000000..4d1674b247 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/6/DE/0DOXE9QNTJADXH18KZDE38.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/6/V9/1IEIDO2HDDN5HHZVMAD05X.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/6/V9/1IEIDO2HDDN5HHZVMAD05X.uasset new file mode 100644 index 0000000000..0fed1b0198 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/6/V9/1IEIDO2HDDN5HHZVMAD05X.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/6/XJ/FO2LOHFO02LH9PP0J6D7UL.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/6/XJ/FO2LOHFO02LH9PP0J6D7UL.uasset new file mode 100644 index 0000000000..b6e9d91e25 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/6/XJ/FO2LOHFO02LH9PP0J6D7UL.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/6/XO/220DVCXKG08FNB6PX7P3HX.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/6/XO/220DVCXKG08FNB6PX7P3HX.uasset new file mode 100644 index 0000000000..685c30bb61 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/6/XO/220DVCXKG08FNB6PX7P3HX.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/7/2J/Z51XP86OL9WL4V25IHVZXR.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/7/2J/Z51XP86OL9WL4V25IHVZXR.uasset new file mode 100644 index 0000000000..4344d390e5 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/7/2J/Z51XP86OL9WL4V25IHVZXR.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/7/45/3759KTU9D5O2MIL93R9N3I.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/7/45/3759KTU9D5O2MIL93R9N3I.uasset new file mode 100644 index 0000000000..ab654168a2 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/7/45/3759KTU9D5O2MIL93R9N3I.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/7/N2/X5RSWXNQ4KWO6HJ5OOHI7L.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/7/N2/X5RSWXNQ4KWO6HJ5OOHI7L.uasset new file mode 100644 index 0000000000..c125cb43bb Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/7/N2/X5RSWXNQ4KWO6HJ5OOHI7L.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/7/NZ/OP9X12DQE6IOX7MDKLKP1Z.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/7/NZ/OP9X12DQE6IOX7MDKLKP1Z.uasset new file mode 100644 index 0000000000..cc86ad4c14 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/7/NZ/OP9X12DQE6IOX7MDKLKP1Z.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/7/QJ/I62P9GDO9HJV87H9IJPHG0.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/7/QJ/I62P9GDO9HJV87H9IJPHG0.uasset new file mode 100644 index 0000000000..1622181639 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/7/QJ/I62P9GDO9HJV87H9IJPHG0.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/7/ZM/QXC6W2MI8PCF3U6DR5C34Q.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/7/ZM/QXC6W2MI8PCF3U6DR5C34Q.uasset new file mode 100644 index 0000000000..8a9faea57c Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/7/ZM/QXC6W2MI8PCF3U6DR5C34Q.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/8/22/FNJ7PBM8BRNBI9BRBKX1F1.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/8/22/FNJ7PBM8BRNBI9BRBKX1F1.uasset new file mode 100644 index 0000000000..7cd23a3973 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/8/22/FNJ7PBM8BRNBI9BRBKX1F1.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/8/7M/8FYZX7X0KFEEIQDB3P2D2P.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/8/7M/8FYZX7X0KFEEIQDB3P2D2P.uasset new file mode 100644 index 0000000000..0be2231c12 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/8/7M/8FYZX7X0KFEEIQDB3P2D2P.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/8/E1/F6PT33GY6ZDC2DF2NO3H9X.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/8/E1/F6PT33GY6ZDC2DF2NO3H9X.uasset new file mode 100644 index 0000000000..b5f1fae6d8 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/8/E1/F6PT33GY6ZDC2DF2NO3H9X.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/8/GO/ADECFIO6X8N21HTFJ7MEGO.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/8/GO/ADECFIO6X8N21HTFJ7MEGO.uasset new file mode 100644 index 0000000000..38adb10c1f Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/8/GO/ADECFIO6X8N21HTFJ7MEGO.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/8/J3/EDNGVJ9LG5W2X2X9EAB4GO.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/8/J3/EDNGVJ9LG5W2X2X9EAB4GO.uasset new file mode 100644 index 0000000000..e49de1df81 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/8/J3/EDNGVJ9LG5W2X2X9EAB4GO.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/8/OA/VOIN4MU4R9XRUBIJ7FF0GJ.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/8/OA/VOIN4MU4R9XRUBIJ7FF0GJ.uasset new file mode 100644 index 0000000000..5f594c368e Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/8/OA/VOIN4MU4R9XRUBIJ7FF0GJ.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/8/OC/HEP1E4DMGPDWLYFU7KQ4GV.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/8/OC/HEP1E4DMGPDWLYFU7KQ4GV.uasset new file mode 100644 index 0000000000..1d2d849fa1 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/8/OC/HEP1E4DMGPDWLYFU7KQ4GV.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/8/W2/22FXGPHLQQ1M9ZOUV2B9MK.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/8/W2/22FXGPHLQQ1M9ZOUV2B9MK.uasset new file mode 100644 index 0000000000..69659a5b8f Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/8/W2/22FXGPHLQQ1M9ZOUV2B9MK.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/9/1D/XT4HDYA44S3MG8J4T3V5XZ.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/9/1D/XT4HDYA44S3MG8J4T3V5XZ.uasset new file mode 100644 index 0000000000..4272abccf7 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/9/1D/XT4HDYA44S3MG8J4T3V5XZ.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/9/FC/RN0YEK3I03SU2Z1WGQ3Z53.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/9/FC/RN0YEK3I03SU2Z1WGQ3Z53.uasset new file mode 100644 index 0000000000..5cc0c35165 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/9/FC/RN0YEK3I03SU2Z1WGQ3Z53.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/9/LX/L982FI519DRJO4R4F0SMKE.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/9/LX/L982FI519DRJO4R4F0SMKE.uasset new file mode 100644 index 0000000000..936e338709 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/9/LX/L982FI519DRJO4R4F0SMKE.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/9/RL/448O76N7N18G98UY4FKBOY.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/9/RL/448O76N7N18G98UY4FKBOY.uasset new file mode 100644 index 0000000000..ef4d9ce02e Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/9/RL/448O76N7N18G98UY4FKBOY.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/9/ZP/QV6GX48I8AVLIRYA75U93Y.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/9/ZP/QV6GX48I8AVLIRYA75U93Y.uasset new file mode 100644 index 0000000000..95fa316c8d Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/9/ZP/QV6GX48I8AVLIRYA75U93Y.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/A/0R/G5HJBDEKBVZO9DCKX314ZP.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/A/0R/G5HJBDEKBVZO9DCKX314ZP.uasset new file mode 100644 index 0000000000..2ac074c11e Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/A/0R/G5HJBDEKBVZO9DCKX314ZP.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/A/AE/YCBADTJVMEJWL3TNUDMN51.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/A/AE/YCBADTJVMEJWL3TNUDMN51.uasset new file mode 100644 index 0000000000..19e00f2baa Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/A/AE/YCBADTJVMEJWL3TNUDMN51.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/A/FW/LMBIE2G5PJD9OC9HJ9HYTA.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/A/FW/LMBIE2G5PJD9OC9HJ9HYTA.uasset new file mode 100644 index 0000000000..b1dc0e5621 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/A/FW/LMBIE2G5PJD9OC9HJ9HYTA.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/A/SX/W9TDILUFF7T99N4T8ZSUNZ.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/A/SX/W9TDILUFF7T99N4T8ZSUNZ.uasset new file mode 100644 index 0000000000..0dd3cc538c Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/A/SX/W9TDILUFF7T99N4T8ZSUNZ.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/B/2H/PB2G6DCL0NUNPXXWYCWYV0.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/B/2H/PB2G6DCL0NUNPXXWYCWYV0.uasset new file mode 100644 index 0000000000..0bcfd02dac Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/B/2H/PB2G6DCL0NUNPXXWYCWYV0.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/B/CK/PH1EY1SDR2UG1V7NCE0KZL.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/B/CK/PH1EY1SDR2UG1V7NCE0KZL.uasset new file mode 100644 index 0000000000..d18a386bcd Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/B/CK/PH1EY1SDR2UG1V7NCE0KZL.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/B/I3/HODQURFAK54D9PBD275Y8T.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/B/I3/HODQURFAK54D9PBD275Y8T.uasset new file mode 100644 index 0000000000..5e9dca7da8 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/B/I3/HODQURFAK54D9PBD275Y8T.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/C/3E/HHQLEGPOG4Q29FKU5Y7RZ0.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/C/3E/HHQLEGPOG4Q29FKU5Y7RZ0.uasset new file mode 100644 index 0000000000..2caf4a6ab3 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/C/3E/HHQLEGPOG4Q29FKU5Y7RZ0.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/C/5X/0UO9BAKFV454W4T75HVWEX.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/C/5X/0UO9BAKFV454W4T75HVWEX.uasset new file mode 100644 index 0000000000..98ce227900 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/C/5X/0UO9BAKFV454W4T75HVWEX.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/C/DT/KMMOM6KOJ7J6ZIIM8OGTOI.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/C/DT/KMMOM6KOJ7J6ZIIM8OGTOI.uasset new file mode 100644 index 0000000000..89ba964302 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/C/DT/KMMOM6KOJ7J6ZIIM8OGTOI.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/C/F2/YQP4AQCE3WYGRM26Y0QN5Y.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/C/F2/YQP4AQCE3WYGRM26Y0QN5Y.uasset new file mode 100644 index 0000000000..86b211b07c Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/C/F2/YQP4AQCE3WYGRM26Y0QN5Y.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/C/S6/ZRRUB5FZHR7QMSAP5ENVFW.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/C/S6/ZRRUB5FZHR7QMSAP5ENVFW.uasset new file mode 100644 index 0000000000..e2e794ba6e Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/C/S6/ZRRUB5FZHR7QMSAP5ENVFW.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/C/XR/TRTBVE9270I52V0R4I7YQV.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/C/XR/TRTBVE9270I52V0R4I7YQV.uasset new file mode 100644 index 0000000000..36663b02fd Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/C/XR/TRTBVE9270I52V0R4I7YQV.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/C/YW/9L8THIR5D9SQ4SVFP7VW99.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/C/YW/9L8THIR5D9SQ4SVFP7VW99.uasset new file mode 100644 index 0000000000..3a0ecb0480 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/C/YW/9L8THIR5D9SQ4SVFP7VW99.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/D/4Q/2AKYH6WZ10U6E2D93FZLON.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/D/4Q/2AKYH6WZ10U6E2D93FZLON.uasset new file mode 100644 index 0000000000..f5f49ee2e4 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/D/4Q/2AKYH6WZ10U6E2D93FZLON.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/D/AR/OGCEILEVOT5GRGLRKUL0LA.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/D/AR/OGCEILEVOT5GRGLRKUL0LA.uasset new file mode 100644 index 0000000000..30f479b569 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/D/AR/OGCEILEVOT5GRGLRKUL0LA.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/D/FQ/CCX87YV6W91Z5B1F0NQ9ZB.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/D/FQ/CCX87YV6W91Z5B1F0NQ9ZB.uasset new file mode 100644 index 0000000000..a7969244a7 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/D/FQ/CCX87YV6W91Z5B1F0NQ9ZB.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/D/MU/JWAO71VI78ER6P8VOSH683.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/D/MU/JWAO71VI78ER6P8VOSH683.uasset new file mode 100644 index 0000000000..6a770dfab4 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/D/MU/JWAO71VI78ER6P8VOSH683.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/D/NY/ZG0GZYRCOV4XR7MF8TCTE9.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/D/NY/ZG0GZYRCOV4XR7MF8TCTE9.uasset new file mode 100644 index 0000000000..34fe0c9fae Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/D/NY/ZG0GZYRCOV4XR7MF8TCTE9.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/D/P3/1AXG9DWCQZZA7MKN9MMW41.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/D/P3/1AXG9DWCQZZA7MKN9MMW41.uasset new file mode 100644 index 0000000000..b310c054a9 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/D/P3/1AXG9DWCQZZA7MKN9MMW41.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/D/Q4/GVHON7FYCIMQ6IV0NZA81A.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/D/Q4/GVHON7FYCIMQ6IV0NZA81A.uasset new file mode 100644 index 0000000000..e9b80f3828 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/D/Q4/GVHON7FYCIMQ6IV0NZA81A.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/E/1X/T8WYFPMIJ3IDYVFLAH4NTZ.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/E/1X/T8WYFPMIJ3IDYVFLAH4NTZ.uasset new file mode 100644 index 0000000000..2fea0ef84b Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/E/1X/T8WYFPMIJ3IDYVFLAH4NTZ.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/E/6H/YPPTXOQBVK8G1E6AYL7M4H.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/E/6H/YPPTXOQBVK8G1E6AYL7M4H.uasset new file mode 100644 index 0000000000..dbd65cb0e6 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/E/6H/YPPTXOQBVK8G1E6AYL7M4H.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/E/LH/020KBSHEQ2NQ8RZESKLGVL.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/E/LH/020KBSHEQ2NQ8RZESKLGVL.uasset new file mode 100644 index 0000000000..031301171b Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/E/LH/020KBSHEQ2NQ8RZESKLGVL.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/E/M3/KMOHUMJJEG0DHJXH29UHDJ.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/E/M3/KMOHUMJJEG0DHJXH29UHDJ.uasset new file mode 100644 index 0000000000..297373f12c Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/E/M3/KMOHUMJJEG0DHJXH29UHDJ.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/E/O1/TVRN1SIZ0MMJ4CXV40JCJF.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/E/O1/TVRN1SIZ0MMJ4CXV40JCJF.uasset new file mode 100644 index 0000000000..ce7965c42e Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/E/O1/TVRN1SIZ0MMJ4CXV40JCJF.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/E/Y1/F45SUDM3ABV8UQWX91AQ3E.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/E/Y1/F45SUDM3ABV8UQWX91AQ3E.uasset new file mode 100644 index 0000000000..89dd9cc244 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/E/Y1/F45SUDM3ABV8UQWX91AQ3E.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/F/2I/ZUH5KEHF1P9XOD5VDQJ0NM.uasset b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/F/2I/ZUH5KEHF1P9XOD5VDQJ0NM.uasset new file mode 100644 index 0000000000..670521313c Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalActors__/Maps/ExampleLevel/ExampleLevel/F/2I/ZUH5KEHF1P9XOD5VDQJ0NM.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalObjects__/Maps/ExampleLevel/ExampleLevel/1/XD/0ZMGZI90VC5602VKVWWUXD.uasset b/Mods/ExampleMod/Content/__ExternalObjects__/Maps/ExampleLevel/ExampleLevel/1/XD/0ZMGZI90VC5602VKVWWUXD.uasset new file mode 100644 index 0000000000..02ab2f7bed Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalObjects__/Maps/ExampleLevel/ExampleLevel/1/XD/0ZMGZI90VC5602VKVWWUXD.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalObjects__/Maps/ExampleLevel/ExampleLevel/2/P7/SCDDTTJ5MO3I9BTL20G8KT.uasset b/Mods/ExampleMod/Content/__ExternalObjects__/Maps/ExampleLevel/ExampleLevel/2/P7/SCDDTTJ5MO3I9BTL20G8KT.uasset new file mode 100644 index 0000000000..1249fde4c1 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalObjects__/Maps/ExampleLevel/ExampleLevel/2/P7/SCDDTTJ5MO3I9BTL20G8KT.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalObjects__/Maps/ExampleLevel/ExampleLevel/6/MS/18KKI2GDM7W3W4RP5A9UOP.uasset b/Mods/ExampleMod/Content/__ExternalObjects__/Maps/ExampleLevel/ExampleLevel/6/MS/18KKI2GDM7W3W4RP5A9UOP.uasset new file mode 100644 index 0000000000..84f64cc563 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalObjects__/Maps/ExampleLevel/ExampleLevel/6/MS/18KKI2GDM7W3W4RP5A9UOP.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalObjects__/Maps/ExampleLevel/ExampleLevel/7/72/9H9H2HAUSEE2HX9MPKJA87.uasset b/Mods/ExampleMod/Content/__ExternalObjects__/Maps/ExampleLevel/ExampleLevel/7/72/9H9H2HAUSEE2HX9MPKJA87.uasset new file mode 100644 index 0000000000..e78a69fc89 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalObjects__/Maps/ExampleLevel/ExampleLevel/7/72/9H9H2HAUSEE2HX9MPKJA87.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalObjects__/Maps/ExampleLevel/ExampleLevel/7/SH/OD3M9BVOWKSG7P8MQMT28H.uasset b/Mods/ExampleMod/Content/__ExternalObjects__/Maps/ExampleLevel/ExampleLevel/7/SH/OD3M9BVOWKSG7P8MQMT28H.uasset new file mode 100644 index 0000000000..aace8d7d7e Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalObjects__/Maps/ExampleLevel/ExampleLevel/7/SH/OD3M9BVOWKSG7P8MQMT28H.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalObjects__/Maps/ExampleLevel/ExampleLevel/9/9U/ZLK9SASC5SMGJZROWSYUUT.uasset b/Mods/ExampleMod/Content/__ExternalObjects__/Maps/ExampleLevel/ExampleLevel/9/9U/ZLK9SASC5SMGJZROWSYUUT.uasset new file mode 100644 index 0000000000..f713d7b6da Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalObjects__/Maps/ExampleLevel/ExampleLevel/9/9U/ZLK9SASC5SMGJZROWSYUUT.uasset differ diff --git a/Mods/ExampleMod/Content/__ExternalObjects__/Maps/ExampleLevel/ExampleLevel/E/E3/ISD0DL5JZR8DUCAZSKPA89.uasset b/Mods/ExampleMod/Content/__ExternalObjects__/Maps/ExampleLevel/ExampleLevel/E/E3/ISD0DL5JZR8DUCAZSKPA89.uasset new file mode 100644 index 0000000000..e7871d7b40 Binary files /dev/null and b/Mods/ExampleMod/Content/__ExternalObjects__/Maps/ExampleLevel/ExampleLevel/E/E3/ISD0DL5JZR8DUCAZSKPA89.uasset differ diff --git a/Source/FactoryGame/Private/FGDropPod.cpp b/Source/FactoryGame/Private/FGDropPod.cpp index a9a82028ec..88560debe7 100644 --- a/Source/FactoryGame/Private/FGDropPod.cpp +++ b/Source/FactoryGame/Private/FGDropPod.cpp @@ -48,7 +48,17 @@ void AFGDropPod::GetLifetimeReplicatedProps(TArray& OutLifeti } void AFGDropPod::BeginPlay(){ Super::BeginPlay(); } void AFGDropPod::EndPlay(const EEndPlayReason::Type EndPlayReason){ Super::EndPlay(EndPlayReason); } -void AFGDropPod::PreSave(FObjectPreSaveContext SaveContext){ Super::PreSave(SaveContext); } +void AFGDropPod::PreSave(FObjectPreSaveContext SaveContext) +{ + Super::PreSave(SaveContext); +#if WITH_EDITOR + // Cache scannable data from the world during the cooking process + // Avoid attempting to cache the data on the CDOs and Archetypes, and objects without a world context + if (SaveContext.IsCooking() && !HasAnyFlags(RF_ClassDefaultObject | RF_ArchetypeObject) && GetWorld() != nullptr) { + mDropPodGuid = GetActorGuid(); + } +#endif +} void AFGDropPod::GainedSignificance_Implementation(){ } void AFGDropPod::LostSignificance_Implementation(){ } void AFGDropPod::GetConditionalReplicatedProps(TArray& outProps) const{ } diff --git a/Source/FactoryGame/Private/FGGasPillarCloud.cpp b/Source/FactoryGame/Private/FGGasPillarCloud.cpp index 5c6cedbe79..46d8fc726e 100644 --- a/Source/FactoryGame/Private/FGGasPillarCloud.cpp +++ b/Source/FactoryGame/Private/FGGasPillarCloud.cpp @@ -4,10 +4,57 @@ #include "Net/UnrealNetwork.h" #if WITH_EDITOR -void AFGGasPillarCloud::GatherNearbyPillarLocations(){ } -void AFGGasPillarCloud::NotifyGasPillarRemovedFromInfluence( AFGGasPillar* gasPillar){ } -void AFGGasPillarCloud::DebugDrawCurrentPillarLocations(){ } -#endif +#include "FGGasPillar.h" +#include "EngineUtils.h" +#include "Kismet/KismetSystemLibrary.h" +#include "Framework/Notifications/NotificationManager.h" +#include "Widgets/Notifications/SNotificationList.h" +#endif + +#if WITH_EDITOR +static void ShowPostEditNotification(const FString& Message, SNotificationItem::ECompletionState State) +{ + FNotificationInfo Info(FText::FromString(Message)); + Info.ExpireDuration = 5.0f; + Info.bUseLargeFont = false; + TSharedPtr Notification = FSlateNotificationManager::Get().AddNotification(Info); + if (Notification.IsValid()) { + Notification->SetCompletionState(State); + } +} + +void AFGGasPillarCloud::GatherNearbyPillarLocations() +{ + mProximityPillarWorldLocations.Empty(); + for (TActorIterator ActorItr(GetWorld()); ActorItr; ++ActorItr) { + if (AFGGasPillar* gasPillar = *ActorItr) { + if (GetDistanceTo(gasPillar) <= mOverlapRadius) { + mProximityPillarWorldLocations.Add(gasPillar->GetActorLocation() + FVector(0, 0, gasPillar->GetEffectHeightOffset())); + gasPillar->SetNearbyGasCloud(this); + gasPillar->MarkPackageDirty(); + } + } + } + const FString Message = FString::Printf(TEXT("Found %d gas pillars around gas cloud '%s'"), mProximityPillarWorldLocations.Num(), *GetName()); + ShowPostEditNotification(Message, SNotificationItem::CS_Success); + this->MarkPackageDirty(); +} + +void AFGGasPillarCloud::NotifyGasPillarRemovedFromInfluence(AFGGasPillar* gasPillar) +{ + if (gasPillar) { + mProximityPillarWorldLocations.Remove(gasPillar->GetActorLocation() + FVector(0, 0, gasPillar->GetEffectHeightOffset())); + this->MarkPackageDirty(); + } +} + +void AFGGasPillarCloud::DebugDrawCurrentPillarLocations() +{ + for (const FVector& Vec : mProximityPillarWorldLocations) { + UKismetSystemLibrary::DrawDebugArrow(this, FVector(0, 0, 600) + Vec, Vec, 10000, FLinearColor::Red, 10, 20); + } +} +#endif void AFGGasPillarCloud::GainedSignificance_Implementation(){ } void AFGGasPillarCloud::LostSignificance_Implementation(){ } AFGGasPillarCloud::AFGGasPillarCloud() : Super() { diff --git a/Source/FactoryGame/Private/FGItemPickup.cpp b/Source/FactoryGame/Private/FGItemPickup.cpp index ab45cca385..04abe05f8c 100644 --- a/Source/FactoryGame/Private/FGItemPickup.cpp +++ b/Source/FactoryGame/Private/FGItemPickup.cpp @@ -30,7 +30,17 @@ void AFGItemPickup::GetLifetimeReplicatedProps(TArray& OutLif void AFGItemPickup::Serialize(FArchive& ar){ Super::Serialize(ar); } void AFGItemPickup::BeginPlay(){ Super::BeginPlay(); } void AFGItemPickup::EndPlay(const EEndPlayReason::Type EndPlayReason){ Super::EndPlay(EndPlayReason); } -void AFGItemPickup::PreSave(FObjectPreSaveContext SaveContext){ Super::PreSave(SaveContext); } +void AFGItemPickup::PreSave(FObjectPreSaveContext SaveContext) +{ + Super::PreSave(SaveContext); +#if WITH_EDITOR + // Cache scannable data from the world during the cooking process + // Avoid attempting to cache the data on the CDOs and Archetypes, and objects without a world context + if (SaveContext.IsCooking() && !HasAnyFlags(RF_ClassDefaultObject | RF_ArchetypeObject) && GetWorld() != nullptr) { + mItemPickupGuid = GetActorGuid(); + } +#endif +} void AFGItemPickup::PreSaveGame_Implementation(int32 saveVersion, int32 gameVersion){ } void AFGItemPickup::PostSaveGame_Implementation(int32 saveVersion, int32 gameVersion){ } void AFGItemPickup::PreLoadGame_Implementation(int32 saveVersion, int32 gameVersion){ } diff --git a/Source/FactoryGame/Private/FGWorldScannableData.cpp b/Source/FactoryGame/Private/FGWorldScannableData.cpp index 5569e8702e..2de4920e6a 100644 --- a/Source/FactoryGame/Private/FGWorldScannableData.cpp +++ b/Source/FactoryGame/Private/FGWorldScannableData.cpp @@ -1,17 +1,159 @@ -// This file has been automatically generated by the Unreal Header Implementation tool +// Copyright Coffee Stain Studios. All Rights Reserved. #include "FGWorldScannableData.h" -#include "UObject/ObjectSaveContext.h" +#include "EngineUtils.h" +#include "Buildables/FGBuildableFrackingActivator.h" +#include "FGScannableSubsystem.h" +#include "FGItemPickup.h" +#include "FGDropPod.h" +#include "WorldPartition/WorldPartition.h" +#if WITH_EDITOR +#include "WorldPartition/WorldPartitionActorDesc.h" +#endif #if WITH_EDITOR -FWorldScannableData::FWorldScannableData(const AActor* actor) { } -FWorldScannableData::FWorldScannableData(const class FWorldPartitionActorDesc* ActorDesc, int32 PIEInstanceIndex) { } + +FWorldScannableData::FWorldScannableData(const AActor* actor) +{ + if (actor) { + Actor = TSoftObjectPtr(actor); + ActorGuid = actor->GetActorGuid(); + ActorClass = actor->GetClass(); + ActorLocation = actor->GetStreamingBounds().GetCenter(); + } +} + +FWorldScannableData::FWorldScannableData(const FWorldPartitionActorDesc* ActorDesc, int32 PIEInstanceIndex) +{ + check(ActorDesc); + Actor = ActorDesc->GetActorSoftPath(); + ActorGuid = ActorDesc->GetGuid(); + + // If we have a base class path, e.g. class is not native, load it + const FTopLevelAssetPath BaseClassPath = ActorDesc->GetBaseClass(); + if (!BaseClassPath.IsNull()) { + ActorClass = LoadClass(nullptr, *ActorDesc->GetBaseClass().ToString()); + } else { + ActorClass = ActorDesc->GetActorNativeClass(); + } + // Should always have either a native class or a blueprint loaded class at this point + check(ActorClass); + + ActorLocation = ActorDesc->GetRuntimeBounds().GetCenter(); + + // We need to remap the actor soft path to the correct PIE instance, since actor desc will most certainly come from the original, non-duplicated world package + if (PIEInstanceIndex != INDEX_NONE) { + FSoftObjectPath SoftActorPath = Actor.ToSoftObjectPath(); + SoftActorPath.FixupForPIE(PIEInstanceIndex); + Actor = SoftActorPath; + } +} + #endif -AFGWorldScannableDataGenerator::AFGWorldScannableDataGenerator() : Super() { +AFGWorldScannableDataGenerator::AFGWorldScannableDataGenerator() +{ + PrimaryActorTick.bCanEverTick = false; + +#if WITH_EDITORONLY_DATA + bIsSpatiallyLoaded = false; +#endif } -void AFGWorldScannableDataGenerator::BeginPlay(){ } -void AFGWorldScannableDataGenerator::PreSave(FObjectPreSaveContext SaveContext){ Super::PreSave(SaveContext); } + +void AFGWorldScannableDataGenerator::BeginPlay() +{ + Super::BeginPlay(); + #if WITH_EDITOR -void AFGWorldScannableDataGenerator::CacheWorldScannableData(){ } + // Cache scannable data from the world if we have editor only data + if (!GetPackage()->HasAnyPackageFlags(PKG_Cooked | PKG_FilterEditorOnly)) { + CacheWorldScannableData(); + } +#endif + + if (AFGScannableSubsystem* scannableSubsystem = AFGScannableSubsystem::Get(GetWorld())) { + scannableSubsystem->AssignScannableData(mItemPickups, mDropPods); + } +} + +void AFGWorldScannableDataGenerator::PreSave(FObjectPreSaveContext SaveContext) +{ + Super::PreSave(SaveContext); +#if WITH_EDITOR + // Cache scannable data from the world during the cooking process + // Avoid attempting to cache the data on the CDOs and Archetypes, and objects without a world context + if (SaveContext.IsCooking() && !HasAnyFlags(RF_ClassDefaultObject | RF_ArchetypeObject) && GetWorld() != nullptr) { + CacheWorldScannableData(); + } +#endif +} + +#if WITH_EDITOR + +void AFGWorldScannableDataGenerator::CacheWorldScannableData() +{ + mItemPickups.Empty(); + mDropPods.Empty(); + + const UWorldPartition* WorldPartition = GetWorld()->GetWorldPartition(); + + // If there is no world partition, use TActorIterator to find all loaded actors and cache them immediately + if (WorldPartition == nullptr) { + for (TActorIterator It(GetWorld()); It; ++It) { + mItemPickups.Add(FWorldScannableData(*It)); + } + for (TActorIterator It(GetWorld()); It; ++It) { + mDropPods.Add(FWorldScannableData(*It)); + } + return; + } + + // This is a world partitioned level, so we need to use world partition actor iterator to find all actors. We do not actually need to load them to retrieve their data + check(WorldPartition); + UActorDescContainer* ActorDescContainer = WorldPartition->GetActorDescContainer(); + + // Determine the path to the source asset in case we need to remap paths to PIE + FString SourceAssetPath, UnusedRemappedPath; + const bool bWorldHasBeenInstanced = GetWorld()->GetSoftObjectPathMapping(SourceAssetPath, UnusedRemappedPath); + const FTopLevelAssetPath SourceAssetTopLevelPath(SourceAssetPath); + + // In PIE, if the world has been duplicated, it is likely that it's ActorDescContainer will not be initialized + // Attempt to look up our actor desc container on our source world asset + if (ActorDescContainer == nullptr && bWorldHasBeenInstanced) { + if (const UWorld* OriginalWorldAsset = FindObject(SourceAssetTopLevelPath)) { + const UWorldPartition* OriginalWorldPartition = OriginalWorldAsset->GetWorldPartition(); + if (OriginalWorldPartition != nullptr) { + ActorDescContainer = OriginalWorldPartition->GetActorDescContainer(); + } + } + } + // If we were unable to find the original world (it could have been garbage collected by now, or never had it's actor desc initialized), + // create our own actor desc container using the original asset path + if (ActorDescContainer == nullptr) { + ActorDescContainer = NewObject(GetTransientPackage()); + ActorDescContainer->Initialize(UActorDescContainer::FInitializeParams(GetWorld(), SourceAssetTopLevelPath.GetPackageName())); + } + + // At this point we should always have a valid actor desc container, but ensure and not crash if we do not + if (!ensure(ActorDescContainer)) { + UE_LOG(LogGame, Error, TEXT("Failed to find ActorDescContainer for World Partitioned world '%s' to gather scannables. Game features relying on the WorldScannableData will not work."), *GetWorld()->GetPathName()); + return; + } + + // We have to fix up the path in case this is a PIE instance + const int32 PIEInstanceIndex = GetWorld()->GetPackage()->GetPIEInstanceID(); + + for (FActorDescList::TConstIterator It(ActorDescContainer); It; ++It) { + const FWorldPartitionActorDesc* ActorDescriptor = *It; + const UClass* ActorNativeClass = ActorDescriptor->GetActorNativeClass(); + + if (ActorNativeClass->IsChildOf(AFGItemPickup::StaticClass())) { + mItemPickups.Add(FWorldScannableData(*It, PIEInstanceIndex)); + } + if (ActorNativeClass->IsChildOf(AFGDropPod::StaticClass())) { + mDropPods.Add(FWorldScannableData(*It, PIEInstanceIndex)); + } + } +} + #endif