diff --git a/Assets/Content/Addressables/AssetGroups/CraftingRecipes.asset b/Assets/Content/Addressables/AssetGroups/CraftingRecipes.asset index bbbbf22dbd..88ce02f7d0 100644 --- a/Assets/Content/Addressables/AssetGroups/CraftingRecipes.asset +++ b/Assets/Content/Addressables/AssetGroups/CraftingRecipes.asset @@ -17,14 +17,30 @@ MonoBehaviour: m_SerializedData: [] m_GUID: 32ec404d3166dea4b8246e46ce1581b0 m_SerializeEntries: - - m_GUID: 5dafa9029944cdc448a9e1d6d67e438f - m_Address: Assets/Content/Data/Recipes/SlicedBananas.asset - m_ReadOnly: 0 - m_SerializedLabels: [] - m_GUID: 5069902a314070f4ca869692cbc791fa m_Address: Assets/Content/Data/Recipes/WeirdComplexRecipe.asset m_ReadOnly: 0 m_SerializedLabels: [] + - m_GUID: 41ed3a9a199817b47b7ba22ecb7c1ab4 + m_Address: Assets/Content/Data/Recipes/SteelGirderUnboltedRecipe.asset + m_ReadOnly: 0 + m_SerializedLabels: [] + - m_GUID: b7f1e5d68b05f6743a606736245ff481 + m_Address: Assets/Content/Data/Recipes/SteelSheetRecipe.asset + m_ReadOnly: 0 + m_SerializedLabels: [] + - m_GUID: 115e1db3f2858c14fa6b736f67e552be + m_Address: Assets/Content/Data/Recipes/ReinforcedWallRecipe.asset + m_ReadOnly: 0 + m_SerializedLabels: [] + - m_GUID: 3d6dc37a96797e442bafcb066f1f9aef + m_Address: Assets/Content/Data/Recipes/SteelWallRecipe.asset + m_ReadOnly: 0 + m_SerializedLabels: [] + - m_GUID: 3decef2c351e13b4194d1994c485a170 + m_Address: Assets/Content/Data/Recipes/SteelGirderRecipe.asset + m_ReadOnly: 0 + m_SerializedLabels: [] m_ReadOnly: 0 m_Settings: {fileID: 11400000, guid: ddc57d0f5f9fb874e8a26db0c5b215e0, type: 2} m_SchemaSet: diff --git a/Assets/Content/Addressables/AssetGroups/Items.asset b/Assets/Content/Addressables/AssetGroups/Items.asset index 36203a3b2e..5b455a1c6b 100644 --- a/Assets/Content/Addressables/AssetGroups/Items.asset +++ b/Assets/Content/Addressables/AssetGroups/Items.asset @@ -285,6 +285,22 @@ MonoBehaviour: m_Address: Assets/Content/WorldObjects/Items/Functional/Parts/PowerCells/PowerCell.prefab m_ReadOnly: 0 m_SerializedLabels: [] + - m_GUID: 45d13347efae0f54882e0e56dd770bb1 + m_Address: Assets/Content/WorldObjects/Structures/Walls/SteelWall.prefab + m_ReadOnly: 0 + m_SerializedLabels: [] + - m_GUID: 6c2559c2017ada740b245951a23c2e1d + m_Address: Assets/Content/WorldObjects/Structures/Walls/SteelGirder.prefab + m_ReadOnly: 0 + m_SerializedLabels: [] + - m_GUID: 3b33b5cf16a677a4e85a110679cde32a + m_Address: Assets/Content/WorldObjects/Structures/Floors/Plenum.prefab + m_ReadOnly: 0 + m_SerializedLabels: [] + - m_GUID: 5dba4171f2124fb48b0e32c0e10841e0 + m_Address: Assets/Content/WorldObjects/Structures/Walls/SteelGirderUnbolted.prefab + m_ReadOnly: 0 + m_SerializedLabels: [] - m_GUID: a1a7407e08bb2914c97f431063bf83e2 m_Address: Assets/Content/WorldObjects/Items/Functional/Materials/GlassSheetReinforced.prefab m_ReadOnly: 0 @@ -369,6 +385,16 @@ MonoBehaviour: m_Address: Assets/Content/WorldObjects/Items/Functional/Materials/ElectricalCable.prefab m_ReadOnly: 0 m_SerializedLabels: [] + - m_GUID: b9c224febb4233f4e912745553097652 + m_Address: Assets/Content/WorldObjects/Structures/Walls/SteelWindow.prefab + m_ReadOnly: 0 + m_SerializedLabels: [] + - m_GUID: abcc60752234e584d8d98c9dec03e7cc + m_Address: Assets/Content/WorldObjects/Structures/Walls/SteelWallReinforced.prefab + m_ReadOnly: 0 + m_SerializedLabels: [] + - m_GUID: f2493b5478dd8e946ba98861f533362e + m_Address: Assets/Content/WorldObjects/Structures/Walls/SteelWindowReinforced.prefab - m_GUID: 88d1ba1edb4ce5e4fa74c6a8d53e36e1 m_Address: Assets/Content/WorldObjects/Items/Clothing/HeadsetSecurityLeft.prefab m_ReadOnly: 0 diff --git a/Assets/Content/Addressables/AssetGroups/ParticlesEffects.asset b/Assets/Content/Addressables/AssetGroups/ParticlesEffects.asset index 88e9c9c5b5..470e29f99c 100644 --- a/Assets/Content/Addressables/AssetGroups/ParticlesEffects.asset +++ b/Assets/Content/Addressables/AssetGroups/ParticlesEffects.asset @@ -25,6 +25,10 @@ MonoBehaviour: m_Address: Assets/Content/WorldObjects/World/VFX/Health/BleedingParticle.prefab m_ReadOnly: 0 m_SerializedLabels: [] + - m_GUID: ca5e6b5f7c6c5054a8f8155ef44e3e43 + m_Address: Assets/Content/WorldObjects/World/VFX/Construction/ConstructionParticle.prefab + m_ReadOnly: 0 + m_SerializedLabels: [] m_ReadOnly: 0 m_Settings: {fileID: 11400000, guid: ddc57d0f5f9fb874e8a26db0c5b215e0, type: 2} m_SchemaSet: diff --git a/Assets/Content/Data/Databases/CraftingRecipes.asset b/Assets/Content/Data/Databases/CraftingRecipes.asset index 88d8a1cbc6..bde7d6376b 100644 --- a/Assets/Content/Data/Databases/CraftingRecipes.asset +++ b/Assets/Content/Data/Databases/CraftingRecipes.asset @@ -16,8 +16,16 @@ MonoBehaviour: AssetGroup: {fileID: 11400000, guid: ead2cce9e35a7304ab5b8cc67d03347b, type: 2} Assets: _list: - - _key: SlicedBananas - _value: {fileID: 11400000, guid: 5dafa9029944cdc448a9e1d6d67e438f, type: 2} - _key: WeirdComplexRecipe _value: {fileID: 11400000, guid: 5069902a314070f4ca869692cbc791fa, type: 2} + - _key: SteelGirderUnboltedRecipe + _value: {fileID: 11400000, guid: 41ed3a9a199817b47b7ba22ecb7c1ab4, type: 2} + - _key: SteelSheetRecipe + _value: {fileID: 11400000, guid: b7f1e5d68b05f6743a606736245ff481, type: 2} + - _key: ReinforcedWallRecipe + _value: {fileID: 11400000, guid: 115e1db3f2858c14fa6b736f67e552be, type: 2} + - _key: SteelWallRecipe + _value: {fileID: 11400000, guid: 3d6dc37a96797e442bafcb066f1f9aef, type: 2} + - _key: SteelGirderRecipe + _value: {fileID: 11400000, guid: 3decef2c351e13b4194d1994c485a170, type: 2} _new: diff --git a/Assets/Content/Data/Databases/Items.asset b/Assets/Content/Data/Databases/Items.asset index 2f252be51b..58cb8d5ce8 100644 --- a/Assets/Content/Data/Databases/Items.asset +++ b/Assets/Content/Data/Databases/Items.asset @@ -150,6 +150,14 @@ MonoBehaviour: _value: {fileID: 7927487060350510867, guid: c69ed93dc225ea049bbf1a02662c48c0, type: 3} - _key: PowerCell _value: {fileID: 2402587210622244651, guid: de67200a4c96d444f800399a033ddfef, type: 3} + - _key: SteelWall + _value: {fileID: 3591147544166670882, guid: 45d13347efae0f54882e0e56dd770bb1, type: 3} + - _key: SteelGirder + _value: {fileID: 3591147544166670882, guid: 6c2559c2017ada740b245951a23c2e1d, type: 3} + - _key: Plenum + _value: {fileID: 8028539322119499722, guid: 3b33b5cf16a677a4e85a110679cde32a, type: 3} + - _key: SteelGirderUnbolted + _value: {fileID: 3591147544166670882, guid: 5dba4171f2124fb48b0e32c0e10841e0, type: 3} - _key: GlassReinforcedSheet _value: {fileID: 7125681683583715523, guid: a1a7407e08bb2914c97f431063bf83e2, type: 3} - _key: GlassSheet @@ -192,6 +200,12 @@ MonoBehaviour: _value: {fileID: 7125681683583715523, guid: cc71128d4bcc0c548ac11481000ac424, type: 3} - _key: ElectricalCable _value: {fileID: 7125681683583715523, guid: 0e69918696f58e04f846e985ec7405fe, type: 3} + - _key: SteelWindow + _value: {fileID: 3591147544166670882, guid: b9c224febb4233f4e912745553097652, type: 3} + - _key: SteelWallReinforced + _value: {fileID: 3591147544166670882, guid: abcc60752234e584d8d98c9dec03e7cc, type: 3} + - _key: SteelWindowReinforced + _value: {fileID: 3591147544166670882, guid: f2493b5478dd8e946ba98861f533362e, type: 3} - _key: HeadsetSecurityLeft _value: {fileID: 1529136833643899573, guid: 88d1ba1edb4ce5e4fa74c6a8d53e36e1, type: 3} - _key: HeadsetSecurityRight diff --git a/Assets/Content/Data/Databases/ParticlesEffects.asset b/Assets/Content/Data/Databases/ParticlesEffects.asset index 8cf48e8ce0..7ea24935f7 100644 --- a/Assets/Content/Data/Databases/ParticlesEffects.asset +++ b/Assets/Content/Data/Databases/ParticlesEffects.asset @@ -20,4 +20,6 @@ MonoBehaviour: _value: {fileID: 7714517724079113232, guid: 17b0d9163e9cdf14aa557557e7d9d76b, type: 3} - _key: BleedingParticle _value: {fileID: 6016476664605660376, guid: a6a77c26ee7edd94c804f4ddd851c8ba, type: 3} + - _key: ConstructionParticle + _value: {fileID: 9126258469831405173, guid: ca5e6b5f7c6c5054a8f8155ef44e3e43, type: 3} _new: diff --git a/Assets/Content/Data/Recipes/ReinforcedWallRecipe.asset b/Assets/Content/Data/Recipes/ReinforcedWallRecipe.asset new file mode 100644 index 0000000000..0af255368e --- /dev/null +++ b/Assets/Content/Data/Recipes/ReinforcedWallRecipe.asset @@ -0,0 +1,37 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c384097cfa3559042be45b4f6328d961, type: 3} + m_Name: ReinforcedWallRecipe + m_EditorClassIdentifier: + Target: {fileID: 11400000, guid: 9b16536c8b6953b459e5906389bc4cdd, type: 2} + Steps: + - _name: SteelWallReinforced + IsInitialState: 1 + IsTerminal: 0 + CustomCraft: 0 + Result: {fileID: 0} + - _name: ReinforcedSteelGirderWithBoltedReinforcedMetalSheets + IsInitialState: 0 + IsTerminal: 1 + CustomCraft: 0 + Result: {fileID: 11400000, guid: bbc616cb55d58144eb50ce126cfca103, type: 2} + StepLinks: + - _elements: + _list: [] + _new: {fileID: 0} + _conditions: [] + _craftingInteractionType: 5 + _from: SteelWallReinforced + _to: ReinforcedSteelGirderWithBoltedReinforcedMetalSheets + _modifyResult: 1 + _executionTime: 4 + _secondaryResults: [] diff --git a/Assets/Content/Data/Recipes/SlicedBananas.asset.meta b/Assets/Content/Data/Recipes/ReinforcedWallRecipe.asset.meta similarity index 79% rename from Assets/Content/Data/Recipes/SlicedBananas.asset.meta rename to Assets/Content/Data/Recipes/ReinforcedWallRecipe.asset.meta index 55045972c5..f92d35f59d 100644 --- a/Assets/Content/Data/Recipes/SlicedBananas.asset.meta +++ b/Assets/Content/Data/Recipes/ReinforcedWallRecipe.asset.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 5dafa9029944cdc448a9e1d6d67e438f +guid: 115e1db3f2858c14fa6b736f67e552be NativeFormatImporter: externalObjects: {} mainObjectFileID: 11400000 diff --git a/Assets/Content/Data/Recipes/SlicedBananas.asset b/Assets/Content/Data/Recipes/SlicedBananas.asset deleted file mode 100644 index 402a92b417..0000000000 --- a/Assets/Content/Data/Recipes/SlicedBananas.asset +++ /dev/null @@ -1,24 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &11400000 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: c384097cfa3559042be45b4f6328d961, type: 3} - m_Name: SlicedBananas - m_EditorClassIdentifier: - _executionTime: 2 - _interactionName: Slice - _target: {fileID: 11400000, guid: e53ebba96eeba474e8478131c8d24085, type: 2} - _result: - - {fileID: 11400000, guid: 9275ab75afcd2ea40b8d00845d500d6a, type: 2} - - {fileID: 11400000, guid: f07bdcc8986b95043be85d4f9d0e7c76, type: 2} - - {fileID: 11400000, guid: bffc6c08d28041549ae1af640b76ce92, type: 2} - _elements: - _list: [] - _new: {fileID: 0} diff --git a/Assets/Content/Data/Recipes/SteelGirderRecipe.asset b/Assets/Content/Data/Recipes/SteelGirderRecipe.asset new file mode 100644 index 0000000000..1a113c900d --- /dev/null +++ b/Assets/Content/Data/Recipes/SteelGirderRecipe.asset @@ -0,0 +1,294 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c384097cfa3559042be45b4f6328d961, type: 3} + m_Name: SteelGirderRecipe + m_EditorClassIdentifier: + Target: {fileID: 11400000, guid: bbc616cb55d58144eb50ce126cfca103, type: 2} + Steps: + - _name: SteelGirder + IsInitialState: 1 + IsTerminal: 0 + CustomCraft: 0 + Result: {fileID: 0} + - _name: SteelGirderWithMetalSheet + IsInitialState: 0 + IsTerminal: 0 + CustomCraft: 0 + Result: {fileID: 0} + - _name: SteelGirderWithGlassSheet + IsInitialState: 0 + IsTerminal: 0 + CustomCraft: 0 + Result: {fileID: 0} + - _name: SteelWall + IsInitialState: 0 + IsTerminal: 1 + CustomCraft: 0 + Result: {fileID: 11400000, guid: afd2790edc5c26a48ae1e0f45ecb1f32, type: 2} + - _name: SteelWindow + IsInitialState: 0 + IsTerminal: 1 + CustomCraft: 0 + Result: {fileID: 11400000, guid: 72ff3e5319a440c448928af8af541920, type: 2} + - _name: ReinforcedSteelGirderWithStruts + IsInitialState: 0 + IsTerminal: 0 + CustomCraft: 0 + Result: {fileID: 0} + - _name: ReinforcedSteelGirderWithBoltedReinforcedMetalSheets + IsInitialState: 0 + IsTerminal: 0 + CustomCraft: 0 + Result: {fileID: 0} + - _name: ReinforcedWall + IsInitialState: 0 + IsTerminal: 1 + CustomCraft: 0 + Result: {fileID: 11400000, guid: 9b16536c8b6953b459e5906389bc4cdd, type: 2} + - _name: ReinforcedSteelGirderWithBoltedReinforcedGlassSheets + IsInitialState: 0 + IsTerminal: 0 + CustomCraft: 0 + Result: {fileID: 0} + - _name: ReinforcedWindow + IsInitialState: 0 + IsTerminal: 1 + CustomCraft: 0 + Result: {fileID: 11400000, guid: b841d8cacfb432a4789bbb387b08fe81, type: 2} + - _name: ReinforcedSteelGirderWithBoltedMetalSheets + IsInitialState: 0 + IsTerminal: 0 + CustomCraft: 0 + Result: {fileID: 0} + - _name: ReinforcedSteelGirder + IsInitialState: 0 + IsTerminal: 0 + CustomCraft: 0 + Result: {fileID: 0} + - _name: SteelGirderUnbolted + IsInitialState: 0 + IsTerminal: 1 + CustomCraft: 0 + Result: {fileID: 11400000, guid: 6fbb4f54f5632024680a17fba3fdf53d, type: 2} + - _name: ReinforcedSteelGirderWithBoltedGlassSheets + IsInitialState: 0 + IsTerminal: 0 + CustomCraft: 0 + Result: {fileID: 0} + StepLinks: + - _elements: + _list: + - _key: {fileID: 11400000, guid: 8cfc0ba9b0715224ca017ad6ddfbd66b, type: 2} + _value: 1 + _new: {fileID: 0} + _conditions: + - {fileID: 11400000, guid: 22f5cb218c973ef4291a27c11ca43fe9, type: 2} + _craftingInteractionType: 3 + _from: SteelGirder + _to: SteelGirderWithMetalSheet + _modifyResult: 0 + _executionTime: 1 + _secondaryResults: [] + - _elements: + _list: [] + _new: {fileID: 0} + _conditions: [] + _craftingInteractionType: 0 + _from: SteelGirderWithMetalSheet + _to: SteelWall + _modifyResult: 0 + _executionTime: 1 + _secondaryResults: [] + - _elements: + _list: + - _key: {fileID: 11400000, guid: 3c8e8f4d958f81744a729dc344342955, type: 2} + _value: 1 + _new: {fileID: 0} + _conditions: [] + _craftingInteractionType: 3 + _from: SteelGirder + _to: SteelGirderWithGlassSheet + _modifyResult: 0 + _executionTime: 1 + _secondaryResults: [] + - _elements: + _list: [] + _new: {fileID: 0} + _conditions: [] + _craftingInteractionType: 0 + _from: SteelGirderWithGlassSheet + _to: SteelWindow + _modifyResult: 0 + _executionTime: 1 + _secondaryResults: [] + - _elements: + _list: + - _key: {fileID: 11400000, guid: 3f647cba5228eee4c96dcb4d68c089af, type: 2} + _value: 1 + _new: {fileID: 0} + _conditions: [] + _craftingInteractionType: 3 + _from: SteelGirder + _to: ReinforcedSteelGirderWithStruts + _modifyResult: 0 + _executionTime: 1 + _secondaryResults: [] + - _elements: + _list: + - _key: {fileID: 11400000, guid: 05cd3679ee853174fb8651304e81f0cd, type: 2} + _value: 1 + _new: {fileID: 0} + _conditions: [] + _craftingInteractionType: 3 + _from: ReinforcedSteelGirderWithStruts + _to: ReinforcedSteelGirderWithBoltedReinforcedMetalSheets + _modifyResult: 0 + _executionTime: 1 + _secondaryResults: [] + - _elements: + _list: [] + _new: {fileID: 0} + _conditions: [] + _craftingInteractionType: 0 + _from: ReinforcedSteelGirderWithBoltedReinforcedMetalSheets + _to: ReinforcedWall + _modifyResult: 0 + _executionTime: 1 + _secondaryResults: [] + - _elements: + _list: + - _key: {fileID: 11400000, guid: 761f8c0e668a1d94ca1e59a4d7561a75, type: 2} + _value: 1 + _new: {fileID: 0} + _conditions: [] + _craftingInteractionType: 3 + _from: ReinforcedSteelGirderWithStruts + _to: ReinforcedSteelGirderWithBoltedReinforcedGlassSheets + _modifyResult: 0 + _executionTime: 1 + _secondaryResults: [] + - _elements: + _list: [] + _new: {fileID: 0} + _conditions: [] + _craftingInteractionType: 0 + _from: ReinforcedSteelGirderWithBoltedReinforcedGlassSheets + _to: ReinforcedWindow + _modifyResult: 0 + _executionTime: 1 + _secondaryResults: [] + - _elements: + _list: [] + _new: {fileID: 0} + _conditions: [] + _craftingInteractionType: 5 + _from: ReinforcedWall + _to: ReinforcedSteelGirderWithBoltedReinforcedMetalSheets + _modifyResult: 0 + _executionTime: 4 + _secondaryResults: [] + - _elements: + _list: [] + _new: {fileID: 0} + _conditions: [] + _craftingInteractionType: 4 + _from: ReinforcedSteelGirderWithBoltedReinforcedMetalSheets + _to: ReinforcedSteelGirderWithBoltedMetalSheets + _modifyResult: 0 + _executionTime: 1 + _secondaryResults: [] + - _elements: + _list: [] + _new: {fileID: 0} + _conditions: [] + _craftingInteractionType: 3 + _from: ReinforcedSteelGirderWithBoltedMetalSheets + _to: ReinforcedSteelGirderWithStruts + _modifyResult: 0 + _executionTime: 1 + _secondaryResults: [] + - _elements: + _list: [] + _new: {fileID: 0} + _conditions: [] + _craftingInteractionType: 1 + _from: ReinforcedSteelGirder + _to: SteelGirder + _modifyResult: 0 + _executionTime: 1 + _secondaryResults: [] + - _elements: + _list: [] + _new: {fileID: 0} + _conditions: [] + _craftingInteractionType: 1 + _from: SteelGirder + _to: SteelGirderUnbolted + _modifyResult: 0 + _executionTime: 1 + _secondaryResults: [] + - _elements: + _list: [] + _new: {fileID: 0} + _conditions: [] + _craftingInteractionType: 3 + _from: SteelGirderWithMetalSheet + _to: SteelGirder + _modifyResult: 0 + _executionTime: 1 + _secondaryResults: + - Asset: {fileID: 11400000, guid: 8cfc0ba9b0715224ca017ad6ddfbd66b, type: 2} + Amount: 1 + - _elements: + _list: [] + _new: {fileID: 0} + _conditions: [] + _craftingInteractionType: 3 + _from: SteelGirderWithGlassSheet + _to: SteelGirder + _modifyResult: 0 + _executionTime: 1 + _secondaryResults: + - Asset: {fileID: 11400000, guid: 3c8e8f4d958f81744a729dc344342955, type: 2} + Amount: 1 + - _elements: + _list: [] + _new: {fileID: 0} + _conditions: [] + _craftingInteractionType: 4 + _from: ReinforcedSteelGirderWithBoltedReinforcedGlassSheets + _to: ReinforcedSteelGirderWithBoltedGlassSheets + _modifyResult: 0 + _executionTime: 4 + _secondaryResults: [] + - _elements: + _list: [] + _new: {fileID: 0} + _conditions: [] + _craftingInteractionType: 3 + _from: ReinforcedSteelGirderWithBoltedGlassSheets + _to: ReinforcedSteelGirderWithStruts + _modifyResult: 0 + _executionTime: 2 + _secondaryResults: + - Asset: {fileID: 11400000, guid: 3c8e8f4d958f81744a729dc344342955, type: 2} + Amount: 1 + - _elements: + _list: [] + _new: {fileID: 0} + _conditions: [] + _craftingInteractionType: 2 + _from: ReinforcedSteelGirderWithStruts + _to: ReinforcedSteelGirder + _modifyResult: 0 + _executionTime: 5 + _secondaryResults: [] diff --git a/Assets/Content/Data/Recipes/SteelGirderRecipe.asset.meta b/Assets/Content/Data/Recipes/SteelGirderRecipe.asset.meta new file mode 100644 index 0000000000..c709eec697 --- /dev/null +++ b/Assets/Content/Data/Recipes/SteelGirderRecipe.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3decef2c351e13b4194d1994c485a170 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Content/Data/Recipes/SteelGirderUnboltedRecipe.asset b/Assets/Content/Data/Recipes/SteelGirderUnboltedRecipe.asset new file mode 100644 index 0000000000..338641b99d --- /dev/null +++ b/Assets/Content/Data/Recipes/SteelGirderUnboltedRecipe.asset @@ -0,0 +1,52 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c384097cfa3559042be45b4f6328d961, type: 3} + m_Name: SteelGirderUnboltedRecipe + m_EditorClassIdentifier: + Target: {fileID: 11400000, guid: 6fbb4f54f5632024680a17fba3fdf53d, type: 2} + Steps: + - _name: SteelGirderUnbolted + IsInitialState: 1 + IsTerminal: 0 + CustomCraft: 0 + Result: {fileID: 0} + - _name: SteelGirder + IsInitialState: 0 + IsTerminal: 1 + CustomCraft: 0 + Result: {fileID: 11400000, guid: bbc616cb55d58144eb50ce126cfca103, type: 2} + - _name: SteelSheet + IsInitialState: 0 + IsTerminal: 1 + CustomCraft: 0 + Result: {fileID: 11400000, guid: 8cfc0ba9b0715224ca017ad6ddfbd66b, type: 2} + StepLinks: + - _elements: + _list: [] + _new: {fileID: 0} + _conditions: [] + _craftingInteractionType: 1 + _from: SteelGirderUnbolted + _to: SteelGirder + _modifyResult: 0 + _executionTime: 2 + _secondaryResults: [] + - _elements: + _list: [] + _new: {fileID: 0} + _conditions: [] + _craftingInteractionType: 0 + _from: SteelGirderUnbolted + _to: SteelSheet + _modifyResult: 0 + _executionTime: 2 + _secondaryResults: [] diff --git a/Assets/Content/Data/Recipes/SteelGirderUnboltedRecipe.asset.meta b/Assets/Content/Data/Recipes/SteelGirderUnboltedRecipe.asset.meta new file mode 100644 index 0000000000..a35929df63 --- /dev/null +++ b/Assets/Content/Data/Recipes/SteelGirderUnboltedRecipe.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 41ed3a9a199817b47b7ba22ecb7c1ab4 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Content/Data/Recipes/SteelSheetRecipe.asset b/Assets/Content/Data/Recipes/SteelSheetRecipe.asset new file mode 100644 index 0000000000..202521475d --- /dev/null +++ b/Assets/Content/Data/Recipes/SteelSheetRecipe.asset @@ -0,0 +1,71 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c384097cfa3559042be45b4f6328d961, type: 3} + m_Name: SteelSheetRecipe + m_EditorClassIdentifier: + Target: {fileID: 11400000, guid: 8cfc0ba9b0715224ca017ad6ddfbd66b, type: 2} + Steps: + - _name: SteelSheet + IsInitialState: 1 + IsTerminal: 0 + CustomCraft: 0 + Result: {fileID: 0} + - _name: SteelGirderUnbolted + IsInitialState: 0 + IsTerminal: 1 + CustomCraft: 0 + Result: {fileID: 11400000, guid: 6fbb4f54f5632024680a17fba3fdf53d, type: 2} + - _name: SteelRod + IsInitialState: 0 + IsTerminal: 1 + CustomCraft: 0 + Result: {fileID: 0} + - _name: FloorTile + IsInitialState: 0 + IsTerminal: 1 + CustomCraft: 0 + Result: {fileID: 0} + StepLinks: + - _elements: + _list: [] + _new: {fileID: 0} + _conditions: [] + _craftingInteractionType: 3 + _from: SteelSheet + _to: SteelRod + _modifyResult: 0 + _executionTime: 2 + _secondaryResults: + - Asset: {fileID: 11400000, guid: 3f647cba5228eee4c96dcb4d68c089af, type: 2} + Amount: 2 + - _elements: + _list: [] + _new: {fileID: 0} + _conditions: [] + _craftingInteractionType: 3 + _from: SteelSheet + _to: SteelGirderUnbolted + _modifyResult: 0 + _executionTime: 2 + _secondaryResults: [] + - _elements: + _list: [] + _new: {fileID: 0} + _conditions: [] + _craftingInteractionType: 3 + _from: SteelSheet + _to: FloorTile + _modifyResult: 0 + _executionTime: 2 + _secondaryResults: + - Asset: {fileID: 11400000, guid: 943460668ce3db0429d1617490f983ef, type: 2} + Amount: 4 diff --git a/Assets/Content/Data/Recipes/SteelSheetRecipe.asset.meta b/Assets/Content/Data/Recipes/SteelSheetRecipe.asset.meta new file mode 100644 index 0000000000..a910252b1e --- /dev/null +++ b/Assets/Content/Data/Recipes/SteelSheetRecipe.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b7f1e5d68b05f6743a606736245ff481 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Content/Data/Recipes/SteelWallRecipe.asset b/Assets/Content/Data/Recipes/SteelWallRecipe.asset new file mode 100644 index 0000000000..9f7e9d1b0a --- /dev/null +++ b/Assets/Content/Data/Recipes/SteelWallRecipe.asset @@ -0,0 +1,37 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c384097cfa3559042be45b4f6328d961, type: 3} + m_Name: SteelWallRecipe + m_EditorClassIdentifier: + Target: {fileID: 11400000, guid: afd2790edc5c26a48ae1e0f45ecb1f32, type: 2} + Steps: + - _name: SteelWall + IsInitialState: 1 + IsTerminal: 0 + CustomCraft: 0 + Result: {fileID: 0} + - _name: SteelGirderWithMetalSheet + IsInitialState: 0 + IsTerminal: 1 + CustomCraft: 0 + Result: {fileID: 11400000, guid: bbc616cb55d58144eb50ce126cfca103, type: 2} + StepLinks: + - _elements: + _list: [] + _new: {fileID: 0} + _conditions: [] + _craftingInteractionType: 5 + _from: SteelWall + _to: SteelGirderWithMetalSheet + _modifyResult: 1 + _executionTime: 2 + _secondaryResults: [] diff --git a/Assets/Content/Data/Recipes/SteelWallRecipe.asset.meta b/Assets/Content/Data/Recipes/SteelWallRecipe.asset.meta new file mode 100644 index 0000000000..49fa6c002d --- /dev/null +++ b/Assets/Content/Data/Recipes/SteelWallRecipe.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3d6dc37a96797e442bafcb066f1f9aef +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Content/Data/Recipes/WeirdComplexRecipe.asset b/Assets/Content/Data/Recipes/WeirdComplexRecipe.asset index 1ccd57abf2..f884e32231 100644 --- a/Assets/Content/Data/Recipes/WeirdComplexRecipe.asset +++ b/Assets/Content/Data/Recipes/WeirdComplexRecipe.asset @@ -12,16 +12,30 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: c384097cfa3559042be45b4f6328d961, type: 3} m_Name: WeirdComplexRecipe m_EditorClassIdentifier: - _executionTime: 0 - _interactionName: Slice - _target: {fileID: 11400000, guid: 3747dddbc41cad94bbbfc43bfed384c3, type: 2} - _result: - - {fileID: 11400000, guid: 739991c49857a3d40b2060d96908de45, type: 2} - - {fileID: 11400000, guid: 88cb0aca0b6265d49b25526ca55295e9, type: 2} - _elements: - _list: - - _key: {fileID: 11400000, guid: 162ccd1fc7d534046874df3d9dcf2315, type: 2} - _value: 2 - - _key: {fileID: 11400000, guid: c0a5c4fc200a5ae4693d9b02fee23b49, type: 2} - _value: 1 - _new: {fileID: 0} + Target: {fileID: 11400000, guid: 3747dddbc41cad94bbbfc43bfed384c3, type: 2} + Steps: + - _name: BikeHorn + IsInitialState: 1 + IsTerminal: 0 + CustomCraft: 0 + Result: {fileID: 0} + - _name: WeirdStuff + IsInitialState: 0 + IsTerminal: 1 + CustomCraft: 0 + Result: {fileID: 0} + StepLinks: + - _elements: + _list: [] + _new: {fileID: 0} + _conditions: [] + _craftingInteractionType: 2 + _from: BikeHorn + _to: WeirdStuff + _modifyResult: 0 + _executionTime: 1 + _secondaryResults: + - Asset: {fileID: 11400000, guid: d81d46f903aad014aa4728a8b47ab7ea, type: 2} + Amount: 2 + - Asset: {fileID: 11400000, guid: b42f227c43baa2141938339b7dda3f71, type: 2} + Amount: 1 diff --git a/Assets/Content/Data/TileMap/Resources/Structures/Walls/SteelGirderUnbolted.asset b/Assets/Content/Data/TileMap/Resources/Structures/Walls/SteelGirderUnbolted.asset new file mode 100644 index 0000000000..ef201c803a --- /dev/null +++ b/Assets/Content/Data/TileMap/Resources/Structures/Walls/SteelGirderUnbolted.asset @@ -0,0 +1,16 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 827764dff5251cd4ebdef8908d68f3dd, type: 3} + m_Name: SteelGirderUnbolted + m_EditorClassIdentifier: + prefab: {fileID: 3591147544166670882, guid: 5dba4171f2124fb48b0e32c0e10841e0, type: 3} + icon: {fileID: 0} diff --git a/Assets/Content/Data/TileMap/Resources/Structures/Walls/SteelGirderUnbolted.asset.meta b/Assets/Content/Data/TileMap/Resources/Structures/Walls/SteelGirderUnbolted.asset.meta new file mode 100644 index 0000000000..2198333880 --- /dev/null +++ b/Assets/Content/Data/TileMap/Resources/Structures/Walls/SteelGirderUnbolted.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 29c6ebb7c45a31a498fe84d45318c6bc +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Content/Data/WorldObjectAssetReferences/ConstructionParticle.asset b/Assets/Content/Data/WorldObjectAssetReferences/ConstructionParticle.asset new file mode 100644 index 0000000000..5e9a0be325 --- /dev/null +++ b/Assets/Content/Data/WorldObjectAssetReferences/ConstructionParticle.asset @@ -0,0 +1,16 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d8ba336da0014235becfe02dce35b6ca, type: 3} + m_Name: ConstructionParticle + m_EditorClassIdentifier: + Id: ConstructionParticle + Database: ParticlesEffects diff --git a/Assets/Content/Data/WorldObjectAssetReferences/ConstructionParticle.asset.meta b/Assets/Content/Data/WorldObjectAssetReferences/ConstructionParticle.asset.meta new file mode 100644 index 0000000000..d4aa62e290 --- /dev/null +++ b/Assets/Content/Data/WorldObjectAssetReferences/ConstructionParticle.asset.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +<<<<<<<< HEAD:Assets/Content/Data/WorldObjectAssetReferences/ConstructionParticle.asset.meta +guid: 85cd6ca53abf56345b5f5e27b3f8c4a9 +======== +guid: 40f2a5ef12396ce469ae6fa7474a6bc6 +>>>>>>>> develop:Assets/Content/Data/WorldObjectAssetReferences/ElectricalCable.asset.meta +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Content/Data/WorldObjectAssetReferences/Plenum.asset b/Assets/Content/Data/WorldObjectAssetReferences/Plenum.asset new file mode 100644 index 0000000000..0b8114d471 --- /dev/null +++ b/Assets/Content/Data/WorldObjectAssetReferences/Plenum.asset @@ -0,0 +1,16 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d8ba336da0014235becfe02dce35b6ca, type: 3} + m_Name: Plenum + m_EditorClassIdentifier: + Id: Plenum + Database: Items diff --git a/Assets/Content/Data/WorldObjectAssetReferences/Plenum.asset.meta b/Assets/Content/Data/WorldObjectAssetReferences/Plenum.asset.meta new file mode 100644 index 0000000000..14e6cf7133 --- /dev/null +++ b/Assets/Content/Data/WorldObjectAssetReferences/Plenum.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b0c72ccf49a812947b0b526481ec6b7a +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Content/Data/WorldObjectAssetReferences/SteelGirder.asset b/Assets/Content/Data/WorldObjectAssetReferences/SteelGirder.asset new file mode 100644 index 0000000000..26f9f3036e --- /dev/null +++ b/Assets/Content/Data/WorldObjectAssetReferences/SteelGirder.asset @@ -0,0 +1,16 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d8ba336da0014235becfe02dce35b6ca, type: 3} + m_Name: SteelGirder + m_EditorClassIdentifier: + Id: SteelGirder + Database: Items diff --git a/Assets/Content/Data/WorldObjectAssetReferences/SteelGirder.asset.meta b/Assets/Content/Data/WorldObjectAssetReferences/SteelGirder.asset.meta new file mode 100644 index 0000000000..6e207cfc0a --- /dev/null +++ b/Assets/Content/Data/WorldObjectAssetReferences/SteelGirder.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bbc616cb55d58144eb50ce126cfca103 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Content/Data/WorldObjectAssetReferences/SteelGirderUnbolted.asset b/Assets/Content/Data/WorldObjectAssetReferences/SteelGirderUnbolted.asset new file mode 100644 index 0000000000..d2f163e741 --- /dev/null +++ b/Assets/Content/Data/WorldObjectAssetReferences/SteelGirderUnbolted.asset @@ -0,0 +1,16 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d8ba336da0014235becfe02dce35b6ca, type: 3} + m_Name: SteelGirderUnbolted + m_EditorClassIdentifier: + Id: SteelGirderUnbolted + Database: Items diff --git a/Assets/Content/Data/WorldObjectAssetReferences/SteelGirderUnbolted.asset.meta b/Assets/Content/Data/WorldObjectAssetReferences/SteelGirderUnbolted.asset.meta new file mode 100644 index 0000000000..40e8a51673 --- /dev/null +++ b/Assets/Content/Data/WorldObjectAssetReferences/SteelGirderUnbolted.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6fbb4f54f5632024680a17fba3fdf53d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Content/Data/WorldObjectAssetReferences/SteelWall.asset b/Assets/Content/Data/WorldObjectAssetReferences/SteelWall.asset new file mode 100644 index 0000000000..05cc52974d --- /dev/null +++ b/Assets/Content/Data/WorldObjectAssetReferences/SteelWall.asset @@ -0,0 +1,16 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d8ba336da0014235becfe02dce35b6ca, type: 3} + m_Name: SteelWall + m_EditorClassIdentifier: + Id: SteelWall + Database: Items diff --git a/Assets/Content/Data/WorldObjectAssetReferences/SteelWall.asset.meta b/Assets/Content/Data/WorldObjectAssetReferences/SteelWall.asset.meta new file mode 100644 index 0000000000..b30a130923 --- /dev/null +++ b/Assets/Content/Data/WorldObjectAssetReferences/SteelWall.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: afd2790edc5c26a48ae1e0f45ecb1f32 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Content/Data/WorldObjectAssetReferences/SteelWallReinforced.asset b/Assets/Content/Data/WorldObjectAssetReferences/SteelWallReinforced.asset new file mode 100644 index 0000000000..7f29112d85 --- /dev/null +++ b/Assets/Content/Data/WorldObjectAssetReferences/SteelWallReinforced.asset @@ -0,0 +1,16 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d8ba336da0014235becfe02dce35b6ca, type: 3} + m_Name: SteelWallReinforced + m_EditorClassIdentifier: + Id: SteelWallReinforced + Database: Items diff --git a/Assets/Content/Data/WorldObjectAssetReferences/SteelWallReinforced.asset.meta b/Assets/Content/Data/WorldObjectAssetReferences/SteelWallReinforced.asset.meta new file mode 100644 index 0000000000..0f0fea278b --- /dev/null +++ b/Assets/Content/Data/WorldObjectAssetReferences/SteelWallReinforced.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9b16536c8b6953b459e5906389bc4cdd +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Content/Data/WorldObjectAssetReferences/SteelWindow.asset b/Assets/Content/Data/WorldObjectAssetReferences/SteelWindow.asset new file mode 100644 index 0000000000..ff9af43bdc --- /dev/null +++ b/Assets/Content/Data/WorldObjectAssetReferences/SteelWindow.asset @@ -0,0 +1,16 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d8ba336da0014235becfe02dce35b6ca, type: 3} + m_Name: SteelWindow + m_EditorClassIdentifier: + Id: SteelWindow + Database: Items diff --git a/Assets/Content/Data/WorldObjectAssetReferences/SteelWindow.asset.meta b/Assets/Content/Data/WorldObjectAssetReferences/SteelWindow.asset.meta new file mode 100644 index 0000000000..c984ccfd41 --- /dev/null +++ b/Assets/Content/Data/WorldObjectAssetReferences/SteelWindow.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 72ff3e5319a440c448928af8af541920 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Content/Data/WorldObjectAssetReferences/SteelWindowReinforced.asset b/Assets/Content/Data/WorldObjectAssetReferences/SteelWindowReinforced.asset new file mode 100644 index 0000000000..5761dcf824 --- /dev/null +++ b/Assets/Content/Data/WorldObjectAssetReferences/SteelWindowReinforced.asset @@ -0,0 +1,16 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d8ba336da0014235becfe02dce35b6ca, type: 3} + m_Name: SteelWindowReinforced + m_EditorClassIdentifier: + Id: SteelWindowReinforced + Database: Items diff --git a/Assets/Content/Data/WorldObjectAssetReferences/SteelWindowReinforced.asset.meta b/Assets/Content/Data/WorldObjectAssetReferences/SteelWindowReinforced.asset.meta new file mode 100644 index 0000000000..3d5e6a58cf --- /dev/null +++ b/Assets/Content/Data/WorldObjectAssetReferences/SteelWindowReinforced.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b841d8cacfb432a4789bbb387b08fe81 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Content/Scenes/Game.unity b/Assets/Content/Scenes/Game.unity index 784c23f8f2..69b28f7e41 100644 --- a/Assets/Content/Scenes/Game.unity +++ b/Assets/Content/Scenes/Game.unity @@ -3368,6 +3368,22 @@ PrefabInstance: propertyPath: m_AnchoredPosition.y value: 0 objectReference: {fileID: 0} + - target: {fileID: 1645271929222140531, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1645271929222140531, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1645271929222140531, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1645271929222140531, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} - target: {fileID: 1651511857998697061, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} propertyPath: m_AnchorMax.y value: 0 @@ -3440,6 +3456,30 @@ PrefabInstance: propertyPath: m_AnchoredPosition.y value: 0 objectReference: {fileID: 0} + - target: {fileID: 2203787394853505857, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2203787394853505857, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2203787394853505857, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2203787394853505857, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2203787394853505857, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2203787394853505857, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} - target: {fileID: 2301424477307470549, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} propertyPath: m_AnchorMax.y value: 0 @@ -3564,6 +3604,30 @@ PrefabInstance: propertyPath: m_AnchoredPosition.y value: 0 objectReference: {fileID: 0} + - target: {fileID: 3276506494960734280, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3276506494960734280, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3276506494960734280, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3276506494960734280, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3276506494960734280, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3276506494960734280, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} - target: {fileID: 3640471949036544852, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} propertyPath: m_Size value: 1 @@ -3572,6 +3636,30 @@ PrefabInstance: propertyPath: m_Value value: 1 objectReference: {fileID: 0} + - target: {fileID: 3741165822002351590, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} + propertyPath: _scenePathHash + value: 2499635508 + objectReference: {fileID: 0} + - target: {fileID: 3741165822002351590, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} + propertyPath: k__BackingField + value: 10735852761901728459 + objectReference: {fileID: 0} + - target: {fileID: 3804474641334442113, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3804474641334442113, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3804474641334442113, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3804474641334442113, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} - target: {fileID: 3810371244597919609, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} propertyPath: m_Pivot.x value: 0 @@ -3712,6 +3800,30 @@ PrefabInstance: propertyPath: m_AnchoredPosition.y value: 0 objectReference: {fileID: 0} + - target: {fileID: 4362993429105836467, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4362993429105836467, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4362993429105836467, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4362993429105836467, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4362993429105836467, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4362993429105836467, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} - target: {fileID: 4394331957901036445, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} propertyPath: m_AnchorMax.y value: 0 @@ -3776,6 +3888,10 @@ PrefabInstance: propertyPath: m_SizeDelta.x value: 0 objectReference: {fileID: 0} + - target: {fileID: 5233398319265641673, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} - target: {fileID: 5535391432771639728, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} propertyPath: m_AnchorMax.y value: 0 @@ -3792,6 +3908,18 @@ PrefabInstance: propertyPath: m_AnchoredPosition.y value: 0 objectReference: {fileID: 0} + - target: {fileID: 6029557834498822002, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6029557834498822002, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6029557834498822002, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} - target: {fileID: 6311480933419683127, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} propertyPath: m_AnchorMax.y value: 0 @@ -3816,6 +3944,14 @@ PrefabInstance: propertyPath: m_AnchoredPosition.y value: 0 objectReference: {fileID: 0} + - target: {fileID: 6371151852688678227, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6371151852688678227, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} - target: {fileID: 6651284864109170389, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} propertyPath: m_AnchorMax.y value: 0 @@ -3888,6 +4024,10 @@ PrefabInstance: propertyPath: m_AnchoredPosition.y value: 0 objectReference: {fileID: 0} + - target: {fileID: 7690423678050893371, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} - target: {fileID: 7898948006457140790, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} propertyPath: m_AnchorMax.y value: 0 @@ -3912,6 +4052,18 @@ PrefabInstance: propertyPath: m_AnchoredPosition.y value: 0 objectReference: {fileID: 0} + - target: {fileID: 8193263207737214336, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8193263207737214336, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8193263207737214336, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} - target: {fileID: 8273954074651551440, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} propertyPath: m_AnchorMax.y value: 0 @@ -4048,6 +4200,14 @@ PrefabInstance: propertyPath: _sceneNetworkObjects.Array.data[19] value: objectReference: {fileID: 1927660778} + - target: {fileID: 8823672379056658337, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8823672379056658337, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} - target: {fileID: 9202296439114504482, guid: df2268f4f5f6669459174c6d7e2043ce, type: 3} propertyPath: m_AnchorMax.x value: 0 diff --git a/Assets/Content/Systems/UI/Lobby/Canvas/PlayerCanvas.prefab b/Assets/Content/Systems/UI/Lobby/Canvas/PlayerCanvas.prefab index 3e56084d6b..91b0c08319 100644 --- a/Assets/Content/Systems/UI/Lobby/Canvas/PlayerCanvas.prefab +++ b/Assets/Content/Systems/UI/Lobby/Canvas/PlayerCanvas.prefab @@ -33,7 +33,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 3810371244597919609} - m_RootOrder: 6 + m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -135,7 +135,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 3810371244597919609} - m_RootOrder: 7 + m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 0} @@ -290,6 +290,7 @@ RectTransform: - {fileID: 9191455379462354299} - {fileID: 1737347329555631587} - {fileID: 7796214072403883789} + - {fileID: 513715853649384166} - {fileID: 774056383} - {fileID: 4698344302770053114} m_Father: {fileID: 0} @@ -666,6 +667,10 @@ PrefabInstance: propertyPath: m_AnchoredPosition.x value: 0 objectReference: {fileID: 0} + - target: {fileID: 2180168398058430789, guid: af039f84b4a245049b5b62799af01384, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} - target: {fileID: 2349804210265679521, guid: af039f84b4a245049b5b62799af01384, type: 3} propertyPath: m_AnchorMax.y value: 0 @@ -714,6 +719,26 @@ PrefabInstance: propertyPath: m_AnchoredPosition.y value: 0 objectReference: {fileID: 0} + - target: {fileID: 2743262044093119006, guid: af039f84b4a245049b5b62799af01384, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2743262044093119006, guid: af039f84b4a245049b5b62799af01384, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2743262044093119006, guid: af039f84b4a245049b5b62799af01384, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2743262044093119006, guid: af039f84b4a245049b5b62799af01384, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2743262044093119006, guid: af039f84b4a245049b5b62799af01384, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} - target: {fileID: 2780699546117001111, guid: af039f84b4a245049b5b62799af01384, type: 3} propertyPath: m_AnchorMax.y value: 0 @@ -1915,6 +1940,196 @@ RectTransform: m_CorrespondingSourceObject: {fileID: 4452887637558266342, guid: 0b8fbd4d5c5a29648b0311070cd87b40, type: 3} m_PrefabInstance: {fileID: 2187267507583538677} m_PrefabAsset: {fileID: 0} +--- !u!1001 &5196091484891028848 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 3810371244597919609} + m_Modifications: + - target: {fileID: 2496654705349190475, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3634337741053201105, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3634337741053201105, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4154685927285381360, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4154685927285381360, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4154685927285381360, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5709768780194680726, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5709768780194680726, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5709768780194680726, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + propertyPath: m_RootOrder + value: 6 + objectReference: {fileID: 0} + - target: {fileID: 5709768780194680726, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + propertyPath: m_AnchorMax.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5709768780194680726, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + propertyPath: m_AnchorMax.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5709768780194680726, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + propertyPath: m_AnchorMin.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5709768780194680726, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + propertyPath: m_AnchorMin.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 5709768780194680726, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + propertyPath: m_SizeDelta.x + value: 400 + objectReference: {fileID: 0} + - target: {fileID: 5709768780194680726, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + propertyPath: m_SizeDelta.y + value: 300 + objectReference: {fileID: 0} + - target: {fileID: 5709768780194680726, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5709768780194680726, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5709768780194680726, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5709768780194680726, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5709768780194680726, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5709768780194680726, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5709768780194680726, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5709768780194680726, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5709768780194680726, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5709768780194680726, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5709768780194680726, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5709768780194680726, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6830016383244930819, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6830016383244930819, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6830016383244930819, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6830016383244930819, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7189200350235399940, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + propertyPath: m_Name + value: CraftingMenu + objectReference: {fileID: 0} + - target: {fileID: 7306040227606924600, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7306040227606924600, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7306040227606924600, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7306040227606924600, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7306040227606924600, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7306040227606924600, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8399299911759895747, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8399299911759895747, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8399299911759895747, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8399299911759895747, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8399299911759895747, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8399299911759895747, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} +--- !u!224 &513715853649384166 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 5709768780194680726, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} + m_PrefabInstance: {fileID: 5196091484891028848} + m_PrefabAsset: {fileID: 0} --- !u!1001 &5313005819554070362 PrefabInstance: m_ObjectHideFlags: 0 diff --git a/Assets/Content/Systems/UI/Systems/Construction/ConstructionMenu.prefab b/Assets/Content/Systems/UI/Systems/Construction/ConstructionMenu.prefab index e4e543cd6c..a1eb12779f 100644 --- a/Assets/Content/Systems/UI/Systems/Construction/ConstructionMenu.prefab +++ b/Assets/Content/Systems/UI/Systems/Construction/ConstructionMenu.prefab @@ -395,8 +395,7 @@ RectTransform: m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 7215249032790379191} + m_Children: [] m_Father: {fileID: 2180168398058430789} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -4302,7 +4301,7 @@ MonoBehaviour: m_TargetGraphic: {fileID: 2287788854832640797} m_HandleRect: {fileID: 3379647602017452814} m_Direction: 2 - m_Value: 1 + m_Value: 0 m_Size: 1 m_NumberOfSteps: 0 m_OnValueChanged: @@ -5588,121 +5587,3 @@ MonoBehaviour: m_FillOrigin: 0 m_UseSpriteMesh: 0 m_PixelsPerUnitMultiplier: 1 ---- !u!1001 &7523212133599290053 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 3094203004018276499} - m_Modifications: - - target: {fileID: 884508000258861170, guid: 484315627df23dd428819ee4c9e05603, type: 3} - propertyPath: m_Pivot.x - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 884508000258861170, guid: 484315627df23dd428819ee4c9e05603, type: 3} - propertyPath: m_Pivot.y - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 884508000258861170, guid: 484315627df23dd428819ee4c9e05603, type: 3} - propertyPath: m_RootOrder - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 884508000258861170, guid: 484315627df23dd428819ee4c9e05603, type: 3} - propertyPath: m_AnchorMax.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 884508000258861170, guid: 484315627df23dd428819ee4c9e05603, type: 3} - propertyPath: m_AnchorMax.y - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 884508000258861170, guid: 484315627df23dd428819ee4c9e05603, type: 3} - propertyPath: m_AnchorMin.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 884508000258861170, guid: 484315627df23dd428819ee4c9e05603, type: 3} - propertyPath: m_AnchorMin.y - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 884508000258861170, guid: 484315627df23dd428819ee4c9e05603, type: 3} - propertyPath: m_SizeDelta.x - value: 60 - objectReference: {fileID: 0} - - target: {fileID: 884508000258861170, guid: 484315627df23dd428819ee4c9e05603, type: 3} - propertyPath: m_SizeDelta.y - value: 60 - objectReference: {fileID: 0} - - target: {fileID: 884508000258861170, guid: 484315627df23dd428819ee4c9e05603, type: 3} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 884508000258861170, guid: 484315627df23dd428819ee4c9e05603, type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 884508000258861170, guid: 484315627df23dd428819ee4c9e05603, type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 884508000258861170, guid: 484315627df23dd428819ee4c9e05603, type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 884508000258861170, guid: 484315627df23dd428819ee4c9e05603, type: 3} - propertyPath: m_LocalRotation.x - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 884508000258861170, guid: 484315627df23dd428819ee4c9e05603, type: 3} - propertyPath: m_LocalRotation.y - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 884508000258861170, guid: 484315627df23dd428819ee4c9e05603, type: 3} - propertyPath: m_LocalRotation.z - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 884508000258861170, guid: 484315627df23dd428819ee4c9e05603, type: 3} - propertyPath: m_AnchoredPosition.x - value: -2.500023 - objectReference: {fileID: 0} - - target: {fileID: 884508000258861170, guid: 484315627df23dd428819ee4c9e05603, type: 3} - propertyPath: m_AnchoredPosition.y - value: 35 - objectReference: {fileID: 0} - - target: {fileID: 884508000258861170, guid: 484315627df23dd428819ee4c9e05603, type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 884508000258861170, guid: 484315627df23dd428819ee4c9e05603, type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 884508000258861170, guid: 484315627df23dd428819ee4c9e05603, type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 884508000258861170, guid: 484315627df23dd428819ee4c9e05603, type: 3} - propertyPath: m_ConstrainProportionsScale - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4285405521571209506, guid: 484315627df23dd428819ee4c9e05603, type: 3} - propertyPath: m_Name - value: Slot - objectReference: {fileID: 0} - - target: {fileID: 4285405521571209506, guid: 484315627df23dd428819ee4c9e05603, type: 3} - propertyPath: m_IsActive - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 4659478439552177546, guid: 484315627df23dd428819ee4c9e05603, type: 3} - propertyPath: m_IsActive - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 8599181190718458254, guid: 484315627df23dd428819ee4c9e05603, type: 3} - propertyPath: m_Enabled - value: 1 - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 484315627df23dd428819ee4c9e05603, type: 3} ---- !u!224 &7215249032790379191 stripped -RectTransform: - m_CorrespondingSourceObject: {fileID: 884508000258861170, guid: 484315627df23dd428819ee4c9e05603, type: 3} - m_PrefabInstance: {fileID: 7523212133599290053} - m_PrefabAsset: {fileID: 0} diff --git a/Assets/Content/Systems/UI/Systems/Construction/ConstructionSlot.prefab b/Assets/Content/Systems/UI/Systems/Construction/ConstructionSlot.prefab index bf90d6dedc..1c44f0a8da 100644 --- a/Assets/Content/Systems/UI/Systems/Construction/ConstructionSlot.prefab +++ b/Assets/Content/Systems/UI/Systems/Construction/ConstructionSlot.prefab @@ -33,10 +33,10 @@ RectTransform: m_Father: {fileID: 884508000258861170} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0} - m_AnchorMax: {x: 0.5, y: 0} - m_AnchoredPosition: {x: 0, y: 25} - m_SizeDelta: {x: 50, y: 50} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -22.14569} + m_SizeDelta: {x: 0, y: -44.2913} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &2065303484054695861 CanvasRenderer: @@ -93,10 +93,10 @@ MonoBehaviour: m_faceColor: serializedVersion: 2 rgba: 4294967295 - m_fontSize: 9 + m_fontSize: 18 m_fontSizeBase: 9 m_fontWeight: 400 - m_enableAutoSizing: 0 + m_enableAutoSizing: 1 m_fontSizeMin: 18 m_fontSizeMax: 72 m_fontStyle: 0 @@ -145,9 +145,8 @@ GameObject: m_Component: - component: {fileID: 884508000258861170} - component: {fileID: 3359749042687414630} - - component: {fileID: 8599181190718458254} - component: {fileID: 823427448596160924} - - component: {fileID: 917854816966154042} + - component: {fileID: 1106347147436365345} m_Layer: 5 m_Name: ConstructionSlot m_TagString: Untagged @@ -172,10 +171,10 @@ RectTransform: m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 32.47415, y: -30} - m_SizeDelta: {x: 50, y: 50} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -508, y: 318} + m_SizeDelta: {x: -966, y: -586} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &3359749042687414630 CanvasRenderer: @@ -185,36 +184,6 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 4285405521571209506} m_CullTransparentMesh: 1 ---- !u!114 &8599181190718458254 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4285405521571209506} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - m_Name: - m_EditorClassIdentifier: - m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 - m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} - m_Maskable: 1 - m_OnCullStateChanged: - m_PersistentCalls: - m_Calls: [] - m_Sprite: {fileID: 21300000, guid: ed24919b0f0407c46a3e603909359aed, type: 3} - m_Type: 1 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 - m_UseSpriteMesh: 0 - m_PixelsPerUnitMultiplier: 1 --- !u!114 &823427448596160924 MonoBehaviour: m_ObjectHideFlags: 0 @@ -255,12 +224,13 @@ MonoBehaviour: m_SelectedTrigger: Selected m_DisabledTrigger: Disabled m_Interactable: 1 - m_TargetGraphic: {fileID: 8599181190718458254} + m_TargetGraphic: {fileID: 0} m_OnClick: m_PersistentCalls: m_Calls: - - m_Target: {fileID: 917854816966154042} - m_TargetAssemblyTypeName: SS3D.Systems.Tile.UI.TileMapCreatorTab, SS3D.Systems + - m_Target: {fileID: 1106347147436365345} + m_TargetAssemblyTypeName: SS3D.Systems.Tile.TileMapCreator.ConstructionSlot, + SS3D.Systems m_MethodName: OnClick m_Mode: 1 m_Arguments: @@ -271,7 +241,7 @@ MonoBehaviour: m_StringArgument: m_BoolArgument: 0 m_CallState: 2 ---- !u!114 &917854816966154042 +--- !u!114 &1106347147436365345 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -280,9 +250,11 @@ MonoBehaviour: m_GameObject: {fileID: 4285405521571209506} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 9e6901a06a5f4ed43aec2a99de467c7b, type: 3} + m_Script: {fileID: 11500000, guid: 280d894b63274c4e8d6242ad3ddc1217, type: 3} m_Name: m_EditorClassIdentifier: + Image: {fileID: 4682122780754151789} + AssetName: {fileID: 5024702748853202024} --- !u!1 &4659478439552177546 GameObject: m_ObjectHideFlags: 0 @@ -300,7 +272,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 0 + m_IsActive: 1 --- !u!224 &2404308762883148815 RectTransform: m_ObjectHideFlags: 0 @@ -316,10 +288,10 @@ RectTransform: m_Father: {fileID: 884508000258861170} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0.5, y: 0.5} - m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} m_AnchoredPosition: {x: 0, y: 0} - m_SizeDelta: {x: 25, y: 25} + m_SizeDelta: {x: 6, y: 6} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &1671009179637826818 CanvasRenderer: @@ -342,15 +314,15 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 0.24313727, g: 0.3803922, b: 0.5372549, a: 1} + m_Color: {r: 1, g: 1, b: 1, a: 1} m_RaycastTarget: 1 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 21300000, guid: 4418c3b6864fd0b47a451f47a44201cd, type: 3} - m_Type: 0 + m_Sprite: {fileID: 21300000, guid: ed24919b0f0407c46a3e603909359aed, type: 3} + m_Type: 1 m_PreserveAspect: 0 m_FillCenter: 1 m_FillMethod: 4 diff --git a/Assets/Content/Systems/UI/Systems/Crafting.meta b/Assets/Content/Systems/UI/Systems/Crafting.meta new file mode 100644 index 0000000000..cda4e34958 --- /dev/null +++ b/Assets/Content/Systems/UI/Systems/Crafting.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ebaaedff0e78186499f42a9b020f7a3c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Content/Systems/UI/Systems/Crafting/CraftingMenu.prefab b/Assets/Content/Systems/UI/Systems/Crafting/CraftingMenu.prefab new file mode 100644 index 0000000000..c4e46eda63 --- /dev/null +++ b/Assets/Content/Systems/UI/Systems/Crafting/CraftingMenu.prefab @@ -0,0 +1,1533 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &99448900488201348 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6830016383244930819} + - component: {fileID: 5657561237594541791} + - component: {fileID: 5910904647588684538} + m_Layer: 5 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6830016383244930819 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 99448900488201348} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2496654705349190475} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 150, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5657561237594541791 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 99448900488201348} + m_CullTransparentMesh: 1 +--- !u!114 &5910904647588684538 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 99448900488201348} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: pictures go here at runtime + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: ffc81b96d71d7544580ef63e2d508f02, type: 2} + m_sharedMaterial: {fileID: 8572051279392437555, guid: ffc81b96d71d7544580ef63e2d508f02, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 15 + m_fontSizeBase: 15 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &2357563431754129335 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4154685927285381360} + - component: {fileID: 4393727085166206414} + - component: {fileID: 4452972802823459642} + - component: {fileID: 3166279356985195665} + m_Layer: 5 + m_Name: Viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4154685927285381360 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2357563431754129335} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2496654705349190475} + m_Father: {fileID: 6299045587923002797} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!222 &4393727085166206414 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2357563431754129335} + m_CullTransparentMesh: 1 +--- !u!114 &4452972802823459642 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2357563431754129335} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10917, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &3166279356985195665 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2357563431754129335} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!1 &2560032465344757532 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 869390351849277232} + m_Layer: 5 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &869390351849277232 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2560032465344757532} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3634337741053201105} + m_Father: {fileID: 7827233517559647210} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -20, y: -20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &2824306043727220415 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1907825065449342411} + - component: {fileID: 4247876526397060148} + - component: {fileID: 6875640958872394397} + - component: {fileID: 610302671523470604} + m_Layer: 5 + m_Name: BackGround + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1907825065449342411 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2824306043727220415} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7306040227606924600} + - {fileID: 8399299911759895747} + m_Father: {fileID: 5709768780194680726} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -20, y: -20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &4247876526397060148 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2824306043727220415} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 10 + m_Bottom: 0 + m_ChildAlignment: 1 + m_Spacing: 10 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!222 &6875640958872394397 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2824306043727220415} + m_CullTransparentMesh: 1 +--- !u!114 &610302671523470604 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2824306043727220415} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.16862746, g: 0.16862746, b: 0.1764706, a: 0.78431374} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &3272017697527393180 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 48295255016904384} + - component: {fileID: 2203658956011034860} + - component: {fileID: 1074193427462014533} + m_Layer: 0 + m_Name: Title + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &48295255016904384 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3272017697527393180} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8399299911759895747} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 160, y: 40} + m_Pivot: {x: 0.5, y: 1} +--- !u!222 &2203658956011034860 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3272017697527393180} + m_CullTransparentMesh: 1 +--- !u!114 &1074193427462014533 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3272017697527393180} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Recipe step title + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: ffc81b96d71d7544580ef63e2d508f02, type: 2} + m_sharedMaterial: {fileID: 8572051279392437555, guid: ffc81b96d71d7544580ef63e2d508f02, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 20 + m_fontSizeBase: 20 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &3369685230946988934 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3634337741053201105} + - component: {fileID: 3711530461413077311} + - component: {fileID: 659104427727887115} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3634337741053201105 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3369685230946988934} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 869390351849277232} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3711530461413077311 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3369685230946988934} + m_CullTransparentMesh: 1 +--- !u!114 &659104427727887115 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3369685230946988934} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &3377149541993101921 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7306040227606924600} + - component: {fileID: 8976054374460234228} + m_Layer: 0 + m_Name: RecipeStepList + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7306040227606924600 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3377149541993101921} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1907825065449342411} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &8976054374460234228 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3377149541993101921} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 1 + m_Spacing: 10 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!1 &4322822861271296578 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7827233517559647210} + - component: {fileID: 4109323803178069026} + - component: {fileID: 12113899571687859} + - component: {fileID: 852629502998103591} + m_Layer: 5 + m_Name: Scrollbar Vertical + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &7827233517559647210 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4322822861271296578} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 869390351849277232} + m_Father: {fileID: 6299045587923002797} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: -17} + m_Pivot: {x: 1, y: 1} +--- !u!222 &4109323803178069026 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4322822861271296578} + m_CullTransparentMesh: 1 +--- !u!114 &12113899571687859 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4322822861271296578} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &852629502998103591 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4322822861271296578} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2a4db7a114972834c8e4117be1d82ba3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 659104427727887115} + m_HandleRect: {fileID: 3634337741053201105} + m_Direction: 2 + m_Value: 0 + m_Size: 1 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &5154607676297503664 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6299045587923002797} + - component: {fileID: 2733433557643777848} + - component: {fileID: 2175676387141060931} + - component: {fileID: 4960438504021905340} + m_Layer: 5 + m_Name: Scroll View + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6299045587923002797 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5154607676297503664} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 4154685927285381360} + - {fileID: 7827233517559647210} + m_Father: {fileID: 8399299911759895747} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: -80} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &2733433557643777848 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5154607676297503664} + m_CullTransparentMesh: 1 +--- !u!114 &2175676387141060931 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5154607676297503664} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.003921569} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &4960438504021905340 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5154607676297503664} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 2496654705349190475} + m_Horizontal: 0 + m_Vertical: 1 + m_MovementType: 1 + m_Elasticity: 0.1 + m_Inertia: 1 + m_DecelerationRate: 0.135 + m_ScrollSensitivity: 1 + m_Viewport: {fileID: 4154685927285381360} + m_HorizontalScrollbar: {fileID: 0} + m_VerticalScrollbar: {fileID: 852629502998103591} + m_HorizontalScrollbarVisibility: 2 + m_VerticalScrollbarVisibility: 2 + m_HorizontalScrollbarSpacing: -3 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &5912077723515464714 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3761759815872693028} + - component: {fileID: 4517698764057493303} + - component: {fileID: 493462054555821443} + m_Layer: 5 + m_Name: Text (TMP) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3761759815872693028 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5912077723515464714} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1763133910678066630} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4517698764057493303 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5912077723515464714} + m_CullTransparentMesh: 1 +--- !u!114 &493462054555821443 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5912077723515464714} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Build + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: ffc81b96d71d7544580ef63e2d508f02, type: 2} + m_sharedMaterial: {fileID: 8572051279392437555, guid: ffc81b96d71d7544580ef63e2d508f02, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4281479730 + m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 24 + m_fontSizeBase: 24 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &7189200350235399940 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5709768780194680726} + - component: {fileID: 325164418226336036} + - component: {fileID: 8548522104926483527} + - component: {fileID: 8883224489736837113} + - component: {fileID: 8932735734697480342} + m_Layer: 5 + m_Name: CraftingMenu + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5709768780194680726 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7189200350235399940} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1907825065449342411} + - {fileID: 8080578653911610091} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 400, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &325164418226336036 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7189200350235399940} + m_CullTransparentMesh: 1 +--- !u!114 &8548522104926483527 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7189200350235399940} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.093004614, g: 0.093004614, b: 0.09433961, a: 0.78431374} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: ed24919b0f0407c46a3e603909359aed, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &8883224489736837113 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7189200350235399940} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 71a3e51e853fbc04f966014d5bd7876e, type: 3} + m_Name: + m_EditorClassIdentifier: + _componentIndexCache: 0 + _addedNetworkObject: {fileID: 8932735734697480342} + _networkObjectCache: {fileID: 8932735734697480342} + _textSlotPrefab: {fileID: 2526814804305374919, guid: 950de92fa59738547b6c973f1d12cdb9, type: 3} + _pictureSlotPrefab: {fileID: 4285405521571209506, guid: 5178a7bb33c863f42bad9ef26300473e, type: 3} + _textSlotArea: {fileID: 3377149541993101921} + _pictureSlotArea: {fileID: 8090865547143251753} + _objectTitle: {fileID: 1074193427462014533} +--- !u!114 &8932735734697480342 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7189200350235399940} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 26b716c41e9b56b4baafaf13a523ba2e, type: 3} + m_Name: + m_EditorClassIdentifier: + k__BackingField: 0 + k__BackingField: 0 + k__BackingField: {fileID: 0} + _networkBehaviours: + - {fileID: 8883224489736837113} + k__BackingField: {fileID: 0} + k__BackingField: [] + SerializedTransformProperties: + Position: {x: 0, y: 0, z: 0} + Rotation: {x: 0, y: 0, z: 0, w: 1} + LocalScale: {x: 1, y: 1, z: 1} + _isNetworked: 1 + _isGlobal: 0 + _initializeOrder: 0 + _defaultDespawnType: 0 + NetworkObserver: {fileID: 0} + k__BackingField: 63 + k__BackingField: 0 + _scenePathHash: 0 + k__BackingField: 0 + k__BackingField: 7104282468500981967 +--- !u!1 &8090865547143251753 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2496654705349190475} + - component: {fileID: 1107418422075471330} + - component: {fileID: 1789471992340415958} + m_Layer: 5 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2496654705349190475 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8090865547143251753} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6830016383244930819} + m_Father: {fileID: 4154685927285381360} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!114 &1107418422075471330 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8090865547143251753} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 1 + m_Spacing: 20 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!114 &1789471992340415958 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8090865547143251753} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 1 +--- !u!1 &8284497350382615576 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8080578653911610091} + - component: {fileID: 2872163769280137700} + - component: {fileID: 8910161000899863437} + - component: {fileID: 2180525974107295063} + m_Layer: 5 + m_Name: Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8080578653911610091 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8284497350382615576} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5709768780194680726} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -22, y: -22} + m_SizeDelta: {x: 15, y: 15} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &2872163769280137700 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8284497350382615576} + m_CullTransparentMesh: 1 +--- !u!114 &8910161000899863437 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8284497350382615576} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: b3905a73a6672d9449647aaf036e23fc, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &2180525974107295063 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8284497350382615576} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 8910161000899863437} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 8883224489736837113} + m_TargetAssemblyTypeName: SS3D.Systems.Crafting.CraftingMenu, SS3D.Systems + m_MethodName: HideMenu + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!1 &8441447269027968538 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8399299911759895747} + m_Layer: 0 + m_Name: InfosAndBuild + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8399299911759895747 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8441447269027968538} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 48295255016904384} + - {fileID: 6299045587923002797} + - {fileID: 1763133910678066630} + m_Father: {fileID: 1907825065449342411} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &8468642928352394308 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1763133910678066630} + - component: {fileID: 387807534733032273} + - component: {fileID: 5434760963635318147} + - component: {fileID: 5722156611615581265} + m_Layer: 5 + m_Name: BuildButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1763133910678066630 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8468642928352394308} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3761759815872693028} + m_Father: {fileID: 8399299911759895747} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 140, y: 30} + m_Pivot: {x: 0.5, y: 0} +--- !u!222 &387807534733032273 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8468642928352394308} + m_CullTransparentMesh: 1 +--- !u!114 &5434760963635318147 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8468642928352394308} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &5722156611615581265 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8468642928352394308} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 5434760963635318147} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 8883224489736837113} + m_TargetAssemblyTypeName: CraftingMenu, SS3D.Systems + m_MethodName: OnBuildClick + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 diff --git a/Assets/Content/Systems/UI/Systems/Crafting/CraftingMenu.prefab.meta b/Assets/Content/Systems/UI/Systems/Crafting/CraftingMenu.prefab.meta new file mode 100644 index 0000000000..f498a5cfc0 --- /dev/null +++ b/Assets/Content/Systems/UI/Systems/Crafting/CraftingMenu.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d2e0ed0ea636629409f5ea4b10bedddd +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Content/Systems/UI/Systems/Crafting/CraftingMenuRecipeStepNameSlot.prefab b/Assets/Content/Systems/UI/Systems/Crafting/CraftingMenuRecipeStepNameSlot.prefab new file mode 100644 index 0000000000..1126040d7a --- /dev/null +++ b/Assets/Content/Systems/UI/Systems/Crafting/CraftingMenuRecipeStepNameSlot.prefab @@ -0,0 +1,285 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1520839714733902166 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1684743560760598843} + - component: {fileID: 4048774218792776989} + - component: {fileID: 4814563815169982431} + m_Layer: 0 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1684743560760598843 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1520839714733902166} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -3.1147766} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7357969363770789156} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 200, y: 50} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4048774218792776989 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1520839714733902166} + m_CullTransparentMesh: 1 +--- !u!114 &4814563815169982431 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1520839714733902166} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: random text + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: ffc81b96d71d7544580ef63e2d508f02, type: 2} + m_sharedMaterial: {fileID: 8572051279392437555, guid: ffc81b96d71d7544580ef63e2d508f02, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 15 + m_fontSizeBase: 15 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &2526814804305374919 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7357969363770789156} + - component: {fileID: 1639441343047545876} + - component: {fileID: 2521399576527281176} + - component: {fileID: 412734047857565481} + - component: {fileID: 2562299810943924255} + m_Layer: 0 + m_Name: CraftingMenuRecipeStepNameSlot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7357969363770789156 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2526814804305374919} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1684743560760598843} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 200, y: 50} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1639441343047545876 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2526814804305374919} + m_CullTransparentMesh: 1 +--- !u!114 &2521399576527281176 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2526814804305374919} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.103773594, g: 0.1013261, b: 0.1013261, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: ed24919b0f0407c46a3e603909359aed, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &412734047857565481 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2526814804305374919} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.8679245, g: 0.091142714, b: 0.05322181, a: 1} + m_PressedColor: {r: 0.9339623, g: 0.09251513, b: 0.09251513, a: 1} + m_SelectedColor: {r: 0.8584906, g: 0.068841234, b: 0.068841234, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 2521399576527281176} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 2562299810943924255} + m_TargetAssemblyTypeName: CraftingAssetSlot, SS3D.Systems + m_MethodName: OnClick + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &2562299810943924255 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2526814804305374919} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9b4126c17a93fbe47a8f7cf20d7b6541, type: 3} + m_Name: + m_EditorClassIdentifier: + _craftingSlotPartPrefab: {fileID: 277919252593154140, guid: 375f73bebe39b394394999cd99c94b99, type: 3} diff --git a/Assets/Content/Systems/UI/Systems/Crafting/CraftingMenuRecipeStepNameSlot.prefab.meta b/Assets/Content/Systems/UI/Systems/Crafting/CraftingMenuRecipeStepNameSlot.prefab.meta new file mode 100644 index 0000000000..554847932d --- /dev/null +++ b/Assets/Content/Systems/UI/Systems/Crafting/CraftingMenuRecipeStepNameSlot.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 950de92fa59738547b6c973f1d12cdb9 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Content/Systems/UI/Systems/Crafting/CraftingSlot.prefab b/Assets/Content/Systems/UI/Systems/Crafting/CraftingSlot.prefab new file mode 100644 index 0000000000..ab2cc03fc9 --- /dev/null +++ b/Assets/Content/Systems/UI/Systems/Crafting/CraftingSlot.prefab @@ -0,0 +1,489 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &2234150620608203640 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6467881634503621627} + - component: {fileID: 2065303484054695861} + - component: {fileID: 5024702748853202024} + m_Layer: 5 + m_Name: AssetName + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6467881634503621627 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2234150620608203640} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6430926662656503906} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -40.000015} + m_SizeDelta: {x: 0, y: -79.99996} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &2065303484054695861 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2234150620608203640} + m_CullTransparentMesh: 1 +--- !u!114 &5024702748853202024 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2234150620608203640} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Name + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: ffc81b96d71d7544580ef63e2d508f02, type: 2} + m_sharedMaterial: {fileID: 8572051279392437555, guid: ffc81b96d71d7544580ef63e2d508f02, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 18 + m_fontSizeBase: 9 + m_fontWeight: 400 + m_enableAutoSizing: 1 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 1024 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &4285405521571209506 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 884508000258861170} + - component: {fileID: 3359749042687414630} + - component: {fileID: 4913925109045102197} + m_Layer: 5 + m_Name: CraftingSlot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &884508000258861170 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4285405521571209506} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 1 + m_Children: + - {fileID: 6430926662656503906} + - {fileID: 2151056183270878589} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: -3.6555786, y: 0} + m_SizeDelta: {x: 80, y: 80} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3359749042687414630 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4285405521571209506} + m_CullTransparentMesh: 1 +--- !u!114 &4913925109045102197 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4285405521571209506} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f2a672815e24305933cffd644a49bfa, type: 3} + m_Name: + m_EditorClassIdentifier: + Image: {fileID: 4682122780754151789} + AssetName: {fileID: 5024702748853202024} + _textAmount: {fileID: 7299684177147348612} +--- !u!1 &4659478439552177546 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2404308762883148815} + - component: {fileID: 1671009179637826818} + - component: {fileID: 4682122780754151789} + m_Layer: 5 + m_Name: SlotImage + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2404308762883148815 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4659478439552177546} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6430926662656503906} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1671009179637826818 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4659478439552177546} + m_CullTransparentMesh: 1 +--- !u!114 &4682122780754151789 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4659478439552177546} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: ed24919b0f0407c46a3e603909359aed, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &6142875848317958610 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2151056183270878589} + - component: {fileID: 385381184159043765} + - component: {fileID: 7299684177147348612} + m_Layer: 5 + m_Name: Amount + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2151056183270878589 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6142875848317958610} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 884508000258861170} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: 35, y: 3.5} + m_SizeDelta: {x: 60, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &385381184159043765 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6142875848317958610} + m_CullTransparentMesh: 1 +--- !u!114 &7299684177147348612 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6142875848317958610} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Amount + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: ffc81b96d71d7544580ef63e2d508f02, type: 2} + m_sharedMaterial: {fileID: 8572051279392437555, guid: ffc81b96d71d7544580ef63e2d508f02, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 20 + m_fontSizeBase: 20 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &8970748782054364834 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6430926662656503906} + - component: {fileID: 2328264770713403796} + - component: {fileID: 657521072192353039} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6430926662656503906 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8970748782054364834} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 1 + m_Children: + - {fileID: 2404308762883148815} + - {fileID: 6467881634503621627} + m_Father: {fileID: 884508000258861170} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 40, y: 0} + m_SizeDelta: {x: 80, y: 80} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &2328264770713403796 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8970748782054364834} + m_CullTransparentMesh: 1 +--- !u!114 &657521072192353039 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8970748782054364834} + m_Enabled: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.24313726, g: 0.38039216, b: 0.5372549, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 diff --git a/Assets/Content/Systems/UI/Systems/Crafting/CraftingSlot.prefab.meta b/Assets/Content/Systems/UI/Systems/Crafting/CraftingSlot.prefab.meta new file mode 100644 index 0000000000..64d8335ca8 --- /dev/null +++ b/Assets/Content/Systems/UI/Systems/Crafting/CraftingSlot.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5178a7bb33c863f42bad9ef26300473e +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Content/WorldObjects/Entities/Humanoids/Human/HumanBodyParts/HumanHandLeft.prefab b/Assets/Content/WorldObjects/Entities/Humanoids/Human/HumanBodyParts/HumanHandLeft.prefab index 6dbb2a2552..4be5e96451 100644 --- a/Assets/Content/WorldObjects/Entities/Humanoids/Human/HumanBodyParts/HumanHandLeft.prefab +++ b/Assets/Content/WorldObjects/Entities/Humanoids/Human/HumanBodyParts/HumanHandLeft.prefab @@ -232,6 +232,7 @@ GameObject: - component: {fileID: 636696804841796911} - component: {fileID: 3617335994165229519} - component: {fileID: 5077178896765091160} + - component: {fileID: 3325623441715482320} m_Layer: 10 m_Name: HumanHandLeft m_TagString: Untagged @@ -609,3 +610,16 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: e00534faac6488c47893490f2bf4c5a2, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!114 &3325623441715482320 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2207730063960764759} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1dd866b0631d05441982a4824740ff8d, type: 3} + m_Name: + m_EditorClassIdentifier: + type: 3 diff --git a/Assets/Content/WorldObjects/Entities/Humanoids/Human/HumanBodyParts/HumanHandRight.prefab b/Assets/Content/WorldObjects/Entities/Humanoids/Human/HumanBodyParts/HumanHandRight.prefab index 35f4bd2e1d..9ea6f98f0b 100644 --- a/Assets/Content/WorldObjects/Entities/Humanoids/Human/HumanBodyParts/HumanHandRight.prefab +++ b/Assets/Content/WorldObjects/Entities/Humanoids/Human/HumanBodyParts/HumanHandRight.prefab @@ -133,6 +133,7 @@ GameObject: - component: {fileID: 3575842280113044479} - component: {fileID: 3171269491459057760} - component: {fileID: 5767018055607047746} + - component: {fileID: 427023688766138603} m_Layer: 10 m_Name: HumanHandRight m_TagString: Untagged @@ -192,7 +193,7 @@ MonoBehaviour: _initializeOrder: 0 _defaultDespawnType: 0 NetworkObserver: {fileID: 0} - k__BackingField: 148 + k__BackingField: 202 k__BackingField: 0 _scenePathHash: 0 k__BackingField: 0 @@ -510,6 +511,19 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: e00534faac6488c47893490f2bf4c5a2, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!114 &427023688766138603 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7546631754298856378} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1dd866b0631d05441982a4824740ff8d, type: 3} + m_Name: + m_EditorClassIdentifier: + type: 3 --- !u!1 &8277670340540735588 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Content/WorldObjects/Items/Clothing/JumpsuitBotany.prefab b/Assets/Content/WorldObjects/Items/Clothing/JumpsuitBotany.prefab index 43b4ea8108..963d278b78 100644 --- a/Assets/Content/WorldObjects/Items/Clothing/JumpsuitBotany.prefab +++ b/Assets/Content/WorldObjects/Items/Clothing/JumpsuitBotany.prefab @@ -75,6 +75,10 @@ PrefabInstance: propertyPath: m_Mesh value: objectReference: {fileID: 8281616745360485254, guid: 76ba5420c179bb841858ed042df97ba2, type: 3} + - target: {fileID: 2527334834019670621, guid: 236b51ddc6f9aa94ca92579082370c06, type: 3} + propertyPath: k__BackingField + value: 28 + objectReference: {fileID: 0} - target: {fileID: 2527334834019670621, guid: 236b51ddc6f9aa94ca92579082370c06, type: 3} propertyPath: k__BackingField value: 2703128900779190152 diff --git a/Assets/Content/WorldObjects/Items/Clothing/JumpsuitSecurity.prefab b/Assets/Content/WorldObjects/Items/Clothing/JumpsuitSecurity.prefab index 3f01a75222..300e473ca3 100644 --- a/Assets/Content/WorldObjects/Items/Clothing/JumpsuitSecurity.prefab +++ b/Assets/Content/WorldObjects/Items/Clothing/JumpsuitSecurity.prefab @@ -75,6 +75,10 @@ PrefabInstance: propertyPath: m_Mesh value: objectReference: {fileID: 6295007783518057475, guid: 76ba5420c179bb841858ed042df97ba2, type: 3} + - target: {fileID: 2527334834019670621, guid: 236b51ddc6f9aa94ca92579082370c06, type: 3} + propertyPath: k__BackingField + value: 61 + objectReference: {fileID: 0} - target: {fileID: 2527334834019670621, guid: 236b51ddc6f9aa94ca92579082370c06, type: 3} propertyPath: k__BackingField value: 5199498103544181230 diff --git a/Assets/Content/WorldObjects/Items/Clothing/Sunglasses.prefab b/Assets/Content/WorldObjects/Items/Clothing/Sunglasses.prefab index 13b5deb8e9..0667878b72 100644 --- a/Assets/Content/WorldObjects/Items/Clothing/Sunglasses.prefab +++ b/Assets/Content/WorldObjects/Items/Clothing/Sunglasses.prefab @@ -49,7 +49,7 @@ GameObject: - component: {fileID: -8110830878206171978} - component: {fileID: 5903053600117115308} - component: {fileID: 622373174144228207} - - component: {fileID: -2658048922168343960} + - component: {fileID: -2199555817236745270} m_Layer: 10 m_Name: Sunglasses m_TagString: Untagged @@ -213,7 +213,7 @@ MonoBehaviour: _initializeOrder: 0 _defaultDespawnType: 0 NetworkObserver: {fileID: 0} - k__BackingField: 169 + k__BackingField: 159 k__BackingField: 0 _scenePathHash: 0 k__BackingField: 0 @@ -281,7 +281,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: e00534faac6488c47893490f2bf4c5a2, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!114 &-2658048922168343960 +--- !u!114 &-2199555817236745270 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -290,7 +290,9 @@ MonoBehaviour: m_GameObject: {fileID: 2667451333340596270} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 38640bf88ae0c29409092a258bd36878, type: 3} + m_Script: {fileID: 11500000, guid: 49d37ab5b82ded9419a6e3ab3d05af02, type: 3} m_Name: m_EditorClassIdentifier: - key: {fileID: 11400000, guid: 9559a4acf7f5ff44fa75810bf669d11d, type: 2} + _componentIndexCache: 255 + _addedNetworkObject: {fileID: 3546473533537016869} + _networkObjectCache: {fileID: 0} diff --git a/Assets/Content/WorldObjects/Items/Clothing/TruckerCap.prefab b/Assets/Content/WorldObjects/Items/Clothing/TruckerCap.prefab index 75a1b3f378..a40277d85c 100644 --- a/Assets/Content/WorldObjects/Items/Clothing/TruckerCap.prefab +++ b/Assets/Content/WorldObjects/Items/Clothing/TruckerCap.prefab @@ -50,6 +50,7 @@ GameObject: - component: {fileID: 1629795439574854430} - component: {fileID: 5067584742411346480} - component: {fileID: -8219830496143806192} + - component: {fileID: 7778212894035129079} m_Layer: 10 m_Name: TruckerCap m_TagString: Untagged @@ -294,3 +295,18 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: key: {fileID: 11400000, guid: 45802588ca951fc428487d7ad458a959, type: 2} +--- !u!114 &7778212894035129079 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2601952054522247362} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 49d37ab5b82ded9419a6e3ab3d05af02, type: 3} + m_Name: + m_EditorClassIdentifier: + _componentIndexCache: 255 + _addedNetworkObject: {fileID: -1921154974467191097} + _networkObjectCache: {fileID: 0} diff --git a/Assets/Content/WorldObjects/Items/Cosmetic/BikeHorn/BikeHorn.prefab b/Assets/Content/WorldObjects/Items/Cosmetic/BikeHorn/BikeHorn.prefab index ddd08676fd..7cfe91e0c8 100644 --- a/Assets/Content/WorldObjects/Items/Cosmetic/BikeHorn/BikeHorn.prefab +++ b/Assets/Content/WorldObjects/Items/Cosmetic/BikeHorn/BikeHorn.prefab @@ -175,6 +175,7 @@ GameObject: - component: {fileID: -1808419688812875912} - component: {fileID: 8613419490928921116} - component: {fileID: 2689380027240677461} + - component: {fileID: 7692858249744895666} m_Layer: 10 m_Name: BikeHorn m_TagString: Untagged @@ -401,3 +402,18 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: key: {fileID: 11400000, guid: 71368b829dabc4042bc1ed56eb8afecf, type: 2} +--- !u!114 &7692858249744895666 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6891363543938182813} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 49d37ab5b82ded9419a6e3ab3d05af02, type: 3} + m_Name: + m_EditorClassIdentifier: + _componentIndexCache: 255 + _addedNetworkObject: {fileID: 4819234911439508660} + _networkObjectCache: {fileID: 0} diff --git a/Assets/Content/WorldObjects/Items/Functional/Generic/Tanks/OxygenTank.prefab b/Assets/Content/WorldObjects/Items/Functional/Generic/Tanks/OxygenTank.prefab index 9f99baa02a..af83e174c7 100644 --- a/Assets/Content/WorldObjects/Items/Functional/Generic/Tanks/OxygenTank.prefab +++ b/Assets/Content/WorldObjects/Items/Functional/Generic/Tanks/OxygenTank.prefab @@ -184,6 +184,7 @@ MonoBehaviour: _networkBehaviours: - {fileID: 2717170585512287581} - {fileID: 2885876316184551953} + - {fileID: -4941992892754288966} k__BackingField: {fileID: 0} k__BackingField: [] SerializedTransformProperties: @@ -195,7 +196,7 @@ MonoBehaviour: _initializeOrder: 0 _defaultDespawnType: 0 NetworkObserver: {fileID: 0} - k__BackingField: 65535 + k__BackingField: 121 k__BackingField: 0 _scenePathHash: 0 k__BackingField: 0 @@ -235,9 +236,9 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 1a85f26fb7523bc4fadefb445dc09f8c, type: 3} m_Name: m_EditorClassIdentifier: - _componentIndexCache: 255 + _componentIndexCache: 2 _addedNetworkObject: {fileID: 8767567404870203102} - _networkObjectCache: {fileID: 0} + _networkObjectCache: {fileID: 8767567404870203102} InitialSubstances: - Substance: {fileID: 11400000, guid: 2030145386ed160418f9a07c5d68774f, type: 2} MilliMoles: 2000 diff --git a/Assets/Content/WorldObjects/Items/Functional/Materials/GlassReinforcedSheet.prefab b/Assets/Content/WorldObjects/Items/Functional/Materials/GlassReinforcedSheet.prefab index 3367adc78d..6ae1dbdad1 100644 --- a/Assets/Content/WorldObjects/Items/Functional/Materials/GlassReinforcedSheet.prefab +++ b/Assets/Content/WorldObjects/Items/Functional/Materials/GlassReinforcedSheet.prefab @@ -211,6 +211,7 @@ GameObject: - component: {fileID: 5296084984690686628} - component: {fileID: 1034747657592807112} - component: {fileID: 1093385838975254555} + - component: {fileID: 5305823004215370601} m_Layer: 10 m_Name: GlassReinforcedSheet m_TagString: Untagged @@ -327,7 +328,7 @@ MonoBehaviour: _initializeOrder: 0 _defaultDespawnType: 0 NetworkObserver: {fileID: 0} - k__BackingField: 65535 + k__BackingField: 167 k__BackingField: 0 _scenePathHash: 0 k__BackingField: 0 @@ -380,6 +381,21 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: key: {fileID: 11400000, guid: 44d57240d718dcc4dbae31d82bd282f2, type: 2} +--- !u!114 &5305823004215370601 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7125681683583715523} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 49d37ab5b82ded9419a6e3ab3d05af02, type: 3} + m_Name: + m_EditorClassIdentifier: + _componentIndexCache: 255 + _addedNetworkObject: {fileID: 1773710978803455870} + _networkObjectCache: {fileID: 0} --- !u!1 &7393894785072713980 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Content/WorldObjects/Items/Functional/Materials/GlassSheet.prefab b/Assets/Content/WorldObjects/Items/Functional/Materials/GlassSheet.prefab index 91f4a1a9d3..9e3b7b3a42 100644 --- a/Assets/Content/WorldObjects/Items/Functional/Materials/GlassSheet.prefab +++ b/Assets/Content/WorldObjects/Items/Functional/Materials/GlassSheet.prefab @@ -211,6 +211,7 @@ GameObject: - component: {fileID: 5296084984690686628} - component: {fileID: 1034747657592807112} - component: {fileID: 4129408090615520002} + - component: {fileID: 1465153506310873417} m_Layer: 10 m_Name: GlassSheet m_TagString: Untagged @@ -316,6 +317,7 @@ MonoBehaviour: _networkBehaviours: - {fileID: 2568864249795578972} - {fileID: 5296084984690686628} + - {fileID: 1465153506310873417} k__BackingField: {fileID: 0} k__BackingField: [] SerializedTransformProperties: @@ -327,7 +329,7 @@ MonoBehaviour: _initializeOrder: 0 _defaultDespawnType: 0 NetworkObserver: {fileID: 0} - k__BackingField: 65535 + k__BackingField: 117 k__BackingField: 0 _scenePathHash: 0 k__BackingField: 0 @@ -380,6 +382,21 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: key: {fileID: 11400000, guid: e882fe5f76c752a4a8c9ac937eb30ebb, type: 2} +--- !u!114 &1465153506310873417 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7125681683583715523} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 49d37ab5b82ded9419a6e3ab3d05af02, type: 3} + m_Name: + m_EditorClassIdentifier: + _componentIndexCache: 2 + _addedNetworkObject: {fileID: 1773710978803455870} + _networkObjectCache: {fileID: 1773710978803455870} --- !u!1 &7393894785072713980 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Content/WorldObjects/Items/Functional/Materials/SteelReinforcedSheet.prefab b/Assets/Content/WorldObjects/Items/Functional/Materials/SteelReinforcedSheet.prefab index 98ea0b7a17..9d77e9ef61 100644 --- a/Assets/Content/WorldObjects/Items/Functional/Materials/SteelReinforcedSheet.prefab +++ b/Assets/Content/WorldObjects/Items/Functional/Materials/SteelReinforcedSheet.prefab @@ -209,6 +209,7 @@ GameObject: - component: {fileID: 9006176345843005737} - component: {fileID: 1034747657592807112} - component: {fileID: -3033005221563599559} + - component: {fileID: 9058576779372462729} m_Layer: 10 m_Name: SteelReinforcedSheet m_TagString: Untagged @@ -378,6 +379,21 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: key: {fileID: 11400000, guid: b9e9ac1fc0c7dc7458e470bbe32d0984, type: 2} +--- !u!114 &9058576779372462729 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7125681683583715523} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 49d37ab5b82ded9419a6e3ab3d05af02, type: 3} + m_Name: + m_EditorClassIdentifier: + _componentIndexCache: 255 + _addedNetworkObject: {fileID: 4037338737721612837} + _networkObjectCache: {fileID: 0} --- !u!1 &7393894785072713980 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Content/WorldObjects/Items/Functional/Materials/SteelRod.prefab b/Assets/Content/WorldObjects/Items/Functional/Materials/SteelRod.prefab index 96658c9bf0..237acc1962 100644 --- a/Assets/Content/WorldObjects/Items/Functional/Materials/SteelRod.prefab +++ b/Assets/Content/WorldObjects/Items/Functional/Materials/SteelRod.prefab @@ -112,6 +112,7 @@ GameObject: - component: {fileID: 5296084984690686628} - component: {fileID: 1034747657592807112} - component: {fileID: 7829680980916556598} + - component: {fileID: 2491671203066484625} m_Layer: 10 m_Name: SteelRod m_TagString: Untagged @@ -226,7 +227,7 @@ MonoBehaviour: _initializeOrder: 0 _defaultDespawnType: 0 NetworkObserver: {fileID: 0} - k__BackingField: 65535 + k__BackingField: 42 k__BackingField: 0 _scenePathHash: 0 k__BackingField: 0 @@ -279,6 +280,21 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: key: {fileID: 11400000, guid: 08377b3b9aaa05f4b8db9793f6d8c574, type: 2} +--- !u!114 &2491671203066484625 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7125681683583715523} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 49d37ab5b82ded9419a6e3ab3d05af02, type: 3} + m_Name: + m_EditorClassIdentifier: + _componentIndexCache: 255 + _addedNetworkObject: {fileID: 1773710978803455870} + _networkObjectCache: {fileID: 0} --- !u!1 &8648817992091836969 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Content/WorldObjects/Items/Functional/Materials/SteelSheet.prefab b/Assets/Content/WorldObjects/Items/Functional/Materials/SteelSheet.prefab index fbaf476d13..cecab24ac2 100644 --- a/Assets/Content/WorldObjects/Items/Functional/Materials/SteelSheet.prefab +++ b/Assets/Content/WorldObjects/Items/Functional/Materials/SteelSheet.prefab @@ -208,7 +208,7 @@ GameObject: - component: {fileID: 1773710978803455870} - component: {fileID: 5296084984690686628} - component: {fileID: 1034747657592807112} - - component: {fileID: -6912970792608638436} + - component: {fileID: 326915721417618478} m_Layer: 10 m_Name: SteelSheet m_TagString: Untagged @@ -365,7 +365,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: e00534faac6488c47893490f2bf4c5a2, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!114 &-6912970792608638436 +--- !u!114 &326915721417618478 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -374,10 +374,9 @@ MonoBehaviour: m_GameObject: {fileID: 7125681683583715523} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 38640bf88ae0c29409092a258bd36878, type: 3} + m_Script: {fileID: 11500000, guid: 49d37ab5b82ded9419a6e3ab3d05af02, type: 3} m_Name: m_EditorClassIdentifier: - key: {fileID: 11400000, guid: d815fb2be2a317a458cac4112cceb75b, type: 2} --- !u!1 &7393894785072713980 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Content/WorldObjects/Items/Functional/Parts/PowerCells/PowerCellAdmin.prefab b/Assets/Content/WorldObjects/Items/Functional/Parts/PowerCells/PowerCellAdmin.prefab index ffe36ede6a..3cd1709917 100644 --- a/Assets/Content/WorldObjects/Items/Functional/Parts/PowerCells/PowerCellAdmin.prefab +++ b/Assets/Content/WorldObjects/Items/Functional/Parts/PowerCells/PowerCellAdmin.prefab @@ -15,6 +15,10 @@ PrefabInstance: propertyPath: key value: objectReference: {fileID: 11400000, guid: 4ba80a8b1184cff428cc3d8870beba53, type: 2} + - target: {fileID: 1602098408367427586, guid: de67200a4c96d444f800399a033ddfef, type: 3} + propertyPath: k__BackingField + value: 36 + objectReference: {fileID: 0} - target: {fileID: 1602098408367427586, guid: de67200a4c96d444f800399a033ddfef, type: 3} propertyPath: k__BackingField value: 3271144838352598659 diff --git a/Assets/Content/WorldObjects/Items/Functional/Storage/Objects/Medkits/Medkit.prefab b/Assets/Content/WorldObjects/Items/Functional/Storage/Objects/Medkits/Medkit.prefab index 1b0f8b8c72..a8d2092da1 100644 --- a/Assets/Content/WorldObjects/Items/Functional/Storage/Objects/Medkits/Medkit.prefab +++ b/Assets/Content/WorldObjects/Items/Functional/Storage/Objects/Medkits/Medkit.prefab @@ -99,7 +99,7 @@ MonoBehaviour: _initializeOrder: 0 _defaultDespawnType: 0 NetworkObserver: {fileID: 0} - k__BackingField: 65535 + k__BackingField: 119 k__BackingField: 0 _scenePathHash: 0 k__BackingField: 0 @@ -492,7 +492,7 @@ MonoBehaviour: _initializeOrder: 0 _defaultDespawnType: 0 NetworkObserver: {fileID: 0} - k__BackingField: 119 + k__BackingField: 94 k__BackingField: 0 _scenePathHash: 0 k__BackingField: 0 diff --git a/Assets/Content/WorldObjects/Items/Functional/Storage/Substances/Mug.prefab b/Assets/Content/WorldObjects/Items/Functional/Storage/Substances/Mug.prefab index 57c4a63f51..263a6a56ce 100644 --- a/Assets/Content/WorldObjects/Items/Functional/Storage/Substances/Mug.prefab +++ b/Assets/Content/WorldObjects/Items/Functional/Storage/Substances/Mug.prefab @@ -132,7 +132,7 @@ GameObject: - component: {fileID: 3483542684610536844} - component: {fileID: 3278785340214204199} - component: {fileID: 3379094397588441500} - - component: {fileID: -8183170979231413541} + - component: {fileID: 8686321972206820476} m_Layer: 10 m_Name: Mug m_TagString: Untagged @@ -418,7 +418,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: e00534faac6488c47893490f2bf4c5a2, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!114 &-8183170979231413541 +--- !u!114 &8686321972206820476 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -427,10 +427,12 @@ MonoBehaviour: m_GameObject: {fileID: 5261116577612792016} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 38640bf88ae0c29409092a258bd36878, type: 3} + m_Script: {fileID: 11500000, guid: 49d37ab5b82ded9419a6e3ab3d05af02, type: 3} m_Name: m_EditorClassIdentifier: - key: {fileID: 11400000, guid: 4588fbfb8a1efd94e918a64186805668, type: 2} + _componentIndexCache: 255 + _addedNetworkObject: {fileID: 7958861831329766982} + _networkObjectCache: {fileID: 0} --- !u!1 &6067700979317892856 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Content/WorldObjects/Items/Functional/Tools/Engineering/Crowbar.prefab b/Assets/Content/WorldObjects/Items/Functional/Tools/Engineering/Crowbar.prefab index 9ac50b8ec3..c29be9003e 100644 --- a/Assets/Content/WorldObjects/Items/Functional/Tools/Engineering/Crowbar.prefab +++ b/Assets/Content/WorldObjects/Items/Functional/Tools/Engineering/Crowbar.prefab @@ -18,6 +18,7 @@ GameObject: - component: {fileID: -368119461391624815} - component: {fileID: 8720207852131239820} - component: {fileID: -2383566575337408285} + - component: {fileID: 4853142667098648343} m_Layer: 10 m_Name: Crowbar m_TagString: Untagged @@ -188,14 +189,14 @@ MonoBehaviour: k__BackingField: [] SerializedTransformProperties: Position: {x: 0, y: 0, z: 0} - Rotation: {x: 0, y: 0, z: 0, w: 0} - LocalScale: {x: 0, y: 0, z: 0} + Rotation: {x: 0, y: 0, z: 0, w: 1} + LocalScale: {x: 1, y: 1, z: 1} _isNetworked: 1 _isGlobal: 0 _initializeOrder: 0 _defaultDespawnType: 0 NetworkObserver: {fileID: 0} - k__BackingField: 164 + k__BackingField: 191 k__BackingField: 0 _scenePathHash: 0 k__BackingField: 0 @@ -248,6 +249,19 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: key: {fileID: 11400000, guid: dbead8b9456722f4eb3d0a7be247e5c6, type: 2} +--- !u!114 &4853142667098648343 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1888703706215615217} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1dd866b0631d05441982a4824740ff8d, type: 3} + m_Name: + m_EditorClassIdentifier: + type: 4 --- !u!1 &2468349444349537438 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Content/WorldObjects/Items/Functional/Tools/Engineering/ScrewdriverBlue.prefab b/Assets/Content/WorldObjects/Items/Functional/Tools/Engineering/ScrewdriverBlue.prefab index 84a81d78e5..57e3fa307c 100644 --- a/Assets/Content/WorldObjects/Items/Functional/Tools/Engineering/ScrewdriverBlue.prefab +++ b/Assets/Content/WorldObjects/Items/Functional/Tools/Engineering/ScrewdriverBlue.prefab @@ -48,7 +48,7 @@ GameObject: - component: {fileID: 1602098408367427586} - component: {fileID: 6800495836141411361} - component: {fileID: 8006545930481202674} - - component: {fileID: 2132217192414121469} + - component: {fileID: 4170937876849552939} m_Layer: 10 m_Name: ScrewdriverBlue m_TagString: Untagged @@ -218,14 +218,14 @@ MonoBehaviour: k__BackingField: [] SerializedTransformProperties: Position: {x: 0, y: 0, z: 0} - Rotation: {x: 0, y: 0, z: 0, w: 0} - LocalScale: {x: 0, y: 0, z: 0} + Rotation: {x: 0, y: 0, z: 0, w: 1} + LocalScale: {x: 1, y: 1, z: 1} _isNetworked: 1 _isGlobal: 0 _initializeOrder: 0 _defaultDespawnType: 0 NetworkObserver: {fileID: 0} - k__BackingField: 39 + k__BackingField: 42 k__BackingField: 0 _scenePathHash: 0 k__BackingField: 0 @@ -265,7 +265,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: e00534faac6488c47893490f2bf4c5a2, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!114 &2132217192414121469 +--- !u!114 &4170937876849552939 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -274,7 +274,7 @@ MonoBehaviour: m_GameObject: {fileID: 2402587210622244651} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 38640bf88ae0c29409092a258bd36878, type: 3} + m_Script: {fileID: 11500000, guid: 1dd866b0631d05441982a4824740ff8d, type: 3} m_Name: m_EditorClassIdentifier: - key: {fileID: 11400000, guid: 756674e62055a5e42aaa5c7cf5bafb26, type: 2} + type: 0 diff --git a/Assets/Content/WorldObjects/Items/Functional/Tools/Engineering/Welder.prefab b/Assets/Content/WorldObjects/Items/Functional/Tools/Engineering/Welder.prefab index 2bdcbb1ee3..b9923e27dc 100644 --- a/Assets/Content/WorldObjects/Items/Functional/Tools/Engineering/Welder.prefab +++ b/Assets/Content/WorldObjects/Items/Functional/Tools/Engineering/Welder.prefab @@ -49,6 +49,7 @@ GameObject: - component: {fileID: 5289822754746829837} - component: {fileID: 926079960710381547} - component: {fileID: 1357399863125752432} + - component: {fileID: 5301111114796155391} m_Layer: 10 m_Name: Welder m_TagString: Untagged @@ -212,7 +213,7 @@ MonoBehaviour: _initializeOrder: 0 _defaultDespawnType: 0 NetworkObserver: {fileID: 0} - k__BackingField: 51 + k__BackingField: 145 k__BackingField: 0 _scenePathHash: 0 k__BackingField: 0 @@ -279,3 +280,16 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: key: {fileID: 11400000, guid: 7aa5d3607b524d1448e4c5c0356c6c19, type: 2} +--- !u!114 &5301111114796155391 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7393721560307922778} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1dd866b0631d05441982a4824740ff8d, type: 3} + m_Name: + m_EditorClassIdentifier: + type: 5 diff --git a/Assets/Content/WorldObjects/Items/Functional/Tools/Engineering/Wirecutters.prefab b/Assets/Content/WorldObjects/Items/Functional/Tools/Engineering/Wirecutters.prefab index 3983e6682e..b6351a9e03 100644 --- a/Assets/Content/WorldObjects/Items/Functional/Tools/Engineering/Wirecutters.prefab +++ b/Assets/Content/WorldObjects/Items/Functional/Tools/Engineering/Wirecutters.prefab @@ -218,14 +218,14 @@ MonoBehaviour: k__BackingField: [] SerializedTransformProperties: Position: {x: 0, y: 0, z: 0} - Rotation: {x: 0, y: 0, z: 0, w: 0} - LocalScale: {x: 0, y: 0, z: 0} + Rotation: {x: 0, y: 0, z: 0, w: 1} + LocalScale: {x: 1, y: 1, z: 1} _isNetworked: 1 _isGlobal: 0 _initializeOrder: 0 _defaultDespawnType: 0 NetworkObserver: {fileID: 0} - k__BackingField: 140 + k__BackingField: 161 k__BackingField: 0 _scenePathHash: 0 k__BackingField: 0 diff --git a/Assets/Content/WorldObjects/Items/Functional/Tools/Engineering/Wrench.prefab b/Assets/Content/WorldObjects/Items/Functional/Tools/Engineering/Wrench.prefab index ed371420aa..773bf95b95 100644 --- a/Assets/Content/WorldObjects/Items/Functional/Tools/Engineering/Wrench.prefab +++ b/Assets/Content/WorldObjects/Items/Functional/Tools/Engineering/Wrench.prefab @@ -48,7 +48,7 @@ GameObject: - component: {fileID: 4052990814619214022} - component: {fileID: 8540712827701727508} - component: {fileID: 246485557779806861} - - component: {fileID: 7697068670962333654} + - component: {fileID: 2543825028282008237} m_Layer: 10 m_Name: Wrench m_TagString: Untagged @@ -218,14 +218,14 @@ MonoBehaviour: k__BackingField: [] SerializedTransformProperties: Position: {x: 0, y: 0, z: 0} - Rotation: {x: 0, y: 0, z: 0, w: 0} - LocalScale: {x: 0, y: 0, z: 0} + Rotation: {x: 0, y: 0, z: 0, w: 1} + LocalScale: {x: 1, y: 1, z: 1} _isNetworked: 1 _isGlobal: 0 _initializeOrder: 0 _defaultDespawnType: 0 NetworkObserver: {fileID: 0} - k__BackingField: 141 + k__BackingField: 164 k__BackingField: 0 _scenePathHash: 0 k__BackingField: 0 @@ -265,7 +265,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: e00534faac6488c47893490f2bf4c5a2, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!114 &7697068670962333654 +--- !u!114 &2543825028282008237 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -274,7 +274,7 @@ MonoBehaviour: m_GameObject: {fileID: 3792017003477948967} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 38640bf88ae0c29409092a258bd36878, type: 3} + m_Script: {fileID: 11500000, guid: 1dd866b0631d05441982a4824740ff8d, type: 3} m_Name: m_EditorClassIdentifier: - key: {fileID: 11400000, guid: ecf4a4dd895f72a4ba1b09c4e5781e1b, type: 2} + type: 1 diff --git a/Assets/Content/WorldObjects/Items/Functional/Tools/Kitchen/KitchenKnife.prefab b/Assets/Content/WorldObjects/Items/Functional/Tools/Kitchen/KitchenKnife.prefab index fc650d4046..5cb1414788 100644 --- a/Assets/Content/WorldObjects/Items/Functional/Tools/Kitchen/KitchenKnife.prefab +++ b/Assets/Content/WorldObjects/Items/Functional/Tools/Kitchen/KitchenKnife.prefab @@ -47,9 +47,9 @@ GameObject: - component: {fileID: 1363585423008195204} - component: {fileID: 261983550380735922} - component: {fileID: 6377164133976095912} - - component: {fileID: 4940994118234552533} - component: {fileID: 5464842264619517571} - component: {fileID: 2986267657943188832} + - component: {fileID: 4004628490018734234} m_Layer: 10 m_Name: KitchenKnife m_TagString: Untagged @@ -254,7 +254,7 @@ MonoBehaviour: AttachmentPoint: {fileID: 8869951128713715569} AttachmentPointAlt: {fileID: 8869951128713715569} _container: {fileID: 0} ---- !u!114 &4940994118234552533 +--- !u!114 &5464842264619517571 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -263,10 +263,10 @@ MonoBehaviour: m_GameObject: {fileID: 3794527162878356835} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f6059877305a7fb48a28d8ef0e6b92b9, type: 3} + m_Script: {fileID: 11500000, guid: e00534faac6488c47893490f2bf4c5a2, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!114 &5464842264619517571 +--- !u!114 &2986267657943188832 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -275,10 +275,11 @@ MonoBehaviour: m_GameObject: {fileID: 3794527162878356835} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: e00534faac6488c47893490f2bf4c5a2, type: 3} + m_Script: {fileID: 11500000, guid: 38640bf88ae0c29409092a258bd36878, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!114 &2986267657943188832 + key: {fileID: 11400000, guid: 8a5c0f9e0f2b82648852272822078abc, type: 2} +--- !u!114 &4004628490018734234 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -287,7 +288,7 @@ MonoBehaviour: m_GameObject: {fileID: 3794527162878356835} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 38640bf88ae0c29409092a258bd36878, type: 3} + m_Script: {fileID: 11500000, guid: 1dd866b0631d05441982a4824740ff8d, type: 3} m_Name: m_EditorClassIdentifier: - key: {fileID: 11400000, guid: 8a5c0f9e0f2b82648852272822078abc, type: 2} + type: 2 diff --git a/Assets/Content/WorldObjects/Items/Functional/Tools/Medical/HealthScanner.prefab b/Assets/Content/WorldObjects/Items/Functional/Tools/Medical/HealthScanner.prefab index e6d72acef5..8b115e91e5 100644 --- a/Assets/Content/WorldObjects/Items/Functional/Tools/Medical/HealthScanner.prefab +++ b/Assets/Content/WorldObjects/Items/Functional/Tools/Medical/HealthScanner.prefab @@ -47,7 +47,6 @@ GameObject: - component: {fileID: 1363585423008195204} - component: {fileID: 261983550380735922} - component: {fileID: 6377164133976095912} - - component: {fileID: 4940994118234552533} - component: {fileID: 5464842264619517571} - component: {fileID: 2986267657943188832} m_Layer: 10 @@ -228,7 +227,7 @@ MonoBehaviour: _initializeOrder: 0 _defaultDespawnType: 0 NetworkObserver: {fileID: 0} - k__BackingField: 6 + k__BackingField: 113 k__BackingField: 0 _scenePathHash: 0 k__BackingField: 0 @@ -256,18 +255,6 @@ MonoBehaviour: AttachmentPoint: {fileID: 8869951128713715569} AttachmentPointAlt: {fileID: 7904818470334036375} _container: {fileID: 0} ---- !u!114 &4940994118234552533 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3794527162878356835} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f6059877305a7fb48a28d8ef0e6b92b9, type: 3} - m_Name: - m_EditorClassIdentifier: --- !u!114 &5464842264619517571 MonoBehaviour: m_ObjectHideFlags: 0 diff --git a/Assets/Content/WorldObjects/Structures/WallMounts/Lights/LightTubeFixture.prefab b/Assets/Content/WorldObjects/Structures/WallMounts/Lights/LightTubeFixture.prefab index 70ed5d3bd8..410d35d096 100644 --- a/Assets/Content/WorldObjects/Structures/WallMounts/Lights/LightTubeFixture.prefab +++ b/Assets/Content/WorldObjects/Structures/WallMounts/Lights/LightTubeFixture.prefab @@ -104,9 +104,6 @@ GameObject: m_Component: - component: {fileID: 5737010110918057389} - component: {fileID: -7828078595381397262} - - component: {fileID: 7100984474705242033} - - component: {fileID: 2988001657466237878} - - component: {fileID: -4164530281317530928} m_Layer: 0 m_Name: LightTubeFixture m_TagString: Untagged @@ -147,7 +144,8 @@ MonoBehaviour: k__BackingField: 0 k__BackingField: {fileID: 0} _networkBehaviours: - - {fileID: 2988001657466237878} + - {fileID: 0} + - {fileID: 0} k__BackingField: {fileID: 0} k__BackingField: [] SerializedTransformProperties: @@ -159,57 +157,11 @@ MonoBehaviour: _initializeOrder: 0 _defaultDespawnType: 0 NetworkObserver: {fileID: 0} - k__BackingField: 106 + k__BackingField: 125 k__BackingField: 0 _scenePathHash: 0 k__BackingField: 0 k__BackingField: 10677383693949395304 ---- !u!114 &7100984474705242033 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4866668043303595546} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b693691ec1592874896bee261d991d69, type: 3} - m_Name: - m_EditorClassIdentifier: - _consumer: {fileID: 2988001657466237878} - _light: {fileID: 2502875599337934467} ---- !u!114 &2988001657466237878 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4866668043303595546} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b5dc697195ff36649947ce641b391e16, type: 3} - m_Name: - m_EditorClassIdentifier: - _componentIndexCache: 0 - _addedNetworkObject: {fileID: -7828078595381397262} - _networkObjectCache: {fileID: -7828078595381397262} - _powerConsumption: 3 - _powerStatus: 0 ---- !u!114 &-4164530281317530928 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4866668043303595546} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 1bbc87ddd49b01f4098910ffdf858004, type: 3} - m_Name: - m_EditorClassIdentifier: - _componentIndexCache: 255 - _addedNetworkObject: {fileID: -7828078595381397262} - _networkObjectCache: {fileID: 0} --- !u!1 &6499595157872319857 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Content/WorldObjects/Structures/Walls/SteelGirder.prefab b/Assets/Content/WorldObjects/Structures/Walls/SteelGirder.prefab index 17e7b3a678..bcf53beffd 100644 --- a/Assets/Content/WorldObjects/Structures/Walls/SteelGirder.prefab +++ b/Assets/Content/WorldObjects/Structures/Walls/SteelGirder.prefab @@ -1,6 +1,6 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!1 &3591147544166670882 +--- !u!1 &1778875250064888452 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -8,54 +8,159 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 4751264288399655126} - - component: {fileID: 5423264426121296638} - - component: {fileID: 6696866361892651655} - - component: {fileID: 7033236083530598125} - - component: {fileID: -2900075557854325373} - - component: {fileID: 8380654261086022907} - - component: {fileID: 8063692154441053622} - - component: {fileID: 407018700291477047} - - component: {fileID: -526407175175504045} + - component: {fileID: 5583705062629826092} + - component: {fileID: 5943896225279475942} + - component: {fileID: 6249453572088940716} + - component: {fileID: 1860443116909804100} m_Layer: 0 - m_Name: SteelGirder + m_Name: HighReinforcedWallSheets m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &4751264288399655126 +--- !u!4 &5583705062629826092 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3591147544166670882} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_GameObject: {fileID: 1778875250064888452} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 + m_Father: {fileID: 4751264288399655126} + m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &5423264426121296638 +--- !u!33 &5943896225279475942 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3591147544166670882} - m_Mesh: {fileID: -7104584066017280917, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} ---- !u!23 &6696866361892651655 + m_GameObject: {fileID: 1778875250064888452} + m_Mesh: {fileID: -4807675958909313014, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} +--- !u!23 &6249453572088940716 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 3591147544166670882} + m_GameObject: {fileID: 1778875250064888452} + m_Enabled: 0 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 695c4de41b9578049a93f19b1eef7213, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!114 &1860443116909804100 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1778875250064888452} m_Enabled: 1 - m_CastShadows: 0 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ef4340642b9b436498fe733f9329ac87, type: 3} + m_Name: + m_EditorClassIdentifier: + _componentIndexCache: 8 + _addedNetworkObject: {fileID: -2900075557854325373} + _networkObjectCache: {fileID: -2900075557854325373} + _syncedConnections: 0 + advancedAdjacency: + o: {fileID: -4807675958909313014, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + u: {fileID: -3092653043562910988, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + i: {fileID: -5365386080196877289, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + lNone: {fileID: 7171430089567803740, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + lSingle: {fileID: 7072539978691711771, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + tNone: {fileID: -7856168885999463614, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + tSingleRight: {fileID: 942421976840887950, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + tSingleLeft: {fileID: -6020854326589281651, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + tDouble: {fileID: -2178592156924542003, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + xNone: {fileID: 972770926501970986, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + xSingle: {fileID: 5115769820913705497, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + xSide: {fileID: 462860447744533305, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + xOpposite: {fileID: -3702713797552123865, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + xTriple: {fileID: 2034209501388966703, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + xQuad: {fileID: 0} + viewObstacles: [] + opaque: 0 +--- !u!1 &1826826728141998556 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3987868743996460843} + - component: {fileID: 3475283530131085730} + - component: {fileID: 5301343381982820799} + - component: {fileID: 4203715660591708927} + m_Layer: 0 + m_Name: Supports + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3987868743996460843 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1826826728141998556} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4751264288399655126} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &3475283530131085730 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1826826728141998556} + m_Enabled: 0 + m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 m_StaticShadowCaster: 0 @@ -68,7 +173,6 @@ MeshRenderer: m_RendererPriority: 0 m_Materials: - {fileID: 2100000, guid: 695c4de41b9578049a93f19b1eef7213, type: 2} - - {fileID: 2100000, guid: 6430227ac2f6b734f89160acf9727ee9, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -90,6 +194,212 @@ MeshRenderer: m_SortingLayer: 0 m_SortingOrder: 0 m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &5301343381982820799 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1826826728141998556} + m_Mesh: {fileID: 9221270684765382918, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} +--- !u!114 &4203715660591708927 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1826826728141998556} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ef4340642b9b436498fe733f9329ac87, type: 3} + m_Name: + m_EditorClassIdentifier: + _componentIndexCache: 10 + _addedNetworkObject: {fileID: -2900075557854325373} + _networkObjectCache: {fileID: -2900075557854325373} + _syncedConnections: 0 + advancedAdjacency: + o: {fileID: 9221270684765382918, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + u: {fileID: -3819353528407317632, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + i: {fileID: 8874700762508427067, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + lNone: {fileID: 2564436246990700957, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + lSingle: {fileID: -5056069005839027411, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + tNone: {fileID: -2034589293643899056, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + tSingleRight: {fileID: 3567178199133160551, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + tSingleLeft: {fileID: -5104513792180490233, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + tDouble: {fileID: 5476454511431954931, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + xNone: {fileID: 4371328869157967554, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + xSingle: {fileID: 1508310936584086456, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + xSide: {fileID: -7788624940575977203, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + xOpposite: {fileID: 5557379951465456397, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + xTriple: {fileID: -85756048711746854, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + xQuad: {fileID: 0} + viewObstacles: [] + opaque: 0 +--- !u!1 &1921803125721189503 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8340594377828292794} + - component: {fileID: 3751672999738152830} + - component: {fileID: 4653278720775000695} + - component: {fileID: 1799263865332353653} + m_Layer: 0 + m_Name: SteelWindowSheets + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8340594377828292794 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1921803125721189503} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4751264288399655126} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3751672999738152830 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1921803125721189503} + m_Mesh: {fileID: -7447969277381116542, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} +--- !u!23 &4653278720775000695 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1921803125721189503} + m_Enabled: 0 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 74425a37eae99c946a92da0339e05c48, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!114 &1799263865332353653 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1921803125721189503} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ef4340642b9b436498fe733f9329ac87, type: 3} + m_Name: + m_EditorClassIdentifier: + _componentIndexCache: 6 + _addedNetworkObject: {fileID: -2900075557854325373} + _networkObjectCache: {fileID: -2900075557854325373} + _syncedConnections: 0 + advancedAdjacency: + o: {fileID: -3951382794542296759, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + u: {fileID: -2967722999546156436, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + i: {fileID: 4019342946447694214, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + lNone: {fileID: -410655689648354172, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + lSingle: {fileID: -6408665055338927490, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + tNone: {fileID: 696751471941352231, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + tSingleRight: {fileID: -2656998287405798401, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + tSingleLeft: {fileID: -5175552453299537881, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + tDouble: {fileID: 8807824586233421877, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + xNone: {fileID: 1972009379150785666, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + xSingle: {fileID: -9090885929759147042, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + xSide: {fileID: 364928462164043111, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + xOpposite: {fileID: -8484540629700878795, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + xTriple: {fileID: 807176089335126203, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + xQuad: {fileID: 0} + viewObstacles: [] + opaque: 0 +--- !u!1 &3591147544166670882 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4751264288399655126} + - component: {fileID: 7033236083530598125} + - component: {fileID: -2900075557854325373} + - component: {fileID: 8063692154441053622} + - component: {fileID: 6753708217938451176} + - component: {fileID: 6528007219760414512} + - component: {fileID: 6634051451888538392} + - component: {fileID: 978290459806476930} + m_Layer: 0 + m_Name: SteelGirder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4751264288399655126 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3591147544166670882} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5048981514003665665} + - {fileID: 7162802750332589702} + - {fileID: 113050539004330203} + - {fileID: 8340594377828292794} + - {fileID: 4055654418881074801} + - {fileID: 5583705062629826092} + - {fileID: 6889212434107015646} + - {fileID: 3987868743996460843} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!65 &7033236083530598125 BoxCollider: m_ObjectHideFlags: 0 @@ -119,7 +429,17 @@ MonoBehaviour: k__BackingField: 0 k__BackingField: {fileID: 0} _networkBehaviours: - - {fileID: 8380654261086022907} + - {fileID: 6753708217938451176} + - {fileID: 6528007219760414512} + - {fileID: 6634051451888538392} + - {fileID: 25706523928023003} + - {fileID: 9077835508851316360} + - {fileID: 3937552610322827250} + - {fileID: 1799263865332353653} + - {fileID: 6853036514315689645} + - {fileID: 1860443116909804100} + - {fileID: 7547937914514463291} + - {fileID: 4203715660591708927} k__BackingField: {fileID: 0} k__BackingField: [] SerializedTransformProperties: @@ -131,12 +451,12 @@ MonoBehaviour: _initializeOrder: 0 _defaultDespawnType: 0 NetworkObserver: {fileID: 0} - k__BackingField: 106 + k__BackingField: 110 k__BackingField: 0 _scenePathHash: 0 k__BackingField: 0 k__BackingField: 10701242530576259807 ---- !u!114 &8380654261086022907 +--- !u!114 &8063692154441053622 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -145,32 +465,12 @@ MonoBehaviour: m_GameObject: {fileID: 3591147544166670882} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: ef4340642b9b436498fe733f9329ac87, type: 3} + m_Script: {fileID: 11500000, guid: 92b450066fe390440b608959b8cb5e28, type: 3} m_Name: m_EditorClassIdentifier: - _componentIndexCache: 255 - _addedNetworkObject: {fileID: -2900075557854325373} - _networkObjectCache: {fileID: -2900075557854325373} - _syncedConnections: 0 - advancedAdjacency: - o: {fileID: -3462111060628849216, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} - u: {fileID: 2256514625206161274, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} - i: {fileID: -8265987230191886290, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} - lNone: {fileID: 8776228716606939545, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} - lSingle: {fileID: -11870246166909645, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} - tNone: {fileID: 1488574439620358511, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} - tSingleRight: {fileID: -2127744595439564799, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} - tSingleLeft: {fileID: -3200185679279159369, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} - tDouble: {fileID: -8361241951420798070, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} - xNone: {fileID: -5126041165234292758, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} - xSingle: {fileID: -3982188834590592042, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} - xSide: {fileID: -112919310873740191, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} - xOpposite: {fileID: 6225367577992342243, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} - xTriple: {fileID: -4491423919934737300, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} - xQuad: {fileID: 4011312947144960823, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} - viewObstacles: [] - opaque: 0 ---- !u!114 &8063692154441053622 + _defaultDirection: 0 + _allowedDirections: 00000000 +--- !u!114 &6753708217938451176 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -179,12 +479,30 @@ MonoBehaviour: m_GameObject: {fileID: 3591147544166670882} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 92b450066fe390440b608959b8cb5e28, type: 3} + m_Script: {fileID: 11500000, guid: ff65a9dda1ef18f4cbc16ee4d1aee066, type: 3} m_Name: m_EditorClassIdentifier: - _defaultDirection: 0 - _allowedDirections: 00000000 ---- !u!114 &407018700291477047 + _componentIndexCache: 0 + _addedNetworkObject: {fileID: -2900075557854325373} + _networkObjectCache: {fileID: -2900075557854325373} + _asset: {fileID: 11400000, guid: bbc616cb55d58144eb50ce126cfca103, type: 2} + _tileObjectSo: {fileID: 11400000, guid: 88eff1b17847b94469de924f4bb3e2cf, type: 2} +--- !u!114 &6528007219760414512 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3591147544166670882} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 49d37ab5b82ded9419a6e3ab3d05af02, type: 3} + m_Name: + m_EditorClassIdentifier: + _componentIndexCache: 1 + _addedNetworkObject: {fileID: -2900075557854325373} + _networkObjectCache: {fileID: -2900075557854325373} +--- !u!114 &6634051451888538392 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -193,10 +511,23 @@ MonoBehaviour: m_GameObject: {fileID: 3591147544166670882} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: e00534faac6488c47893490f2bf4c5a2, type: 3} + m_Script: {fileID: 11500000, guid: 3586a2042e5c55d4ead9bca2972c182c, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!114 &-526407175175504045 + _componentIndexCache: 2 + _addedNetworkObject: {fileID: -2900075557854325373} + _networkObjectCache: {fileID: -2900075557854325373} + _wallSheetMesh: {fileID: 7525611301124887248} + _windowSheetMesh: {fileID: 4653278720775000695} + _lowerReinforcedSheetMesh: {fileID: 6440590755580855208} + _higherReinforcedWallSheetMesh: {fileID: 6249453572088940716} + _higherReinforcedWindowSheetMesh: {fileID: 152874455885084365} + _supportMesh: {fileID: 3475283530131085730} + _sheetConnector: {fileID: 3937552610322827250} + _struts: {fileID: 7379630380104514676} + _palette: {fileID: 2100000, guid: 695c4de41b9578049a93f19b1eef7213, type: 2} + _glass: {fileID: 2100000, guid: 74425a37eae99c946a92da0339e05c48, type: 2} +--- !u!114 &978290459806476930 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -205,7 +536,595 @@ MonoBehaviour: m_GameObject: {fileID: 3591147544166670882} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 38640bf88ae0c29409092a258bd36878, type: 3} + m_Script: {fileID: 11500000, guid: be678463edb44cf4186d58912bf424d4, type: 3} m_Name: m_EditorClassIdentifier: - key: {fileID: 11400000, guid: 8241dc628310e0e4387a81a6069da169, type: 2} + _connectors: + - {fileID: 8643350734135927136} + - {fileID: 8564450842066674741} + - {fileID: 8309238590450996122} + - {fileID: 1921803125721189503} + - {fileID: 3784341899280207488} + - {fileID: 1778875250064888452} + - {fileID: 8757138310547956779} + - {fileID: 1826826728141998556} +--- !u!1 &3784341899280207488 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4055654418881074801} + - component: {fileID: 6360299092974000789} + - component: {fileID: 6440590755580855208} + - component: {fileID: 6853036514315689645} + m_Layer: 0 + m_Name: LowReinforcedSheets + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4055654418881074801 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784341899280207488} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4751264288399655126} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6360299092974000789 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784341899280207488} + m_Mesh: {fileID: 1334892272457558376, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} +--- !u!23 &6440590755580855208 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784341899280207488} + m_Enabled: 0 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 695c4de41b9578049a93f19b1eef7213, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!114 &6853036514315689645 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3784341899280207488} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bc6615260753fbd48af09343d5d55332, type: 3} + m_Name: + m_EditorClassIdentifier: + _componentIndexCache: 7 + _addedNetworkObject: {fileID: -2900075557854325373} + _networkObjectCache: {fileID: -2900075557854325373} + _syncedConnections: 0 + simpleAdjacency: + o: {fileID: 1334892272457558376, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + u: {fileID: 3212019776650574660, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + i: {fileID: 5684914230420820493, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + l: {fileID: 7170323549275931917, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + t: {fileID: -2594403483983642012, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + x: {fileID: 0} +--- !u!1 &8309238590450996122 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 113050539004330203} + - component: {fileID: 6216599344918984519} + - component: {fileID: 7525611301124887248} + - component: {fileID: 3937552610322827250} + m_Layer: 0 + m_Name: SteelWallSheets + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &113050539004330203 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8309238590450996122} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4751264288399655126} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6216599344918984519 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8309238590450996122} + m_Mesh: {fileID: -7447969277381116542, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} +--- !u!23 &7525611301124887248 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8309238590450996122} + m_Enabled: 0 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 695c4de41b9578049a93f19b1eef7213, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!114 &3937552610322827250 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8309238590450996122} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ef4340642b9b436498fe733f9329ac87, type: 3} + m_Name: + m_EditorClassIdentifier: + _componentIndexCache: 5 + _addedNetworkObject: {fileID: -2900075557854325373} + _networkObjectCache: {fileID: -2900075557854325373} + _syncedConnections: 0 + advancedAdjacency: + o: {fileID: -7447969277381116542, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + u: {fileID: 2927582871327710670, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + i: {fileID: -5295625287105711870, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + lNone: {fileID: -2629476798975129885, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + lSingle: {fileID: -6972861976106799773, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + tNone: {fileID: 553534836715904339, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + tSingleRight: {fileID: -3339931578349097167, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + tSingleLeft: {fileID: -3304625889708720791, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + tDouble: {fileID: 474509196184421971, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + xNone: {fileID: 2437192689400603558, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + xSingle: {fileID: -4864631295801778863, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + xSide: {fileID: -8463792897596621683, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + xOpposite: {fileID: 3404332845421846940, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + xTriple: {fileID: 5181784065511792769, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + xQuad: {fileID: -8022113433853620617, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + viewObstacles: [] + opaque: 0 +--- !u!1 &8564450842066674741 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7162802750332589702} + - component: {fileID: 8323283471560003084} + - component: {fileID: 7379630380104514676} + - component: {fileID: 9077835508851316360} + m_Layer: 0 + m_Name: Struts + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7162802750332589702 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8564450842066674741} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4751264288399655126} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8323283471560003084 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8564450842066674741} + m_Mesh: {fileID: -4009600780012634144, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} +--- !u!23 &7379630380104514676 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8564450842066674741} + m_Enabled: 0 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 695c4de41b9578049a93f19b1eef7213, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!114 &9077835508851316360 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8564450842066674741} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ef4340642b9b436498fe733f9329ac87, type: 3} + m_Name: + m_EditorClassIdentifier: + _componentIndexCache: 4 + _addedNetworkObject: {fileID: -2900075557854325373} + _networkObjectCache: {fileID: -2900075557854325373} + _syncedConnections: 0 + advancedAdjacency: + o: {fileID: -4009600780012634144, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + u: {fileID: -7244948311394012964, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + i: {fileID: -2262054892749220209, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + lNone: {fileID: -6194336195100547798, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + lSingle: {fileID: 8741358565641992044, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + tNone: {fileID: 7636395614409554858, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + tSingleRight: {fileID: -8717509325460560256, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + tSingleLeft: {fileID: 8930413256164002781, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + tDouble: {fileID: 7965820530930014437, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + xNone: {fileID: 7282029725642659041, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + xSingle: {fileID: -9072994765186849552, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + xSide: {fileID: 3996970184885939136, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + xOpposite: {fileID: 7348861025270983472, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + xTriple: {fileID: 4594306566492346638, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + xQuad: {fileID: 0} + viewObstacles: [] + opaque: 0 +--- !u!1 &8643350734135927136 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5048981514003665665} + - component: {fileID: 25706523928023003} + - component: {fileID: 5489101372160258925} + - component: {fileID: 7046949828551381365} + m_Layer: 0 + m_Name: GirderShape + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5048981514003665665 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8643350734135927136} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4751264288399655126} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &25706523928023003 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8643350734135927136} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ef4340642b9b436498fe733f9329ac87, type: 3} + m_Name: + m_EditorClassIdentifier: + _componentIndexCache: 3 + _addedNetworkObject: {fileID: -2900075557854325373} + _networkObjectCache: {fileID: -2900075557854325373} + _syncedConnections: 0 + advancedAdjacency: + o: {fileID: -3462111060628849216, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + u: {fileID: 2256514625206161274, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + i: {fileID: -8265987230191886290, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + lNone: {fileID: 8776228716606939545, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + lSingle: {fileID: -11870246166909645, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + tNone: {fileID: 1488574439620358511, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + tSingleRight: {fileID: -2127744595439564799, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + tSingleLeft: {fileID: -3200185679279159369, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + tDouble: {fileID: -8361241951420798070, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + xNone: {fileID: -5126041165234292758, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + xSingle: {fileID: -3982188834590592042, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + xSide: {fileID: -112919310873740191, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + xOpposite: {fileID: 6225367577992342243, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + xTriple: {fileID: -4491423919934737300, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + xQuad: {fileID: 4011312947144960823, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + viewObstacles: [] + opaque: 0 +--- !u!33 &5489101372160258925 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8643350734135927136} + m_Mesh: {fileID: -7104584066017280917, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} +--- !u!23 &7046949828551381365 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8643350734135927136} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 695c4de41b9578049a93f19b1eef7213, type: 2} + - {fileID: 2100000, guid: 6430227ac2f6b734f89160acf9727ee9, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &8757138310547956779 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6889212434107015646} + - component: {fileID: 626785595040033452} + - component: {fileID: 152874455885084365} + - component: {fileID: 7547937914514463291} + m_Layer: 0 + m_Name: HighReinforcedWindowSheets + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6889212434107015646 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8757138310547956779} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4751264288399655126} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &626785595040033452 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8757138310547956779} + m_Mesh: {fileID: -4807675958909313014, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} +--- !u!23 &152874455885084365 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8757138310547956779} + m_Enabled: 0 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 695c4de41b9578049a93f19b1eef7213, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!114 &7547937914514463291 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8757138310547956779} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ef4340642b9b436498fe733f9329ac87, type: 3} + m_Name: + m_EditorClassIdentifier: + _componentIndexCache: 9 + _addedNetworkObject: {fileID: -2900075557854325373} + _networkObjectCache: {fileID: -2900075557854325373} + _syncedConnections: 0 + advancedAdjacency: + o: {fileID: 4799387761483938681, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + u: {fileID: -1937107816405111267, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + i: {fileID: -2831230630847003357, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + lNone: {fileID: 6694128179753996231, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + lSingle: {fileID: 6056442156547518876, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + tNone: {fileID: -7641421546758597039, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + tSingleRight: {fileID: 323960456727540058, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + tSingleLeft: {fileID: -5147401229216146664, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + tDouble: {fileID: -8530180916420885767, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + xNone: {fileID: 897448448587529243, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + xSingle: {fileID: 297827083849361273, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + xSide: {fileID: -9011028952389299979, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + xOpposite: {fileID: 5633340648951556031, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + xTriple: {fileID: 5469485303214149276, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} + xQuad: {fileID: 0} + viewObstacles: [] + opaque: 0 diff --git a/Assets/Content/WorldObjects/Structures/Walls/SteelGirderUnbolted.prefab b/Assets/Content/WorldObjects/Structures/Walls/SteelGirderUnbolted.prefab new file mode 100644 index 0000000000..13c75d4bfe --- /dev/null +++ b/Assets/Content/WorldObjects/Structures/Walls/SteelGirderUnbolted.prefab @@ -0,0 +1,198 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3591147544166670882 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4751264288399655126} + - component: {fileID: 5423264426121296638} + - component: {fileID: 6696866361892651655} + - component: {fileID: 7033236083530598125} + - component: {fileID: -2900075557854325373} + - component: {fileID: 8063692154441053622} + - component: {fileID: 6528007219760414512} + - component: {fileID: 9093674146940966575} + - component: {fileID: 846137012520601876} + m_Layer: 0 + m_Name: SteelGirderUnbolted + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4751264288399655126 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3591147544166670882} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5423264426121296638 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3591147544166670882} + m_Mesh: {fileID: -3462111060628849216, guid: 9c0b392ffb24ca248a002fe36b08bae8, type: 3} +--- !u!23 &6696866361892651655 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3591147544166670882} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 695c4de41b9578049a93f19b1eef7213, type: 2} + - {fileID: 2100000, guid: 6430227ac2f6b734f89160acf9727ee9, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!65 &7033236083530598125 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3591147544166670882} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1.0000002, y: 2.5880113, z: 1} + m_Center: {x: 0, y: 1.2940056, z: 0} +--- !u!114 &-2900075557854325373 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3591147544166670882} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 26b716c41e9b56b4baafaf13a523ba2e, type: 3} + m_Name: + m_EditorClassIdentifier: + k__BackingField: 0 + k__BackingField: 0 + k__BackingField: {fileID: 0} + _networkBehaviours: + - {fileID: 6528007219760414512} + - {fileID: 9093674146940966575} + k__BackingField: {fileID: 0} + k__BackingField: [] + SerializedTransformProperties: + Position: {x: 0, y: 0, z: 0} + Rotation: {x: 0, y: 0, z: 0, w: 0} + LocalScale: {x: 0, y: 0, z: 0} + _isNetworked: 1 + _isGlobal: 0 + _initializeOrder: 0 + _defaultDespawnType: 0 + NetworkObserver: {fileID: 0} + k__BackingField: 210 + k__BackingField: 0 + _scenePathHash: 0 + k__BackingField: 0 + k__BackingField: 18398455700932262987 +--- !u!114 &8063692154441053622 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3591147544166670882} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 92b450066fe390440b608959b8cb5e28, type: 3} + m_Name: + m_EditorClassIdentifier: + _defaultDirection: 0 + _allowedDirections: 00000000 +--- !u!114 &6528007219760414512 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3591147544166670882} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 49d37ab5b82ded9419a6e3ab3d05af02, type: 3} + m_Name: + m_EditorClassIdentifier: + _componentIndexCache: 0 + _addedNetworkObject: {fileID: -2900075557854325373} + _networkObjectCache: {fileID: -2900075557854325373} +--- !u!114 &9093674146940966575 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3591147544166670882} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 71c1b65aaa331f84aa6eff7abc1033dc, type: 3} + m_Name: + m_EditorClassIdentifier: + _componentIndexCache: 1 + _addedNetworkObject: {fileID: -2900075557854325373} + _networkObjectCache: {fileID: -2900075557854325373} + _dragger: {fileID: 0} + _dragged: 0 +--- !u!114 &846137012520601876 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3591147544166670882} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bf0917e0aefbd9a4f8d986956ddafc17, type: 3} + m_Name: + m_EditorClassIdentifier: + _asset: {fileID: 11400000, guid: 6fbb4f54f5632024680a17fba3fdf53d, type: 2} diff --git a/Assets/Content/WorldObjects/Structures/Walls/SteelGirderUnbolted.prefab.meta b/Assets/Content/WorldObjects/Structures/Walls/SteelGirderUnbolted.prefab.meta new file mode 100644 index 0000000000..062e6f5a0c --- /dev/null +++ b/Assets/Content/WorldObjects/Structures/Walls/SteelGirderUnbolted.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5dba4171f2124fb48b0e32c0e10841e0 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Content/WorldObjects/Structures/Walls/SteelWall.prefab b/Assets/Content/WorldObjects/Structures/Walls/SteelWall.prefab index 4e3fcc1f88..cde92f0411 100644 --- a/Assets/Content/WorldObjects/Structures/Walls/SteelWall.prefab +++ b/Assets/Content/WorldObjects/Structures/Walls/SteelWall.prefab @@ -152,6 +152,7 @@ GameObject: - component: {fileID: 9201248993357086619} - component: {fileID: 6072928490511251397} - component: {fileID: -6923105539505770605} + - component: {fileID: -7978277362494375466} m_Layer: 0 m_Name: SteelWall m_TagString: Untagged @@ -259,6 +260,7 @@ MonoBehaviour: k__BackingField: {fileID: 0} _networkBehaviours: - {fileID: 3395800597640737248} + - {fileID: -7978277362494375466} k__BackingField: {fileID: 0} k__BackingField: [] SerializedTransformProperties: @@ -270,7 +272,7 @@ MonoBehaviour: _initializeOrder: 0 _defaultDespawnType: 0 NetworkObserver: {fileID: 0} - k__BackingField: 119 + k__BackingField: 120 k__BackingField: 0 _scenePathHash: 0 k__BackingField: 0 @@ -348,6 +350,23 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: key: {fileID: 11400000, guid: c8e320c604f095048a0cc4aeccc5eabb, type: 2} +--- !u!114 &-7978277362494375466 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3591147544166670882} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ff65a9dda1ef18f4cbc16ee4d1aee066, type: 3} + m_Name: + m_EditorClassIdentifier: + _componentIndexCache: 1 + _addedNetworkObject: {fileID: -2900075557854325373} + _networkObjectCache: {fileID: -2900075557854325373} + _asset: {fileID: 11400000, guid: afd2790edc5c26a48ae1e0f45ecb1f32, type: 2} + _tileObjectSo: {fileID: 11400000, guid: a0b4e2f901dd14b429586c816b29b97f, type: 2} --- !u!1 &7790124558541205835 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Content/WorldObjects/Structures/Walls/SteelWallReinforced.prefab b/Assets/Content/WorldObjects/Structures/Walls/SteelWallReinforced.prefab index aca2eea711..b65bcc548c 100644 --- a/Assets/Content/WorldObjects/Structures/Walls/SteelWallReinforced.prefab +++ b/Assets/Content/WorldObjects/Structures/Walls/SteelWallReinforced.prefab @@ -150,6 +150,7 @@ GameObject: - component: {fileID: -2900075557854325373} - component: {fileID: 3011383631706744183} - component: {fileID: 6332977986281627431} + - component: {fileID: -6351445020948675988} m_Layer: 0 m_Name: SteelWallReinforced m_TagString: Untagged @@ -268,7 +269,7 @@ MonoBehaviour: _initializeOrder: 0 _defaultDespawnType: 0 NetworkObserver: {fileID: 0} - k__BackingField: 145 + k__BackingField: 174 k__BackingField: 0 _scenePathHash: 0 k__BackingField: 0 @@ -320,7 +321,24 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: _defaultDirection: 0 - AllowedDirections: 00000000 + _allowedDirections: 00000000 +--- !u!114 &-6351445020948675988 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3591147544166670882} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ff65a9dda1ef18f4cbc16ee4d1aee066, type: 3} + m_Name: + m_EditorClassIdentifier: + _componentIndexCache: 255 + _addedNetworkObject: {fileID: -2900075557854325373} + _networkObjectCache: {fileID: 0} + _asset: {fileID: 11400000, guid: 9b16536c8b6953b459e5906389bc4cdd, type: 2} + _tileObjectSo: {fileID: 11400000, guid: 8723b9e3524165d4abbbb6e295e85330, type: 2} --- !u!1 &7790124558541205835 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Content/WorldObjects/Structures/Walls/SteelWindow.prefab b/Assets/Content/WorldObjects/Structures/Walls/SteelWindow.prefab index e20458030d..9c015612c8 100644 --- a/Assets/Content/WorldObjects/Structures/Walls/SteelWindow.prefab +++ b/Assets/Content/WorldObjects/Structures/Walls/SteelWindow.prefab @@ -17,6 +17,7 @@ GameObject: - component: {fileID: -3504974528244723279} - component: {fileID: -3146616955965142812} - component: {fileID: 5974748117383969709} + - component: {fileID: 5385272248723591395} m_Layer: 0 m_Name: SteelWindow m_TagString: Untagged @@ -121,6 +122,7 @@ MonoBehaviour: k__BackingField: {fileID: 0} _networkBehaviours: - {fileID: 1177000688717996335} + - {fileID: 5385272248723591395} k__BackingField: {fileID: 0} k__BackingField: [] SerializedTransformProperties: @@ -132,7 +134,7 @@ MonoBehaviour: _initializeOrder: 0 _defaultDespawnType: 0 NetworkObserver: {fileID: 0} - k__BackingField: 160 + k__BackingField: 190 k__BackingField: 0 _scenePathHash: 0 k__BackingField: 0 @@ -149,7 +151,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d3995769f8fecf9469d1783a30e75625, type: 3} m_Name: m_EditorClassIdentifier: - _componentIndexCache: 255 + _componentIndexCache: 0 _addedNetworkObject: {fileID: -2900075557854325373} _networkObjectCache: {fileID: -2900075557854325373} _syncedConnections: 0 @@ -210,3 +212,20 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: key: {fileID: 11400000, guid: 84e559fc6ad816f4bb3c334a3c3e946e, type: 2} +--- !u!114 &5385272248723591395 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3591147544166670882} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ff65a9dda1ef18f4cbc16ee4d1aee066, type: 3} + m_Name: + m_EditorClassIdentifier: + _componentIndexCache: 1 + _addedNetworkObject: {fileID: -2900075557854325373} + _networkObjectCache: {fileID: -2900075557854325373} + _asset: {fileID: 11400000, guid: 72ff3e5319a440c448928af8af541920, type: 2} + _tileObjectSo: {fileID: 11400000, guid: b46f02d975d975b4abe91f4bb650e04f, type: 2} diff --git a/Assets/Content/WorldObjects/Structures/Walls/SteelWindowReinforced.prefab b/Assets/Content/WorldObjects/Structures/Walls/SteelWindowReinforced.prefab index d8fffb1dcc..a2af2a63d5 100644 --- a/Assets/Content/WorldObjects/Structures/Walls/SteelWindowReinforced.prefab +++ b/Assets/Content/WorldObjects/Structures/Walls/SteelWindowReinforced.prefab @@ -15,6 +15,7 @@ GameObject: - component: {fileID: -2900075557854325373} - component: {fileID: 4137545864262984256} - component: {fileID: 4546650457145234162} + - component: {fileID: 7802882637591850443} m_Layer: 0 m_Name: SteelWindowReinforced m_TagString: Untagged @@ -130,7 +131,7 @@ MonoBehaviour: _initializeOrder: 0 _defaultDespawnType: 0 NetworkObserver: {fileID: 0} - k__BackingField: 23 + k__BackingField: 27 k__BackingField: 0 _scenePathHash: 0 k__BackingField: 0 @@ -147,7 +148,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d3995769f8fecf9469d1783a30e75625, type: 3} m_Name: m_EditorClassIdentifier: - _componentIndexCache: 255 + _componentIndexCache: 0 _addedNetworkObject: {fileID: -2900075557854325373} _networkObjectCache: {fileID: -2900075557854325373} _syncedConnections: 0 @@ -182,4 +183,21 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: _defaultDirection: 0 - AllowedDirections: 00000000 + _allowedDirections: 00000000 +--- !u!114 &7802882637591850443 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3591147544166670882} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ff65a9dda1ef18f4cbc16ee4d1aee066, type: 3} + m_Name: + m_EditorClassIdentifier: + _componentIndexCache: 255 + _addedNetworkObject: {fileID: -2900075557854325373} + _networkObjectCache: {fileID: 0} + _asset: {fileID: 11400000, guid: b841d8cacfb432a4789bbb387b08fe81, type: 2} + _tileObjectSo: {fileID: 11400000, guid: f557176874ca0bf43a2b5b975cc94e3c, type: 2} diff --git a/Assets/Content/WorldObjects/World/VFX/Construction/ConstructionParticle.prefab b/Assets/Content/WorldObjects/World/VFX/Construction/ConstructionParticle.prefab new file mode 100644 index 0000000000..60a6291729 --- /dev/null +++ b/Assets/Content/WorldObjects/World/VFX/Construction/ConstructionParticle.prefab @@ -0,0 +1,4814 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &9126258469831405173 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3722203350502261099} + - component: {fileID: -5207354537665871359} + - component: {fileID: 275228036187653316} + m_Layer: 0 + m_Name: ConstructionParticle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3722203350502261099 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9126258469831405173} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!198 &-5207354537665871359 +ParticleSystem: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9126258469831405173} + serializedVersion: 8 + lengthInSec: 1 + simulationSpeed: 1 + stopAction: 0 + cullingMode: 0 + ringBufferMode: 0 + ringBufferLoopRange: {x: 0, y: 1} + emitterVelocityMode: 1 + looping: 1 + prewarm: 0 + playOnAwake: 1 + useUnscaledTime: 0 + autoRandomSeed: 1 + startDelay: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + moveWithTransform: 0 + moveWithCustomTransform: {fileID: 0} + scalingMode: 1 + randomSeed: 0 + InitialModule: + serializedVersion: 3 + enabled: 1 + startLifetime: + serializedVersion: 2 + minMaxState: 0 + scalar: 3 + minScalar: 5 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startSpeed: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.15 + minScalar: 5 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startColor: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 0.4339623, g: 0.4148169, b: 0.3254717, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + startSize: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.8 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startSizeY: + serializedVersion: 2 + minMaxState: 0 + scalar: 33.87 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startSizeZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotationX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotationY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startRotation: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + randomizeRotationDirection: 1 + maxNumParticles: 1000 + customEmitterVelocity: {x: 0, y: 0, z: 0} + size3D: 0 + rotation3D: 0 + gravityModifier: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + ShapeModule: + serializedVersion: 6 + enabled: 1 + type: 0 + angle: 25 + length: 5 + boxThickness: {x: 0, y: 0, z: 0} + radiusThickness: 1 + donutRadius: 0.2 + m_Position: {x: 0, y: 0, z: 0} + m_Rotation: {x: 0, y: 0, z: 0} + m_Scale: {x: 1, y: 1, z: 1} + placementMode: 0 + m_MeshMaterialIndex: 0 + m_MeshNormalOffset: 0 + m_MeshSpawn: + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Mesh: {fileID: 0} + m_MeshRenderer: {fileID: 0} + m_SkinnedMeshRenderer: {fileID: 0} + m_Sprite: {fileID: 0} + m_SpriteRenderer: {fileID: 0} + m_UseMeshMaterialIndex: 0 + m_UseMeshColors: 1 + alignToDirection: 0 + m_Texture: {fileID: 0} + m_TextureClipChannel: 3 + m_TextureClipThreshold: 0 + m_TextureUVChannel: 0 + m_TextureColorAffectsParticles: 1 + m_TextureAlphaAffectsParticles: 1 + m_TextureBilinearFiltering: 0 + randomDirectionAmount: 0 + sphericalDirectionAmount: 0 + randomPositionAmount: 0 + radius: + value: 1 + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + arc: + value: 360 + mode: 0 + spread: 0 + speed: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + EmissionModule: + enabled: 1 + serializedVersion: 4 + rateOverTime: + serializedVersion: 2 + minMaxState: 0 + scalar: 200 + minScalar: 10 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + rateOverDistance: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_BurstCount: 0 + m_Bursts: [] + SizeModule: + enabled: 0 + curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + RotationModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.7853982 + minScalar: 0.7853982 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + ColorModule: + enabled: 0 + gradient: + serializedVersion: 2 + minMaxState: 1 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 0.9528302, g: 0.27416337, b: 0.27416337, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + UVModule: + serializedVersion: 2 + enabled: 0 + mode: 0 + timeMode: 0 + fps: 30 + frameOverTime: + serializedVersion: 2 + minMaxState: 1 + scalar: 0.9999 + minScalar: 0.9999 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + startFrame: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + speedRange: {x: 0, y: 1} + tilesX: 1 + tilesY: 1 + animationType: 0 + rowIndex: 0 + cycles: 1 + uvChannelMask: -1 + rowMode: 1 + sprites: + - sprite: {fileID: 0} + flipU: 0 + flipV: 0 + VelocityModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetX: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetY: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + orbitalOffsetZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + radial: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + speedModifier: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + inWorldSpace: 0 + InheritVelocityModule: + enabled: 0 + m_Mode: 0 + m_Curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + LifetimeByEmitterSpeedModule: + enabled: 0 + m_Curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: -0.8 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0.2 + inSlope: -0.8 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Range: {x: 0, y: 1} + ForceModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + inWorldSpace: 0 + randomizePerFrame: 0 + ExternalForcesModule: + serializedVersion: 2 + enabled: 0 + multiplierCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + influenceFilter: 0 + influenceMask: + serializedVersion: 2 + m_Bits: 4294967295 + influenceList: [] + ClampVelocityModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + magnitude: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxis: 0 + inWorldSpace: 0 + multiplyDragByParticleSize: 1 + multiplyDragByParticleVelocity: 1 + dampen: 0 + drag: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + NoiseModule: + enabled: 0 + strength: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + strengthY: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + strengthZ: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + frequency: 0.5 + damping: 1 + octaves: 1 + octaveMultiplier: 0.5 + octaveScale: 2 + quality: 2 + scrollSpeed: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remap: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -1 + inSlope: 0 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 2 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapY: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -1 + inSlope: 0 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 2 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapZ: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: -1 + inSlope: 0 + outSlope: 2 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 2 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + remapEnabled: 0 + positionAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + rotationAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + sizeAmount: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + SizeBySpeedModule: + enabled: 0 + curve: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + z: + serializedVersion: 2 + minMaxState: 1 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + range: {x: 0, y: 1} + separateAxes: 0 + RotationBySpeedModule: + enabled: 0 + x: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + y: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + curve: + serializedVersion: 2 + minMaxState: 0 + scalar: 0.7853982 + minScalar: 0.7853982 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + separateAxes: 0 + range: {x: 0, y: 1} + ColorBySpeedModule: + enabled: 0 + gradient: + serializedVersion: 2 + minMaxState: 1 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + range: {x: 0, y: 1} + CollisionModule: + enabled: 0 + serializedVersion: 4 + type: 0 + collisionMode: 0 + colliderForce: 0 + multiplyColliderForceByParticleSize: 0 + multiplyColliderForceByParticleSpeed: 0 + multiplyColliderForceByCollisionAngle: 1 + m_Planes: [] + m_Dampen: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_Bounce: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + m_EnergyLossOnCollision: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minKillSpeed: 0 + maxKillSpeed: 10000 + radiusScale: 1 + collidesWith: + serializedVersion: 2 + m_Bits: 4294967295 + maxCollisionShapes: 256 + quality: 0 + voxelSize: 0.5 + collisionMessages: 0 + collidesWithDynamic: 1 + interiorCollisions: 0 + TriggerModule: + enabled: 0 + serializedVersion: 2 + inside: 1 + outside: 0 + enter: 0 + exit: 0 + colliderQueryMode: 0 + radiusScale: 1 + primitives: [] + SubModule: + serializedVersion: 2 + enabled: 0 + subEmitters: + - serializedVersion: 3 + emitter: {fileID: 0} + type: 0 + properties: 0 + emitProbability: 1 + LightsModule: + enabled: 0 + ratio: 0 + light: {fileID: 0} + randomDistribution: 1 + color: 1 + range: 1 + intensity: 1 + rangeCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + intensityCurve: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + maxLights: 20 + TrailModule: + enabled: 0 + mode: 0 + ratio: 1 + lifetime: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minVertexDistance: 0.2 + textureMode: 0 + ribbonCount: 1 + shadowBias: 0.5 + worldSpace: 0 + dieWithParticles: 1 + sizeAffectsWidth: 1 + sizeAffectsLifetime: 0 + inheritParticleColor: 1 + generateLightingData: 0 + splitSubEmitterRibbons: 0 + attachRibbonsToTransform: 0 + colorOverLifetime: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + widthOverTrail: + serializedVersion: 2 + minMaxState: 0 + scalar: 1 + minScalar: 1 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + colorOverTrail: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 0.7830189, g: 0.114498034, b: 0.114498034, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + CustomDataModule: + enabled: 0 + mode0: 0 + vectorComponentCount0: 4 + color0: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + colorLabel0: Color + vector0_0: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_0: X + vector0_1: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_1: Y + vector0_2: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_2: Z + vector0_3: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel0_3: W + mode1: 0 + vectorComponentCount1: 4 + color1: + serializedVersion: 2 + minMaxState: 0 + minColor: {r: 1, g: 1, b: 1, a: 1} + maxColor: {r: 1, g: 1, b: 1, a: 1} + maxGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + minGradient: + serializedVersion: 2 + key0: {r: 1, g: 1, b: 1, a: 1} + key1: {r: 1, g: 1, b: 1, a: 1} + key2: {r: 0, g: 0, b: 0, a: 0} + key3: {r: 0, g: 0, b: 0, a: 0} + key4: {r: 0, g: 0, b: 0, a: 0} + key5: {r: 0, g: 0, b: 0, a: 0} + key6: {r: 0, g: 0, b: 0, a: 0} + key7: {r: 0, g: 0, b: 0, a: 0} + ctime0: 0 + ctime1: 65535 + ctime2: 0 + ctime3: 0 + ctime4: 0 + ctime5: 0 + ctime6: 0 + ctime7: 0 + atime0: 0 + atime1: 65535 + atime2: 0 + atime3: 0 + atime4: 0 + atime5: 0 + atime6: 0 + atime7: 0 + m_Mode: 0 + m_NumColorKeys: 2 + m_NumAlphaKeys: 2 + colorLabel1: Color + vector1_0: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_0: X + vector1_1: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_1: Y + vector1_2: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_2: Z + vector1_3: + serializedVersion: 2 + minMaxState: 0 + scalar: 0 + minScalar: 0 + maxCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + minCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + vectorLabel1_3: W +--- !u!199 &275228036187653316 +ParticleSystemRenderer: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9126258469831405173} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10308, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_RenderMode: 0 + m_MeshDistribution: 0 + m_SortMode: 0 + m_MinParticleSize: 0 + m_MaxParticleSize: 0.5 + m_CameraVelocityScale: 0 + m_VelocityScale: 0 + m_LengthScale: 2 + m_SortingFudge: 0 + m_NormalDirection: 1 + m_ShadowBias: 0 + m_RenderAlignment: 0 + m_Pivot: {x: 0, y: 0, z: 0} + m_Flip: {x: 0, y: 0, z: 0} + m_UseCustomVertexStreams: 0 + m_EnableGPUInstancing: 1 + m_ApplyActiveColorSpace: 1 + m_AllowRoll: 1 + m_FreeformStretching: 0 + m_RotateWithStretchDirection: 1 + m_VertexStreams: 00010304 + m_Mesh: {fileID: 0} + m_Mesh1: {fileID: 0} + m_Mesh2: {fileID: 0} + m_Mesh3: {fileID: 0} + m_MeshWeighting: 1 + m_MeshWeighting1: 1 + m_MeshWeighting2: 1 + m_MeshWeighting3: 1 + m_MaskInteraction: 0 diff --git a/Assets/Content/WorldObjects/World/VFX/Construction/ConstructionParticle.prefab.meta b/Assets/Content/WorldObjects/World/VFX/Construction/ConstructionParticle.prefab.meta new file mode 100644 index 0000000000..978a42115d --- /dev/null +++ b/Assets/Content/WorldObjects/World/VFX/Construction/ConstructionParticle.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ca5e6b5f7c6c5054a8f8155ef44e3e43 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/DefaultPrefabObjects.asset b/Assets/DefaultPrefabObjects.asset index f3a0bb9bfb..9e62d4fee5 100644 --- a/Assets/DefaultPrefabObjects.asset +++ b/Assets/DefaultPrefabObjects.asset @@ -58,6 +58,7 @@ MonoBehaviour: - {fileID: -7828078595381397262, guid: d07b5fba3896ff448855d6e54356c365, type: 3} - {fileID: -7828078595381397262, guid: a777a6da30f0704478e25312963a8151, type: 3} - {fileID: -2900075557854325373, guid: 6c2559c2017ada740b245951a23c2e1d, type: 3} + - {fileID: -2900075557854325373, guid: 5dba4171f2124fb48b0e32c0e10841e0, type: 3} - {fileID: -2900075557854325373, guid: 45d13347efae0f54882e0e56dd770bb1, type: 3} - {fileID: -2900075557854325373, guid: 9682b163cae64f74a93b6e84ce84ae5b, type: 3} - {fileID: -2900075557854325373, guid: abcc60752234e584d8d98c9dec03e7cc, type: 3} @@ -83,6 +84,7 @@ MonoBehaviour: - {fileID: 3493226604345077845, guid: 8c378d8ec3d1cda4389f92d2d8703b6a, type: 3} - {fileID: 4302234173120300195, guid: 313c7a6f7eaaf4f4cb80cbe0fe77005d, type: 3} - {fileID: 9154675693299657064, guid: af039f84b4a245049b5b62799af01384, type: 3} + - {fileID: 8932735734697480342, guid: d2e0ed0ea636629409f5ea4b10bedddd, type: 3} - {fileID: 2930813178971533500, guid: 1c3eed1ea37ecc1448e41270cdc63486, type: 3} - {fileID: 1019513474262773944, guid: 06c946c7c639138488b814e4448b82e4, type: 3} - {fileID: -9151722837240714421, guid: 41d7af24659a0d3439668aeb4c46d9bc, type: 3} diff --git a/Assets/Scripts/External/NaughtyAttributes.meta b/Assets/Scripts/External/NaughtyAttributes.meta new file mode 100644 index 0000000000..dcfd16eb80 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f2b88f9233a405c47bf9ef943ecfe3d5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/README.html b/Assets/Scripts/External/NaughtyAttributes/README.html new file mode 100644 index 0000000000..5df2d2d51c --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/README.html @@ -0,0 +1,1648 @@ + + + + + README.md - Grip + + + + + + +
+
+ + + +
+
+
+
+ +

+ + README.md +

+ +
+

+NaughtyAttributes

+

Unity 2018.3+ +openupm +License: MIT

+

NaughtyAttributes is an extension for the Unity Inspector.

+

It expands the range of attributes that Unity provides so that you can create powerful inspectors without the need of custom editors or property drawers. It also provides attributes that can be applied to non-serialized fields or functions.

+

Most of the attributes are implemented using Unity's CustomPropertyDrawer, so they will work in your custom editors. If you want all of the attributes to work in your custom editors, however, you must inherit from NaughtyInspector and use the NaughtyEditorGUI.PropertyField_Layout function instead of EditorGUILayout.PropertyField.

+

+System Requirements

+

Unity 2018.3.0 or later versions. Feel free to try older version. Don't forget to include the NaughtyAttributes namespace.

+

+Installation

+
    +
  1. The package is available on the openupm registry. You can install it via openupm-cli.
  2. +
+
openupm add com.dbrizov.naughtyattributes
+
+
    +
  1. You can also install via git url by adding this entry in your manifest.json +
  2. +
+
"com.dbrizov.naughtyattributes": "https://github.com/dbrizov/NaughtyAttributes.git#upm"
+
+
    +
  1. You can also download it from the Asset Store +
  2. +
+

+Documentation

+ +

+Support

+

NaughtyAttributes is an open-source project that I am developing in my free time. If you like it you can support me by donating.

+ +

+Overview

+

+Drawer Attributes

+

Provide special draw options to serialized fields. +A field can have only one DrawerAttribute. If a field has more than one, only the bottom one will be used.

+

+AnimatorParam

+

Select an Animator paramater via dropdown interface.

+
public class NaughtyComponent : MonoBehaviour
+{
+	public Animator someAnimator;
+
+	[AnimatorParam("someAnimator")]
+	public int paramHash;
+
+	[AnimatorParam("someAnimator")]
+	public string paramName;
+}
+

inspector

+

+Button

+

A method can be marked as a button. A button appears in the inspector and executes the method if clicked. +Works both with instance and static methods.

+
public class NaughtyComponent : MonoBehaviour
+{
+	[Button]
+	private void MethodOne() { }
+
+	[Button("Button Text")]
+	private void MethodTwo() { }
+}
+

inspector

+

+CurveRange

+

Set bounds and modify curve color for AnimationCurves

+
public class NaughtyComponent : MonoBehaviour
+{
+	[CurveRange(-1, -1, 1, 1)]
+	public AnimationCurve curve;
+	
+	[CurveRange(EColor.Orange)]
+	public AnimationCurve curve1;
+	
+	[CurveRange(0, 0, 5, 5, EColor.Red)]
+	public AnimationCurve curve2;
+}
+

inspector

+

+Dropdown

+

Provides an interface for dropdown value selection.

+
public class NaughtyComponent : MonoBehaviour
+{
+	[Dropdown("intValues")]
+	public int intValue;
+
+	[Dropdown("StringValues")]
+	public string stringValue;
+
+	[Dropdown("GetVectorValues")]
+	public Vector3 vectorValue;
+
+	private int[] intValues = new int[] { 1, 2, 3, 4, 5 };
+
+	private List<string> StringValues { get { return new List<string>() { "A", "B", "C", "D", "E" }; } }
+
+	private DropdownList<Vector3> GetVectorValues()
+	{
+		return new DropdownList<Vector3>()
+		{
+			{ "Right",   Vector3.right },
+			{ "Left",    Vector3.left },
+			{ "Up",      Vector3.up },
+			{ "Down",    Vector3.down },
+			{ "Forward", Vector3.forward },
+			{ "Back",    Vector3.back }
+		};
+	}
+}
+

inspector

+

+EnumFlags

+

Provides dropdown interface for setting enum flags.

+
public enum Direction
+{
+	None = 0,
+	Right = 1 << 0,
+	Left = 1 << 1,
+	Up = 1 << 2,
+	Down = 1 << 3
+}
+
+public class NaughtyComponent : MonoBehaviour
+{
+	[EnumFlags]
+	public Direction flags;
+}
+

inspector

+

+Expandable

+

Make scriptable objects expandable.

+
public class NaughtyComponent : MonoBehaviour
+{
+	[Expandable]
+	public ScriptableObject scriptableObject;
+}
+

inspector

+

+HorizontalLine

+
public class NaughtyComponent : MonoBehaviour
+{
+	[HorizontalLine(color: EColor.Red)]
+	public int red;
+
+	[HorizontalLine(color: EColor.Green)]
+	public int green;
+
+	[HorizontalLine(color: EColor.Blue)]
+	public int blue;
+}
+

inspector

+

+InfoBox

+

Used for providing additional information.

+
public class NaughtyComponent : MonoBehaviour
+{
+	[InfoBox("This is my int", EInfoBoxType.Normal)]
+	public int myInt;
+
+	[InfoBox("This is my float", EInfoBoxType.Warning)]
+	public float myFloat;
+
+	[InfoBox("This is my vector", EInfoBoxType.Error)]
+	public Vector3 myVector;
+}
+

inspector

+

+InputAxis

+

Select an input axis via dropdown interface.

+
public class NaughtyComponent : MonoBehaviour
+{
+	[InputAxis]
+	public string inputAxis;
+}
+

inspector

+

+MinMaxSlider

+

A double slider. The min value is saved to the X property, and the max value is saved to the Y property of a Vector2 field.

+
public class NaughtyComponent : MonoBehaviour
+{
+	[MinMaxSlider(0.0f, 100.0f)]
+	public Vector2 minMaxSlider;
+}
+

inspector

+

+ProgressBar

+
public class NaughtyComponent : MonoBehaviour
+{
+	[ProgressBar("Health", 300, EColor.Red)]
+	public int health = 250;
+
+	[ProgressBar("Mana", 100, EColor.Blue)]
+	public int mana = 25;
+
+	[ProgressBar("Stamina", 200, EColor.Green)]
+	public int stamina = 150;
+}
+

inspector

+

+ReorderableList

+

Provides array type fields with an interface for easy reordering of elements.

+
public class NaughtyComponent : MonoBehaviour
+{
+	[ReorderableList]
+	public int[] intArray;
+
+	[ReorderableList]
+	public List<float> floatArray;
+}
+

inspector

+

+ReadOnly

+

Makes a field read only.

+
public class NaughtyComponent : MonoBehaviour
+{
+	[ReadOnly]
+	public Vector3 forwardVector = Vector3.forward;
+}
+

inspector

+

+ResizableTextArea

+

A resizable text area where you can see the whole text. +Unlike Unity's Multiline and TextArea attributes where you can see only 3 rows of a given text, and in order to see it or modify it you have to manually scroll down to the desired row.

+
public class NaughtyComponent : MonoBehaviour
+{
+	[ResizableTextArea]
+	public string resizableTextArea;
+}
+

inspector

+

+Scene

+

Select a scene from the build settings via dropdown interface.

+
public class NaughtyComponent : MonoBehaviour
+{
+	[Scene]
+	public string bootScene; // scene name
+
+	[Scene]
+	public int tutorialScene; // scene index
+}
+

inspector

+

+ShowAssetPreview

+

Shows the texture preview of a given asset (Sprite, Prefab...).

+
public class NaughtyComponent : MonoBehaviour
+{
+	[ShowAssetPreview]
+	public Sprite sprite;
+
+	[ShowAssetPreview(128, 128)]
+	public GameObject prefab;
+}
+

inspector

+

+ShowNativeProperty

+

Shows native C# properties in the inspector. +All native properties are displayed at the bottom of the inspector after the non-serialized fields and before the method buttons. +It supports only certain types (bool, int, long, float, double, string, Vector2, Vector3, Vector4, Color, Bounds, Rect, UnityEngine.Object).

+
public class NaughtyComponent : MonoBehaviour
+{
+	public List<Transform> transforms;
+
+	[ShowNativeProperty]
+	public int TransformsCount => transforms.Count;
+}
+

inspector

+

+ShowNonSerializedField

+

Shows non-serialized fields in the inspector. +All non-serialized fields are displayed at the bottom of the inspector before the method buttons. +Keep in mind that if you change a non-static non-serialized field in the code - the value in the inspector will be updated after you press Play in the editor. +There is no such issue with static non-serialized fields because their values are updated at compile time. +It supports only certain types (bool, int, long, float, double, string, Vector2, Vector3, Vector4, Color, Bounds, Rect, UnityEngine.Object).

+
public class NaughtyComponent : MonoBehaviour
+{
+	[ShowNonSerializedField]
+	private int myInt = 10;
+
+	[ShowNonSerializedField]
+	private const float PI = 3.14159f;
+
+	[ShowNonSerializedField]
+	private static readonly Vector3 CONST_VECTOR = Vector3.one;
+}
+

inspector

+

+Tag

+

Select a tag via dropdown interface.

+
public class NaughtyComponent : MonoBehaviour
+{
+	[Tag]
+	public string tagField;
+}
+

inspector

+

+Meta Attributes

+

Give the fields meta data. A field can have more than one meta attributes.

+

+BoxGroup

+

Surrounds grouped fields with a box.

+
public class NaughtyComponent : MonoBehaviour
+{
+	[BoxGroup("Integers")]
+	public int firstInt;
+	[BoxGroup("Integers")]
+	public int secondInt;
+
+	[BoxGroup("Floats")]
+	public float firstFloat;
+	[BoxGroup("Floats")]
+	public float secondFloat;
+}
+

inspector

+

+Foldout

+

Makes a foldout group.

+
public class NaughtyComponent : MonoBehaviour
+{
+	[Foldout("Integers")]
+	public int firstInt;
+	[Foldout("Integers")]
+	public int secondInt;
+}
+

inspector

+

+EnableIf / DisableIf

+
public class NaughtyComponent : MonoBehaviour
+{
+	public bool enableMyInt;
+
+	[EnableIf("enableMyInt")]
+	public int myInt;
+
+	[EnableIf("Enabled")]
+	public float myFloat;
+
+	[EnableIf("NotEnabled")]
+	public Vector3 myVector;
+
+	public bool Enabled() { return true; }
+
+	public bool NotEnabled => false;
+}
+

inspector

+

You can have more than one condition.

+
public class NaughtyComponent : MonoBehaviour
+{
+	public bool flag0;
+	public bool flag1;
+
+	[EnableIf(EConditionOperator.And, "flag0", "flag1")]
+	public int enabledIfAll;
+
+	[EnableIf(EConditionOperator.Or, "flag0", "flag1")]
+	public int enabledIfAny;
+}
+

+ShowIf / HideIf

+
public class NaughtyComponent : MonoBehaviour
+{
+	public bool showInt;
+
+	[ShowIf("showInt")]
+	public int myInt;
+
+	[ShowIf("AlwaysShow")]
+	public float myFloat;
+
+	[ShowIf("NeverShow")]
+	public Vector3 myVector;
+
+	public bool AlwaysShow() { return true; }
+
+	public bool NeverShow => false;
+}
+

inspector

+

You can have more than one condition.

+
public class NaughtyComponent : MonoBehaviour
+{
+	public bool flag0;
+	public bool flag1;
+
+	[ShowIf(EConditionOperator.And, "flag0", "flag1")]
+	public int showIfAll;
+
+	[ShowIf(EConditionOperator.Or, "flag0", "flag1")]
+	public int showIfAny;
+}
+

+Label

+

Override default field label.

+
public class NaughtyComponent : MonoBehaviour
+{
+	[Label("Short Name")]
+	public string veryVeryLongName;
+
+	[Label("RGB")]
+	public Vector3 vectorXYZ;
+}
+

inspector

+

+OnValueChanged

+

Detects a value change and executes a callback. +Keep in mind that the event is detected only when the value is changed from the inspector. +If you want a runtime event, you should probably use an event/delegate and subscribe to it.

+
public class NaughtyComponent : MonoBehaviour
+{
+	[OnValueChanged("OnValueChangedCallback")]
+	public int myInt;
+
+	private void OnValueChangedCallback()
+	{
+		Debug.Log(myInt);
+	}
+}
+

+Validator Attributes

+

Used for validating the fields. A field can have infinite number of validator attributes.

+

+MinValue / MaxValue

+

Clamps integer and float fields.

+
public class NaughtyComponent : MonoBehaviour
+{
+	[MinValue(0), MaxValue(10)]
+	public int myInt;
+
+	[MinValue(0.0f)]
+	public float myFloat;
+}
+

inspector

+

+Required

+

Used to remind the developer that a given reference type field is required.

+
public class NaughtyComponent : MonoBehaviour
+{
+	[Required]
+	public Transform myTransform;
+
+	[Required("Custom required text")]
+	public GameObject myGameObject;
+}
+

inspector

+

+ValidateInput

+

The most powerful ValidatorAttribute.

+
public class _NaughtyComponent : MonoBehaviour
+{
+	[ValidateInput("IsNotNull")]
+	public Transform myTransform;
+
+	[ValidateInput("IsGreaterThanZero", "myInteger must be greater than zero")]
+	public int myInt;
+
+	private bool IsNotNull(Transform tr)
+	{
+		return tr != null;
+	}
+
+	private bool IsGreaterThanZero(int value)
+	{
+		return value > 0;
+	}
+}
+

inspector

+ +
+
+
+
+
+ + + +
+
 
+
+ + \ No newline at end of file diff --git a/Assets/Scripts/External/NaughtyAttributes/README.html.meta b/Assets/Scripts/External/NaughtyAttributes/README.html.meta new file mode 100644 index 0000000000..42c42d4a08 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/README.html.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f1c5c604e6d27cc4d86e81f45c704e11 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts.meta new file mode 100644 index 0000000000..30b4bb8f0a --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 66686847ee1fa044bb15dfe473666178 +folderAsset: yes +timeCreated: 1507995546 +licenseType: Store +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core.meta new file mode 100644 index 0000000000..f1fc7823bf --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 1f67e408a6d0adf4ab29d095ccd8b116 +folderAsset: yes +timeCreated: 1507998942 +licenseType: Store +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes.meta new file mode 100644 index 0000000000..132a3c273d --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c76425e719cd4424d868674bcfb233f2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/AllowNestingAttribute.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/AllowNestingAttribute.cs new file mode 100644 index 0000000000..c73cd8df04 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/AllowNestingAttribute.cs @@ -0,0 +1,9 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public class AllowNestingAttribute : DrawerAttribute + { + } +} diff --git a/Assets/Scripts/SS3D/Systems/Crafting/Slice.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/AllowNestingAttribute.cs.meta similarity index 83% rename from Assets/Scripts/SS3D/Systems/Crafting/Slice.cs.meta rename to Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/AllowNestingAttribute.cs.meta index 027c554600..343dfeceb2 100644 --- a/Assets/Scripts/SS3D/Systems/Crafting/Slice.cs.meta +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/AllowNestingAttribute.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: f6059877305a7fb48a28d8ef0e6b92b9 +guid: 95b49d3abe880c044adbe7faf6b7b4ec MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/AnimatorParamAttribute.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/AnimatorParamAttribute.cs new file mode 100644 index 0000000000..214cd66ca2 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/AnimatorParamAttribute.cs @@ -0,0 +1,24 @@ +using System; +using UnityEngine; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public class AnimatorParamAttribute : DrawerAttribute + { + public string AnimatorName { get; private set; } + public AnimatorControllerParameterType? AnimatorParamType { get; private set; } + + public AnimatorParamAttribute(string animatorName) + { + AnimatorName = animatorName; + AnimatorParamType = null; + } + + public AnimatorParamAttribute(string animatorName, AnimatorControllerParameterType animatorParamType) + { + AnimatorName = animatorName; + AnimatorParamType = animatorParamType; + } + } +} diff --git a/Assets/Scripts/SS3D/Systems/Crafting/SliceInteraction.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/AnimatorParamAttribute.cs.meta similarity index 83% rename from Assets/Scripts/SS3D/Systems/Crafting/SliceInteraction.cs.meta rename to Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/AnimatorParamAttribute.cs.meta index d82f7ed180..db61addc97 100644 --- a/Assets/Scripts/SS3D/Systems/Crafting/SliceInteraction.cs.meta +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/AnimatorParamAttribute.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: cfafe02513b713b40b9833630fc47833 +guid: 7373332cb77b42744a415d6b4add445d MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/CurveRangeAttribute.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/CurveRangeAttribute.cs new file mode 100644 index 0000000000..45dcd71015 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/CurveRangeAttribute.cs @@ -0,0 +1,30 @@ +using System; +using UnityEngine; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public class CurveRangeAttribute : DrawerAttribute + { + public Vector2 Min { get; private set; } + public Vector2 Max { get; private set; } + public EColor Color { get; private set; } + + public CurveRangeAttribute(Vector2 min, Vector2 max, EColor color = EColor.Clear) + { + Min = min; + Max = max; + Color = color; + } + + public CurveRangeAttribute(EColor color) + : this(Vector2.zero, Vector2.one, color) + { + } + + public CurveRangeAttribute(float minX, float minY, float maxX, float maxY, EColor color = EColor.Clear) + : this(new Vector2(minX, minY), new Vector2(maxX, maxY), color) + { + } + } +} diff --git a/Assets/Scripts/SS3D/Systems/Crafting/ICraftingInteraction.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/CurveRangeAttribute.cs.meta similarity index 83% rename from Assets/Scripts/SS3D/Systems/Crafting/ICraftingInteraction.cs.meta rename to Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/CurveRangeAttribute.cs.meta index 3a17e734f0..93b60ab0fa 100644 --- a/Assets/Scripts/SS3D/Systems/Crafting/ICraftingInteraction.cs.meta +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/CurveRangeAttribute.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 4f2cb863c4399a34385d2b77fbfb2e22 +guid: bbdf3fb8882c7514c9a01108122cda7e MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/DrawerAttribute.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/DrawerAttribute.cs new file mode 100644 index 0000000000..90d4f2d6fd --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/DrawerAttribute.cs @@ -0,0 +1,11 @@ +using UnityEngine; + +namespace NaughtyAttributes +{ + /// + /// Base class for all drawer attributes + /// + public class DrawerAttribute : PropertyAttribute, INaughtyAttribute + { + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/DrawerAttribute.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/DrawerAttribute.cs.meta new file mode 100644 index 0000000000..aa542159f4 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/DrawerAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9df37fdebccf65c4da5b0a14f6dad5f5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/DropdownAttribute.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/DropdownAttribute.cs new file mode 100644 index 0000000000..3d95064937 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/DropdownAttribute.cs @@ -0,0 +1,57 @@ +using System.Collections; +using System; +using System.Collections.Generic; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public class DropdownAttribute : DrawerAttribute + { + public string ValuesName { get; private set; } + + public DropdownAttribute(string valuesName) + { + ValuesName = valuesName; + } + } + + public interface IDropdownList : IEnumerable> + { + } + + public class DropdownList : IDropdownList + { + private List> _values; + + public DropdownList() + { + _values = new List>(); + } + + public void Add(string displayName, T value) + { + _values.Add(new KeyValuePair(displayName, value)); + } + + public IEnumerator> GetEnumerator() + { + return _values.GetEnumerator(); + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + public static explicit operator DropdownList(DropdownList target) + { + DropdownList result = new DropdownList(); + foreach (var kvp in target) + { + result.Add(kvp.Key, kvp.Value); + } + + return result; + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/DropdownAttribute.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/DropdownAttribute.cs.meta new file mode 100644 index 0000000000..b25926d7a7 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/DropdownAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2cb864a1092cec04f8a4dbb556e8ed31 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/EnumFlagsAttribute.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/EnumFlagsAttribute.cs new file mode 100644 index 0000000000..2fcb1347ae --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/EnumFlagsAttribute.cs @@ -0,0 +1,9 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public class EnumFlagsAttribute : DrawerAttribute + { + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/EnumFlagsAttribute.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/EnumFlagsAttribute.cs.meta new file mode 100644 index 0000000000..25a52af448 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/EnumFlagsAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e8b31eb6d7299e54d89dcabc4cad0e6a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/Expandable.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/Expandable.cs new file mode 100644 index 0000000000..b4e8ebdc38 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/Expandable.cs @@ -0,0 +1,9 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public class ExpandableAttribute : DrawerAttribute + { + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/Expandable.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/Expandable.cs.meta new file mode 100644 index 0000000000..8fa04e4865 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/Expandable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 60926d6ca7f9ced469e9248ff1192da6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/HorizontalLineAttribute.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/HorizontalLineAttribute.cs new file mode 100644 index 0000000000..50d59a80b5 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/HorizontalLineAttribute.cs @@ -0,0 +1,20 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = true, Inherited = true)] + public class HorizontalLineAttribute : DrawerAttribute + { + public const float DefaultHeight = 2.0f; + public const EColor DefaultColor = EColor.Gray; + + public float Height { get; private set; } + public EColor Color { get; private set; } + + public HorizontalLineAttribute(float height = DefaultHeight, EColor color = DefaultColor) + { + Height = height; + Color = color; + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/HorizontalLineAttribute.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/HorizontalLineAttribute.cs.meta new file mode 100644 index 0000000000..ecfd2587f7 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/HorizontalLineAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2fdd6f99acca2fd42a4f3162d585ce95 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/InfoBoxAttribute.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/InfoBoxAttribute.cs new file mode 100644 index 0000000000..8867d97a10 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/InfoBoxAttribute.cs @@ -0,0 +1,24 @@ +using System; + +namespace NaughtyAttributes +{ + public enum EInfoBoxType + { + Normal, + Warning, + Error + } + + [AttributeUsage(AttributeTargets.Field, AllowMultiple = true, Inherited = true)] + public class InfoBoxAttribute : DrawerAttribute + { + public string Text { get; private set; } + public EInfoBoxType Type { get; private set; } + + public InfoBoxAttribute(string text, EInfoBoxType type = EInfoBoxType.Normal) + { + Text = text; + Type = type; + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/InfoBoxAttribute.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/InfoBoxAttribute.cs.meta new file mode 100644 index 0000000000..8748a6e04c --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/InfoBoxAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: afd1d6323740c734893fa8397c53113b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/InputAxisAttribute.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/InputAxisAttribute.cs new file mode 100644 index 0000000000..416a1075ba --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/InputAxisAttribute.cs @@ -0,0 +1,9 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public class InputAxisAttribute : DrawerAttribute + { + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/InputAxisAttribute.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/InputAxisAttribute.cs.meta new file mode 100644 index 0000000000..da3b2c44b0 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/InputAxisAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 85033978c18810f46af271bbe94cf4aa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/LayerAttribute.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/LayerAttribute.cs new file mode 100644 index 0000000000..87c1bce8ef --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/LayerAttribute.cs @@ -0,0 +1,9 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public class LayerAttribute : DrawerAttribute + { + } +} \ No newline at end of file diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/LayerAttribute.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/LayerAttribute.cs.meta new file mode 100644 index 0000000000..93d97f73ba --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/LayerAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 668d19ebe071176448d1af816a9a0ce0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/MinMaxSliderAttribute.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/MinMaxSliderAttribute.cs new file mode 100644 index 0000000000..f76d6022b2 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/MinMaxSliderAttribute.cs @@ -0,0 +1,17 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public class MinMaxSliderAttribute : DrawerAttribute + { + public float MinValue { get; private set; } + public float MaxValue { get; private set; } + + public MinMaxSliderAttribute(float minValue, float maxValue) + { + MinValue = minValue; + MaxValue = maxValue; + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/MinMaxSliderAttribute.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/MinMaxSliderAttribute.cs.meta new file mode 100644 index 0000000000..03e5dcffb1 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/MinMaxSliderAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4aaa73f574deaa54187cb54aae571b24 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/ProgressBarAttribute.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/ProgressBarAttribute.cs new file mode 100644 index 0000000000..72b7ea85dc --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/ProgressBarAttribute.cs @@ -0,0 +1,37 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public class ProgressBarAttribute : DrawerAttribute + { + public string Name { get; private set; } + public float MaxValue { get; set; } + public string MaxValueName { get; private set; } + public EColor Color { get; private set; } + + public ProgressBarAttribute(string name, float maxValue, EColor color = EColor.Blue) + { + Name = name; + MaxValue = maxValue; + Color = color; + } + + public ProgressBarAttribute(string name, string maxValueName, EColor color = EColor.Blue) + { + Name = name; + MaxValueName = maxValueName; + Color = color; + } + + public ProgressBarAttribute(float maxValue, EColor color = EColor.Blue) + : this("", maxValue, color) + { + } + + public ProgressBarAttribute(string maxValueName, EColor color = EColor.Blue) + : this("", maxValueName, color) + { + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/ProgressBarAttribute.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/ProgressBarAttribute.cs.meta new file mode 100644 index 0000000000..11029f0e82 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/ProgressBarAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e19e4db6f4d08f849aa8ea8155cd2760 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/ResizableTextAreaAttribute.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/ResizableTextAreaAttribute.cs new file mode 100644 index 0000000000..e84e664eaa --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/ResizableTextAreaAttribute.cs @@ -0,0 +1,9 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public class ResizableTextAreaAttribute : DrawerAttribute + { + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/ResizableTextAreaAttribute.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/ResizableTextAreaAttribute.cs.meta new file mode 100644 index 0000000000..cc11d00a70 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/ResizableTextAreaAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 56d9a4b795ef4a94d86b94e55fb81240 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/SceneAttribute.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/SceneAttribute.cs new file mode 100644 index 0000000000..0cc044b7ce --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/SceneAttribute.cs @@ -0,0 +1,9 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public class SceneAttribute : DrawerAttribute + { + } +} \ No newline at end of file diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/SceneAttribute.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/SceneAttribute.cs.meta new file mode 100644 index 0000000000..f22649b754 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/SceneAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e054de18423364f4688b72a0f2a472b6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/ShowAssetPreviewAttribute.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/ShowAssetPreviewAttribute.cs new file mode 100644 index 0000000000..dd628ffbfa --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/ShowAssetPreviewAttribute.cs @@ -0,0 +1,20 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public class ShowAssetPreviewAttribute : DrawerAttribute + { + public const int DefaultWidth = 64; + public const int DefaultHeight = 64; + + public int Width { get; private set; } + public int Height { get; private set; } + + public ShowAssetPreviewAttribute(int width = DefaultWidth, int height = DefaultHeight) + { + Width = width; + Height = height; + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/ShowAssetPreviewAttribute.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/ShowAssetPreviewAttribute.cs.meta new file mode 100644 index 0000000000..4893b92381 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/ShowAssetPreviewAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4b7dd9b44abc0054cb5cd68d74be2c1a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/SortingLayerAttribute.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/SortingLayerAttribute.cs new file mode 100644 index 0000000000..0df4964c70 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/SortingLayerAttribute.cs @@ -0,0 +1,9 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public class SortingLayerAttribute : DrawerAttribute + { + } +} \ No newline at end of file diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/SortingLayerAttribute.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/SortingLayerAttribute.cs.meta new file mode 100644 index 0000000000..d4cfaf8bb4 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/SortingLayerAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b7564ee02deb3974a85d8617eea098fb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/TagAttribute.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/TagAttribute.cs new file mode 100644 index 0000000000..296d8d3505 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/TagAttribute.cs @@ -0,0 +1,9 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public class TagAttribute : DrawerAttribute + { + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/TagAttribute.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/TagAttribute.cs.meta new file mode 100644 index 0000000000..618033c4cc --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes/TagAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8903399bbd7c9d745a7b9188ab6c8320 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes_SpecialCase.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes_SpecialCase.meta new file mode 100644 index 0000000000..3096ac435a --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes_SpecialCase.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5cf879ed72221e740a7aa02ef9c366a7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes_SpecialCase/ButtonAttribute.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes_SpecialCase/ButtonAttribute.cs new file mode 100644 index 0000000000..5deef5608e --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes_SpecialCase/ButtonAttribute.cs @@ -0,0 +1,33 @@ +using System; + +namespace NaughtyAttributes +{ + public enum EButtonEnableMode + { + /// + /// Button should be active always + /// + Always, + /// + /// Button should be active only in editor + /// + Editor, + /// + /// Button should be active only in playmode + /// + Playmode + } + + [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)] + public class ButtonAttribute : SpecialCaseDrawerAttribute + { + public string Text { get; private set; } + public EButtonEnableMode SelectedEnableMode { get; private set; } + + public ButtonAttribute(string text = null, EButtonEnableMode enabledMode = EButtonEnableMode.Always) + { + this.Text = text; + this.SelectedEnableMode = enabledMode; + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes_SpecialCase/ButtonAttribute.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes_SpecialCase/ButtonAttribute.cs.meta new file mode 100644 index 0000000000..cc7be5c0c0 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes_SpecialCase/ButtonAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e8fe363a25ec5e24a9dd510bb0b4a0d4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes_SpecialCase/ReorderableListAttribute.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes_SpecialCase/ReorderableListAttribute.cs new file mode 100644 index 0000000000..91af2eade5 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes_SpecialCase/ReorderableListAttribute.cs @@ -0,0 +1,9 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public class ReorderableListAttribute : SpecialCaseDrawerAttribute + { + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes_SpecialCase/ReorderableListAttribute.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes_SpecialCase/ReorderableListAttribute.cs.meta new file mode 100644 index 0000000000..add3c4a44e --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes_SpecialCase/ReorderableListAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6189b48f4055e6c47aa132632d898fa6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes_SpecialCase/ShowNativePropertyAttribute.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes_SpecialCase/ShowNativePropertyAttribute.cs new file mode 100644 index 0000000000..10d0336880 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes_SpecialCase/ShowNativePropertyAttribute.cs @@ -0,0 +1,9 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)] + public class ShowNativePropertyAttribute : SpecialCaseDrawerAttribute + { + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes_SpecialCase/ShowNativePropertyAttribute.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes_SpecialCase/ShowNativePropertyAttribute.cs.meta new file mode 100644 index 0000000000..5aed9a27c6 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes_SpecialCase/ShowNativePropertyAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a8e9b7b71c94a1f459336a24cfe04b1b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes_SpecialCase/ShowNonSerializedFieldAttribute.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes_SpecialCase/ShowNonSerializedFieldAttribute.cs new file mode 100644 index 0000000000..a4303dd09a --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes_SpecialCase/ShowNonSerializedFieldAttribute.cs @@ -0,0 +1,9 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public class ShowNonSerializedFieldAttribute : SpecialCaseDrawerAttribute + { + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes_SpecialCase/ShowNonSerializedFieldAttribute.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes_SpecialCase/ShowNonSerializedFieldAttribute.cs.meta new file mode 100644 index 0000000000..84d56244e3 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes_SpecialCase/ShowNonSerializedFieldAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8ea09f60df536734184a8920ff8bda6f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes_SpecialCase/SpecialCaseDrawerAttribute.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes_SpecialCase/SpecialCaseDrawerAttribute.cs new file mode 100644 index 0000000000..204f9c6b89 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes_SpecialCase/SpecialCaseDrawerAttribute.cs @@ -0,0 +1,8 @@ +using System; + +namespace NaughtyAttributes +{ + public class SpecialCaseDrawerAttribute : Attribute, INaughtyAttribute + { + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes_SpecialCase/SpecialCaseDrawerAttribute.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes_SpecialCase/SpecialCaseDrawerAttribute.cs.meta new file mode 100644 index 0000000000..3b4bd252a2 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/DrawerAttributes_SpecialCase/SpecialCaseDrawerAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 95a59093f8ed1af48a8be75fa3050a3c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/INaughtyAttribute.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/INaughtyAttribute.cs new file mode 100644 index 0000000000..bd16238c55 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/INaughtyAttribute.cs @@ -0,0 +1,8 @@ +using System; + +namespace NaughtyAttributes +{ + public interface INaughtyAttribute + { + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/INaughtyAttribute.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/INaughtyAttribute.cs.meta new file mode 100644 index 0000000000..e2dd9d9bb9 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/INaughtyAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: edda855906d15e541b46efd812fd70f3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes.meta new file mode 100644 index 0000000000..547f24d6db --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 64c95d02a2004854585e8d923d6680d0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/BoxGroupAttribute.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/BoxGroupAttribute.cs new file mode 100644 index 0000000000..bb6380af4f --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/BoxGroupAttribute.cs @@ -0,0 +1,15 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public class BoxGroupAttribute : MetaAttribute, IGroupAttribute + { + public string Name { get; private set; } + + public BoxGroupAttribute(string name = "") + { + Name = name; + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/BoxGroupAttribute.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/BoxGroupAttribute.cs.meta new file mode 100644 index 0000000000..d68d8de4ba --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/BoxGroupAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 07da8af1e3be52c4789678bf4138ae11 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/DisableIfAttribute.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/DisableIfAttribute.cs new file mode 100644 index 0000000000..c8fd6e3ae7 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/DisableIfAttribute.cs @@ -0,0 +1,26 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field | AttributeTargets.Method, AllowMultiple = false, Inherited = true)] + public class DisableIfAttribute : EnableIfAttributeBase + { + public DisableIfAttribute(string condition) + : base(condition) + { + Inverted = true; + } + + public DisableIfAttribute(EConditionOperator conditionOperator, params string[] conditions) + : base(conditionOperator, conditions) + { + Inverted = true; + } + + public DisableIfAttribute(string enumName, object enumValue) + : base(enumName, enumValue as Enum) + { + Inverted = true; + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/DisableIfAttribute.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/DisableIfAttribute.cs.meta new file mode 100644 index 0000000000..b91dc52815 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/DisableIfAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 52a0d5c249ac8fd42a4fb4d61bc2f797 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/EnableIfAttribute.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/EnableIfAttribute.cs new file mode 100644 index 0000000000..c801413864 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/EnableIfAttribute.cs @@ -0,0 +1,26 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field | AttributeTargets.Method, AllowMultiple = false, Inherited = true)] + public class EnableIfAttribute : EnableIfAttributeBase + { + public EnableIfAttribute(string condition) + : base(condition) + { + Inverted = false; + } + + public EnableIfAttribute(EConditionOperator conditionOperator, params string[] conditions) + : base(conditionOperator, conditions) + { + Inverted = false; + } + + public EnableIfAttribute(string enumName, object enumValue) + : base(enumName, enumValue as Enum) + { + Inverted = false; + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/EnableIfAttribute.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/EnableIfAttribute.cs.meta new file mode 100644 index 0000000000..f3a696c406 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/EnableIfAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a616ae826c8ebae45a89d6a8cb68a843 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/EnableIfAttributeBase.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/EnableIfAttributeBase.cs new file mode 100644 index 0000000000..cebc67a40e --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/EnableIfAttributeBase.cs @@ -0,0 +1,39 @@ +using System; + +namespace NaughtyAttributes +{ + public abstract class EnableIfAttributeBase : MetaAttribute + { + public string[] Conditions { get; private set; } + public EConditionOperator ConditionOperator { get; private set; } + public bool Inverted { get; protected set; } + + /// + /// If this not null, [0] is name of an enum variable. + /// + public Enum EnumValue { get; private set; } + + public EnableIfAttributeBase(string condition) + { + ConditionOperator = EConditionOperator.And; + Conditions = new string[1] { condition }; + } + + public EnableIfAttributeBase(EConditionOperator conditionOperator, params string[] conditions) + { + ConditionOperator = conditionOperator; + Conditions = conditions; + } + + public EnableIfAttributeBase(string enumName, Enum enumValue) + : this(enumName) + { + if (enumValue == null) + { + throw new ArgumentNullException(nameof(enumValue), "This parameter must be an enum value."); + } + + EnumValue = enumValue; + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/EnableIfAttributeBase.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/EnableIfAttributeBase.cs.meta new file mode 100644 index 0000000000..45fd5eb346 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/EnableIfAttributeBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8ba6385cd022e164b89ead1937173ddc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/FoldoutAttribute.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/FoldoutAttribute.cs new file mode 100644 index 0000000000..f1b81bdba2 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/FoldoutAttribute.cs @@ -0,0 +1,15 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public class FoldoutAttribute : MetaAttribute, IGroupAttribute + { + public string Name { get; private set; } + + public FoldoutAttribute(string name) + { + Name = name; + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/FoldoutAttribute.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/FoldoutAttribute.cs.meta new file mode 100644 index 0000000000..e39736b2b6 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/FoldoutAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 95f184555d5079243b2d25b35a641a74 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/HideIfAttribute.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/HideIfAttribute.cs new file mode 100644 index 0000000000..88a0850d14 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/HideIfAttribute.cs @@ -0,0 +1,26 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field | AttributeTargets.Method, AllowMultiple = false, Inherited = true)] + public class HideIfAttribute : ShowIfAttributeBase + { + public HideIfAttribute(string condition) + : base(condition) + { + Inverted = true; + } + + public HideIfAttribute(EConditionOperator conditionOperator, params string[] conditions) + : base(conditionOperator, conditions) + { + Inverted = true; + } + + public HideIfAttribute(string enumName, object enumValue) + : base(enumName, enumValue as Enum) + { + Inverted = true; + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/HideIfAttribute.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/HideIfAttribute.cs.meta new file mode 100644 index 0000000000..888cf89a23 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/HideIfAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9ab2d0fcfb13a214ea6ef7629c96a761 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/IGroupAttribute.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/IGroupAttribute.cs new file mode 100644 index 0000000000..b30ac9a374 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/IGroupAttribute.cs @@ -0,0 +1,8 @@ +using UnityEngine; + +namespace NaughtyAttributes +{ + public interface IGroupAttribute + { + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/IGroupAttribute.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/IGroupAttribute.cs.meta new file mode 100644 index 0000000000..47db85d806 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/IGroupAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7c437b9ac50575347a7b12520f37f9a2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/LabelAttribute.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/LabelAttribute.cs new file mode 100644 index 0000000000..309827398b --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/LabelAttribute.cs @@ -0,0 +1,15 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public class LabelAttribute : MetaAttribute + { + public string Label { get; private set; } + + public LabelAttribute(string label) + { + Label = label; + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/LabelAttribute.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/LabelAttribute.cs.meta new file mode 100644 index 0000000000..9488d54afe --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/LabelAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 79e0e0c0a7c25ea4fbe8eecaa4d559a0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/MetaAttribute.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/MetaAttribute.cs new file mode 100644 index 0000000000..9436bf3ab1 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/MetaAttribute.cs @@ -0,0 +1,8 @@ +using System; + +namespace NaughtyAttributes +{ + public class MetaAttribute : Attribute, INaughtyAttribute + { + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/MetaAttribute.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/MetaAttribute.cs.meta new file mode 100644 index 0000000000..a7be132946 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/MetaAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a482b4e0fbf0f4547a5d522182a68d24 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/OnValueChangedAttribute.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/OnValueChangedAttribute.cs new file mode 100644 index 0000000000..8358af94e4 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/OnValueChangedAttribute.cs @@ -0,0 +1,15 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = true, Inherited = true)] + public class OnValueChangedAttribute : MetaAttribute + { + public string CallbackName { get; private set; } + + public OnValueChangedAttribute(string callbackName) + { + CallbackName = callbackName; + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/OnValueChangedAttribute.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/OnValueChangedAttribute.cs.meta new file mode 100644 index 0000000000..4a92c4bf21 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/OnValueChangedAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e16a27c5576022b4bbe997c7db9051f0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/ReadOnlyAttribute.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/ReadOnlyAttribute.cs new file mode 100644 index 0000000000..95110f6f88 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/ReadOnlyAttribute.cs @@ -0,0 +1,10 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public class ReadOnlyAttribute : MetaAttribute + { + + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/ReadOnlyAttribute.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/ReadOnlyAttribute.cs.meta new file mode 100644 index 0000000000..24ec846258 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/ReadOnlyAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e57264747ba93b94fbff12733de29499 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/ShowIfAttribute.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/ShowIfAttribute.cs new file mode 100644 index 0000000000..fce37635dd --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/ShowIfAttribute.cs @@ -0,0 +1,26 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field | AttributeTargets.Method, AllowMultiple = false, Inherited = true)] + public class ShowIfAttribute : ShowIfAttributeBase + { + public ShowIfAttribute(string condition) + : base(condition) + { + Inverted = false; + } + + public ShowIfAttribute(EConditionOperator conditionOperator, params string[] conditions) + : base(conditionOperator, conditions) + { + Inverted = false; + } + + public ShowIfAttribute(string enumName, object enumValue) + : base(enumName, enumValue as Enum) + { + Inverted = false; + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/ShowIfAttribute.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/ShowIfAttribute.cs.meta new file mode 100644 index 0000000000..4556ac2371 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/ShowIfAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1ada427cfd2c9b04989d6d18dea27985 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/ShowIfAttributeBase.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/ShowIfAttributeBase.cs new file mode 100644 index 0000000000..1ead58bb13 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/ShowIfAttributeBase.cs @@ -0,0 +1,39 @@ +using System; + +namespace NaughtyAttributes +{ + public class ShowIfAttributeBase : MetaAttribute + { + public string[] Conditions { get; private set; } + public EConditionOperator ConditionOperator { get; private set; } + public bool Inverted { get; protected set; } + + /// + /// If this not null, [0] is name of an enum variable. + /// + public Enum EnumValue { get; private set; } + + public ShowIfAttributeBase(string condition) + { + ConditionOperator = EConditionOperator.And; + Conditions = new string[1] { condition }; + } + + public ShowIfAttributeBase(EConditionOperator conditionOperator, params string[] conditions) + { + ConditionOperator = conditionOperator; + Conditions = conditions; + } + + public ShowIfAttributeBase(string enumName, Enum enumValue) + : this(enumName) + { + if (enumValue == null) + { + throw new ArgumentNullException(nameof(enumValue), "This parameter must be an enum value."); + } + + EnumValue = enumValue; + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/ShowIfAttributeBase.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/ShowIfAttributeBase.cs.meta new file mode 100644 index 0000000000..e82a9ad340 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/MetaAttributes/ShowIfAttributeBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0532b1c4d8a9ccf4b9f98f0bbe4a6747 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/NaughtyAttributes.Core.asmdef b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/NaughtyAttributes.Core.asmdef new file mode 100644 index 0000000000..569e4e6640 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/NaughtyAttributes.Core.asmdef @@ -0,0 +1,12 @@ +{ + "name": "NaughtyAttributes.Core", + "references": [], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [] +} \ No newline at end of file diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/NaughtyAttributes.Core.asmdef.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/NaughtyAttributes.Core.asmdef.meta new file mode 100644 index 0000000000..731749cbea --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/NaughtyAttributes.Core.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 776d03a35f1b52c4a9aed9f56d7b4229 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/Utility.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/Utility.meta new file mode 100644 index 0000000000..80be476889 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/Utility.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6d61a3a977073c740ae13a3683ed22a1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/Utility/EColor.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/Utility/EColor.cs new file mode 100644 index 0000000000..ab50f1d755 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/Utility/EColor.cs @@ -0,0 +1,56 @@ +using UnityEngine; + +namespace NaughtyAttributes +{ + public enum EColor + { + Clear, + White, + Black, + Gray, + Red, + Pink, + Orange, + Yellow, + Green, + Blue, + Indigo, + Violet + } + + public static class EColorExtensions + { + public static Color GetColor(this EColor color) + { + switch (color) + { + case EColor.Clear: + return new Color32(0, 0, 0, 0); + case EColor.White: + return new Color32(255, 255, 255, 255); + case EColor.Black: + return new Color32(0, 0, 0, 255); + case EColor.Gray: + return new Color32(128, 128, 128, 255); + case EColor.Red: + return new Color32(255, 0, 63, 255); + case EColor.Pink: + return new Color32(255, 152, 203, 255); + case EColor.Orange: + return new Color32(255, 128, 0, 255); + case EColor.Yellow: + return new Color32(255, 211, 0, 255); + case EColor.Green: + return new Color32(98, 200, 79, 255); + case EColor.Blue: + return new Color32(0, 135, 189, 255); + case EColor.Indigo: + return new Color32(75, 0, 130, 255); + case EColor.Violet: + return new Color32(128, 0, 255, 255); + default: + return new Color32(0, 0, 0, 255); + } + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/Utility/EColor.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/Utility/EColor.cs.meta new file mode 100644 index 0000000000..0f32c5e079 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/Utility/EColor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 059f8674a8065924ea9c678298b5cd63 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/Utility/EConditionOperator.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/Utility/EConditionOperator.cs new file mode 100644 index 0000000000..d0894f5493 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/Utility/EConditionOperator.cs @@ -0,0 +1,10 @@ +using System; + +namespace NaughtyAttributes +{ + public enum EConditionOperator + { + And, + Or + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/Utility/EConditionOperator.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/Utility/EConditionOperator.cs.meta new file mode 100644 index 0000000000..60e32647f2 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/Utility/EConditionOperator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3c227b6c19fc67b46ad294d95818f85a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/ValidatorAttributes.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/ValidatorAttributes.meta new file mode 100644 index 0000000000..d5aba48fdc --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/ValidatorAttributes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bf91d63e37bed3e4cbf75d576fc03a21 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/ValidatorAttributes/MaxValueAttribute.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/ValidatorAttributes/MaxValueAttribute.cs new file mode 100644 index 0000000000..3410e744bb --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/ValidatorAttributes/MaxValueAttribute.cs @@ -0,0 +1,20 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public class MaxValueAttribute : ValidatorAttribute + { + public float MaxValue { get; private set; } + + public MaxValueAttribute(float maxValue) + { + MaxValue = maxValue; + } + + public MaxValueAttribute(int maxValue) + { + MaxValue = maxValue; + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/ValidatorAttributes/MaxValueAttribute.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/ValidatorAttributes/MaxValueAttribute.cs.meta new file mode 100644 index 0000000000..b02fdbcf4b --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/ValidatorAttributes/MaxValueAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a748250af5ccfd7499cfb444aafb8a03 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/ValidatorAttributes/MinValueAttribute.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/ValidatorAttributes/MinValueAttribute.cs new file mode 100644 index 0000000000..956ca7a72e --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/ValidatorAttributes/MinValueAttribute.cs @@ -0,0 +1,20 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public class MinValueAttribute : ValidatorAttribute + { + public float MinValue { get; private set; } + + public MinValueAttribute(float minValue) + { + MinValue = minValue; + } + + public MinValueAttribute(int minValue) + { + MinValue = minValue; + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/ValidatorAttributes/MinValueAttribute.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/ValidatorAttributes/MinValueAttribute.cs.meta new file mode 100644 index 0000000000..9d90191289 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/ValidatorAttributes/MinValueAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 40133bac7c8d42b4d837138430a503e0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/ValidatorAttributes/RequiredAttribute.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/ValidatorAttributes/RequiredAttribute.cs new file mode 100644 index 0000000000..61e3618475 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/ValidatorAttributes/RequiredAttribute.cs @@ -0,0 +1,15 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public class RequiredAttribute : ValidatorAttribute + { + public string Message { get; private set; } + + public RequiredAttribute(string message = null) + { + Message = message; + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/ValidatorAttributes/RequiredAttribute.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/ValidatorAttributes/RequiredAttribute.cs.meta new file mode 100644 index 0000000000..7f87cfcb03 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/ValidatorAttributes/RequiredAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b0cdf49d1687849458b1a8d4786553d4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/ValidatorAttributes/ValidateInputAttribute.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/ValidatorAttributes/ValidateInputAttribute.cs new file mode 100644 index 0000000000..2b738c3266 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/ValidatorAttributes/ValidateInputAttribute.cs @@ -0,0 +1,17 @@ +using System; + +namespace NaughtyAttributes +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public class ValidateInputAttribute : ValidatorAttribute + { + public string CallbackName { get; private set; } + public string Message { get; private set; } + + public ValidateInputAttribute(string callbackName, string message = null) + { + CallbackName = callbackName; + Message = message; + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/ValidatorAttributes/ValidateInputAttribute.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/ValidatorAttributes/ValidateInputAttribute.cs.meta new file mode 100644 index 0000000000..0addd1a920 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/ValidatorAttributes/ValidateInputAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6c4171d68fb5bc0448d3ac298973e82c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/ValidatorAttributes/ValidatorAttribute.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/ValidatorAttributes/ValidatorAttribute.cs new file mode 100644 index 0000000000..db5dcb5c0e --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/ValidatorAttributes/ValidatorAttribute.cs @@ -0,0 +1,8 @@ +using System; + +namespace NaughtyAttributes +{ + public class ValidatorAttribute : Attribute, INaughtyAttribute + { + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/ValidatorAttributes/ValidatorAttribute.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/ValidatorAttributes/ValidatorAttribute.cs.meta new file mode 100644 index 0000000000..f5daea83dd --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Core/ValidatorAttributes/ValidatorAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0f3c43bed2dbc5249b6c6ec7859c2020 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor.meta new file mode 100644 index 0000000000..8dd7e3e24f --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: b76068e69df25a94ab378b0b6829c4f0 +folderAsset: yes +timeCreated: 1507995613 +licenseType: Store +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/DecoratorDrawers.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/DecoratorDrawers.meta new file mode 100644 index 0000000000..79b2c37137 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/DecoratorDrawers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d3041a2296f3b1749b3ef18e695adee4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/DecoratorDrawers/HorizontalLineDecoratorDrawer.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/DecoratorDrawers/HorizontalLineDecoratorDrawer.cs new file mode 100644 index 0000000000..2953c61370 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/DecoratorDrawers/HorizontalLineDecoratorDrawer.cs @@ -0,0 +1,23 @@ +using UnityEngine; +using UnityEditor; + +namespace NaughtyAttributes.Editor +{ + [CustomPropertyDrawer(typeof(HorizontalLineAttribute))] + public class HorizontalLineDecoratorDrawer : DecoratorDrawer + { + public override float GetHeight() + { + HorizontalLineAttribute lineAttr = (HorizontalLineAttribute)attribute; + return EditorGUIUtility.singleLineHeight + lineAttr.Height; + } + + public override void OnGUI(Rect position) + { + Rect rect = EditorGUI.IndentedRect(position); + rect.y += EditorGUIUtility.singleLineHeight / 3.0f; + HorizontalLineAttribute lineAttr = (HorizontalLineAttribute)attribute; + NaughtyEditorGUI.HorizontalLine(rect, lineAttr.Height, lineAttr.Color.GetColor()); + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/DecoratorDrawers/HorizontalLineDecoratorDrawer.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/DecoratorDrawers/HorizontalLineDecoratorDrawer.cs.meta new file mode 100644 index 0000000000..719f6d80a8 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/DecoratorDrawers/HorizontalLineDecoratorDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3ec99f3a124f20e40b8f5edfeb1ecced +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/DecoratorDrawers/InfoBoxDecoratorDrawer.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/DecoratorDrawers/InfoBoxDecoratorDrawer.cs new file mode 100644 index 0000000000..83cdbd2065 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/DecoratorDrawers/InfoBoxDecoratorDrawer.cs @@ -0,0 +1,59 @@ +using UnityEditor; +using UnityEngine; + +namespace NaughtyAttributes.Editor +{ + [CustomPropertyDrawer(typeof(InfoBoxAttribute))] + public class InfoBoxDecoratorDrawer : DecoratorDrawer + { + public override float GetHeight() + { + return GetHelpBoxHeight(); + } + + public override void OnGUI(Rect rect) + { + InfoBoxAttribute infoBoxAttribute = (InfoBoxAttribute)attribute; + + float indentLength = NaughtyEditorGUI.GetIndentLength(rect); + Rect infoBoxRect = new Rect( + rect.x + indentLength, + rect.y, + rect.width - indentLength, + GetHelpBoxHeight()); + + DrawInfoBox(infoBoxRect, infoBoxAttribute.Text, infoBoxAttribute.Type); + } + + private float GetHelpBoxHeight() + { + InfoBoxAttribute infoBoxAttribute = (InfoBoxAttribute)attribute; + float minHeight = EditorGUIUtility.singleLineHeight * 2.0f; + float desiredHeight = GUI.skin.box.CalcHeight(new GUIContent(infoBoxAttribute.Text), EditorGUIUtility.currentViewWidth); + float height = Mathf.Max(minHeight, desiredHeight); + + return height; + } + + private void DrawInfoBox(Rect rect, string infoText, EInfoBoxType infoBoxType) + { + MessageType messageType = MessageType.None; + switch (infoBoxType) + { + case EInfoBoxType.Normal: + messageType = MessageType.Info; + break; + + case EInfoBoxType.Warning: + messageType = MessageType.Warning; + break; + + case EInfoBoxType.Error: + messageType = MessageType.Error; + break; + } + + NaughtyEditorGUI.HelpBox(rect, infoText, messageType); + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/DecoratorDrawers/InfoBoxDecoratorDrawer.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/DecoratorDrawers/InfoBoxDecoratorDrawer.cs.meta new file mode 100644 index 0000000000..5f50aced94 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/DecoratorDrawers/InfoBoxDecoratorDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e9c18b0e698717442b7631c5066d667f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/NaughtyAttributes.Editor.asmdef b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/NaughtyAttributes.Editor.asmdef new file mode 100644 index 0000000000..e1aafc2693 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/NaughtyAttributes.Editor.asmdef @@ -0,0 +1,16 @@ +{ + "name": "NaughtyAttributes.Editor", + "references": [ + "NaughtyAttributes.Core" + ], + "optionalUnityReferences": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [] +} \ No newline at end of file diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/NaughtyAttributes.Editor.asmdef.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/NaughtyAttributes.Editor.asmdef.meta new file mode 100644 index 0000000000..70dc9f26ed --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/NaughtyAttributes.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f88fb04354076c646a4107a491394033 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/NaughtyInspector.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/NaughtyInspector.cs new file mode 100644 index 0000000000..03adaee624 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/NaughtyInspector.cs @@ -0,0 +1,221 @@ +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using UnityEditor; +using UnityEngine; + +namespace NaughtyAttributes.Editor +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(UnityEngine.Object), true)] + public class NaughtyInspector : UnityEditor.Editor + { + private List _serializedProperties = new List(); + private IEnumerable _nonSerializedFields; + private IEnumerable _nativeProperties; + private IEnumerable _methods; + private Dictionary _foldouts = new Dictionary(); + + protected virtual void OnEnable() + { + _nonSerializedFields = ReflectionUtility.GetAllFields( + target, f => f.GetCustomAttributes(typeof(ShowNonSerializedFieldAttribute), true).Length > 0); + + _nativeProperties = ReflectionUtility.GetAllProperties( + target, p => p.GetCustomAttributes(typeof(ShowNativePropertyAttribute), true).Length > 0); + + _methods = ReflectionUtility.GetAllMethods( + target, m => m.GetCustomAttributes(typeof(ButtonAttribute), true).Length > 0); + } + + protected virtual void OnDisable() + { + ReorderableListPropertyDrawer.Instance.ClearCache(); + } + + public override void OnInspectorGUI() + { + GetSerializedProperties(ref _serializedProperties); + + bool anyNaughtyAttribute = _serializedProperties.Any(p => PropertyUtility.GetAttribute(p) != null); + if (!anyNaughtyAttribute) + { + DrawDefaultInspector(); + } + else + { + DrawSerializedProperties(); + } + + DrawNonSerializedFields(); + DrawNativeProperties(); + DrawButtons(); + } + + protected void GetSerializedProperties(ref List outSerializedProperties) + { + outSerializedProperties.Clear(); + using (var iterator = serializedObject.GetIterator()) + { + if (iterator.NextVisible(true)) + { + do + { + outSerializedProperties.Add(serializedObject.FindProperty(iterator.name)); + } + while (iterator.NextVisible(false)); + } + } + } + + protected void DrawSerializedProperties() + { + serializedObject.Update(); + + // Draw non-grouped serialized properties + foreach (var property in GetNonGroupedProperties(_serializedProperties)) + { + if (property.name.Equals("m_Script", System.StringComparison.Ordinal)) + { + using (new EditorGUI.DisabledScope(disabled: true)) + { + EditorGUILayout.PropertyField(property); + } + } + else + { + NaughtyEditorGUI.PropertyField_Layout(property, includeChildren: true); + } + } + + // Draw grouped serialized properties + foreach (var group in GetGroupedProperties(_serializedProperties)) + { + IEnumerable visibleProperties = group.Where(p => PropertyUtility.IsVisible(p)); + if (!visibleProperties.Any()) + { + continue; + } + + NaughtyEditorGUI.BeginBoxGroup_Layout(group.Key); + foreach (var property in visibleProperties) + { + NaughtyEditorGUI.PropertyField_Layout(property, includeChildren: true); + } + + NaughtyEditorGUI.EndBoxGroup_Layout(); + } + + // Draw foldout serialized properties + foreach (var group in GetFoldoutProperties(_serializedProperties)) + { + IEnumerable visibleProperties = group.Where(p => PropertyUtility.IsVisible(p)); + if (!visibleProperties.Any()) + { + continue; + } + + if (!_foldouts.ContainsKey(group.Key)) + { + _foldouts[group.Key] = new SavedBool($"{target.GetInstanceID()}.{group.Key}", false); + } + + _foldouts[group.Key].Value = EditorGUILayout.Foldout(_foldouts[group.Key].Value, group.Key, true); + if (_foldouts[group.Key].Value) + { + foreach (var property in visibleProperties) + { + NaughtyEditorGUI.PropertyField_Layout(property, true); + } + } + } + + serializedObject.ApplyModifiedProperties(); + } + + protected void DrawNonSerializedFields(bool drawHeader = false) + { + if (_nonSerializedFields.Any()) + { + if (drawHeader) + { + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Non-Serialized Fields", GetHeaderGUIStyle()); + NaughtyEditorGUI.HorizontalLine( + EditorGUILayout.GetControlRect(false), HorizontalLineAttribute.DefaultHeight, HorizontalLineAttribute.DefaultColor.GetColor()); + } + + foreach (var field in _nonSerializedFields) + { + NaughtyEditorGUI.NonSerializedField_Layout(serializedObject.targetObject, field); + } + } + } + + protected void DrawNativeProperties(bool drawHeader = false) + { + if (_nativeProperties.Any()) + { + if (drawHeader) + { + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Native Properties", GetHeaderGUIStyle()); + NaughtyEditorGUI.HorizontalLine( + EditorGUILayout.GetControlRect(false), HorizontalLineAttribute.DefaultHeight, HorizontalLineAttribute.DefaultColor.GetColor()); + } + + foreach (var property in _nativeProperties) + { + NaughtyEditorGUI.NativeProperty_Layout(serializedObject.targetObject, property); + } + } + } + + protected void DrawButtons(bool drawHeader = false) + { + if (_methods.Any()) + { + if (drawHeader) + { + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Buttons", GetHeaderGUIStyle()); + NaughtyEditorGUI.HorizontalLine( + EditorGUILayout.GetControlRect(false), HorizontalLineAttribute.DefaultHeight, HorizontalLineAttribute.DefaultColor.GetColor()); + } + + foreach (var method in _methods) + { + NaughtyEditorGUI.Button(serializedObject.targetObject, method); + } + } + } + + private static IEnumerable GetNonGroupedProperties(IEnumerable properties) + { + return properties.Where(p => PropertyUtility.GetAttribute(p) == null); + } + + private static IEnumerable> GetGroupedProperties(IEnumerable properties) + { + return properties + .Where(p => PropertyUtility.GetAttribute(p) != null) + .GroupBy(p => PropertyUtility.GetAttribute(p).Name); + } + + private static IEnumerable> GetFoldoutProperties(IEnumerable properties) + { + return properties + .Where(p => PropertyUtility.GetAttribute(p) != null) + .GroupBy(p => PropertyUtility.GetAttribute(p).Name); + } + + private static GUIStyle GetHeaderGUIStyle() + { + GUIStyle style = new GUIStyle(EditorStyles.centeredGreyMiniLabel); + style.fontStyle = FontStyle.Bold; + style.alignment = TextAnchor.UpperCenter; + + return style; + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/NaughtyInspector.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/NaughtyInspector.cs.meta new file mode 100644 index 0000000000..b63e99f9fa --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/NaughtyInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1b9b53879f7c93b42835c3ad9e0d0a66 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers.meta new file mode 100644 index 0000000000..7d7dbed8ac --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4327d74fca5deaa4c83c483fe468d274 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/AllowNestingPropertyDrawer.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/AllowNestingPropertyDrawer.cs new file mode 100644 index 0000000000..6c391327eb --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/AllowNestingPropertyDrawer.cs @@ -0,0 +1,16 @@ +using UnityEngine; +using UnityEditor; + +namespace NaughtyAttributes.Editor +{ + [CustomPropertyDrawer(typeof(AllowNestingAttribute))] + public class AllowNestingPropertyDrawer : PropertyDrawerBase + { + protected override void OnGUI_Internal(Rect rect, SerializedProperty property, GUIContent label) + { + EditorGUI.BeginProperty(rect, label, property); + EditorGUI.PropertyField(rect, property, label, true); + EditorGUI.EndProperty(); + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/AllowNestingPropertyDrawer.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/AllowNestingPropertyDrawer.cs.meta new file mode 100644 index 0000000000..f2f2145468 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/AllowNestingPropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a3175e7041b8f4348bd652485a78e7b1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/AnimatorParamPropertyDrawer.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/AnimatorParamPropertyDrawer.cs new file mode 100644 index 0000000000..cf3da38bc6 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/AnimatorParamPropertyDrawer.cs @@ -0,0 +1,173 @@ +using System.Collections.Generic; +using System.Reflection; +using UnityEditor; +using UnityEditor.Animations; +using UnityEngine; + +namespace NaughtyAttributes.Editor +{ + [CustomPropertyDrawer(typeof(AnimatorParamAttribute))] + public class AnimatorParamPropertyDrawer : PropertyDrawerBase + { + private const string InvalidAnimatorControllerWarningMessage = "Target animator controller is null"; + private const string InvalidTypeWarningMessage = "{0} must be an int or a string"; + + protected override float GetPropertyHeight_Internal(SerializedProperty property, GUIContent label) + { + AnimatorParamAttribute animatorParamAttribute = PropertyUtility.GetAttribute(property); + bool validAnimatorController = GetAnimatorController(property, animatorParamAttribute.AnimatorName) != null; + bool validPropertyType = property.propertyType == SerializedPropertyType.Integer || property.propertyType == SerializedPropertyType.String; + + return (validAnimatorController && validPropertyType) + ? GetPropertyHeight(property) + : GetPropertyHeight(property) + GetHelpBoxHeight(); + } + + protected override void OnGUI_Internal(Rect rect, SerializedProperty property, GUIContent label) + { + EditorGUI.BeginProperty(rect, label, property); + + AnimatorParamAttribute animatorParamAttribute = PropertyUtility.GetAttribute(property); + + AnimatorController animatorController = GetAnimatorController(property, animatorParamAttribute.AnimatorName); + if (animatorController == null) + { + DrawDefaultPropertyAndHelpBox(rect, property, InvalidAnimatorControllerWarningMessage, MessageType.Warning); + return; + } + + int parametersCount = animatorController.parameters.Length; + List animatorParameters = new List(parametersCount); + for (int i = 0; i < parametersCount; i++) + { + AnimatorControllerParameter parameter = animatorController.parameters[i]; + if (animatorParamAttribute.AnimatorParamType == null || parameter.type == animatorParamAttribute.AnimatorParamType) + { + animatorParameters.Add(parameter); + } + } + + switch (property.propertyType) + { + case SerializedPropertyType.Integer: + DrawPropertyForInt(rect, property, label, animatorParameters); + break; + case SerializedPropertyType.String: + DrawPropertyForString(rect, property, label, animatorParameters); + break; + default: + DrawDefaultPropertyAndHelpBox(rect, property, string.Format(InvalidTypeWarningMessage, property.name), MessageType.Warning); + break; + } + + EditorGUI.EndProperty(); + } + + private static void DrawPropertyForInt(Rect rect, SerializedProperty property, GUIContent label, List animatorParameters) + { + int paramNameHash = property.intValue; + int index = 0; + + for (int i = 0; i < animatorParameters.Count; i++) + { + if (paramNameHash == animatorParameters[i].nameHash) + { + index = i + 1; // +1 because the first option is reserved for (None) + break; + } + } + + string[] displayOptions = GetDisplayOptions(animatorParameters); + + int newIndex = EditorGUI.Popup(rect, label.text, index, displayOptions); + int newValue = newIndex == 0 ? 0 : animatorParameters[newIndex - 1].nameHash; + + if (property.intValue != newValue) + { + property.intValue = newValue; + } + } + + private static void DrawPropertyForString(Rect rect, SerializedProperty property, GUIContent label, List animatorParameters) + { + string paramName = property.stringValue; + int index = 0; + + for (int i = 0; i < animatorParameters.Count; i++) + { + if (paramName.Equals(animatorParameters[i].name, System.StringComparison.Ordinal)) + { + index = i + 1; // +1 because the first option is reserved for (None) + break; + } + } + + string[] displayOptions = GetDisplayOptions(animatorParameters); + + int newIndex = EditorGUI.Popup(rect, label.text, index, displayOptions); + string newValue = newIndex == 0 ? null : animatorParameters[newIndex - 1].name; + + if (!property.stringValue.Equals(newValue, System.StringComparison.Ordinal)) + { + property.stringValue = newValue; + } + } + + private static string[] GetDisplayOptions(List animatorParams) + { + string[] displayOptions = new string[animatorParams.Count + 1]; + displayOptions[0] = "(None)"; + + for (int i = 0; i < animatorParams.Count; i++) + { + displayOptions[i + 1] = animatorParams[i].name; + } + + return displayOptions; + } + + private static AnimatorController GetAnimatorController(SerializedProperty property, string animatorName) + { + object target = PropertyUtility.GetTargetObjectWithProperty(property); + + FieldInfo animatorFieldInfo = ReflectionUtility.GetField(target, animatorName); + if (animatorFieldInfo != null && + animatorFieldInfo.FieldType == typeof(Animator)) + { + Animator animator = animatorFieldInfo.GetValue(target) as Animator; + if (animator != null) + { + AnimatorController animatorController = animator.runtimeAnimatorController as AnimatorController; + return animatorController; + } + } + + PropertyInfo animatorPropertyInfo = ReflectionUtility.GetProperty(target, animatorName); + if (animatorPropertyInfo != null && + animatorPropertyInfo.PropertyType == typeof(Animator)) + { + Animator animator = animatorPropertyInfo.GetValue(target) as Animator; + if (animator != null) + { + AnimatorController animatorController = animator.runtimeAnimatorController as AnimatorController; + return animatorController; + } + } + + MethodInfo animatorGetterMethodInfo = ReflectionUtility.GetMethod(target, animatorName); + if (animatorGetterMethodInfo != null && + animatorGetterMethodInfo.ReturnType == typeof(Animator) && + animatorGetterMethodInfo.GetParameters().Length == 0) + { + Animator animator = animatorGetterMethodInfo.Invoke(target, null) as Animator; + if (animator != null) + { + AnimatorController animatorController = animator.runtimeAnimatorController as AnimatorController; + return animatorController; + } + } + + return null; + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/AnimatorParamPropertyDrawer.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/AnimatorParamPropertyDrawer.cs.meta new file mode 100644 index 0000000000..4c3a7e6496 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/AnimatorParamPropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 98ff8cb1bcefae740a68d9a5c5ee3563 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/CurveRangePropertyDrawer.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/CurveRangePropertyDrawer.cs new file mode 100644 index 0000000000..8f5a6c5dad --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/CurveRangePropertyDrawer.cs @@ -0,0 +1,47 @@ +using UnityEngine; +using UnityEditor; + +namespace NaughtyAttributes.Editor +{ + [CustomPropertyDrawer(typeof(CurveRangeAttribute))] + public class CurveRangePropertyDrawer : PropertyDrawerBase + { + protected override float GetPropertyHeight_Internal(SerializedProperty property, GUIContent label) + { + float propertyHeight = property.propertyType == SerializedPropertyType.AnimationCurve + ? GetPropertyHeight(property) + : GetPropertyHeight(property) + GetHelpBoxHeight(); + + return propertyHeight; + } + + protected override void OnGUI_Internal(Rect rect, SerializedProperty property, GUIContent label) + { + EditorGUI.BeginProperty(rect, label, property); + + // Check user error + if (property.propertyType != SerializedPropertyType.AnimationCurve) + { + string message = string.Format("Field {0} is not an AnimationCurve", property.name); + DrawDefaultPropertyAndHelpBox(rect, property, message, MessageType.Warning); + return; + } + + var curveRangeAttribute = (CurveRangeAttribute)attribute; + var curveRanges = new Rect( + curveRangeAttribute.Min.x, + curveRangeAttribute.Min.y, + curveRangeAttribute.Max.x - curveRangeAttribute.Min.x, + curveRangeAttribute.Max.y - curveRangeAttribute.Min.y); + + EditorGUI.CurveField( + rect, + property, + curveRangeAttribute.Color == EColor.Clear ? Color.green : curveRangeAttribute.Color.GetColor(), + curveRanges, + label); + + EditorGUI.EndProperty(); + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/CurveRangePropertyDrawer.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/CurveRangePropertyDrawer.cs.meta new file mode 100644 index 0000000000..adea11ef66 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/CurveRangePropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 798b8c99fbc072a4b83ee387e472a2bd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/DropdownPropertyDrawer.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/DropdownPropertyDrawer.cs new file mode 100644 index 0000000000..90184868f6 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/DropdownPropertyDrawer.cs @@ -0,0 +1,177 @@ +using UnityEngine; +using UnityEditor; +using System.Collections; +using System.Reflection; +using System; +using System.Collections.Generic; + +namespace NaughtyAttributes.Editor +{ + [CustomPropertyDrawer(typeof(DropdownAttribute))] + public class DropdownPropertyDrawer : PropertyDrawerBase + { + protected override float GetPropertyHeight_Internal(SerializedProperty property, GUIContent label) + { + DropdownAttribute dropdownAttribute = (DropdownAttribute)attribute; + object values = GetValues(property, dropdownAttribute.ValuesName); + FieldInfo fieldInfo = ReflectionUtility.GetField(PropertyUtility.GetTargetObjectWithProperty(property), property.name); + + float propertyHeight = AreValuesValid(values, fieldInfo) + ? GetPropertyHeight(property) + : GetPropertyHeight(property) + GetHelpBoxHeight(); + + return propertyHeight; + } + + protected override void OnGUI_Internal(Rect rect, SerializedProperty property, GUIContent label) + { + EditorGUI.BeginProperty(rect, label, property); + + DropdownAttribute dropdownAttribute = (DropdownAttribute)attribute; + object target = PropertyUtility.GetTargetObjectWithProperty(property); + + object valuesObject = GetValues(property, dropdownAttribute.ValuesName); + FieldInfo dropdownField = ReflectionUtility.GetField(target, property.name); + + if (AreValuesValid(valuesObject, dropdownField)) + { + if (valuesObject is IList && dropdownField.FieldType == GetElementType(valuesObject)) + { + // Selected value + object selectedValue = dropdownField.GetValue(target); + + // Values and display options + IList valuesList = (IList)valuesObject; + object[] values = new object[valuesList.Count]; + string[] displayOptions = new string[valuesList.Count]; + + for (int i = 0; i < values.Length; i++) + { + object value = valuesList[i]; + values[i] = value; + displayOptions[i] = value == null ? "" : value.ToString(); + } + + // Selected value index + int selectedValueIndex = Array.IndexOf(values, selectedValue); + if (selectedValueIndex < 0) + { + selectedValueIndex = 0; + } + + NaughtyEditorGUI.Dropdown( + rect, property.serializedObject, target, dropdownField, label.text, selectedValueIndex, values, displayOptions); + } + else if (valuesObject is IDropdownList) + { + // Current value + object selectedValue = dropdownField.GetValue(target); + + // Current value index, values and display options + int index = -1; + int selectedValueIndex = -1; + List values = new List(); + List displayOptions = new List(); + IDropdownList dropdown = (IDropdownList)valuesObject; + + using (IEnumerator> dropdownEnumerator = dropdown.GetEnumerator()) + { + while (dropdownEnumerator.MoveNext()) + { + index++; + + KeyValuePair current = dropdownEnumerator.Current; + if (current.Value?.Equals(selectedValue) == true) + { + selectedValueIndex = index; + } + + values.Add(current.Value); + + if (current.Key == null) + { + displayOptions.Add(""); + } + else if (string.IsNullOrWhiteSpace(current.Key)) + { + displayOptions.Add(""); + } + else + { + displayOptions.Add(current.Key); + } + } + } + + if (selectedValueIndex < 0) + { + selectedValueIndex = 0; + } + + NaughtyEditorGUI.Dropdown( + rect, property.serializedObject, target, dropdownField, label.text, selectedValueIndex, values.ToArray(), displayOptions.ToArray()); + } + } + else + { + string message = string.Format("Invalid values with name '{0}' provided to '{1}'. Either the values name is incorrect or the types of the target field and the values field/property/method don't match", + dropdownAttribute.ValuesName, dropdownAttribute.GetType().Name); + + DrawDefaultPropertyAndHelpBox(rect, property, message, MessageType.Warning); + } + + EditorGUI.EndProperty(); + } + + private object GetValues(SerializedProperty property, string valuesName) + { + object target = PropertyUtility.GetTargetObjectWithProperty(property); + + FieldInfo valuesFieldInfo = ReflectionUtility.GetField(target, valuesName); + if (valuesFieldInfo != null) + { + return valuesFieldInfo.GetValue(target); + } + + PropertyInfo valuesPropertyInfo = ReflectionUtility.GetProperty(target, valuesName); + if (valuesPropertyInfo != null) + { + return valuesPropertyInfo.GetValue(target); + } + + MethodInfo methodValuesInfo = ReflectionUtility.GetMethod(target, valuesName); + if (methodValuesInfo != null && + methodValuesInfo.ReturnType != typeof(void) && + methodValuesInfo.GetParameters().Length == 0) + { + return methodValuesInfo.Invoke(target, null); + } + + return null; + } + + private bool AreValuesValid(object values, FieldInfo dropdownField) + { + if (values == null || dropdownField == null) + { + return false; + } + + if ((values is IList && dropdownField.FieldType == GetElementType(values)) || + (values is IDropdownList)) + { + return true; + } + + return false; + } + + private Type GetElementType(object values) + { + Type valuesType = values.GetType(); + Type elementType = ReflectionUtility.GetListElementType(valuesType); + + return elementType; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/DropdownPropertyDrawer.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/DropdownPropertyDrawer.cs.meta new file mode 100644 index 0000000000..fecae2ce0b --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/DropdownPropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dd080b36769bcd94d909fc0431cf25e0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/EnumFlagsPropertyDrawer.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/EnumFlagsPropertyDrawer.cs new file mode 100644 index 0000000000..df2da6d13f --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/EnumFlagsPropertyDrawer.cs @@ -0,0 +1,38 @@ +using UnityEngine; +using UnityEditor; +using System; + +namespace NaughtyAttributes.Editor +{ + [CustomPropertyDrawer(typeof(EnumFlagsAttribute))] + public class EnumFlagsPropertyDrawer : PropertyDrawerBase + { + protected override float GetPropertyHeight_Internal(SerializedProperty property, GUIContent label) + { + Enum targetEnum = PropertyUtility.GetTargetObjectOfProperty(property) as Enum; + + return (targetEnum != null) + ? GetPropertyHeight(property) + : GetPropertyHeight(property) + GetHelpBoxHeight(); + } + + protected override void OnGUI_Internal(Rect rect, SerializedProperty property, GUIContent label) + { + EditorGUI.BeginProperty(rect, label, property); + + Enum targetEnum = PropertyUtility.GetTargetObjectOfProperty(property) as Enum; + if (targetEnum != null) + { + Enum enumNew = EditorGUI.EnumFlagsField(rect, label.text, targetEnum); + property.intValue = (int)Convert.ChangeType(enumNew, targetEnum.GetType()); + } + else + { + string message = attribute.GetType().Name + " can be used only on enums"; + DrawDefaultPropertyAndHelpBox(rect, property, message, MessageType.Warning); + } + + EditorGUI.EndProperty(); + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/EnumFlagsPropertyDrawer.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/EnumFlagsPropertyDrawer.cs.meta new file mode 100644 index 0000000000..c0081d298a --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/EnumFlagsPropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b750e1461c1126d4399459b90b31e75e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ExpandablePropertyDrawer.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ExpandablePropertyDrawer.cs new file mode 100644 index 0000000000..705e17a6b4 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ExpandablePropertyDrawer.cs @@ -0,0 +1,195 @@ +using UnityEngine; +using UnityEditor; + +namespace NaughtyAttributes.Editor +{ + [CustomPropertyDrawer(typeof(ExpandableAttribute))] + public class ExpandablePropertyDrawer : PropertyDrawerBase + { + protected override float GetPropertyHeight_Internal(SerializedProperty property, GUIContent label) + { + if (property.objectReferenceValue == null) + { + return GetPropertyHeight(property); + } + + System.Type propertyType = PropertyUtility.GetPropertyType(property); + if (typeof(ScriptableObject).IsAssignableFrom(propertyType)) + { + ScriptableObject scriptableObject = property.objectReferenceValue as ScriptableObject; + if (scriptableObject == null) + { + return GetPropertyHeight(property); + } + + if (property.isExpanded) + { + using (SerializedObject serializedObject = new SerializedObject(scriptableObject)) + { + float totalHeight = EditorGUIUtility.singleLineHeight; + + using (var iterator = serializedObject.GetIterator()) + { + if (iterator.NextVisible(true)) + { + do + { + SerializedProperty childProperty = serializedObject.FindProperty(iterator.name); + if (childProperty.name.Equals("m_Script", System.StringComparison.Ordinal)) + { + continue; + } + + bool visible = PropertyUtility.IsVisible(childProperty); + if (!visible) + { + continue; + } + + float height = GetPropertyHeight(childProperty); + totalHeight += height; + } + while (iterator.NextVisible(false)); + } + } + + totalHeight += EditorGUIUtility.standardVerticalSpacing; + return totalHeight; + } + } + else + { + return GetPropertyHeight(property); + } + } + else + { + return GetPropertyHeight(property) + GetHelpBoxHeight(); + } + } + + protected override void OnGUI_Internal(Rect rect, SerializedProperty property, GUIContent label) + { + EditorGUI.BeginProperty(rect, label, property); + + if (property.objectReferenceValue == null) + { + EditorGUI.PropertyField(rect, property, label, false); + } + else + { + System.Type propertyType = PropertyUtility.GetPropertyType(property); + if (typeof(ScriptableObject).IsAssignableFrom(propertyType)) + { + ScriptableObject scriptableObject = property.objectReferenceValue as ScriptableObject; + if (scriptableObject == null) + { + EditorGUI.PropertyField(rect, property, label, false); + } + else + { + // Draw a foldout + Rect foldoutRect = new Rect() + { + x = rect.x, + y = rect.y, + width = EditorGUIUtility.labelWidth, + height = EditorGUIUtility.singleLineHeight + }; + + property.isExpanded = EditorGUI.Foldout(foldoutRect, property.isExpanded, label, toggleOnLabelClick: true); + + // Draw the scriptable object field + Rect propertyRect = new Rect() + { + x = rect.x, + y = rect.y, + width = rect.width, + height = EditorGUIUtility.singleLineHeight + }; + + EditorGUI.PropertyField(propertyRect, property, label, false); + + // Draw the child properties + if (property.isExpanded) + { + DrawChildProperties(rect, property); + } + } + } + else + { + string message = $"{typeof(ExpandableAttribute).Name} can only be used on scriptable objects"; + DrawDefaultPropertyAndHelpBox(rect, property, message, MessageType.Warning); + } + } + + property.serializedObject.ApplyModifiedProperties(); + EditorGUI.EndProperty(); + } + + private void DrawChildProperties(Rect rect, SerializedProperty property) + { + ScriptableObject scriptableObject = property.objectReferenceValue as ScriptableObject; + if (scriptableObject == null) + { + return; + } + + Rect boxRect = new Rect() + { + x = 0.0f, + y = rect.y + EditorGUIUtility.singleLineHeight, + width = rect.width * 2.0f, + height = rect.height - EditorGUIUtility.singleLineHeight + }; + + GUI.Box(boxRect, GUIContent.none); + + using (new EditorGUI.IndentLevelScope()) + { + SerializedObject serializedObject = new SerializedObject(scriptableObject); + serializedObject.Update(); + + using (var iterator = serializedObject.GetIterator()) + { + float yOffset = EditorGUIUtility.singleLineHeight; + + if (iterator.NextVisible(true)) + { + do + { + SerializedProperty childProperty = serializedObject.FindProperty(iterator.name); + if (childProperty.name.Equals("m_Script", System.StringComparison.Ordinal)) + { + continue; + } + + bool visible = PropertyUtility.IsVisible(childProperty); + if (!visible) + { + continue; + } + + float childHeight = GetPropertyHeight(childProperty); + Rect childRect = new Rect() + { + x = rect.x, + y = rect.y + yOffset, + width = rect.width, + height = childHeight + }; + + NaughtyEditorGUI.PropertyField(childRect, childProperty, true); + + yOffset += childHeight; + } + while (iterator.NextVisible(false)); + } + } + + serializedObject.ApplyModifiedProperties(); + } + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ExpandablePropertyDrawer.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ExpandablePropertyDrawer.cs.meta new file mode 100644 index 0000000000..d5925fe00c --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ExpandablePropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d1ddb7194615bdc4e8b2088c8d165d8b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/InputAxisPropertyDrawer.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/InputAxisPropertyDrawer.cs new file mode 100644 index 0000000000..1fbcfebe45 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/InputAxisPropertyDrawer.cs @@ -0,0 +1,77 @@ +using System.Collections.Generic; +using System.IO; +using System.Linq; +using UnityEditor; +using UnityEngine; + +namespace NaughtyAttributes.Editor +{ + [CustomPropertyDrawer(typeof(InputAxisAttribute))] + public class InputAxisPropertyDrawer : PropertyDrawerBase + { + private static readonly string AssetPath = Path.Combine("ProjectSettings", "InputManager.asset"); + private const string AxesPropertyPath = "m_Axes"; + private const string NamePropertyPath = "m_Name"; + + protected override float GetPropertyHeight_Internal(SerializedProperty property, GUIContent label) + { + return (property.propertyType == SerializedPropertyType.String) + ? GetPropertyHeight(property) + : GetPropertyHeight(property) + GetHelpBoxHeight(); + } + + protected override void OnGUI_Internal(Rect rect, SerializedProperty property, GUIContent label) + { + EditorGUI.BeginProperty(rect, label, property); + + if (property.propertyType == SerializedPropertyType.String) + { + var inputManagerAsset = AssetDatabase.LoadAssetAtPath(AssetPath, typeof(object)); + var inputManager = new SerializedObject(inputManagerAsset); + + var axesProperty = inputManager.FindProperty(AxesPropertyPath); + var axesSet = new HashSet(); + axesSet.Add("(None)"); + + for (var i = 0; i < axesProperty.arraySize; i++) + { + var axis = axesProperty.GetArrayElementAtIndex(i).FindPropertyRelative(NamePropertyPath).stringValue; + axesSet.Add(axis); + } + + var axes = axesSet.ToArray(); + + string propertyString = property.stringValue; + int index = 0; + // check if there is an entry that matches the entry and get the index + // we skip index 0 as that is a special custom case + for (int i = 1; i < axes.Length; i++) + { + if (axes[i].Equals(propertyString, System.StringComparison.Ordinal)) + { + index = i; + break; + } + } + + // Draw the popup box with the current selected index + int newIndex = EditorGUI.Popup(rect, label.text, index, axes); + + // Adjust the actual string value of the property based on the selection + string newValue = newIndex > 0 ? axes[newIndex] : string.Empty; + + if (!property.stringValue.Equals(newValue, System.StringComparison.Ordinal)) + { + property.stringValue = newValue; + } + } + else + { + string message = string.Format("{0} supports only string fields", typeof(InputAxisAttribute).Name); + DrawDefaultPropertyAndHelpBox(rect, property, message, MessageType.Warning); + } + + EditorGUI.EndProperty(); + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/InputAxisPropertyDrawer.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/InputAxisPropertyDrawer.cs.meta new file mode 100644 index 0000000000..08f8f46126 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/InputAxisPropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0de9d3dfe2d466a458be838edf361645 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/LayerPropertyDrawer.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/LayerPropertyDrawer.cs new file mode 100644 index 0000000000..d789eb9243 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/LayerPropertyDrawer.cs @@ -0,0 +1,88 @@ +using UnityEngine; +using UnityEditor; +using System; + +namespace NaughtyAttributes.Editor +{ + [CustomPropertyDrawer(typeof(LayerAttribute))] + public class LayerPropertyDrawer : PropertyDrawerBase + { + private const string TypeWarningMessage = "{0} must be an int or a string"; + + protected override float GetPropertyHeight_Internal(SerializedProperty property, GUIContent label) + { + bool validPropertyType = property.propertyType == SerializedPropertyType.String || property.propertyType == SerializedPropertyType.Integer; + + return validPropertyType + ? GetPropertyHeight(property) + : GetPropertyHeight(property) + GetHelpBoxHeight(); + } + + protected override void OnGUI_Internal(Rect rect, SerializedProperty property, GUIContent label) + { + EditorGUI.BeginProperty(rect, label, property); + + switch (property.propertyType) + { + case SerializedPropertyType.String: + DrawPropertyForString(rect, property, label, GetLayers()); + break; + case SerializedPropertyType.Integer: + DrawPropertyForInt(rect, property, label, GetLayers()); + break; + default: + string message = string.Format(TypeWarningMessage, property.name); + DrawDefaultPropertyAndHelpBox(rect, property, message, MessageType.Warning); + break; + } + + EditorGUI.EndProperty(); + } + + private string[] GetLayers() + { + return UnityEditorInternal.InternalEditorUtility.layers; + } + + private static void DrawPropertyForString(Rect rect, SerializedProperty property, GUIContent label, string[] layers) + { + int index = IndexOf(layers, property.stringValue); + int newIndex = EditorGUI.Popup(rect, label.text, index, layers); + string newLayer = layers[newIndex]; + + if (!property.stringValue.Equals(newLayer, StringComparison.Ordinal)) + { + property.stringValue = layers[newIndex]; + } + } + + private static void DrawPropertyForInt(Rect rect, SerializedProperty property, GUIContent label, string[] layers) + { + int index = 0; + string layerName = LayerMask.LayerToName(property.intValue); + for (int i = 0; i < layers.Length; i++) + { + if (layerName.Equals(layers[i], StringComparison.Ordinal)) + { + index = i; + break; + } + } + + int newIndex = EditorGUI.Popup(rect, label.text, index, layers); + string newLayerName = layers[newIndex]; + int newLayerNumber = LayerMask.NameToLayer(newLayerName); + + if (property.intValue != newLayerNumber) + { + property.intValue = newLayerNumber; + } + } + + private static int IndexOf(string[] layers, string layer) + { + var index = Array.IndexOf(layers, layer); + return Mathf.Clamp(index, 0, layers.Length - 1); + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/LayerPropertyDrawer.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/LayerPropertyDrawer.cs.meta new file mode 100644 index 0000000000..4b2ac86c00 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/LayerPropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7278ba0893ab7d940b5f944e5b1cf1a7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/MinMaxSliderPropertyDrawer.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/MinMaxSliderPropertyDrawer.cs new file mode 100644 index 0000000000..7866c5697b --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/MinMaxSliderPropertyDrawer.cs @@ -0,0 +1,108 @@ +using UnityEditor; +using UnityEngine; + +namespace NaughtyAttributes.Editor +{ + [CustomPropertyDrawer(typeof(MinMaxSliderAttribute))] + public class MinMaxSliderPropertyDrawer : PropertyDrawerBase + { + protected override float GetPropertyHeight_Internal(SerializedProperty property, GUIContent label) + { + return (property.propertyType == SerializedPropertyType.Vector2 || property.propertyType == SerializedPropertyType.Vector2Int) + ? GetPropertyHeight(property) + : GetPropertyHeight(property) + GetHelpBoxHeight(); + } + + protected override void OnGUI_Internal(Rect rect, SerializedProperty property, GUIContent label) + { + EditorGUI.BeginProperty(rect, label, property); + + MinMaxSliderAttribute minMaxSliderAttribute = (MinMaxSliderAttribute)attribute; + + if (property.propertyType == SerializedPropertyType.Vector2 || property.propertyType == SerializedPropertyType.Vector2Int) + { + EditorGUI.BeginProperty(rect, label, property); + + float indentLength = NaughtyEditorGUI.GetIndentLength(rect); + float labelWidth = EditorGUIUtility.labelWidth + NaughtyEditorGUI.HorizontalSpacing; + float floatFieldWidth = EditorGUIUtility.fieldWidth; + float sliderWidth = rect.width - labelWidth - 2.0f * floatFieldWidth; + float sliderPadding = 5.0f; + + Rect labelRect = new Rect( + rect.x, + rect.y, + labelWidth, + rect.height); + + Rect sliderRect = new Rect( + rect.x + labelWidth + floatFieldWidth + sliderPadding - indentLength, + rect.y, + sliderWidth - 2.0f * sliderPadding + indentLength, + rect.height); + + Rect minFloatFieldRect = new Rect( + rect.x + labelWidth - indentLength, + rect.y, + floatFieldWidth + indentLength, + rect.height); + + Rect maxFloatFieldRect = new Rect( + rect.x + labelWidth + floatFieldWidth + sliderWidth - indentLength, + rect.y, + floatFieldWidth + indentLength, + rect.height); + + // Draw the label + EditorGUI.LabelField(labelRect, label.text); + + // Draw the slider + EditorGUI.BeginChangeCheck(); + + if (property.propertyType == SerializedPropertyType.Vector2) + { + Vector2 sliderValue = property.vector2Value; + EditorGUI.MinMaxSlider(sliderRect, ref sliderValue.x, ref sliderValue.y, minMaxSliderAttribute.MinValue, minMaxSliderAttribute.MaxValue); + + sliderValue.x = EditorGUI.FloatField(minFloatFieldRect, sliderValue.x); + sliderValue.x = Mathf.Clamp(sliderValue.x, minMaxSliderAttribute.MinValue, Mathf.Min(minMaxSliderAttribute.MaxValue, sliderValue.y)); + + sliderValue.y = EditorGUI.FloatField(maxFloatFieldRect, sliderValue.y); + sliderValue.y = Mathf.Clamp(sliderValue.y, Mathf.Max(minMaxSliderAttribute.MinValue, sliderValue.x), minMaxSliderAttribute.MaxValue); + + if (EditorGUI.EndChangeCheck()) + { + property.vector2Value = sliderValue; + } + } + else if (property.propertyType == SerializedPropertyType.Vector2Int) + { + Vector2Int sliderValue = property.vector2IntValue; + float xValue = sliderValue.x; + float yValue = sliderValue.y; + EditorGUI.MinMaxSlider(sliderRect, ref xValue, ref yValue, minMaxSliderAttribute.MinValue, minMaxSliderAttribute.MaxValue); + + sliderValue.x = EditorGUI.IntField(minFloatFieldRect, (int)xValue); + sliderValue.x = (int)Mathf.Clamp(sliderValue.x, minMaxSliderAttribute.MinValue, Mathf.Min(minMaxSliderAttribute.MaxValue, sliderValue.y)); + + sliderValue.y = EditorGUI.IntField(maxFloatFieldRect, (int)yValue); + sliderValue.y = (int)Mathf.Clamp(sliderValue.y, Mathf.Max(minMaxSliderAttribute.MinValue, sliderValue.x), minMaxSliderAttribute.MaxValue); + + if (EditorGUI.EndChangeCheck()) + { + property.vector2IntValue = sliderValue; + } + } + + EditorGUI.EndProperty(); + } + else + { + string message = minMaxSliderAttribute.GetType().Name + " can be used only on Vector2 or Vector2Int fields"; + DrawDefaultPropertyAndHelpBox(rect, property, message, MessageType.Warning); + } + + EditorGUI.EndProperty(); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/MinMaxSliderPropertyDrawer.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/MinMaxSliderPropertyDrawer.cs.meta new file mode 100644 index 0000000000..4613ffecba --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/MinMaxSliderPropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 27011af81554b5b4489b155f09275475 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ProgressBarPropertyDrawer.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ProgressBarPropertyDrawer.cs new file mode 100644 index 0000000000..84d882338a --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ProgressBarPropertyDrawer.cs @@ -0,0 +1,154 @@ +using UnityEngine; +using UnityEditor; +using System.Reflection; + +namespace NaughtyAttributes.Editor +{ + [CustomPropertyDrawer(typeof(ProgressBarAttribute))] + public class ProgressBarPropertyDrawer : PropertyDrawerBase + { + protected override float GetPropertyHeight_Internal(SerializedProperty property, GUIContent label) + { + ProgressBarAttribute progressBarAttribute = PropertyUtility.GetAttribute(property); + var maxValue = GetMaxValue(property, progressBarAttribute); + + return IsNumber(property) && IsNumber(maxValue) + ? GetPropertyHeight(property) + : GetPropertyHeight(property) + GetHelpBoxHeight(); + } + + protected override void OnGUI_Internal(Rect rect, SerializedProperty property, GUIContent label) + { + EditorGUI.BeginProperty(rect, label, property); + + if (!IsNumber(property)) + { + string message = string.Format("Field {0} is not a number", property.name); + DrawDefaultPropertyAndHelpBox(rect, property, message, MessageType.Warning); + return; + } + + ProgressBarAttribute progressBarAttribute = PropertyUtility.GetAttribute(property); + var value = property.propertyType == SerializedPropertyType.Integer ? property.intValue : property.floatValue; + var valueFormatted = property.propertyType == SerializedPropertyType.Integer ? value.ToString() : string.Format("{0:0.00}", value); + var maxValue = GetMaxValue(property, progressBarAttribute); + + if (maxValue != null && IsNumber(maxValue)) + { + var fillPercentage = value / CastToFloat(maxValue); + var barLabel = (!string.IsNullOrEmpty(progressBarAttribute.Name) ? "[" + progressBarAttribute.Name + "] " : "") + valueFormatted + "/" + maxValue; + var barColor = progressBarAttribute.Color.GetColor(); + var labelColor = Color.white; + + var indentLength = NaughtyEditorGUI.GetIndentLength(rect); + Rect barRect = new Rect() + { + x = rect.x + indentLength, + y = rect.y, + width = rect.width - indentLength, + height = EditorGUIUtility.singleLineHeight + }; + + DrawBar(barRect, Mathf.Clamp01(fillPercentage), barLabel, barColor, labelColor); + } + else + { + string message = string.Format( + "The provided dynamic max value for the progress bar is not correct. Please check if the '{0}' is correct, or the return type is float/int", + nameof(progressBarAttribute.MaxValueName)); + + DrawDefaultPropertyAndHelpBox(rect, property, message, MessageType.Warning); + } + + EditorGUI.EndProperty(); + } + + private object GetMaxValue(SerializedProperty property, ProgressBarAttribute progressBarAttribute) + { + if (string.IsNullOrEmpty(progressBarAttribute.MaxValueName)) + { + return progressBarAttribute.MaxValue; + } + else + { + object target = PropertyUtility.GetTargetObjectWithProperty(property); + + FieldInfo valuesFieldInfo = ReflectionUtility.GetField(target, progressBarAttribute.MaxValueName); + if (valuesFieldInfo != null) + { + return valuesFieldInfo.GetValue(target); + } + + PropertyInfo valuesPropertyInfo = ReflectionUtility.GetProperty(target, progressBarAttribute.MaxValueName); + if (valuesPropertyInfo != null) + { + return valuesPropertyInfo.GetValue(target); + } + + MethodInfo methodValuesInfo = ReflectionUtility.GetMethod(target, progressBarAttribute.MaxValueName); + if (methodValuesInfo != null && + (methodValuesInfo.ReturnType == typeof(float) || methodValuesInfo.ReturnType == typeof(int)) && + methodValuesInfo.GetParameters().Length == 0) + { + return methodValuesInfo.Invoke(target, null); + } + + return null; + } + } + + private void DrawBar(Rect rect, float fillPercent, string label, Color barColor, Color labelColor) + { + if (Event.current.type != EventType.Repaint) + { + return; + } + + var fillRect = new Rect(rect.x, rect.y, rect.width * fillPercent, rect.height); + + EditorGUI.DrawRect(rect, new Color(0.13f, 0.13f, 0.13f)); + EditorGUI.DrawRect(fillRect, barColor); + + // set alignment and cache the default + var align = GUI.skin.label.alignment; + GUI.skin.label.alignment = TextAnchor.UpperCenter; + + // set the color and cache the default + var c = GUI.contentColor; + GUI.contentColor = labelColor; + + // calculate the position + var labelRect = new Rect(rect.x, rect.y - 2, rect.width, rect.height); + + // draw~ + EditorGUI.DropShadowLabel(labelRect, label); + + // reset color and alignment + GUI.contentColor = c; + GUI.skin.label.alignment = align; + } + + private bool IsNumber(SerializedProperty property) + { + bool isNumber = property.propertyType == SerializedPropertyType.Float || property.propertyType == SerializedPropertyType.Integer; + return isNumber; + } + + private bool IsNumber(object obj) + { + return (obj is float) || (obj is int); + } + + private float CastToFloat(object obj) + { + if (obj is int) + { + return (int)obj; + } + else + { + return (float)obj; + } + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ProgressBarPropertyDrawer.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ProgressBarPropertyDrawer.cs.meta new file mode 100644 index 0000000000..dfb90f1a47 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ProgressBarPropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0bcbc424b10864b4eb6e3bcfb276cdf9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/PropertyDrawerBase.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/PropertyDrawerBase.cs new file mode 100644 index 0000000000..36afd85dc5 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/PropertyDrawerBase.cs @@ -0,0 +1,94 @@ +using UnityEditor; +using UnityEngine; + +namespace NaughtyAttributes.Editor +{ + public abstract class PropertyDrawerBase : PropertyDrawer + { + public sealed override void OnGUI(Rect rect, SerializedProperty property, GUIContent label) + { + // Check if visible + bool visible = PropertyUtility.IsVisible(property); + if (!visible) + { + return; + } + + // Validate + ValidatorAttribute[] validatorAttributes = PropertyUtility.GetAttributes(property); + foreach (var validatorAttribute in validatorAttributes) + { + validatorAttribute.GetValidator().ValidateProperty(property); + } + + // Check if enabled and draw + EditorGUI.BeginChangeCheck(); + bool enabled = PropertyUtility.IsEnabled(property); + + using (new EditorGUI.DisabledScope(disabled: !enabled)) + { + OnGUI_Internal(rect, property, PropertyUtility.GetLabel(property)); + } + + // Call OnValueChanged callbacks + if (EditorGUI.EndChangeCheck()) + { + PropertyUtility.CallOnValueChangedCallbacks(property); + } + } + + protected abstract void OnGUI_Internal(Rect rect, SerializedProperty property, GUIContent label); + + sealed override public float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + bool visible = PropertyUtility.IsVisible(property); + if (!visible) + { + return 0.0f; + } + + return GetPropertyHeight_Internal(property, label); + } + + protected virtual float GetPropertyHeight_Internal(SerializedProperty property, GUIContent label) + { + return EditorGUI.GetPropertyHeight(property, includeChildren: true); + } + + protected float GetPropertyHeight(SerializedProperty property) + { + SpecialCaseDrawerAttribute specialCaseAttribute = PropertyUtility.GetAttribute(property); + if (specialCaseAttribute != null) + { + return specialCaseAttribute.GetDrawer().GetPropertyHeight(property); + } + + return EditorGUI.GetPropertyHeight(property, includeChildren: true); + } + + public virtual float GetHelpBoxHeight() + { + return EditorGUIUtility.singleLineHeight * 2.0f; + } + + public void DrawDefaultPropertyAndHelpBox(Rect rect, SerializedProperty property, string message, MessageType messageType) + { + float indentLength = NaughtyEditorGUI.GetIndentLength(rect); + Rect helpBoxRect = new Rect( + rect.x + indentLength, + rect.y, + rect.width - indentLength, + GetHelpBoxHeight()); + + NaughtyEditorGUI.HelpBox(helpBoxRect, message, MessageType.Warning, context: property.serializedObject.targetObject); + + Rect propertyRect = new Rect( + rect.x, + rect.y + GetHelpBoxHeight(), + rect.width, + GetPropertyHeight(property)); + + EditorGUI.PropertyField(propertyRect, property, true); + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/PropertyDrawerBase.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/PropertyDrawerBase.cs.meta new file mode 100644 index 0000000000..71a80b6ab1 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/PropertyDrawerBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 574f5fa6033f26342816a8a5f39749e5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ResizableTextAreaPropertyDrawer.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ResizableTextAreaPropertyDrawer.cs new file mode 100644 index 0000000000..6a78fa1c1e --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ResizableTextAreaPropertyDrawer.cs @@ -0,0 +1,80 @@ +using UnityEngine; +using UnityEditor; +using System.Text.RegularExpressions; +using System; + +namespace NaughtyAttributes.Editor +{ + [CustomPropertyDrawer(typeof(ResizableTextAreaAttribute))] + public class ResizableTextAreaPropertyDrawer : PropertyDrawerBase + { + protected override float GetPropertyHeight_Internal(SerializedProperty property, GUIContent label) + { + if (property.propertyType == SerializedPropertyType.String) + { + float labelHeight = EditorGUIUtility.singleLineHeight; + float textAreaHeight = GetTextAreaHeight(property.stringValue); + return labelHeight + textAreaHeight; + } + else + { + return GetPropertyHeight(property) + GetHelpBoxHeight(); + } + } + + protected override void OnGUI_Internal(Rect rect, SerializedProperty property, GUIContent label) + { + EditorGUI.BeginProperty(rect, label, property); + + if (property.propertyType == SerializedPropertyType.String) + { + Rect labelRect = new Rect() + { + x = rect.x, + y = rect.y, + width = rect.width, + height = EditorGUIUtility.singleLineHeight + }; + + EditorGUI.LabelField(labelRect, label.text); + + EditorGUI.BeginChangeCheck(); + + Rect textAreaRect = new Rect() + { + x = labelRect.x, + y = labelRect.y + EditorGUIUtility.singleLineHeight, + width = labelRect.width, + height = GetTextAreaHeight(property.stringValue) + }; + + string textAreaValue = EditorGUI.TextArea(textAreaRect, property.stringValue); + + if (EditorGUI.EndChangeCheck()) + { + property.stringValue = textAreaValue; + } + } + else + { + string message = typeof(ResizableTextAreaAttribute).Name + " can only be used on string fields"; + DrawDefaultPropertyAndHelpBox(rect, property, message, MessageType.Warning); + } + + EditorGUI.EndProperty(); + } + + private int GetNumberOfLines(string text) + { + string content = Regex.Replace(text, @"\r\n|\n\r|\r|\n", Environment.NewLine); + string[] lines = content.Split(new string[] { Environment.NewLine }, StringSplitOptions.None); + return lines.Length; + } + + private float GetTextAreaHeight(string text) + { + float height = (EditorGUIUtility.singleLineHeight - 3.0f) * GetNumberOfLines(text) + 3.0f; + return height; + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ResizableTextAreaPropertyDrawer.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ResizableTextAreaPropertyDrawer.cs.meta new file mode 100644 index 0000000000..4b1e4a5707 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ResizableTextAreaPropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6e27ffd9a96b58c46bb74cc93de3e06f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ScenePropertyDrawer.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ScenePropertyDrawer.cs new file mode 100644 index 0000000000..9b0dfb3b03 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ScenePropertyDrawer.cs @@ -0,0 +1,99 @@ +using UnityEngine; +using UnityEditor; +using System.Linq; +using System.Text.RegularExpressions; +using System; + +namespace NaughtyAttributes.Editor +{ + [CustomPropertyDrawer(typeof(SceneAttribute))] + public class ScenePropertyDrawer : PropertyDrawerBase + { + private const string SceneListItem = "{0} ({1})"; + private const string ScenePattern = @".+\/(.+)\.unity"; + private const string TypeWarningMessage = "{0} must be an int or a string"; + private const string BuildSettingsWarningMessage = "No scenes in the build settings"; + + protected override float GetPropertyHeight_Internal(SerializedProperty property, GUIContent label) + { + bool validPropertyType = property.propertyType == SerializedPropertyType.String || property.propertyType == SerializedPropertyType.Integer; + bool anySceneInBuildSettings = GetScenes().Length > 0; + + return (validPropertyType && anySceneInBuildSettings) + ? GetPropertyHeight(property) + : GetPropertyHeight(property) + GetHelpBoxHeight(); + } + + protected override void OnGUI_Internal(Rect rect, SerializedProperty property, GUIContent label) + { + EditorGUI.BeginProperty(rect, label, property); + + string[] scenes = GetScenes(); + bool anySceneInBuildSettings = scenes.Length > 0; + if (!anySceneInBuildSettings) + { + DrawDefaultPropertyAndHelpBox(rect, property, BuildSettingsWarningMessage, MessageType.Warning); + return; + } + + string[] sceneOptions = GetSceneOptions(scenes); + switch (property.propertyType) + { + case SerializedPropertyType.String: + DrawPropertyForString(rect, property, label, scenes, sceneOptions); + break; + case SerializedPropertyType.Integer: + DrawPropertyForInt(rect, property, label, sceneOptions); + break; + default: + string message = string.Format(TypeWarningMessage, property.name); + DrawDefaultPropertyAndHelpBox(rect, property, message, MessageType.Warning); + break; + } + + EditorGUI.EndProperty(); + } + + private string[] GetScenes() + { + return EditorBuildSettings.scenes + .Where(scene => scene.enabled) + .Select(scene => Regex.Match(scene.path, ScenePattern).Groups[1].Value) + .ToArray(); + } + + private string[] GetSceneOptions(string[] scenes) + { + return scenes.Select((s, i) => string.Format(SceneListItem, s, i)).ToArray(); + } + + private static void DrawPropertyForString(Rect rect, SerializedProperty property, GUIContent label, string[] scenes, string[] sceneOptions) + { + int index = IndexOf(scenes, property.stringValue); + int newIndex = EditorGUI.Popup(rect, label.text, index, sceneOptions); + string newScene = scenes[newIndex]; + + if (!property.stringValue.Equals(newScene, StringComparison.Ordinal)) + { + property.stringValue = scenes[newIndex]; + } + } + + private static void DrawPropertyForInt(Rect rect, SerializedProperty property, GUIContent label, string[] sceneOptions) + { + int index = property.intValue; + int newIndex = EditorGUI.Popup(rect, label.text, index, sceneOptions); + + if (property.intValue != newIndex) + { + property.intValue = newIndex; + } + } + + private static int IndexOf(string[] scenes, string scene) + { + var index = Array.IndexOf(scenes, scene); + return Mathf.Clamp(index, 0, scenes.Length - 1); + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ScenePropertyDrawer.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ScenePropertyDrawer.cs.meta new file mode 100644 index 0000000000..a4165442b4 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ScenePropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7f5ed440d4f429e42a5da7bc5df48fd8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ShowAssetPreviewPropertyDrawer.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ShowAssetPreviewPropertyDrawer.cs new file mode 100644 index 0000000000..ee3d10bf5d --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ShowAssetPreviewPropertyDrawer.cs @@ -0,0 +1,110 @@ +using UnityEngine; +using UnityEditor; + +namespace NaughtyAttributes.Editor +{ + [CustomPropertyDrawer(typeof(ShowAssetPreviewAttribute))] + public class ShowAssetPreviewPropertyDrawer : PropertyDrawerBase + { + protected override float GetPropertyHeight_Internal(SerializedProperty property, GUIContent label) + { + if (property.propertyType == SerializedPropertyType.ObjectReference) + { + Texture2D previewTexture = GetAssetPreview(property); + if (previewTexture != null) + { + return GetPropertyHeight(property) + GetAssetPreviewSize(property).y; + } + else + { + return GetPropertyHeight(property); + } + } + else + { + return GetPropertyHeight(property) + GetHelpBoxHeight(); + } + } + + protected override void OnGUI_Internal(Rect rect, SerializedProperty property, GUIContent label) + { + EditorGUI.BeginProperty(rect, label, property); + + if (property.propertyType == SerializedPropertyType.ObjectReference) + { + Rect propertyRect = new Rect() + { + x = rect.x, + y = rect.y, + width = rect.width, + height = EditorGUIUtility.singleLineHeight + }; + + EditorGUI.PropertyField(propertyRect, property, label); + + Texture2D previewTexture = GetAssetPreview(property); + if (previewTexture != null) + { + Rect previewRect = new Rect() + { + x = rect.x + NaughtyEditorGUI.GetIndentLength(rect), + y = rect.y + EditorGUIUtility.singleLineHeight, + width = rect.width, + height = GetAssetPreviewSize(property).y + }; + + GUI.Label(previewRect, previewTexture); + } + } + else + { + string message = property.name + " doesn't have an asset preview"; + DrawDefaultPropertyAndHelpBox(rect, property, message, MessageType.Warning); + } + + EditorGUI.EndProperty(); + } + + private Texture2D GetAssetPreview(SerializedProperty property) + { + if (property.propertyType == SerializedPropertyType.ObjectReference) + { + if (property.objectReferenceValue != null) + { + Texture2D previewTexture = AssetPreview.GetAssetPreview(property.objectReferenceValue); + return previewTexture; + } + + return null; + } + + return null; + } + + private Vector2 GetAssetPreviewSize(SerializedProperty property) + { + Texture2D previewTexture = GetAssetPreview(property); + if (previewTexture == null) + { + return Vector2.zero; + } + else + { + int targetWidth = ShowAssetPreviewAttribute.DefaultWidth; + int targetHeight = ShowAssetPreviewAttribute.DefaultHeight; + + ShowAssetPreviewAttribute showAssetPreviewAttribute = PropertyUtility.GetAttribute(property); + if (showAssetPreviewAttribute != null) + { + targetWidth = showAssetPreviewAttribute.Width; + targetHeight = showAssetPreviewAttribute.Height; + } + + int width = Mathf.Clamp(targetWidth, 0, previewTexture.width); + int height = Mathf.Clamp(targetHeight, 0, previewTexture.height); + + return new Vector2(width, height); + } + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ShowAssetPreviewPropertyDrawer.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ShowAssetPreviewPropertyDrawer.cs.meta new file mode 100644 index 0000000000..5a4d16d20d --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/ShowAssetPreviewPropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 24dee3fc91cfe94438de1e3c158f187f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/SortingLayerPropertyDrawer.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/SortingLayerPropertyDrawer.cs new file mode 100644 index 0000000000..8822715730 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/SortingLayerPropertyDrawer.cs @@ -0,0 +1,91 @@ +using UnityEngine; +using UnityEditor; +using System; +using System.Reflection; + +namespace NaughtyAttributes.Editor +{ + [CustomPropertyDrawer(typeof(SortingLayerAttribute))] + public class SortingLayerPropertyDrawer : PropertyDrawerBase + { + private const string TypeWarningMessage = "{0} must be an int or a string"; + + protected override float GetPropertyHeight_Internal(SerializedProperty property, GUIContent label) + { + bool validPropertyType = property.propertyType == SerializedPropertyType.String || property.propertyType == SerializedPropertyType.Integer; + + return validPropertyType + ? GetPropertyHeight(property) + : GetPropertyHeight(property) + GetHelpBoxHeight(); + } + + protected override void OnGUI_Internal(Rect rect, SerializedProperty property, GUIContent label) + { + EditorGUI.BeginProperty(rect, label, property); + + switch (property.propertyType) + { + case SerializedPropertyType.String: + DrawPropertyForString(rect, property, label, GetLayers()); + break; + case SerializedPropertyType.Integer: + DrawPropertyForInt(rect, property, label, GetLayers()); + break; + default: + string message = string.Format(TypeWarningMessage, property.name); + DrawDefaultPropertyAndHelpBox(rect, property, message, MessageType.Warning); + break; + } + + EditorGUI.EndProperty(); + } + + private string[] GetLayers() + { + Type internalEditorUtilityType = typeof(UnityEditorInternal.InternalEditorUtility); + PropertyInfo sortingLayersProperty = internalEditorUtilityType.GetProperty("sortingLayerNames", BindingFlags.Static | BindingFlags.NonPublic); + return (string[])sortingLayersProperty.GetValue(null, new object[0]); + } + + private static void DrawPropertyForString(Rect rect, SerializedProperty property, GUIContent label, string[] layers) + { + int index = IndexOf(layers, property.stringValue); + int newIndex = EditorGUI.Popup(rect, label.text, index, layers); + string newLayer = layers[newIndex]; + + if (!property.stringValue.Equals(newLayer, StringComparison.Ordinal)) + { + property.stringValue = layers[newIndex]; + } + } + + private static void DrawPropertyForInt(Rect rect, SerializedProperty property, GUIContent label, string[] layers) + { + int index = 0; + string layerName = SortingLayer.IDToName(property.intValue); + for (int i = 0; i < layers.Length; i++) + { + if (layerName.Equals(layers[i], StringComparison.Ordinal)) + { + index = i; + break; + } + } + + int newIndex = EditorGUI.Popup(rect, label.text, index, layers); + string newLayerName = layers[newIndex]; + int newLayerNumber = SortingLayer.NameToID(newLayerName); + + if (property.intValue != newLayerNumber) + { + property.intValue = newLayerNumber; + } + } + + private static int IndexOf(string[] layers, string layer) + { + var index = Array.IndexOf(layers, layer); + return Mathf.Clamp(index, 0, layers.Length - 1); + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/SortingLayerPropertyDrawer.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/SortingLayerPropertyDrawer.cs.meta new file mode 100644 index 0000000000..d99bdf93c3 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/SortingLayerPropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b0ed20ed34d732246a98cde96351fccb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/TagPropertyDrawer.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/TagPropertyDrawer.cs new file mode 100644 index 0000000000..7a00a4032c --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/TagPropertyDrawer.cs @@ -0,0 +1,62 @@ +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +namespace NaughtyAttributes.Editor +{ + [CustomPropertyDrawer(typeof(TagAttribute))] + public class TagPropertyDrawer : PropertyDrawerBase + { + protected override float GetPropertyHeight_Internal(SerializedProperty property, GUIContent label) + { + return (property.propertyType == SerializedPropertyType.String) + ? GetPropertyHeight(property) + : GetPropertyHeight(property) + GetHelpBoxHeight(); + } + + protected override void OnGUI_Internal(Rect rect, SerializedProperty property, GUIContent label) + { + EditorGUI.BeginProperty(rect, label, property); + + if (property.propertyType == SerializedPropertyType.String) + { + // generate the taglist + custom tags + List tagList = new List(); + tagList.Add("(None)"); + tagList.Add("Untagged"); + tagList.AddRange(UnityEditorInternal.InternalEditorUtility.tags); + + string propertyString = property.stringValue; + int index = 0; + // check if there is an entry that matches the entry and get the index + // we skip index 0 as that is a special custom case + for (int i = 1; i < tagList.Count; i++) + { + if (tagList[i].Equals(propertyString, System.StringComparison.Ordinal)) + { + index = i; + break; + } + } + + // Draw the popup box with the current selected index + int newIndex = EditorGUI.Popup(rect, label.text, index, tagList.ToArray()); + + // Adjust the actual string value of the property based on the selection + string newValue = newIndex > 0 ? tagList[newIndex] : string.Empty; + + if (!property.stringValue.Equals(newValue, System.StringComparison.Ordinal)) + { + property.stringValue = newValue; + } + } + else + { + string message = string.Format("{0} supports only string fields", typeof(TagAttribute).Name); + DrawDefaultPropertyAndHelpBox(rect, property, message, MessageType.Warning); + } + + EditorGUI.EndProperty(); + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/TagPropertyDrawer.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/TagPropertyDrawer.cs.meta new file mode 100644 index 0000000000..75f76c5986 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers/TagPropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3df4c068c970ab6498df7a60efbde311 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers_SpecialCase.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers_SpecialCase.meta new file mode 100644 index 0000000000..88cd4587de --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers_SpecialCase.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 750a102004a7e4f46a2046a3d74cae19 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers_SpecialCase/ReorderableListPropertyDrawer.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers_SpecialCase/ReorderableListPropertyDrawer.cs new file mode 100644 index 0000000000..fea369d6a1 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers_SpecialCase/ReorderableListPropertyDrawer.cs @@ -0,0 +1,205 @@ +using UnityEngine; +using UnityEditor; +using UnityEditorInternal; +using System.Collections.Generic; + +namespace NaughtyAttributes.Editor +{ + public class ReorderableListPropertyDrawer : SpecialCasePropertyDrawerBase + { + public static readonly ReorderableListPropertyDrawer Instance = new ReorderableListPropertyDrawer(); + + private readonly Dictionary _reorderableListsByPropertyName = new Dictionary(); + + private GUIStyle _labelStyle; + + private GUIStyle GetLabelStyle() + { + if (_labelStyle == null) + { + _labelStyle = new GUIStyle(EditorStyles.boldLabel); + _labelStyle.richText = true; + } + + return _labelStyle; + } + + private string GetPropertyKeyName(SerializedProperty property) + { + return property.serializedObject.targetObject.GetInstanceID() + "." + property.name; + } + + protected override float GetPropertyHeight_Internal(SerializedProperty property) + { + if (property.isArray) + { + string key = GetPropertyKeyName(property); + + if (_reorderableListsByPropertyName.TryGetValue(key, out ReorderableList reorderableList) == false) + { + return 0; + } + + return reorderableList.GetHeight(); + } + + return EditorGUI.GetPropertyHeight(property, true); + } + + protected override void OnGUI_Internal(Rect rect, SerializedProperty property, GUIContent label) + { + if (property.isArray) + { + string key = GetPropertyKeyName(property); + + ReorderableList reorderableList = null; + if (!_reorderableListsByPropertyName.ContainsKey(key)) + { + reorderableList = new ReorderableList(property.serializedObject, property, true, true, true, true) + { + drawHeaderCallback = (Rect r) => + { + EditorGUI.LabelField(r, string.Format("{0}: {1}", label.text, property.arraySize), GetLabelStyle()); + HandleDragAndDrop(r, reorderableList); + }, + + drawElementCallback = (Rect r, int index, bool isActive, bool isFocused) => + { + SerializedProperty element = property.GetArrayElementAtIndex(index); + r.y += 1.0f; + r.x += 10.0f; + r.width -= 10.0f; + + EditorGUI.PropertyField(new Rect(r.x, r.y, r.width, EditorGUIUtility.singleLineHeight), element, true); + }, + + elementHeightCallback = (int index) => + { + return EditorGUI.GetPropertyHeight(property.GetArrayElementAtIndex(index)) + 4.0f; + } + }; + + _reorderableListsByPropertyName[key] = reorderableList; + } + + reorderableList = _reorderableListsByPropertyName[key]; + + if (rect == default) + { + reorderableList.DoLayoutList(); + } + else + { + reorderableList.DoList(rect); + } + } + else + { + string message = typeof(ReorderableListAttribute).Name + " can be used only on arrays or lists"; + NaughtyEditorGUI.HelpBox_Layout(message, MessageType.Warning, context: property.serializedObject.targetObject); + EditorGUILayout.PropertyField(property, true); + } + } + + public void ClearCache() + { + _reorderableListsByPropertyName.Clear(); + } + + private Object GetAssignableObject(Object obj, ReorderableList list) + { + System.Type listType = PropertyUtility.GetPropertyType(list.serializedProperty); + System.Type elementType = ReflectionUtility.GetListElementType(listType); + + if (elementType == null) + { + return null; + } + + System.Type objType = obj.GetType(); + + if (elementType.IsAssignableFrom(objType)) + { + return obj; + } + + if (objType == typeof(GameObject)) + { + if (typeof(Transform).IsAssignableFrom(elementType)) + { + Transform transform = ((GameObject)obj).transform; + if (elementType == typeof(RectTransform)) + { + RectTransform rectTransform = transform as RectTransform; + return rectTransform; + } + else + { + return transform; + } + } + else if (typeof(MonoBehaviour).IsAssignableFrom(elementType)) + { + return ((GameObject)obj).GetComponent(elementType); + } + } + + return null; + } + + private void HandleDragAndDrop(Rect rect, ReorderableList list) + { + var currentEvent = Event.current; + var usedEvent = false; + + switch (currentEvent.type) + { + case EventType.DragExited: + if (GUI.enabled) + { + HandleUtility.Repaint(); + } + + break; + + case EventType.DragUpdated: + case EventType.DragPerform: + if (rect.Contains(currentEvent.mousePosition) && GUI.enabled) + { + // Check each single object, so we can add multiple objects in a single drag. + bool didAcceptDrag = false; + Object[] references = DragAndDrop.objectReferences; + foreach (Object obj in references) + { + Object assignableObject = GetAssignableObject(obj, list); + if (assignableObject != null) + { + DragAndDrop.visualMode = DragAndDropVisualMode.Copy; + if (currentEvent.type == EventType.DragPerform) + { + list.serializedProperty.arraySize++; + int arrayEnd = list.serializedProperty.arraySize - 1; + list.serializedProperty.GetArrayElementAtIndex(arrayEnd).objectReferenceValue = assignableObject; + didAcceptDrag = true; + } + } + } + + if (didAcceptDrag) + { + GUI.changed = true; + DragAndDrop.AcceptDrag(); + usedEvent = true; + } + } + + break; + } + + if (usedEvent) + { + currentEvent.Use(); + } + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers_SpecialCase/ReorderableListPropertyDrawer.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers_SpecialCase/ReorderableListPropertyDrawer.cs.meta new file mode 100644 index 0000000000..4ff1a6612f --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers_SpecialCase/ReorderableListPropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bf36691a6d456564db2fcbfa8726b3f3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers_SpecialCase/SpecialCasePropertyDrawerBase.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers_SpecialCase/SpecialCasePropertyDrawerBase.cs new file mode 100644 index 0000000000..0490b50a50 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers_SpecialCase/SpecialCasePropertyDrawerBase.cs @@ -0,0 +1,74 @@ +using System; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +namespace NaughtyAttributes.Editor +{ + public abstract class SpecialCasePropertyDrawerBase + { + public void OnGUI(Rect rect, SerializedProperty property) + { + // Check if visible + bool visible = PropertyUtility.IsVisible(property); + if (!visible) + { + return; + } + + // Validate + ValidatorAttribute[] validatorAttributes = PropertyUtility.GetAttributes(property); + foreach (var validatorAttribute in validatorAttributes) + { + validatorAttribute.GetValidator().ValidateProperty(property); + } + + // Check if enabled and draw + EditorGUI.BeginChangeCheck(); + bool enabled = PropertyUtility.IsEnabled(property); + + using (new EditorGUI.DisabledScope(disabled: !enabled)) + { + OnGUI_Internal(rect, property, PropertyUtility.GetLabel(property)); + } + + // Call OnValueChanged callbacks + if (EditorGUI.EndChangeCheck()) + { + PropertyUtility.CallOnValueChangedCallbacks(property); + } + } + + public float GetPropertyHeight(SerializedProperty property) + { + return GetPropertyHeight_Internal(property); + } + + protected abstract void OnGUI_Internal(Rect rect, SerializedProperty property, GUIContent label); + protected abstract float GetPropertyHeight_Internal(SerializedProperty property); + } + + public static class SpecialCaseDrawerAttributeExtensions + { + private static Dictionary _drawersByAttributeType; + + static SpecialCaseDrawerAttributeExtensions() + { + _drawersByAttributeType = new Dictionary(); + _drawersByAttributeType[typeof(ReorderableListAttribute)] = ReorderableListPropertyDrawer.Instance; + } + + public static SpecialCasePropertyDrawerBase GetDrawer(this SpecialCaseDrawerAttribute attr) + { + SpecialCasePropertyDrawerBase drawer; + if (_drawersByAttributeType.TryGetValue(attr.GetType(), out drawer)) + { + return drawer; + } + else + { + return null; + } + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers_SpecialCase/SpecialCasePropertyDrawerBase.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers_SpecialCase/SpecialCasePropertyDrawerBase.cs.meta new file mode 100644 index 0000000000..c60287c70d --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyDrawers_SpecialCase/SpecialCasePropertyDrawerBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 771776453ad34b045a41dea54856fa12 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyValidators.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyValidators.meta new file mode 100644 index 0000000000..949d96db08 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyValidators.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 41caedece93df91439d624dc9d124424 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyValidators/MaxValuePropertyValidator.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyValidators/MaxValuePropertyValidator.cs new file mode 100644 index 0000000000..0e7d3b7b24 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyValidators/MaxValuePropertyValidator.cs @@ -0,0 +1,53 @@ +using UnityEngine; +using UnityEditor; + +namespace NaughtyAttributes.Editor +{ + public class MaxValuePropertyValidator : PropertyValidatorBase + { + public override void ValidateProperty(SerializedProperty property) + { + MaxValueAttribute maxValueAttribute = PropertyUtility.GetAttribute(property); + + if (property.propertyType == SerializedPropertyType.Integer) + { + if (property.intValue > maxValueAttribute.MaxValue) + { + property.intValue = (int)maxValueAttribute.MaxValue; + } + } + else if (property.propertyType == SerializedPropertyType.Float) + { + if (property.floatValue > maxValueAttribute.MaxValue) + { + property.floatValue = maxValueAttribute.MaxValue; + } + } + else if (property.propertyType == SerializedPropertyType.Vector2) + { + property.vector2Value = Vector2.Min(property.vector2Value, new Vector2(maxValueAttribute.MaxValue, maxValueAttribute.MaxValue)); + } + else if (property.propertyType == SerializedPropertyType.Vector3) + { + property.vector3Value = Vector3.Min(property.vector3Value, new Vector3(maxValueAttribute.MaxValue, maxValueAttribute.MaxValue, maxValueAttribute.MaxValue)); + } + else if (property.propertyType == SerializedPropertyType.Vector4) + { + property.vector4Value = Vector4.Min(property.vector4Value, new Vector4(maxValueAttribute.MaxValue, maxValueAttribute.MaxValue, maxValueAttribute.MaxValue, maxValueAttribute.MaxValue)); + } + else if (property.propertyType == SerializedPropertyType.Vector2Int) + { + property.vector2IntValue = Vector2Int.Min(property.vector2IntValue, new Vector2Int((int)maxValueAttribute.MaxValue, (int)maxValueAttribute.MaxValue)); + } + else if (property.propertyType == SerializedPropertyType.Vector3Int) + { + property.vector3IntValue = Vector3Int.Min(property.vector3IntValue, new Vector3Int((int)maxValueAttribute.MaxValue, (int)maxValueAttribute.MaxValue, (int)maxValueAttribute.MaxValue)); + } + else + { + string warning = maxValueAttribute.GetType().Name + " can be used only on int, float, Vector or VectorInt fields"; + Debug.LogWarning(warning, property.serializedObject.targetObject); + } + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyValidators/MaxValuePropertyValidator.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyValidators/MaxValuePropertyValidator.cs.meta new file mode 100644 index 0000000000..3e809ac206 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyValidators/MaxValuePropertyValidator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 627b8e9e7bda6fa408c6f47fb8285665 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyValidators/MinValuePropertyValidator.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyValidators/MinValuePropertyValidator.cs new file mode 100644 index 0000000000..80df0695cf --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyValidators/MinValuePropertyValidator.cs @@ -0,0 +1,53 @@ +using UnityEngine; +using UnityEditor; + +namespace NaughtyAttributes.Editor +{ + public class MinValuePropertyValidator : PropertyValidatorBase + { + public override void ValidateProperty(SerializedProperty property) + { + MinValueAttribute minValueAttribute = PropertyUtility.GetAttribute(property); + + if (property.propertyType == SerializedPropertyType.Integer) + { + if (property.intValue < minValueAttribute.MinValue) + { + property.intValue = (int)minValueAttribute.MinValue; + } + } + else if (property.propertyType == SerializedPropertyType.Float) + { + if (property.floatValue < minValueAttribute.MinValue) + { + property.floatValue = minValueAttribute.MinValue; + } + } + else if (property.propertyType == SerializedPropertyType.Vector2) + { + property.vector2Value = Vector2.Max(property.vector2Value, new Vector2(minValueAttribute.MinValue, minValueAttribute.MinValue)); + } + else if (property.propertyType == SerializedPropertyType.Vector3) + { + property.vector3Value = Vector3.Max(property.vector3Value, new Vector3(minValueAttribute.MinValue, minValueAttribute.MinValue, minValueAttribute.MinValue)); + } + else if (property.propertyType == SerializedPropertyType.Vector4) + { + property.vector4Value = Vector4.Max(property.vector4Value, new Vector4(minValueAttribute.MinValue, minValueAttribute.MinValue, minValueAttribute.MinValue, minValueAttribute.MinValue)); + } + else if (property.propertyType == SerializedPropertyType.Vector2Int) + { + property.vector2IntValue = Vector2Int.Max(property.vector2IntValue, new Vector2Int((int)minValueAttribute.MinValue, (int)minValueAttribute.MinValue)); + } + else if (property.propertyType == SerializedPropertyType.Vector3Int) + { + property.vector3IntValue = Vector3Int.Max(property.vector3IntValue, new Vector3Int((int)minValueAttribute.MinValue, (int)minValueAttribute.MinValue, (int)minValueAttribute.MinValue)); + } + else + { + string warning = minValueAttribute.GetType().Name + " can be used only on int, float, Vector or VectorInt fields"; + Debug.LogWarning(warning, property.serializedObject.targetObject); + } + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyValidators/MinValuePropertyValidator.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyValidators/MinValuePropertyValidator.cs.meta new file mode 100644 index 0000000000..b3bb871bfd --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyValidators/MinValuePropertyValidator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 03dd23f6c0598074fb1b721dcd8fe023 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyValidators/PropertyValidatorBase.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyValidators/PropertyValidatorBase.cs new file mode 100644 index 0000000000..1c0411fcb5 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyValidators/PropertyValidatorBase.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using UnityEditor; + +namespace NaughtyAttributes.Editor +{ + public abstract class PropertyValidatorBase + { + public abstract void ValidateProperty(SerializedProperty property); + } + + public static class ValidatorAttributeExtensions + { + private static Dictionary _validatorsByAttributeType; + + static ValidatorAttributeExtensions() + { + _validatorsByAttributeType = new Dictionary(); + _validatorsByAttributeType[typeof(MinValueAttribute)] = new MinValuePropertyValidator(); + _validatorsByAttributeType[typeof(MaxValueAttribute)] = new MaxValuePropertyValidator(); + _validatorsByAttributeType[typeof(RequiredAttribute)] = new RequiredPropertyValidator(); + _validatorsByAttributeType[typeof(ValidateInputAttribute)] = new ValidateInputPropertyValidator(); + } + + public static PropertyValidatorBase GetValidator(this ValidatorAttribute attr) + { + PropertyValidatorBase validator; + if (_validatorsByAttributeType.TryGetValue(attr.GetType(), out validator)) + { + return validator; + } + else + { + return null; + } + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyValidators/PropertyValidatorBase.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyValidators/PropertyValidatorBase.cs.meta new file mode 100644 index 0000000000..97fe581270 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyValidators/PropertyValidatorBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f332c8e1c3627d742aa9158af7b02ccc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyValidators/RequiredPropertyValidator.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyValidators/RequiredPropertyValidator.cs new file mode 100644 index 0000000000..11336503fb --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyValidators/RequiredPropertyValidator.cs @@ -0,0 +1,31 @@ +using UnityEditor; + +namespace NaughtyAttributes.Editor +{ + public class RequiredPropertyValidator : PropertyValidatorBase + { + public override void ValidateProperty(SerializedProperty property) + { + RequiredAttribute requiredAttribute = PropertyUtility.GetAttribute(property); + + if (property.propertyType == SerializedPropertyType.ObjectReference) + { + if (property.objectReferenceValue == null) + { + string errorMessage = property.name + " is required"; + if (!string.IsNullOrEmpty(requiredAttribute.Message)) + { + errorMessage = requiredAttribute.Message; + } + + NaughtyEditorGUI.HelpBox_Layout(errorMessage, MessageType.Error, context: property.serializedObject.targetObject); + } + } + else + { + string warning = requiredAttribute.GetType().Name + " works only on reference types"; + NaughtyEditorGUI.HelpBox_Layout(warning, MessageType.Warning, context: property.serializedObject.targetObject); + } + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyValidators/RequiredPropertyValidator.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyValidators/RequiredPropertyValidator.cs.meta new file mode 100644 index 0000000000..d24143ac4a --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyValidators/RequiredPropertyValidator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3a7e657ea45f6414682b5f41be9541b4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyValidators/ValidateInputPropertyValidator.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyValidators/ValidateInputPropertyValidator.cs new file mode 100644 index 0000000000..1252c7021c --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyValidators/ValidateInputPropertyValidator.cs @@ -0,0 +1,76 @@ +using UnityEditor; +using System.Reflection; +using System; + +namespace NaughtyAttributes.Editor +{ + public class ValidateInputPropertyValidator : PropertyValidatorBase + { + public override void ValidateProperty(SerializedProperty property) + { + ValidateInputAttribute validateInputAttribute = PropertyUtility.GetAttribute(property); + object target = PropertyUtility.GetTargetObjectWithProperty(property); + + MethodInfo validationCallback = ReflectionUtility.GetMethod(target, validateInputAttribute.CallbackName); + + if (validationCallback != null && + validationCallback.ReturnType == typeof(bool)) + { + ParameterInfo[] callbackParameters = validationCallback.GetParameters(); + + if (callbackParameters.Length == 0) + { + if (!(bool)validationCallback.Invoke(target, null)) + { + if (string.IsNullOrEmpty(validateInputAttribute.Message)) + { + NaughtyEditorGUI.HelpBox_Layout( + property.name + " is not valid", MessageType.Error, context: property.serializedObject.targetObject); + } + else + { + NaughtyEditorGUI.HelpBox_Layout( + validateInputAttribute.Message, MessageType.Error, context: property.serializedObject.targetObject); + } + } + } + else if (callbackParameters.Length == 1) + { + FieldInfo fieldInfo = ReflectionUtility.GetField(target, property.name); + Type fieldType = fieldInfo.FieldType; + Type parameterType = callbackParameters[0].ParameterType; + + if (fieldType == parameterType) + { + if (!(bool)validationCallback.Invoke(target, new object[] { fieldInfo.GetValue(target) })) + { + if (string.IsNullOrEmpty(validateInputAttribute.Message)) + { + NaughtyEditorGUI.HelpBox_Layout( + property.name + " is not valid", MessageType.Error, context: property.serializedObject.targetObject); + } + else + { + NaughtyEditorGUI.HelpBox_Layout( + validateInputAttribute.Message, MessageType.Error, context: property.serializedObject.targetObject); + } + } + } + else + { + string warning = "The field type is not the same as the callback's parameter type"; + NaughtyEditorGUI.HelpBox_Layout(warning, MessageType.Warning, context: property.serializedObject.targetObject); + } + } + else + { + string warning = + validateInputAttribute.GetType().Name + + " needs a callback with boolean return type and an optional single parameter of the same type as the field"; + + NaughtyEditorGUI.HelpBox_Layout(warning, MessageType.Warning, context: property.serializedObject.targetObject); + } + } + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyValidators/ValidateInputPropertyValidator.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyValidators/ValidateInputPropertyValidator.cs.meta new file mode 100644 index 0000000000..3f6e539397 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/PropertyValidators/ValidateInputPropertyValidator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5f6adf84ed53a7840a456e8b4dce38d9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/Utility.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/Utility.meta new file mode 100644 index 0000000000..40e857c751 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/Utility.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: acb4475c71a3fe947a81ced84ab89c6d +folderAsset: yes +timeCreated: 1508062761 +licenseType: Store +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/Utility/ButtonUtility.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/Utility/ButtonUtility.cs new file mode 100644 index 0000000000..ca5f4ca889 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/Utility/ButtonUtility.cs @@ -0,0 +1,55 @@ +using UnityEngine; +using System.Reflection; +using System.Collections.Generic; + +namespace NaughtyAttributes.Editor +{ + public static class ButtonUtility + { + public static bool IsEnabled(Object target, MethodInfo method) + { + EnableIfAttributeBase enableIfAttribute = method.GetCustomAttribute(); + if (enableIfAttribute == null) + { + return true; + } + + List conditionValues = PropertyUtility.GetConditionValues(target, enableIfAttribute.Conditions); + if (conditionValues.Count > 0) + { + bool enabled = PropertyUtility.GetConditionsFlag(conditionValues, enableIfAttribute.ConditionOperator, enableIfAttribute.Inverted); + return enabled; + } + else + { + string message = enableIfAttribute.GetType().Name + " needs a valid boolean condition field, property or method name to work"; + Debug.LogWarning(message, target); + + return false; + } + } + + public static bool IsVisible(Object target, MethodInfo method) + { + ShowIfAttributeBase showIfAttribute = method.GetCustomAttribute(); + if (showIfAttribute == null) + { + return true; + } + + List conditionValues = PropertyUtility.GetConditionValues(target, showIfAttribute.Conditions); + if (conditionValues.Count > 0) + { + bool enabled = PropertyUtility.GetConditionsFlag(conditionValues, showIfAttribute.ConditionOperator, showIfAttribute.Inverted); + return enabled; + } + else + { + string message = showIfAttribute.GetType().Name + " needs a valid boolean condition field, property or method name to work"; + Debug.LogWarning(message, target); + + return false; + } + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/Utility/ButtonUtility.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/Utility/ButtonUtility.cs.meta new file mode 100644 index 0000000000..cf4dacee1e --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/Utility/ButtonUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a273f81125ec52d4cb5dec2228afda0e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/Utility/NaughtyEditorGUI.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/Utility/NaughtyEditorGUI.cs new file mode 100644 index 0000000000..ee17a7a7ed --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/Utility/NaughtyEditorGUI.cs @@ -0,0 +1,380 @@ +using System; +using System.Collections; +using System.Linq; +using System.Reflection; +using UnityEditor; +using UnityEditor.Experimental.SceneManagement; +using UnityEditor.SceneManagement; +using UnityEngine; + +namespace NaughtyAttributes.Editor +{ + public static class NaughtyEditorGUI + { + public const float IndentLength = 15.0f; + public const float HorizontalSpacing = 2.0f; + + private static GUIStyle _buttonStyle = new GUIStyle(GUI.skin.button) { richText = true }; + + private delegate void PropertyFieldFunction(Rect rect, SerializedProperty property, GUIContent label, bool includeChildren); + + public static void PropertyField(Rect rect, SerializedProperty property, bool includeChildren) + { + PropertyField_Implementation(rect, property, includeChildren, DrawPropertyField); + } + + public static void PropertyField_Layout(SerializedProperty property, bool includeChildren) + { + Rect dummyRect = new Rect(); + PropertyField_Implementation(dummyRect, property, includeChildren, DrawPropertyField_Layout); + } + + private static void DrawPropertyField(Rect rect, SerializedProperty property, GUIContent label, bool includeChildren) + { + EditorGUI.PropertyField(rect, property, label, includeChildren); + } + + private static void DrawPropertyField_Layout(Rect rect, SerializedProperty property, GUIContent label, bool includeChildren) + { + EditorGUILayout.PropertyField(property, label, includeChildren); + } + + private static void PropertyField_Implementation(Rect rect, SerializedProperty property, bool includeChildren, PropertyFieldFunction propertyFieldFunction) + { + SpecialCaseDrawerAttribute specialCaseAttribute = PropertyUtility.GetAttribute(property); + if (specialCaseAttribute != null) + { + specialCaseAttribute.GetDrawer().OnGUI(rect, property); + } + else + { + // Check if visible + bool visible = PropertyUtility.IsVisible(property); + if (!visible) + { + return; + } + + // Validate + ValidatorAttribute[] validatorAttributes = PropertyUtility.GetAttributes(property); + foreach (var validatorAttribute in validatorAttributes) + { + validatorAttribute.GetValidator().ValidateProperty(property); + } + + // Check if enabled and draw + EditorGUI.BeginChangeCheck(); + bool enabled = PropertyUtility.IsEnabled(property); + + using (new EditorGUI.DisabledScope(disabled: !enabled)) + { + propertyFieldFunction.Invoke(rect, property, PropertyUtility.GetLabel(property), includeChildren); + } + + // Call OnValueChanged callbacks + if (EditorGUI.EndChangeCheck()) + { + PropertyUtility.CallOnValueChangedCallbacks(property); + } + } + } + + public static float GetIndentLength(Rect sourceRect) + { + Rect indentRect = EditorGUI.IndentedRect(sourceRect); + float indentLength = indentRect.x - sourceRect.x; + + return indentLength; + } + + public static void BeginBoxGroup_Layout(string label = "") + { + EditorGUILayout.BeginVertical(GUI.skin.box); + if (!string.IsNullOrEmpty(label)) + { + EditorGUILayout.LabelField(label, EditorStyles.boldLabel); + } + } + + public static void EndBoxGroup_Layout() + { + EditorGUILayout.EndVertical(); + } + + /// + /// Creates a dropdown + /// + /// The rect the defines the position and size of the dropdown in the inspector + /// The serialized object that is being updated + /// The target object that contains the dropdown + /// The field of the target object that holds the currently selected dropdown value + /// The label of the dropdown + /// The index of the value from the values array + /// The values of the dropdown + /// The display options for the values + public static void Dropdown( + Rect rect, SerializedObject serializedObject, object target, FieldInfo dropdownField, + string label, int selectedValueIndex, object[] values, string[] displayOptions) + { + EditorGUI.BeginChangeCheck(); + + int newIndex = EditorGUI.Popup(rect, label, selectedValueIndex, displayOptions); + object newValue = values[newIndex]; + + object dropdownValue = dropdownField.GetValue(target); + if (dropdownValue == null || !dropdownValue.Equals(newValue)) + { + Undo.RecordObject(serializedObject.targetObject, "Dropdown"); + + // TODO: Problem with structs, because they are value type. + // The solution is to make boxing/unboxing but unfortunately I don't know the compile time type of the target object + dropdownField.SetValue(target, newValue); + } + } + + public static void Button(UnityEngine.Object target, MethodInfo methodInfo) + { + bool visible = ButtonUtility.IsVisible(target, methodInfo); + if (!visible) + { + return; + } + + if (methodInfo.GetParameters().All(p => p.IsOptional)) + { + ButtonAttribute buttonAttribute = (ButtonAttribute)methodInfo.GetCustomAttributes(typeof(ButtonAttribute), true)[0]; + string buttonText = string.IsNullOrEmpty(buttonAttribute.Text) ? ObjectNames.NicifyVariableName(methodInfo.Name) : buttonAttribute.Text; + + bool buttonEnabled = ButtonUtility.IsEnabled(target, methodInfo); + + EButtonEnableMode mode = buttonAttribute.SelectedEnableMode; + buttonEnabled &= + mode == EButtonEnableMode.Always || + mode == EButtonEnableMode.Editor && !Application.isPlaying || + mode == EButtonEnableMode.Playmode && Application.isPlaying; + + bool methodIsCoroutine = methodInfo.ReturnType == typeof(IEnumerator); + if (methodIsCoroutine) + { + buttonEnabled &= (Application.isPlaying ? true : false); + } + + EditorGUI.BeginDisabledGroup(!buttonEnabled); + + if (GUILayout.Button(buttonText, _buttonStyle)) + { + object[] defaultParams = methodInfo.GetParameters().Select(p => p.DefaultValue).ToArray(); + IEnumerator methodResult = methodInfo.Invoke(target, defaultParams) as IEnumerator; + + if (!Application.isPlaying) + { + // Set target object and scene dirty to serialize changes to disk + EditorUtility.SetDirty(target); + + PrefabStage stage = PrefabStageUtility.GetCurrentPrefabStage(); + if (stage != null) + { + // Prefab mode + EditorSceneManager.MarkSceneDirty(stage.scene); + } + else + { + // Normal scene + EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene()); + } + } + else if (methodResult != null && target is MonoBehaviour behaviour) + { + behaviour.StartCoroutine(methodResult); + } + } + + EditorGUI.EndDisabledGroup(); + } + else + { + string warning = typeof(ButtonAttribute).Name + " works only on methods with no parameters"; + HelpBox_Layout(warning, MessageType.Warning, context: target, logToConsole: true); + } + } + + public static void NativeProperty_Layout(UnityEngine.Object target, PropertyInfo property) + { + object value = property.GetValue(target, null); + + if (value == null) + { + string warning = string.Format("{0} is null. {1} doesn't support reference types with null value", ObjectNames.NicifyVariableName(property.Name), typeof(ShowNativePropertyAttribute).Name); + HelpBox_Layout(warning, MessageType.Warning, context: target); + } + else if (!Field_Layout(value, ObjectNames.NicifyVariableName(property.Name))) + { + string warning = string.Format("{0} doesn't support {1} types", typeof(ShowNativePropertyAttribute).Name, property.PropertyType.Name); + HelpBox_Layout(warning, MessageType.Warning, context: target); + } + } + + public static void NonSerializedField_Layout(UnityEngine.Object target, FieldInfo field) + { + object value = field.GetValue(target); + + if (value == null) + { + string warning = string.Format("{0} is null. {1} doesn't support reference types with null value", ObjectNames.NicifyVariableName(field.Name), typeof(ShowNonSerializedFieldAttribute).Name); + HelpBox_Layout(warning, MessageType.Warning, context: target); + } + else if (!Field_Layout(value, ObjectNames.NicifyVariableName(field.Name))) + { + string warning = string.Format("{0} doesn't support {1} types", typeof(ShowNonSerializedFieldAttribute).Name, field.FieldType.Name); + HelpBox_Layout(warning, MessageType.Warning, context: target); + } + } + + public static void HorizontalLine(Rect rect, float height, Color color) + { + rect.height = height; + EditorGUI.DrawRect(rect, color); + } + + public static void HelpBox(Rect rect, string message, MessageType type, UnityEngine.Object context = null, bool logToConsole = false) + { + EditorGUI.HelpBox(rect, message, type); + + if (logToConsole) + { + DebugLogMessage(message, type, context); + } + } + + public static void HelpBox_Layout(string message, MessageType type, UnityEngine.Object context = null, bool logToConsole = false) + { + EditorGUILayout.HelpBox(message, type); + + if (logToConsole) + { + DebugLogMessage(message, type, context); + } + } + + public static bool Field_Layout(object value, string label) + { + using (new EditorGUI.DisabledScope(disabled: true)) + { + bool isDrawn = true; + Type valueType = value.GetType(); + + if (valueType == typeof(bool)) + { + EditorGUILayout.Toggle(label, (bool)value); + } + else if (valueType == typeof(short)) + { + EditorGUILayout.IntField(label, (short)value); + } + else if (valueType == typeof(ushort)) + { + EditorGUILayout.IntField(label, (ushort)value); + } + else if (valueType == typeof(int)) + { + EditorGUILayout.IntField(label, (int)value); + } + else if (valueType == typeof(uint)) + { + EditorGUILayout.LongField(label, (uint)value); + } + else if (valueType == typeof(long)) + { + EditorGUILayout.LongField(label, (long)value); + } + else if (valueType == typeof(ulong)) + { + EditorGUILayout.TextField(label, ((ulong)value).ToString()); + } + else if (valueType == typeof(float)) + { + EditorGUILayout.FloatField(label, (float)value); + } + else if (valueType == typeof(double)) + { + EditorGUILayout.DoubleField(label, (double)value); + } + else if (valueType == typeof(string)) + { + EditorGUILayout.TextField(label, (string)value); + } + else if (valueType == typeof(Vector2)) + { + EditorGUILayout.Vector2Field(label, (Vector2)value); + } + else if (valueType == typeof(Vector3)) + { + EditorGUILayout.Vector3Field(label, (Vector3)value); + } + else if (valueType == typeof(Vector4)) + { + EditorGUILayout.Vector4Field(label, (Vector4)value); + } + else if (valueType == typeof(Vector2Int)) + { + EditorGUILayout.Vector2IntField(label, (Vector2Int)value); + } + else if (valueType == typeof(Vector3Int)) + { + EditorGUILayout.Vector3IntField(label, (Vector3Int)value); + } + else if (valueType == typeof(Color)) + { + EditorGUILayout.ColorField(label, (Color)value); + } + else if (valueType == typeof(Bounds)) + { + EditorGUILayout.BoundsField(label, (Bounds)value); + } + else if (valueType == typeof(Rect)) + { + EditorGUILayout.RectField(label, (Rect)value); + } + else if (valueType == typeof(RectInt)) + { + EditorGUILayout.RectIntField(label, (RectInt)value); + } + else if (typeof(UnityEngine.Object).IsAssignableFrom(valueType)) + { + EditorGUILayout.ObjectField(label, (UnityEngine.Object)value, valueType, true); + } + else if (valueType.BaseType == typeof(Enum)) + { + EditorGUILayout.EnumPopup(label, (Enum)value); + } + else if (valueType.BaseType == typeof(System.Reflection.TypeInfo)) + { + EditorGUILayout.TextField(label, value.ToString()); + } + else + { + isDrawn = false; + } + + return isDrawn; + } + } + + private static void DebugLogMessage(string message, MessageType type, UnityEngine.Object context) + { + switch (type) + { + case MessageType.None: + case MessageType.Info: + Debug.Log(message, context); + break; + case MessageType.Warning: + Debug.LogWarning(message, context); + break; + case MessageType.Error: + Debug.LogError(message, context); + break; + } + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/Utility/NaughtyEditorGUI.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/Utility/NaughtyEditorGUI.cs.meta new file mode 100644 index 0000000000..782824e0a1 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/Utility/NaughtyEditorGUI.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 6ff27ff7705d6064e935bb2159a1b453 +timeCreated: 1510926159 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/Utility/PropertyUtility.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/Utility/PropertyUtility.cs new file mode 100644 index 0000000000..e42db4bd3a --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/Utility/PropertyUtility.cs @@ -0,0 +1,374 @@ +using UnityEditor; +using System.Reflection; +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace NaughtyAttributes.Editor +{ + public static class PropertyUtility + { + public static T GetAttribute(SerializedProperty property) where T : class + { + T[] attributes = GetAttributes(property); + return (attributes.Length > 0) ? attributes[0] : null; + } + + public static T[] GetAttributes(SerializedProperty property) where T : class + { + FieldInfo fieldInfo = ReflectionUtility.GetField(GetTargetObjectWithProperty(property), property.name); + if (fieldInfo == null) + { + return new T[] { }; + } + + return (T[])fieldInfo.GetCustomAttributes(typeof(T), true); + } + + public static GUIContent GetLabel(SerializedProperty property) + { + LabelAttribute labelAttribute = GetAttribute(property); + string labelText = (labelAttribute == null) + ? property.displayName + : labelAttribute.Label; + + GUIContent label = new GUIContent(labelText); + return label; + } + + public static void CallOnValueChangedCallbacks(SerializedProperty property) + { + OnValueChangedAttribute[] onValueChangedAttributes = GetAttributes(property); + if (onValueChangedAttributes.Length == 0) + { + return; + } + + object target = GetTargetObjectWithProperty(property); + property.serializedObject.ApplyModifiedProperties(); // We must apply modifications so that the new value is updated in the serialized object + + foreach (var onValueChangedAttribute in onValueChangedAttributes) + { + MethodInfo callbackMethod = ReflectionUtility.GetMethod(target, onValueChangedAttribute.CallbackName); + if (callbackMethod != null && + callbackMethod.ReturnType == typeof(void) && + callbackMethod.GetParameters().Length == 0) + { + callbackMethod.Invoke(target, new object[] { }); + } + else + { + string warning = string.Format( + "{0} can invoke only methods with 'void' return type and 0 parameters", + onValueChangedAttribute.GetType().Name); + + Debug.LogWarning(warning, property.serializedObject.targetObject); + } + } + } + + public static bool IsEnabled(SerializedProperty property) + { + ReadOnlyAttribute readOnlyAttribute = GetAttribute(property); + if (readOnlyAttribute != null) + { + return false; + } + + EnableIfAttributeBase enableIfAttribute = GetAttribute(property); + if (enableIfAttribute == null) + { + return true; + } + + object target = GetTargetObjectWithProperty(property); + + // deal with enum conditions + if (enableIfAttribute.EnumValue != null) + { + Enum value = GetEnumValue(target, enableIfAttribute.Conditions[0]); + if (value != null) + { + bool matched = value.GetType().GetCustomAttribute() == null + ? enableIfAttribute.EnumValue.Equals(value) + : value.HasFlag(enableIfAttribute.EnumValue); + + return matched != enableIfAttribute.Inverted; + } + + string message = enableIfAttribute.GetType().Name + " needs a valid enum field, property or method name to work"; + Debug.LogWarning(message, property.serializedObject.targetObject); + + return false; + } + + // deal with normal conditions + List conditionValues = GetConditionValues(target, enableIfAttribute.Conditions); + if (conditionValues.Count > 0) + { + bool enabled = GetConditionsFlag(conditionValues, enableIfAttribute.ConditionOperator, enableIfAttribute.Inverted); + return enabled; + } + else + { + string message = enableIfAttribute.GetType().Name + " needs a valid boolean condition field, property or method name to work"; + Debug.LogWarning(message, property.serializedObject.targetObject); + + return false; + } + } + + public static bool IsVisible(SerializedProperty property) + { + ShowIfAttributeBase showIfAttribute = GetAttribute(property); + if (showIfAttribute == null) + { + return true; + } + + object target = GetTargetObjectWithProperty(property); + + // deal with enum conditions + if (showIfAttribute.EnumValue != null) + { + Enum value = GetEnumValue(target, showIfAttribute.Conditions[0]); + if (value != null) + { + bool matched = value.GetType().GetCustomAttribute() == null + ? showIfAttribute.EnumValue.Equals(value) + : value.HasFlag(showIfAttribute.EnumValue); + + return matched != showIfAttribute.Inverted; + } + + string message = showIfAttribute.GetType().Name + " needs a valid enum field, property or method name to work"; + Debug.LogWarning(message, property.serializedObject.targetObject); + + return false; + } + + // deal with normal conditions + List conditionValues = GetConditionValues(target, showIfAttribute.Conditions); + if (conditionValues.Count > 0) + { + bool enabled = GetConditionsFlag(conditionValues, showIfAttribute.ConditionOperator, showIfAttribute.Inverted); + return enabled; + } + else + { + string message = showIfAttribute.GetType().Name + " needs a valid boolean condition field, property or method name to work"; + Debug.LogWarning(message, property.serializedObject.targetObject); + + return false; + } + } + + /// + /// Gets an enum value from reflection. + /// + /// The target object. + /// Name of a field, property, or method that returns an enum. + /// Null if can't find an enum value. + internal static Enum GetEnumValue(object target, string enumName) + { + FieldInfo enumField = ReflectionUtility.GetField(target, enumName); + if (enumField != null && enumField.FieldType.IsSubclassOf(typeof(Enum))) + { + return (Enum)enumField.GetValue(target); + } + + PropertyInfo enumProperty = ReflectionUtility.GetProperty(target, enumName); + if (enumProperty != null && enumProperty.PropertyType.IsSubclassOf(typeof(Enum))) + { + return (Enum)enumProperty.GetValue(target); + } + + MethodInfo enumMethod = ReflectionUtility.GetMethod(target, enumName); + if (enumMethod != null && enumMethod.ReturnType.IsSubclassOf(typeof(Enum))) + { + return (Enum)enumMethod.Invoke(target, null); + } + + return null; + } + + internal static List GetConditionValues(object target, string[] conditions) + { + List conditionValues = new List(); + foreach (var condition in conditions) + { + FieldInfo conditionField = ReflectionUtility.GetField(target, condition); + if (conditionField != null && + conditionField.FieldType == typeof(bool)) + { + conditionValues.Add((bool)conditionField.GetValue(target)); + } + + PropertyInfo conditionProperty = ReflectionUtility.GetProperty(target, condition); + if (conditionProperty != null && + conditionProperty.PropertyType == typeof(bool)) + { + conditionValues.Add((bool)conditionProperty.GetValue(target)); + } + + MethodInfo conditionMethod = ReflectionUtility.GetMethod(target, condition); + if (conditionMethod != null && + conditionMethod.ReturnType == typeof(bool) && + conditionMethod.GetParameters().Length == 0) + { + conditionValues.Add((bool)conditionMethod.Invoke(target, null)); + } + } + + return conditionValues; + } + + internal static bool GetConditionsFlag(List conditionValues, EConditionOperator conditionOperator, bool invert) + { + bool flag; + if (conditionOperator == EConditionOperator.And) + { + flag = true; + foreach (var value in conditionValues) + { + flag = flag && value; + } + } + else + { + flag = false; + foreach (var value in conditionValues) + { + flag = flag || value; + } + } + + if (invert) + { + flag = !flag; + } + + return flag; + } + + public static Type GetPropertyType(SerializedProperty property) + { + object obj = GetTargetObjectOfProperty(property); + Type objType = obj.GetType(); + + return objType; + } + + /// + /// Gets the object the property represents. + /// + /// + /// + public static object GetTargetObjectOfProperty(SerializedProperty property) + { + if (property == null) + { + return null; + } + + string path = property.propertyPath.Replace(".Array.data[", "["); + object obj = property.serializedObject.targetObject; + string[] elements = path.Split('.'); + + foreach (var element in elements) + { + if (element.Contains("[")) + { + string elementName = element.Substring(0, element.IndexOf("[")); + int index = Convert.ToInt32(element.Substring(element.IndexOf("[")).Replace("[", "").Replace("]", "")); + obj = GetValue_Imp(obj, elementName, index); + } + else + { + obj = GetValue_Imp(obj, element); + } + } + + return obj; + } + + /// + /// Gets the object that the property is a member of + /// + /// + /// + public static object GetTargetObjectWithProperty(SerializedProperty property) + { + string path = property.propertyPath.Replace(".Array.data[", "["); + object obj = property.serializedObject.targetObject; + string[] elements = path.Split('.'); + + for (int i = 0; i < elements.Length - 1; i++) + { + string element = elements[i]; + if (element.Contains("[")) + { + string elementName = element.Substring(0, element.IndexOf("[")); + int index = Convert.ToInt32(element.Substring(element.IndexOf("[")).Replace("[", "").Replace("]", "")); + obj = GetValue_Imp(obj, elementName, index); + } + else + { + obj = GetValue_Imp(obj, element); + } + } + + return obj; + } + + private static object GetValue_Imp(object source, string name) + { + if (source == null) + { + return null; + } + + Type type = source.GetType(); + + while (type != null) + { + FieldInfo field = type.GetField(name, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance); + if (field != null) + { + return field.GetValue(source); + } + + PropertyInfo property = type.GetProperty(name, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase); + if (property != null) + { + return property.GetValue(source, null); + } + + type = type.BaseType; + } + + return null; + } + + private static object GetValue_Imp(object source, string name, int index) + { + IEnumerable enumerable = GetValue_Imp(source, name) as IEnumerable; + if (enumerable == null) + { + return null; + } + + IEnumerator enumerator = enumerable.GetEnumerator(); + for (int i = 0; i <= index; i++) + { + if (!enumerator.MoveNext()) + { + return null; + } + } + + return enumerator.Current; + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/Utility/PropertyUtility.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/Utility/PropertyUtility.cs.meta new file mode 100644 index 0000000000..dce67c6359 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/Utility/PropertyUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 312eedcb79c7a5542b87c0b848e3e2fa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/Utility/ReflectionUtility.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/Utility/ReflectionUtility.cs new file mode 100644 index 0000000000..57d28eaec5 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/Utility/ReflectionUtility.cs @@ -0,0 +1,128 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using UnityEngine; + +namespace NaughtyAttributes.Editor +{ + public static class ReflectionUtility + { + public static IEnumerable GetAllFields(object target, Func predicate) + { + if (target == null) + { + Debug.LogError("The target object is null. Check for missing scripts."); + yield break; + } + + List types = GetSelfAndBaseTypes(target); + + for (int i = types.Count - 1; i >= 0; i--) + { + IEnumerable fieldInfos = types[i] + .GetFields(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.DeclaredOnly) + .Where(predicate); + + foreach (var fieldInfo in fieldInfos) + { + yield return fieldInfo; + } + } + } + + public static IEnumerable GetAllProperties(object target, Func predicate) + { + if (target == null) + { + Debug.LogError("The target object is null. Check for missing scripts."); + yield break; + } + + List types = GetSelfAndBaseTypes(target); + + for (int i = types.Count - 1; i >= 0; i--) + { + IEnumerable propertyInfos = types[i] + .GetProperties(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.DeclaredOnly) + .Where(predicate); + + foreach (var propertyInfo in propertyInfos) + { + yield return propertyInfo; + } + } + } + + public static IEnumerable GetAllMethods(object target, Func predicate) + { + if (target == null) + { + Debug.LogError("The target object is null. Check for missing scripts."); + yield break; + } + + List types = GetSelfAndBaseTypes(target); + + for (int i = types.Count - 1; i >= 0; i--) + { + IEnumerable methodInfos = types[i] + .GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.DeclaredOnly) + .Where(predicate); + + foreach (var methodInfo in methodInfos) + { + yield return methodInfo; + } + } + } + + public static FieldInfo GetField(object target, string fieldName) + { + return GetAllFields(target, f => f.Name.Equals(fieldName, StringComparison.Ordinal)).FirstOrDefault(); + } + + public static PropertyInfo GetProperty(object target, string propertyName) + { + return GetAllProperties(target, p => p.Name.Equals(propertyName, StringComparison.Ordinal)).FirstOrDefault(); + } + + public static MethodInfo GetMethod(object target, string methodName) + { + return GetAllMethods(target, m => m.Name.Equals(methodName, StringComparison.Ordinal)).FirstOrDefault(); + } + + public static Type GetListElementType(Type listType) + { + if (listType.IsGenericType) + { + return listType.GetGenericArguments()[0]; + } + else + { + return listType.GetElementType(); + } + } + + /// + /// Get type and all base types of target, sorted as following: + /// [target's type, base type, base's base type, ...] + /// + /// + /// + private static List GetSelfAndBaseTypes(object target) + { + List types = new List() + { + target.GetType() + }; + + while (types.Last().BaseType != null) + { + types.Add(types.Last().BaseType); + } + + return types; + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/Utility/ReflectionUtility.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/Utility/ReflectionUtility.cs.meta new file mode 100644 index 0000000000..fc012150ce --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/Utility/ReflectionUtility.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 1d86c581f02a55f458e36bf7e81e3084 +timeCreated: 1520258793 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/Utility/SavedBool.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/Utility/SavedBool.cs new file mode 100644 index 0000000000..e463f4987f --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/Utility/SavedBool.cs @@ -0,0 +1,34 @@ +using UnityEditor; + +namespace NaughtyAttributes.Editor +{ + internal class SavedBool + { + private bool _value; + private string _name; + + public bool Value + { + get + { + return _value; + } + set + { + if (_value == value) + { + return; + } + + _value = value; + EditorPrefs.SetBool(_name, value); + } + } + + public SavedBool(string name, bool value) + { + _name = name; + _value = EditorPrefs.GetBool(name, value); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/Utility/SavedBool.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/Utility/SavedBool.cs.meta new file mode 100644 index 0000000000..aebf00754f --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Editor/Utility/SavedBool.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 18613afe66b0c0344a2be5f430bf965a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test.meta new file mode 100644 index 0000000000..6eca4f65c1 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ce2bd76b5676a434bb8a84254f67f1dc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/AnimatorParamTest.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/AnimatorParamTest.cs new file mode 100644 index 0000000000..c5a371cb81 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/AnimatorParamTest.cs @@ -0,0 +1,53 @@ +using UnityEngine; + +namespace NaughtyAttributes.Test +{ + public class AnimatorParamTest : MonoBehaviour + { + public Animator animator0; + + [AnimatorParam("animator0")] + public int hash0; + + [AnimatorParam("animator0")] + public string name0; + + public AnimatorParamNest1 nest1; + + [Button("Log 'hash0' and 'name0'")] + private void TestLog() + { + Debug.Log($"hash0 = {hash0}"); + Debug.Log($"name0 = {name0}"); + Debug.Log($"Animator.StringToHash(name0) = {Animator.StringToHash(name0)}"); + } + } + + [System.Serializable] + public class AnimatorParamNest1 + { + public Animator animator1; + private Animator Animator1 => animator1; + + [AnimatorParam("Animator1", AnimatorControllerParameterType.Bool)] + public int hash1; + + [AnimatorParam("Animator1", AnimatorControllerParameterType.Float)] + public string name1; + + public AnimatorParamNest2 nest2; + } + + [System.Serializable] + public class AnimatorParamNest2 + { + public Animator animator2; + private Animator GetAnimator2() => animator2; + + [AnimatorParam("GetAnimator2", AnimatorControllerParameterType.Int)] + public int hash1; + + [AnimatorParam("GetAnimator2", AnimatorControllerParameterType.Trigger)] + public string name1; + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/AnimatorParamTest.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/AnimatorParamTest.cs.meta new file mode 100644 index 0000000000..a8daa631bd --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/AnimatorParamTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9bff20ccdde00fc49a62bad6a4ef9982 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/BoxGroupTest.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/BoxGroupTest.cs new file mode 100644 index 0000000000..789d1f8bd4 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/BoxGroupTest.cs @@ -0,0 +1,32 @@ +using UnityEngine; + +namespace NaughtyAttributes.Test +{ + public class BoxGroupTest : MonoBehaviour + { + [BoxGroup("Integers")] + public int int0; + [BoxGroup("Integers")] + public int int1; + + [BoxGroup("Floats")] + public float float0; + [BoxGroup("Floats")] + public float float1; + + [BoxGroup("Sliders")] + [MinMaxSlider(0, 1)] + public Vector2 slider0; + [BoxGroup("Sliders")] + [MinMaxSlider(0, 1)] + public Vector2 slider1; + + public string str0; + public string str1; + + [BoxGroup] + public Transform trans0; + [BoxGroup] + public Transform trans1; + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/BoxGroupTest.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/BoxGroupTest.cs.meta new file mode 100644 index 0000000000..0c5ee54f8e --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/BoxGroupTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3920f5ea384951b4990e4d9e8032d12e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ButtonTest.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ButtonTest.cs new file mode 100644 index 0000000000..d7f6f04df5 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ButtonTest.cs @@ -0,0 +1,39 @@ +using System.Collections; +using UnityEngine; + +namespace NaughtyAttributes.Test +{ + public class ButtonTest : MonoBehaviour + { + public int myInt; + + [Button(enabledMode: EButtonEnableMode.Always)] + private void IncrementMyInt() + { + myInt++; + } + + [Button("Decrement My Int", EButtonEnableMode.Editor)] + private void DecrementMyInt() + { + myInt--; + } + + [Button(enabledMode: EButtonEnableMode.Playmode)] + private void LogMyInt(string prefix = "MyInt = ") + { + Debug.Log(prefix + myInt); + } + + [Button("StartCoroutine")] + private IEnumerator IncrementMyIntCoroutine() + { + int seconds = 5; + for (int i = 0; i < seconds; i++) + { + myInt++; + yield return new WaitForSeconds(1.0f); + } + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ButtonTest.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ButtonTest.cs.meta new file mode 100644 index 0000000000..1d7d58f6c2 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ButtonTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b592f12a9f69ac3408f6f870762232c7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/CurveRangeTest.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/CurveRangeTest.cs new file mode 100644 index 0000000000..f33f2d2172 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/CurveRangeTest.cs @@ -0,0 +1,37 @@ +using UnityEngine; + +namespace NaughtyAttributes.Test +{ + public class CurveRangeTest : MonoBehaviour + { + [CurveRange(0f, 0f, 1f, 1f, EColor.Yellow)] + public AnimationCurve[] curves; + + [CurveRange(-1, -1, 1, 1, EColor.Red)] + public AnimationCurve curve; + + [CurveRange(EColor.Orange)] + public AnimationCurve curve1; + + [CurveRange(0, 0, 10, 10)] + public AnimationCurve curve2; + + public CurveRangeNest1 nest1; + + [System.Serializable] + public class CurveRangeNest1 + { + [CurveRange(0, 0, 1, 1, EColor.Green)] + public AnimationCurve curve; + + public CurveRangeNest2 nest2; + } + + [System.Serializable] + public class CurveRangeNest2 + { + [CurveRange(0, 0, 5, 5, EColor.Blue)] + public AnimationCurve curve; + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/CurveRangeTest.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/CurveRangeTest.cs.meta new file mode 100644 index 0000000000..e43f8f032a --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/CurveRangeTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6587b100d001e7e46b9aaae7f1180b40 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/DisableIfTest.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/DisableIfTest.cs new file mode 100644 index 0000000000..6913166c26 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/DisableIfTest.cs @@ -0,0 +1,120 @@ +using System; +using UnityEngine; + +namespace NaughtyAttributes.Test +{ + public class DisableIfTest : MonoBehaviour + { + public bool disable1; + public bool disable2; + public DisableIfEnum enum1; + [EnumFlags] public DisableIfEnumFlag enum2; + + [DisableIf(EConditionOperator.And, "disable1", "disable2")] + [ReorderableList] + public int[] disableIfAll; + + [DisableIf(EConditionOperator.Or, "disable1", "disable2")] + [ReorderableList] + public int[] disableIfAny; + + [DisableIf("enum1", DisableIfEnum.Case0)] + [ReorderableList] + public int[] disableIfEnum; + + [DisableIf("enum2", DisableIfEnumFlag.Flag0)] + [ReorderableList] + public int[] disableIfEnumFlag; + + [DisableIf("enum2", DisableIfEnumFlag.Flag0 | DisableIfEnumFlag.Flag1)] + [ReorderableList] + public int[] disableIfEnumFlagMulti; + + public DisableIfNest1 nest1; + } + + [System.Serializable] + public class DisableIfNest1 + { + public bool disable1; + public bool disable2; + public DisableIfEnum enum1; + [EnumFlags] public DisableIfEnumFlag enum2; + public bool Disable1 { get { return disable1; } } + public bool Disable2 { get { return disable2; } } + public DisableIfEnum Enum1 { get { return enum1; } } + public DisableIfEnumFlag Enum2 { get { return enum2; } } + + [DisableIf(EConditionOperator.And, "Disable1", "Disable2")] + [AllowNesting] // Because it's nested we need to explicitly allow nesting + public int disableIfAll = 1; + + [DisableIf(EConditionOperator.Or, "Disable1", "Disable2")] + [AllowNesting] // Because it's nested we need to explicitly allow nesting + public int disableIfAny = 2; + + [DisableIf("Enum1", DisableIfEnum.Case1)] + [AllowNesting] // Because it's nested we need to explicitly allow nesting + public int disableIfEnum = 3; + + [DisableIf("Enum2", DisableIfEnumFlag.Flag0)] + [AllowNesting] // Because it's nested we need to explicitly allow nesting + public int disableIfEnumFlag; + + [DisableIf("Enum2", DisableIfEnumFlag.Flag0 | DisableIfEnumFlag.Flag1)] + [AllowNesting] // Because it's nested we need to explicitly allow nesting + public int disableIfEnumFlagMulti; + + public DisableIfNest2 nest2; + } + + [System.Serializable] + public class DisableIfNest2 + { + public bool disable1; + public bool disable2; + public DisableIfEnum enum1; + [EnumFlags] public DisableIfEnumFlag enum2; + public bool GetDisable1() { return disable1; } + public bool GetDisable2() { return disable2; } + public DisableIfEnum GetEnum1() { return enum1; } + public DisableIfEnumFlag GetEnum2() { return enum2; } + + [DisableIf(EConditionOperator.And, "GetDisable1", "GetDisable2")] + [MinMaxSlider(0.0f, 1.0f)] // AllowNesting attribute is not needed, because the field is already marked with a custom naughty property drawer + public Vector2 enableIfAll = new Vector2(0.25f, 0.75f); + + [DisableIf(EConditionOperator.Or, "GetDisable1", "GetDisable2")] + [MinMaxSlider(0.0f, 1.0f)] // AllowNesting attribute is not needed, because the field is already marked with a custom naughty property drawer + public Vector2 enableIfAny = new Vector2(0.25f, 0.75f); + + [DisableIf("GetEnum1", DisableIfEnum.Case2)] + [MinMaxSlider(0.0f, 1.0f)] // AllowNesting attribute is not needed, because the field is already marked with a custom naughty property drawer + public Vector2 enableIfEnum = new Vector2(0.25f, 0.75f); + + [DisableIf("GetEnum2", DisableIfEnumFlag.Flag0)] + [MinMaxSlider(0.0f, 1.0f)] // AllowNesting attribute is not needed, because the field is already marked with a custom naughty property drawer + public Vector2 disableIfEnumFlag; + + [DisableIf("GetEnum2", DisableIfEnumFlag.Flag0 | DisableIfEnumFlag.Flag1)] + [MinMaxSlider(0.0f, 1.0f)] // AllowNesting attribute is not needed, because the field is already marked with a custom naughty property drawer + public Vector2 disableIfEnumFlagMulti; + } + + [System.Serializable] + public enum DisableIfEnum + { + Case0, + Case1, + Case2 + } + + [Flags] + public enum DisableIfEnumFlag + { + Flag0 = 1, + Flag1 = 2, + Flag2 = 4, + Flag3 = 8 + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/DisableIfTest.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/DisableIfTest.cs.meta new file mode 100644 index 0000000000..c3a1e7afb3 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/DisableIfTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0e48a088cb96287448c3be58932bfcb7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/DropdownTest.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/DropdownTest.cs new file mode 100644 index 0000000000..723eca8fb4 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/DropdownTest.cs @@ -0,0 +1,45 @@ +using UnityEngine; +using System.Collections.Generic; + +namespace NaughtyAttributes.Test +{ + public class DropdownTest : MonoBehaviour + { + [Dropdown("intValues")] + public int intValue; + +#pragma warning disable 414 + private int[] intValues = new int[] { 1, 2, 3 }; +#pragma warning restore 414 + + public DropdownNest1 nest1; + } + + [System.Serializable] + public class DropdownNest1 + { + [Dropdown("StringValues")] + public string stringValue; + + private List StringValues { get { return new List() { "A", "B", "C" }; } } + + public DropdownNest2 nest2; + } + + [System.Serializable] + public class DropdownNest2 + { + [Dropdown("GetVectorValues")] + public Vector3 vectorValue; + + private DropdownList GetVectorValues() + { + return new DropdownList() + { + { "Right", Vector3.right }, + { "Up", Vector3.up }, + { "Forward", Vector3.forward } + }; + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/DropdownTest.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/DropdownTest.cs.meta new file mode 100644 index 0000000000..ec7fa24125 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/DropdownTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3855e37cd6b01194e8166573c7c4b37d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/EnableIfTest.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/EnableIfTest.cs new file mode 100644 index 0000000000..6e744f518a --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/EnableIfTest.cs @@ -0,0 +1,120 @@ +using System; +using UnityEngine; + +namespace NaughtyAttributes.Test +{ + public class EnableIfTest : MonoBehaviour + { + public bool enable1; + public bool enable2; + public EnableIfEnum enum1; + [EnumFlags] public EnableIfEnumFlag enum2; + + [EnableIf(EConditionOperator.And, "enable1", "enable2")] + [ReorderableList] + public int[] enableIfAll; + + [EnableIf(EConditionOperator.Or, "enable1", "enable2")] + [ReorderableList] + public int[] enableIfAny; + + [EnableIf("enum1", EnableIfEnum.Case0)] + [ReorderableList] + public int[] enableIfEnum; + + [EnableIf("enum2", EnableIfEnumFlag.Flag0)] + [ReorderableList] + public int[] enableIfEnumFlag; + + [EnableIf("enum2", EnableIfEnumFlag.Flag0 | EnableIfEnumFlag.Flag1)] + [ReorderableList] + public int[] enableIfEnumFlagMulti; + + public EnableIfNest1 nest1; + } + + [System.Serializable] + public class EnableIfNest1 + { + public bool enable1; + public bool enable2; + public EnableIfEnum enum1; + [EnumFlags] public EnableIfEnumFlag enum2; + public bool Enable1 { get { return enable1; } } + public bool Enable2 { get { return enable2; } } + public EnableIfEnum Enum1 { get { return enum1; } } + public EnableIfEnumFlag Enum2 { get { return enum2; } } + + [EnableIf(EConditionOperator.And, "Enable1", "Enable2")] + [AllowNesting] // Because it's nested we need to explicitly allow nesting + public int enableIfAll; + + [EnableIf(EConditionOperator.Or, "Enable1", "Enable2")] + [AllowNesting] // Because it's nested we need to explicitly allow nesting + public int enableIfAny; + + [EnableIf("Enum1", EnableIfEnum.Case1)] + [AllowNesting] // Because it's nested we need to explicitly allow nesting + public int enableIfEnum; + + [EnableIf("Enum2", EnableIfEnumFlag.Flag0)] + [AllowNesting] // Because it's nested we need to explicitly allow nesting + public int enableIfEnumFlag; + + [EnableIf("Enum2", EnableIfEnumFlag.Flag0 | EnableIfEnumFlag.Flag1)] + [AllowNesting] // Because it's nested we need to explicitly allow nesting + public int enableIfEnumFlagMulti; + + public EnableIfNest2 nest2; + } + + [System.Serializable] + public class EnableIfNest2 + { + public bool enable1; + public bool enable2; + public EnableIfEnum enum1; + [EnumFlags] public EnableIfEnumFlag enum2; + public bool GetEnable1() { return enable1; } + public bool GetEnable2() { return enable2; } + public EnableIfEnum GetEnum1() { return enum1; } + public EnableIfEnumFlag GetEnum2() { return enum2; } + + [EnableIf(EConditionOperator.And, "GetEnable1", "GetEnable2")] + [MinMaxSlider(0.0f, 1.0f)] // AllowNesting attribute is not needed, because the field is already marked with a custom naughty property drawer + public Vector2 enableIfAll = new Vector2(0.25f, 0.75f); + + [EnableIf(EConditionOperator.Or, "GetEnable1", "GetEnable2")] + [MinMaxSlider(0.0f, 1.0f)] // AllowNesting attribute is not needed, because the field is already marked with a custom naughty property drawer + public Vector2 enableIfAny = new Vector2(0.25f, 0.75f); + + [EnableIf("GetEnum1", EnableIfEnum.Case2)] + [MinMaxSlider(0.0f, 1.0f)] // AllowNesting attribute is not needed, because the field is already marked with a custom naughty property drawer + public Vector2 enableIfEnum = new Vector2(0.25f, 0.75f); + + [EnableIf("GetEnum2", EnableIfEnumFlag.Flag0)] + [MinMaxSlider(0.0f, 1.0f)] // AllowNesting attribute is not needed, because the field is already marked with a custom naughty property drawer + public Vector2 enableIfEnumFlag; + + [EnableIf("GetEnum2", EnableIfEnumFlag.Flag0 | EnableIfEnumFlag.Flag1)] + [MinMaxSlider(0.0f, 1.0f)] // AllowNesting attribute is not needed, because the field is already marked with a custom naughty property drawer + public Vector2 enableIfEnumFlagMulti; + } + + [System.Serializable] + public enum EnableIfEnum + { + Case0, + Case1, + Case2 + } + + [Flags] + public enum EnableIfEnumFlag + { + Flag0 = 1, + Flag1 = 2, + Flag2 = 4, + Flag3 = 8 + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/EnableIfTest.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/EnableIfTest.cs.meta new file mode 100644 index 0000000000..c22fe7b77d --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/EnableIfTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bed506d8be3a10f45bec4bf2237bec87 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/EnumFlagsTest.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/EnumFlagsTest.cs new file mode 100644 index 0000000000..94723346cb --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/EnumFlagsTest.cs @@ -0,0 +1,39 @@ +using UnityEngine; + +namespace NaughtyAttributes.Test +{ + public enum TestEnum + { + None = 0, + B = 1 << 0, + C = 1 << 1, + D = 1 << 2, + E = 1 << 3, + F = 1 << 4, + All = ~0 + } + + public class EnumFlagsTest : MonoBehaviour + { + [EnumFlags] + public TestEnum flags0; + + public EnumFlagsNest1 nest1; + } + + [System.Serializable] + public class EnumFlagsNest1 + { + [EnumFlags] + public TestEnum flags1; + + public EnumFlagsNest2 nest2; + } + + [System.Serializable] + public class EnumFlagsNest2 + { + [EnumFlags] + public TestEnum flags2; + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/EnumFlagsTest.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/EnumFlagsTest.cs.meta new file mode 100644 index 0000000000..b5486752ae --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/EnumFlagsTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7b7f6b84ce0d7674d8a386fde729279c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ExpandableTest.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ExpandableTest.cs new file mode 100644 index 0000000000..8c08b8c7e3 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ExpandableTest.cs @@ -0,0 +1,31 @@ +using UnityEngine; + +namespace NaughtyAttributes.Test +{ + public class ExpandableTest : MonoBehaviour + { + // See #294 + public int precedingField = 5; + + [Expandable] + public ScriptableObject obj0; + + public ExpandableScriptableObjectNest1 nest1; + } + + [System.Serializable] + public class ExpandableScriptableObjectNest1 + { + [Expandable] + public ScriptableObject obj1; + + public ExpandableScriptableObjectNest2 nest2; + } + + [System.Serializable] + public class ExpandableScriptableObjectNest2 + { + [Expandable] + public ScriptableObject obj2; + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ExpandableTest.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ExpandableTest.cs.meta new file mode 100644 index 0000000000..ffa82d1a78 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ExpandableTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 64c4c9aee2b494d44be9bb0b7f12ed7c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/FoldoutTest.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/FoldoutTest.cs new file mode 100644 index 0000000000..c171cc849b --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/FoldoutTest.cs @@ -0,0 +1,32 @@ +using UnityEngine; + +namespace NaughtyAttributes.Test +{ + public class FoldoutTest : MonoBehaviour + { + [Foldout("Integers")] + public int int0; + [Foldout("Integers")] + public int int1; + + [Foldout("Floats")] + public float float0; + [Foldout("Floats")] + public float float1; + + [Foldout("Sliders")] + [MinMaxSlider(0, 1)] + public Vector2 slider0; + [Foldout("Sliders")] + [MinMaxSlider(0, 1)] + public Vector2 slider1; + + public string str0; + public string str1; + + [Foldout("Transforms")] + public Transform trans0; + [Foldout("Transforms")] + public Transform trans1; + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/FoldoutTest.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/FoldoutTest.cs.meta new file mode 100644 index 0000000000..8c72e06b55 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/FoldoutTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3b437215d92efa74ea85ff726ca0dd09 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/HideIfTest.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/HideIfTest.cs new file mode 100644 index 0000000000..ec5c7c1ae0 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/HideIfTest.cs @@ -0,0 +1,119 @@ +using System; +using UnityEngine; + +namespace NaughtyAttributes.Test +{ + public class HideIfTest : MonoBehaviour + { + public bool hide1; + public bool hide2; + public HideIfEnum enum1; + [EnumFlags] public HideIfEnumFlag enum2; + + [HideIf(EConditionOperator.And, "hide1", "hide2")] + [ReorderableList] + public int[] hideIfAll; + + [HideIf(EConditionOperator.Or, "hide1", "hide2")] + [ReorderableList] + public int[] hideIfAny; + + [HideIf("enum1", HideIfEnum.Case0)] + [ReorderableList] + public int[] hideIfEnum; + + [HideIf("enum2", HideIfEnumFlag.Flag0)] + [ReorderableList] + public int[] hideIfEnumFlag; + + [HideIf("enum2", HideIfEnumFlag.Flag0 | HideIfEnumFlag.Flag1)] + [ReorderableList] + public int[] hideIfEnumFlagMulti; + + public HideIfNest1 nest1; + } + + [System.Serializable] + public class HideIfNest1 + { + public bool hide1; + public bool hide2; + public HideIfEnum enum1; + [EnumFlags] public HideIfEnumFlag enum2; + public bool Hide1 { get { return hide1; } } + public bool Hide2 { get { return hide2; } } + public HideIfEnum Enum1 { get { return enum1; } } + public HideIfEnumFlag Enum2 { get { return enum2; } } + + [HideIf(EConditionOperator.And, "Hide1", "Hide2")] + [AllowNesting] // Because it's nested we need to explicitly allow nesting + public int hideIfAll; + + [HideIf(EConditionOperator.Or, "Hide1", "Hide2")] + [AllowNesting] // Because it's nested we need to explicitly allow nesting + public int hideIfAny; + + [HideIf("Enum1", HideIfEnum.Case1)] + [AllowNesting] // Because it's nested we need to explicitly allow nesting + public int hideIfEnum; + + [HideIf("Enum2", HideIfEnumFlag.Flag0)] + [AllowNesting] + public int hideIfEnumFlag; + + [HideIf("Enum2", HideIfEnumFlag.Flag0 | HideIfEnumFlag.Flag1)] + [AllowNesting] + public int hideIfEnumFlagMulti; + + public HideIfNest2 nest2; + } + + [System.Serializable] + public class HideIfNest2 + { + public bool hide1; + public bool hide2; + public HideIfEnum enum1; + [EnumFlags] public HideIfEnumFlag enum2; + public bool GetHide1() { return hide1; } + public bool GetHide2() { return hide2; } + public HideIfEnum GetEnum1() { return enum1; } + public HideIfEnumFlag GetEnum2() { return enum2; } + + [HideIf(EConditionOperator.And, "GetHide1", "GetHide2")] + [MinMaxSlider(0.0f, 1.0f)] // AllowNesting attribute is not needed, because the field is already marked with a custom naughty property drawer + public Vector2 hideIfAll = new Vector2(0.25f, 0.75f); + + [HideIf(EConditionOperator.Or, "GetHide1", "GetHide2")] + [MinMaxSlider(0.0f, 1.0f)] // AllowNesting attribute is not needed, because the field is already marked with a custom naughty property drawer + public Vector2 hideIfAny = new Vector2(0.25f, 0.75f); + + [HideIf("GetEnum1", HideIfEnum.Case2)] + [MinMaxSlider(0.0f, 1.0f)] // AllowNesting attribute is not needed, because the field is already marked with a custom naughty property drawer + public Vector2 hideIfEnum = new Vector2(0.25f, 0.75f); + + [HideIf("GetEnum2", HideIfEnumFlag.Flag0)] + [MinMaxSlider(0.0f, 1.0f)] // AllowNesting attribute is not needed, because the field is already marked with a custom naughty property drawer + public Vector2 hideIfEnumFlag; + + [HideIf("GetEnum2", HideIfEnumFlag.Flag0 | HideIfEnumFlag.Flag1)] + [MinMaxSlider(0.0f, 1.0f)] // AllowNesting attribute is not needed, because the field is already marked with a custom naughty property drawer + public Vector2 hideIfEnumFlagMulti; + } + + public enum HideIfEnum + { + Case0, + Case1, + Case2 + } + + [Flags] + public enum HideIfEnumFlag + { + Flag0 = 1, + Flag1 = 2, + Flag2 = 4, + Flag3 = 8 + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/HideIfTest.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/HideIfTest.cs.meta new file mode 100644 index 0000000000..6115ad2865 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/HideIfTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3cf166cb519e666419bb79b0c50c5ee1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/HorizontalLineTest.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/HorizontalLineTest.cs new file mode 100644 index 0000000000..2bbe587d68 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/HorizontalLineTest.cs @@ -0,0 +1,51 @@ +using UnityEngine; + +namespace NaughtyAttributes.Test +{ + public class HorizontalLineTest : MonoBehaviour + { + [HorizontalLine(color: EColor.Black)] + [Header("Black")] + [HorizontalLine(color: EColor.Blue)] + [Header("Blue")] + [HorizontalLine(color: EColor.Gray)] + [Header("Gray")] + [HorizontalLine(color: EColor.Green)] + [Header("Green")] + [HorizontalLine(color: EColor.Indigo)] + [Header("Indigo")] + [HorizontalLine(color: EColor.Orange)] + [Header("Orange")] + [HorizontalLine(color: EColor.Pink)] + [Header("Pink")] + [HorizontalLine(color: EColor.Red)] + [Header("Red")] + [HorizontalLine(color: EColor.Violet)] + [Header("Violet")] + [HorizontalLine(color: EColor.White)] + [Header("White")] + [HorizontalLine(color: EColor.Yellow)] + [Header("Yellow")] + [HorizontalLine(10.0f)] + [Header("Thick")] + public int line0; + + public HorizontalLineNest1 nest1; + } + + [System.Serializable] + public class HorizontalLineNest1 + { + [HorizontalLine] + public int line1; + + public HorizontalLineNest2 nest2; + } + + [System.Serializable] + public class HorizontalLineNest2 + { + [HorizontalLine] + public int line2; + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/HorizontalLineTest.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/HorizontalLineTest.cs.meta new file mode 100644 index 0000000000..4d7ff37703 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/HorizontalLineTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5cc6d3f8d4a53374887b3d620a6972e3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/InfoBoxTest.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/InfoBoxTest.cs new file mode 100644 index 0000000000..a1dd5f8551 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/InfoBoxTest.cs @@ -0,0 +1,28 @@ +using UnityEngine; + +namespace NaughtyAttributes.Test +{ + public class InfoBoxTest : MonoBehaviour + { + [InfoBox("Normal", EInfoBoxType.Normal)] + public int normal; + + public InfoBoxNest1 nest1; + } + + [System.Serializable] + public class InfoBoxNest1 + { + [InfoBox("Warning", EInfoBoxType.Warning)] + public int warning; + + public InfoBoxNest2 nest2; + } + + [System.Serializable] + public class InfoBoxNest2 + { + [InfoBox("Error", EInfoBoxType.Error)] + public int error; + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/InfoBoxTest.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/InfoBoxTest.cs.meta new file mode 100644 index 0000000000..68dc824f98 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/InfoBoxTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0dcb08e489c17644e9eacaa1ec5fe781 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/InputAxisTest.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/InputAxisTest.cs new file mode 100644 index 0000000000..2080e300fa --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/InputAxisTest.cs @@ -0,0 +1,34 @@ +using UnityEngine; + +namespace NaughtyAttributes.Test +{ + public class InputAxisTest : MonoBehaviour + { + [InputAxis] + public string inputAxis0; + + public InputAxisNest1 nest1; + + [Button] + private void LogInputAxis0() + { + Debug.Log(inputAxis0); + } + } + + [System.Serializable] + public class InputAxisNest1 + { + [InputAxis] + public string inputAxis1; + + public InputAxisNest2 nest2; + } + + [System.Serializable] + public struct InputAxisNest2 + { + [InputAxis] + public string inputAxis2; + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/InputAxisTest.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/InputAxisTest.cs.meta new file mode 100644 index 0000000000..b44a86281a --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/InputAxisTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e0cc8a31c22090847b75538c0ed2d2fc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/LabelTest.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/LabelTest.cs new file mode 100644 index 0000000000..5f40e6e71f --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/LabelTest.cs @@ -0,0 +1,30 @@ +using UnityEngine; + +namespace NaughtyAttributes.Test +{ + public class LabelTest : MonoBehaviour + { + [Label("Label 0")] + public int int0; + + public LabelNest1 nest1; + } + + [System.Serializable] + public class LabelNest1 + { + [Label("Label 1")] + [AllowNesting] // Because it's nested we need to explicitly allow nesting + public int int1; + + public LabelNest2 nest2; + } + + [System.Serializable] + public class LabelNest2 + { + [Label("Label 2")] + [MinMaxSlider(0.0f, 1.0f)] // AllowNesting attribute is not needed, because the field is already marked with a custom naughty property drawer + public Vector2 vector2; + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/LabelTest.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/LabelTest.cs.meta new file mode 100644 index 0000000000..114af72a01 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/LabelTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7488af014527ebf42af5c4fc4d5f4f5b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/LayerTest.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/LayerTest.cs new file mode 100644 index 0000000000..52ac6fee7d --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/LayerTest.cs @@ -0,0 +1,46 @@ +using UnityEngine; + +namespace NaughtyAttributes.Test +{ + public class LayerTest : MonoBehaviour + { + [Layer] + public int layerNumber0; + + [Layer] + public string layerName0; + + public LayerNest1 nest1; + + [Button] + public void DebugLog() + { + Debug.LogFormat("{0} = {1}", nameof(layerNumber0), layerNumber0); + Debug.LogFormat("{0} = {1}", nameof(layerName0), layerName0); + Debug.LogFormat("LayerToName({0}) = {1}", layerNumber0, LayerMask.LayerToName(layerNumber0)); + Debug.LogFormat("NameToLayer({0}) = {1}", layerName0, LayerMask.NameToLayer(layerName0)); + } + } + + [System.Serializable] + public class LayerNest1 + { + [Layer] + public int layerNumber1; + + [Layer] + public string layerName1; + + public LayerNest2 nest2; + } + + [System.Serializable] + public struct LayerNest2 + { + [Layer] + public int layerNumber2; + + [Layer] + public string layerName2; + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/LayerTest.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/LayerTest.cs.meta new file mode 100644 index 0000000000..d66d32c6d7 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/LayerTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 460459d6ac76acd4d872f94cf444e6fa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/MinMaxSliderTest.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/MinMaxSliderTest.cs new file mode 100644 index 0000000000..f1ec981cca --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/MinMaxSliderTest.cs @@ -0,0 +1,28 @@ +using UnityEngine; + +namespace NaughtyAttributes.Test +{ + public class MinMaxSliderTest : MonoBehaviour + { + [MinMaxSlider(0.0f, 1.0f)] + public Vector2 minMaxSlider0 = new Vector2(0.25f, 0.75f); + + public MinMaxSliderNest1 nest1; + } + + [System.Serializable] + public class MinMaxSliderNest1 + { + [MinMaxSlider(0.0f, 1.0f)] + public Vector2 minMaxSlider1 = new Vector2(0.25f, 0.75f); + + public MinMaxSliderNest2 nest2; + } + + [System.Serializable] + public class MinMaxSliderNest2 + { + [MinMaxSlider(1, 11)] + public Vector2Int minMaxSlider2 = new Vector2Int(6, 11); + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/MinMaxSliderTest.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/MinMaxSliderTest.cs.meta new file mode 100644 index 0000000000..7580a81bd5 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/MinMaxSliderTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fd67fbde6acdd6a44944f12e507067c5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/MinMaxValueTest.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/MinMaxValueTest.cs new file mode 100644 index 0000000000..43d15864fe --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/MinMaxValueTest.cs @@ -0,0 +1,129 @@ +using UnityEngine; + +namespace NaughtyAttributes.Test +{ + public class MinMaxValueTest : MonoBehaviour + { + [MinValue(0)] + public int min0Int; + + [MaxValue(0)] + public int max0Int; + + [MinValue(0), MaxValue(1)] + public float range01Float; + + [MinValue(0), MaxValue(1)] + public Vector2 range01Vector2; + + [MinValue(0), MaxValue(1)] + public Vector3 range01Vector3; + + [MinValue(0), MaxValue(1)] + public Vector4 range01Vector4; + + [MinValue(0)] + public Vector2Int min0Vector2Int; + + [MaxValue(100)] + public Vector2Int max100Vector2Int; + + [MinValue(0)] + public Vector3Int min0Vector3Int; + + [MaxValue(100)] + public Vector3Int max100Vector3Int; + + public MinMaxValueNest1 nest1; + } + + [System.Serializable] + public class MinMaxValueNest1 + { + [MinValue(0)] + [AllowNesting] // Because it's nested we need to explicitly allow nesting + public int min0Int; + + [MaxValue(0)] + [AllowNesting] // Because it's nested we need to explicitly allow nesting + public int max0Int; + + [MinValue(0), MaxValue(1)] + [AllowNesting] // Because it's nested we need to explicitly allow nesting + public float range01Float; + + [MinValue(0), MaxValue(1)] + [AllowNesting] // Because it's nested we need to explicitly allow nesting + public Vector2 range01Vector2; + + [MinValue(0), MaxValue(1)] + [AllowNesting] // Because it's nested we need to explicitly allow nesting + public Vector3 range01Vector3; + + [MinValue(0), MaxValue(1)] + [AllowNesting] // Because it's nested we need to explicitly allow nesting + public Vector4 range01Vector4; + + [MinValue(0)] + [AllowNesting] // Because it's nested we need to explicitly allow nesting + public Vector2Int min0Vector2Int; + + [MaxValue(100)] + [AllowNesting] // Because it's nested we need to explicitly allow nesting + public Vector2Int max100Vector2Int; + + [MinValue(0)] + [AllowNesting] // Because it's nested we need to explicitly allow nesting + public Vector3Int min0Vector3Int; + + [MaxValue(100)] + [AllowNesting] // Because it's nested we need to explicitly allow nesting + public Vector3Int max100Vector3Int; + + public MinMaxValueNest2 nest2; + } + + [System.Serializable] + public class MinMaxValueNest2 + { + [MinValue(0)] + [AllowNesting] // Because it's nested we need to explicitly allow nesting + public int min0Int; + + [MaxValue(0)] + [AllowNesting] // Because it's nested we need to explicitly allow nesting + public int max0Int; + + [MinValue(0), MaxValue(1)] + [AllowNesting] // Because it's nested we need to explicitly allow nesting + public float range01Float; + + [MinValue(0), MaxValue(1)] + [AllowNesting] // Because it's nested we need to explicitly allow nesting + public Vector2 range01Vector2; + + [MinValue(0), MaxValue(1)] + [AllowNesting] // Because it's nested we need to explicitly allow nesting + public Vector3 range01Vector3; + + [MinValue(0), MaxValue(1)] + [AllowNesting] // Because it's nested we need to explicitly allow nesting + public Vector4 range01Vector4; + + [MinValue(0)] + [AllowNesting] // Because it's nested we need to explicitly allow nesting + public Vector2Int min0Vector2Int; + + [MaxValue(100)] + [AllowNesting] // Because it's nested we need to explicitly allow nesting + public Vector2Int max100Vector2Int; + + [MinValue(0)] + [AllowNesting] // Because it's nested we need to explicitly allow nesting + public Vector3Int min0Vector3Int; + + [MaxValue(100)] + [AllowNesting] // Because it's nested we need to explicitly allow nesting + public Vector3Int max100Vector3Int; + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/MinMaxValueTest.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/MinMaxValueTest.cs.meta new file mode 100644 index 0000000000..328dee363c --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/MinMaxValueTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 450a05787c54e6b4fa88ffe223bcee87 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/NaughtyAttributes.Test.asmdef b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/NaughtyAttributes.Test.asmdef new file mode 100644 index 0000000000..910f548309 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/NaughtyAttributes.Test.asmdef @@ -0,0 +1,14 @@ +{ + "name": "NaughtyAttributes.Test", + "references": [ + "NaughtyAttributes.Core" + ], + "optionalUnityReferences": [], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [] +} \ No newline at end of file diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/NaughtyAttributes.Test.asmdef.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/NaughtyAttributes.Test.asmdef.meta new file mode 100644 index 0000000000..c3d49e73e6 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/NaughtyAttributes.Test.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: df1dea26b8503004d92d621e88aa9421 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/OnValueChangedTest.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/OnValueChangedTest.cs new file mode 100644 index 0000000000..360df1467d --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/OnValueChangedTest.cs @@ -0,0 +1,51 @@ +using UnityEngine; + +namespace NaughtyAttributes.Test +{ + public class OnValueChangedTest : MonoBehaviour + { + [OnValueChanged("OnValueChangedMethod1")] + [OnValueChanged("OnValueChangedMethod2")] + public int int0; + + private void OnValueChangedMethod1() + { + Debug.LogFormat("int0: {0}", int0); + } + + private void OnValueChangedMethod2() + { + Debug.LogFormat("int0: {0}", int0); + } + + public OnValueChangedNest1 nest1; + } + + [System.Serializable] + public class OnValueChangedNest1 + { + [OnValueChanged("OnValueChangedMethod")] + [AllowNesting] + public int int1; + + private void OnValueChangedMethod() + { + Debug.LogFormat("int1: {0}", int1); + } + + public OnValueChangedNest2 nest2; + } + + [System.Serializable] + public class OnValueChangedNest2 + { + [OnValueChanged("OnValueChangedMethod")] + [AllowNesting] + public int int2; + + private void OnValueChangedMethod() + { + Debug.LogFormat("int2: {0}", int2); + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/OnValueChangedTest.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/OnValueChangedTest.cs.meta new file mode 100644 index 0000000000..bfd1ab25e5 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/OnValueChangedTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ff1df679e5b32f64bb106752c63933fa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ProgressBarTest.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ProgressBarTest.cs new file mode 100644 index 0000000000..0534812266 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ProgressBarTest.cs @@ -0,0 +1,35 @@ +using UnityEngine; + +namespace NaughtyAttributes.Test +{ + public class ProgressBarTest : MonoBehaviour + { + [Header("Constant ProgressBar")] + [ProgressBar("Health", 100, EColor.Red)] + public float health = 50.0f; + + [Header("Nested ProgressBar")] + public ProgressBarNest1 nest1; + + [Header("Dynamic ProgressBar")] + [ProgressBar("Elixir", "maxElixir", color: EColor.Violet)] + public int elixir = 50; + public int maxElixir = 100; + } + + [System.Serializable] + public class ProgressBarNest1 + { + [ProgressBar("Mana", 100, EColor.Blue)] + public float mana = 25.0f; + + public ProgressBarNest2 nest2; + } + + [System.Serializable] + public class ProgressBarNest2 + { + [ProgressBar("Stamina", 100, EColor.Green)] + public float stamina = 75.0f; + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ProgressBarTest.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ProgressBarTest.cs.meta new file mode 100644 index 0000000000..db88429807 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ProgressBarTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 96ca4c27fc649764b9d1625f1740cb9e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ReadOnlyTest.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ReadOnlyTest.cs new file mode 100644 index 0000000000..d832097b12 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ReadOnlyTest.cs @@ -0,0 +1,30 @@ +using UnityEngine; + +namespace NaughtyAttributes.Test +{ + public class ReadOnlyTest : MonoBehaviour + { + [ReadOnly] + public int readOnlyInt = 5; + + public ReadOnlyNest1 nest1; + } + + [System.Serializable] + public class ReadOnlyNest1 + { + [ReadOnly] + [AllowNesting] + public float readOnlyFloat = 3.14f; + + public ReadOnlyNest2 nest2; + } + + [System.Serializable] + public struct ReadOnlyNest2 + { + [ReadOnly] + [AllowNesting] + public string readOnlyString; + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ReadOnlyTest.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ReadOnlyTest.cs.meta new file mode 100644 index 0000000000..d65c60ce82 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ReadOnlyTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5443d37a05e188846bda9b05b067184e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ReorderableListTest.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ReorderableListTest.cs new file mode 100644 index 0000000000..6b3e43910e --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ReorderableListTest.cs @@ -0,0 +1,34 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace NaughtyAttributes.Test +{ + public class ReorderableListTest : MonoBehaviour + { + [ReorderableList] + public int[] intArray; + + [ReorderableList] + public List vectorList; + + [ReorderableList] + public List structList; + + [ReorderableList] + public GameObject[] gameObjectsList; + + [ReorderableList] + public List transformsList; + + [ReorderableList] + public List monoBehavioursList; + } + + [System.Serializable] + public struct SomeStruct + { + public int Int; + public float Float; + public Vector3 Vector; + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ReorderableListTest.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ReorderableListTest.cs.meta new file mode 100644 index 0000000000..b993018cff --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ReorderableListTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c93fde7cd79390148ac576c3a159a77b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/RequiredTest.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/RequiredTest.cs new file mode 100644 index 0000000000..ea0493612e --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/RequiredTest.cs @@ -0,0 +1,30 @@ +using UnityEngine; + +namespace NaughtyAttributes.Test +{ + public class RequiredTest : MonoBehaviour + { + [Required] + public Transform trans0; + + public RequiredNest1 nest1; + } + + [System.Serializable] + public class RequiredNest1 + { + [Required] + [AllowNesting] // Because it's nested we need to explicitly allow nesting + public Transform trans1; + + public RequiredNest2 nest2; + } + + [System.Serializable] + public class RequiredNest2 + { + [Required("trans2 is invalid custom message - hohoho")] + [AllowNesting] // Because it's nested we need to explicitly allow nesting + public Transform trans2; + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/RequiredTest.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/RequiredTest.cs.meta new file mode 100644 index 0000000000..bc51260696 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/RequiredTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9c8c10b2234650d42b2a8efad6b413db +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ResizableTextAreaTest.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ResizableTextAreaTest.cs new file mode 100644 index 0000000000..aa57a3d7d6 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ResizableTextAreaTest.cs @@ -0,0 +1,28 @@ +using UnityEngine; + +namespace NaughtyAttributes.Test +{ + public class ResizableTextAreaTest : MonoBehaviour + { + [ResizableTextArea] + public string text0; + + public ResizableTextAreaNest1 nest1; + } + + [System.Serializable] + public class ResizableTextAreaNest1 + { + [ResizableTextArea] + public string text1; + + public ResizableTextAreaNest2 nest2; + } + + [System.Serializable] + public class ResizableTextAreaNest2 + { + [ResizableTextArea] + public string text2; + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ResizableTextAreaTest.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ResizableTextAreaTest.cs.meta new file mode 100644 index 0000000000..380566d511 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ResizableTextAreaTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fb4f4bb2e3e063340a24f4bb24528bb5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/SceneTest.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/SceneTest.cs new file mode 100644 index 0000000000..70d37c0f25 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/SceneTest.cs @@ -0,0 +1,28 @@ +using UnityEngine; + +namespace NaughtyAttributes.Test +{ + public class SceneTest : MonoBehaviour + { + [Scene] + public string scene0; + + public SceneNest1 nest1; + } + + [System.Serializable] + public class SceneNest1 + { + [Scene] + public string scene1; + + public SceneNest2 nest2; + } + + [System.Serializable] + public struct SceneNest2 + { + [Scene] + public int scene2; + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/SceneTest.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/SceneTest.cs.meta new file mode 100644 index 0000000000..3ceca2fe2e --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/SceneTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 281a85803caf74a459439020a0840fa4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ShowAssetPreviewTest.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ShowAssetPreviewTest.cs new file mode 100644 index 0000000000..c20b754771 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ShowAssetPreviewTest.cs @@ -0,0 +1,37 @@ +using UnityEngine; + +namespace NaughtyAttributes.Test +{ + public class ShowAssetPreviewTest : MonoBehaviour + { + [ShowAssetPreview] + public Sprite sprite0; + + [ShowAssetPreview(96, 96)] + public GameObject prefab0; + + public ShowAssetPreviewNest1 nest1; + } + + [System.Serializable] + public class ShowAssetPreviewNest1 + { + [ShowAssetPreview] + public Sprite sprite1; + + [ShowAssetPreview(96, 96)] + public GameObject prefab1; + + public ShowAssetPreviewNest2 nest2; + } + + [System.Serializable] + public class ShowAssetPreviewNest2 + { + [ShowAssetPreview] + public Sprite sprite2; + + [ShowAssetPreview(96, 96)] + public GameObject prefab2; + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ShowAssetPreviewTest.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ShowAssetPreviewTest.cs.meta new file mode 100644 index 0000000000..b636853b78 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ShowAssetPreviewTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 705c14aa9ecaa274289972381f471367 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ShowIfTest.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ShowIfTest.cs new file mode 100644 index 0000000000..fe19d632de --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ShowIfTest.cs @@ -0,0 +1,119 @@ +using System; +using UnityEngine; + +namespace NaughtyAttributes.Test +{ + public class ShowIfTest : MonoBehaviour + { + public bool show1; + public bool show2; + public ShowIfEnum enum1; + [EnumFlags] public ShowIfEnumFlag enum2; + + [ShowIf(EConditionOperator.And, "show1", "show2")] + [ReorderableList] + public int[] showIfAll; + + [ShowIf(EConditionOperator.Or, "show1", "show2")] + [ReorderableList] + public int[] showIfAny; + + [ShowIf("enum1", ShowIfEnum.Case0)] + [ReorderableList] + public int[] showIfEnum; + + [ShowIf("enum2", ShowIfEnumFlag.Flag0)] + [ReorderableList] + public int[] showIfEnumFlag; + + [ShowIf("enum2", ShowIfEnumFlag.Flag0 | ShowIfEnumFlag.Flag1)] + [ReorderableList] + public int[] showIfEnumFlagMulti; + + public ShowIfNest1 nest1; + } + + [System.Serializable] + public class ShowIfNest1 + { + public bool show1; + public bool show2; + public ShowIfEnum enum1; + [EnumFlags] public ShowIfEnumFlag enum2; + public bool Show1 { get { return show1; } } + public bool Show2 { get { return show2; } } + public ShowIfEnum Enum1 { get { return enum1; } } + public ShowIfEnumFlag Enum2 { get { return enum2; } } + + [ShowIf(EConditionOperator.And, "Show1", "Show2")] + [AllowNesting] // Because it's nested we need to explicitly allow nesting + public int showIfAll; + + [ShowIf(EConditionOperator.Or, "Show1", "Show2")] + [AllowNesting] // Because it's nested we need to explicitly allow nesting + public int showIfAny; + + [ShowIf("Enum1", ShowIfEnum.Case1)] + [AllowNesting] // Because it's nested we need to explicitly allow nesting + public int showIfEnum; + + [ShowIf("Enum2", ShowIfEnumFlag.Flag0)] + [AllowNesting] + public int showIfEnumFlag; + + [ShowIf("Enum2", ShowIfEnumFlag.Flag0 | ShowIfEnumFlag.Flag1)] + [AllowNesting] + public int showIfEnumFlagMulti; + + public ShowIfNest2 nest2; + } + + [System.Serializable] + public class ShowIfNest2 + { + public bool show1; + public bool show2; + public ShowIfEnum enum1; + [EnumFlags] public ShowIfEnumFlag enum2; + public bool GetShow1() { return show1; } + public bool GetShow2() { return show2; } + public ShowIfEnum GetEnum1() { return enum1; } + public ShowIfEnumFlag GetEnum2() { return enum2; } + + [ShowIf(EConditionOperator.And, "GetShow1", "GetShow2")] + [MinMaxSlider(0.0f, 1.0f)] // AllowNesting attribute is not needed, because the field is already marked with a custom naughty property drawer + public Vector2 showIfAll = new Vector2(0.25f, 0.75f); + + [ShowIf(EConditionOperator.Or, "GetShow1", "GetShow2")] + [MinMaxSlider(0.0f, 1.0f)] // AllowNesting attribute is not needed, because the field is already marked with a custom naughty property drawer + public Vector2 showIfAny = new Vector2(0.25f, 0.75f); + + [ShowIf("GetEnum1", ShowIfEnum.Case2)] + [MinMaxSlider(0.0f, 1.0f)] // AllowNesting attribute is not needed, because the field is already marked with a custom naughty property drawer + public Vector2 showIfEnum = new Vector2(0.25f, 0.75f); + + [ShowIf("GetEnum2", ShowIfEnumFlag.Flag0)] + [MinMaxSlider(0.0f, 1.0f)] // AllowNesting attribute is not needed, because the field is already marked with a custom naughty property drawer + public Vector2 showIfEnumFlag; + + [ShowIf("GetEnum2", ShowIfEnumFlag.Flag0 | ShowIfEnumFlag.Flag1)] + [MinMaxSlider(0.0f, 1.0f)] // AllowNesting attribute is not needed, because the field is already marked with a custom naughty property drawer + public Vector2 showIfEnumFlagMulti; + } + + public enum ShowIfEnum + { + Case0, + Case1, + Case2 + } + + [Flags] + public enum ShowIfEnumFlag + { + Flag0 = 1, + Flag1 = 2, + Flag2 = 4, + Flag3 = 8 + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ShowIfTest.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ShowIfTest.cs.meta new file mode 100644 index 0000000000..749d05ce6a --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ShowIfTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4fdbfcfbf5b056a4bac491fe21569572 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ShowNativePropertyTest.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ShowNativePropertyTest.cs new file mode 100644 index 0000000000..6f4b379754 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ShowNativePropertyTest.cs @@ -0,0 +1,79 @@ +using UnityEngine; + +namespace NaughtyAttributes.Test +{ + public class ShowNativePropertyTest : MonoBehaviour + { + [ShowNativeProperty] + private Transform Transform + { + get + { + return transform; + } + } + + [ShowNativeProperty] + private Transform ParentTransform + { + get + { + return transform.parent; + } + } + + [ShowNativeProperty] + private ushort MyUShort + { + get + { + return ushort.MaxValue; + } + } + + [ShowNativeProperty] + private short MyShort + { + get + { + return short.MaxValue; + } + } + + [ShowNativeProperty] + private ulong MyULong + { + get + { + return ulong.MaxValue; + } + } + + [ShowNativeProperty] + private long MyLong + { + get + { + return long.MaxValue; + } + } + + [ShowNativeProperty] + private uint MyUInt + { + get + { + return uint.MaxValue; + } + } + + [ShowNativeProperty] + private int MyInt + { + get + { + return int.MaxValue; + } + } + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ShowNativePropertyTest.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ShowNativePropertyTest.cs.meta new file mode 100644 index 0000000000..19f9e31f4f --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ShowNativePropertyTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b5a73795d25dd334e90a5a347c6079d9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ShowNonSerializedFieldTest.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ShowNonSerializedFieldTest.cs new file mode 100644 index 0000000000..cace1508b5 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ShowNonSerializedFieldTest.cs @@ -0,0 +1,33 @@ +using UnityEngine; + +namespace NaughtyAttributes.Test +{ + public class ShowNonSerializedFieldTest : MonoBehaviour + { +#pragma warning disable 414 + [ShowNonSerializedField] + private ushort myUShort = ushort.MaxValue; + + [ShowNonSerializedField] + private short myShort = short.MaxValue; + + [ShowNonSerializedField] + private uint myUInt = uint.MaxValue; + + [ShowNonSerializedField] + private int myInt = 10; + + [ShowNonSerializedField] + private ulong myULong = ulong.MaxValue; + + [ShowNonSerializedField] + private long myLong = long.MaxValue; + + [ShowNonSerializedField] + private const float PI = 3.14159f; + + [ShowNonSerializedField] + private static readonly Vector3 CONST_VECTOR = Vector3.one; +#pragma warning restore 414 + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ShowNonSerializedFieldTest.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ShowNonSerializedFieldTest.cs.meta new file mode 100644 index 0000000000..404ff1bba1 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ShowNonSerializedFieldTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 913d67a695253f744bdc776625b9b948 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/SortingLayerTest.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/SortingLayerTest.cs new file mode 100644 index 0000000000..e77bfec69e --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/SortingLayerTest.cs @@ -0,0 +1,46 @@ +using UnityEngine; + +namespace NaughtyAttributes.Test +{ + public class SortingLayerTest : MonoBehaviour + { + [SortingLayer] + public int layerNumber0; + + [SortingLayer] + public string layerName0; + + public SortingLayerNest1 nest1; + + [Button] + public void DebugLog() + { + Debug.LogFormat("{0} = {1}", nameof(layerNumber0), layerNumber0); + Debug.LogFormat("{0} = {1}", nameof(layerName0), layerName0); + Debug.LogFormat("LayerToName({0}) = {1}", layerNumber0, SortingLayer.IDToName(layerNumber0)); + Debug.LogFormat("NameToLayer({0}) = {1}", layerName0, SortingLayer.NameToID(layerName0)); + } + } + + [System.Serializable] + public class SortingLayerNest1 + { + [SortingLayer] + public int layerNumber1; + + [SortingLayer] + public string layerName1; + + public SortingLayerNest2 nest2; + } + + [System.Serializable] + public struct SortingLayerNest2 + { + [SortingLayer] + public int layerNumber2; + + [SortingLayer] + public string layerName2; + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/SortingLayerTest.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/SortingLayerTest.cs.meta new file mode 100644 index 0000000000..e8cd99c1a5 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/SortingLayerTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8ed73e666d447964d93c4840f05423dc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/TagTest.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/TagTest.cs new file mode 100644 index 0000000000..cb77fb83c5 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/TagTest.cs @@ -0,0 +1,34 @@ +using UnityEngine; + +namespace NaughtyAttributes.Test +{ + public class TagTest : MonoBehaviour + { + [Tag] + public string tag0; + + public TagNest1 nest1; + + [Button] + private void LogTag0() + { + Debug.Log(tag0); + } + } + + [System.Serializable] + public class TagNest1 + { + [Tag] + public string tag1; + + public TagNest2 nest2; + } + + [System.Serializable] + public struct TagNest2 + { + [Tag] + public string tag2; + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/TagTest.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/TagTest.cs.meta new file mode 100644 index 0000000000..88ea5af3b8 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/TagTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8bcc0d5613b48fb43bd36c9d37e99900 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ValidateInputTest.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ValidateInputTest.cs new file mode 100644 index 0000000000..8e7b091cef --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ValidateInputTest.cs @@ -0,0 +1,52 @@ +using UnityEngine; + +namespace NaughtyAttributes.Test +{ + public class ValidateInputTest : MonoBehaviour + { + [ValidateInput("NotZero0", "int0 must not be zero")] + public int int0; + + private bool NotZero0(int value) + { + return value != 0; + } + + public ValidateInputNest1 nest1; + + public ValidateInputInheritedNest inheritedNest; + } + + [System.Serializable] + public class ValidateInputNest1 + { + [ValidateInput("NotZero1")] + [AllowNesting] // Because it's nested we need to explicitly allow nesting + public int int1; + + private bool NotZero1(int value) + { + return value != 0; + } + + public ValidateInputNest2 nest2; + } + + [System.Serializable] + public class ValidateInputNest2 + { + [ValidateInput("NotZero2")] + [AllowNesting] // Because it's nested we need to explicitly allow nesting + public int int2; + + private bool NotZero2(int value) + { + return value != 0; + } + } + + [System.Serializable] + public class ValidateInputInheritedNest : ValidateInputNest1 + { + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ValidateInputTest.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ValidateInputTest.cs.meta new file mode 100644 index 0000000000..f57070a2c6 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/ValidateInputTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 94adafcfe59aa344c9b5596b2cc6ecd0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/_NaughtyComponent.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/_NaughtyComponent.cs new file mode 100644 index 0000000000..aff1dfa3ff --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/_NaughtyComponent.cs @@ -0,0 +1,19 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace NaughtyAttributes.Test +{ + public class _NaughtyComponent : MonoBehaviour + { + } + + [System.Serializable] + public class MyClass + { + } + + [System.Serializable] + public struct MyStruct + { + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/_NaughtyComponent.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/_NaughtyComponent.cs.meta new file mode 100644 index 0000000000..10803eed72 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/_NaughtyComponent.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 9c928ea15ae74a44089beb2e534c1a35 +timeCreated: 1507996629 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/_NaughtyScriptableObject.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/_NaughtyScriptableObject.cs new file mode 100644 index 0000000000..c8d80fbc2f --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/_NaughtyScriptableObject.cs @@ -0,0 +1,12 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace NaughtyAttributes.Test +{ + //[CreateAssetMenu(fileName = "NaughtyScriptableObject", menuName = "NaughtyAttributes/_NaughtyScriptableObject")] + public class _NaughtyScriptableObject : ScriptableObject + { + [Expandable] + public List<_TestScriptableObjectA> listA; + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/_NaughtyScriptableObject.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/_NaughtyScriptableObject.cs.meta new file mode 100644 index 0000000000..6328fa3224 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/_NaughtyScriptableObject.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 753bdb918c6038142acddbd7aae6958f +timeCreated: 1518639587 +licenseType: Store +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/_TestScriptableObjectA.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/_TestScriptableObjectA.cs new file mode 100644 index 0000000000..ee7b36f1a3 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/_TestScriptableObjectA.cs @@ -0,0 +1,12 @@ +using UnityEngine; +using System.Collections.Generic; + +namespace NaughtyAttributes.Test +{ + //[CreateAssetMenu(fileName = "TestScriptableObjectA", menuName = "NaughtyAttributes/TestScriptableObjectA")] + public class _TestScriptableObjectA : ScriptableObject + { + [Expandable] + public List<_TestScriptableObjectB> listB; + } +} \ No newline at end of file diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/_TestScriptableObjectA.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/_TestScriptableObjectA.cs.meta new file mode 100644 index 0000000000..5037e5c2ee --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/_TestScriptableObjectA.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 19472ac11eae27a4b804f354ca7d9c00 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/_TestScriptableObjectB.cs b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/_TestScriptableObjectB.cs new file mode 100644 index 0000000000..89a474d322 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/_TestScriptableObjectB.cs @@ -0,0 +1,12 @@ +using UnityEngine; +using System.Collections.Generic; + +namespace NaughtyAttributes.Test +{ + //[CreateAssetMenu(fileName = "TestScriptableObjectB", menuName = "NaughtyAttributes/TestScriptableObjectB")] + public class _TestScriptableObjectB : ScriptableObject + { + [MinMaxSlider(0, 10)] + public Vector2Int slider; + } +} \ No newline at end of file diff --git a/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/_TestScriptableObjectB.cs.meta b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/_TestScriptableObjectB.cs.meta new file mode 100644 index 0000000000..0562e579f8 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/Scripts/Test/_TestScriptableObjectB.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c2b396aeebc9d984da298eee313896bc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/External/NaughtyAttributes/package.json b/Assets/Scripts/External/NaughtyAttributes/package.json new file mode 100644 index 0000000000..960db0578e --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/package.json @@ -0,0 +1,21 @@ +{ + "name": "com.dbrizov.naughtyattributes", + "displayName": "NaughtyAttributes", + "version": "2.1.4", + "unity": "2018.4", + "description": "NaughtyAttributes is an extension for the Unity Inspector.", + "keywords": [ "attribute", "inspector", "editor" ], + "category": "editor extensions", + "dependencies": {}, + "samples": [ + { + "displayName": "Demo Scene", + "description": "Demo Scene", + "path": "Samples/DemoScene" + } + ], + "author": { + "name": "Denis Rizov", + "url": "https://github.com/dbrizov" + } +} diff --git a/Assets/Scripts/External/NaughtyAttributes/package.json.meta b/Assets/Scripts/External/NaughtyAttributes/package.json.meta new file mode 100644 index 0000000000..6f1fa82572 --- /dev/null +++ b/Assets/Scripts/External/NaughtyAttributes/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: db9a5ca20403b0344ae64015de8f8c86 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/SS3D/Application.meta b/Assets/Scripts/SS3D/Application.meta index 9dfa836126..6ce522df13 100644 --- a/Assets/Scripts/SS3D/Application.meta +++ b/Assets/Scripts/SS3D/Application.meta @@ -1,9 +1,4 @@ fileFormatVersion: 2 -<<<<<<<< HEAD:Assets/Scripts/SS3D/Application.meta -guid: 45e3ca56ffb946a44bc85f5ac5482dd3 -======== -guid: 3958892eecab2dc4bb25cae8722d4443 ->>>>>>>> 38d64305 (Revert code changes and add code linting back):Assets/Scripts/Tests/EditMode.meta folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/Scripts/SS3D/Data/AssetDatabases/AssetReferenceActor.cs b/Assets/Scripts/SS3D/Data/AssetDatabases/AssetReferenceActor.cs new file mode 100644 index 0000000000..6dd0aab4eb --- /dev/null +++ b/Assets/Scripts/SS3D/Data/AssetDatabases/AssetReferenceActor.cs @@ -0,0 +1,37 @@ +using SS3D.Attributes; +using SS3D.Data.AssetDatabases; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace SS3D.Data.AssetDatabases +{ + /// + /// The current asset system requires prefabs to have a component implementing the IWorldObjectAsset interface to work. + /// This script can be put at the root of any game objects that need to be part of the asset system, it is there only + /// as a simple implementation for the IWorldObjedctAsset interface. + /// + public class AssetReferenceActor : MonoBehaviour, IWorldObjectAsset + { + + [SerializeField] +#if UNITY_EDITOR + [ReadOnly] + [Header("This field is filled automatically by the AssetData system.")] +#endif + private WorldObjectAssetReference _asset; + + public WorldObjectAssetReference Asset + { + get => _asset; + set + { + if (UnityEngine.Application.isPlaying) + { + Serilog.Log.Warning($"Field {nameof(Asset)} is being modified in runtime. This should not happen in normal conditions."); + } + _asset = value; + } + } + } +} diff --git a/Assets/Scripts/SS3D/Data/AssetDatabases/AssetReferenceActor.cs.meta b/Assets/Scripts/SS3D/Data/AssetDatabases/AssetReferenceActor.cs.meta new file mode 100644 index 0000000000..16b4d21a12 --- /dev/null +++ b/Assets/Scripts/SS3D/Data/AssetDatabases/AssetReferenceActor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bf0917e0aefbd9a4f8d986956ddafc17 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/SS3D/Data/Generated/CraftingRecipes.cs b/Assets/Scripts/SS3D/Data/Generated/CraftingRecipes.cs index 7bd7e94972..8862aaaf6d 100644 --- a/Assets/Scripts/SS3D/Data/Generated/CraftingRecipes.cs +++ b/Assets/Scripts/SS3D/Data/Generated/CraftingRecipes.cs @@ -5,8 +5,12 @@ namespace SS3D.Data.Generated // This class is autogenerated. Do not modify manually. public static class CraftingRecipes { - public static DatabaseAsset SlicedBananas = new DatabaseAsset("SlicedBananas", "CraftingRecipes"); public static DatabaseAsset WeirdComplexRecipe = new DatabaseAsset("WeirdComplexRecipe", "CraftingRecipes"); + public static DatabaseAsset SteelGirderUnboltedRecipe = new DatabaseAsset("SteelGirderUnboltedRecipe", "CraftingRecipes"); + public static DatabaseAsset SteelSheetRecipe = new DatabaseAsset("SteelSheetRecipe", "CraftingRecipes"); + public static DatabaseAsset ReinforcedWallRecipe = new DatabaseAsset("ReinforcedWallRecipe", "CraftingRecipes"); + public static DatabaseAsset SteelWallRecipe = new DatabaseAsset("SteelWallRecipe", "CraftingRecipes"); + public static DatabaseAsset SteelGirderRecipe = new DatabaseAsset("SteelGirderRecipe", "CraftingRecipes"); } } diff --git a/Assets/Scripts/SS3D/Data/Generated/Items.cs b/Assets/Scripts/SS3D/Data/Generated/Items.cs index c6ceaf9d21..832fabe8eb 100644 --- a/Assets/Scripts/SS3D/Data/Generated/Items.cs +++ b/Assets/Scripts/SS3D/Data/Generated/Items.cs @@ -72,6 +72,10 @@ public static class Items public static DatabaseAsset Multitool = new DatabaseAsset("Multitool", "Items"); public static DatabaseAsset PowerCellAdmin = new DatabaseAsset("PowerCellAdmin", "Items"); public static DatabaseAsset PowerCell = new DatabaseAsset("PowerCell", "Items"); + public static DatabaseAsset SteelWall = new DatabaseAsset("SteelWall", "Items"); + public static DatabaseAsset SteelGirder = new DatabaseAsset("SteelGirder", "Items"); + public static DatabaseAsset Plenum = new DatabaseAsset("Plenum", "Items"); + public static DatabaseAsset SteelGirderUnbolted = new DatabaseAsset("SteelGirderUnbolted", "Items"); public static DatabaseAsset GlassReinforcedSheet = new DatabaseAsset("GlassReinforcedSheet", "Items"); public static DatabaseAsset GlassSheet = new DatabaseAsset("GlassSheet", "Items"); public static DatabaseAsset WoodLog = new DatabaseAsset("WoodLog", "Items"); @@ -93,6 +97,9 @@ public static class Items public static DatabaseAsset Hatchet = new DatabaseAsset("Hatchet", "Items"); public static DatabaseAsset ElectricalWire = new DatabaseAsset("ElectricalWire", "Items"); public static DatabaseAsset ElectricalCable = new DatabaseAsset("ElectricalCable", "Items"); + public static DatabaseAsset SteelWindow = new DatabaseAsset("SteelWindow", "Items"); + public static DatabaseAsset SteelWallReinforced = new DatabaseAsset("SteelWallReinforced", "Items"); + public static DatabaseAsset SteelWindowReinforced = new DatabaseAsset("SteelWindowReinforced", "Items"); public static DatabaseAsset HeadsetSecurityLeft = new DatabaseAsset("HeadsetSecurityLeft", "Items"); public static DatabaseAsset HeadsetSecurityRight = new DatabaseAsset("HeadsetSecurityRight", "Items"); } diff --git a/Assets/Scripts/SS3D/Data/Generated/ParticlesEffects.cs b/Assets/Scripts/SS3D/Data/Generated/ParticlesEffects.cs index 116a8058ea..f0d26c0901 100644 --- a/Assets/Scripts/SS3D/Data/Generated/ParticlesEffects.cs +++ b/Assets/Scripts/SS3D/Data/Generated/ParticlesEffects.cs @@ -7,6 +7,7 @@ public static class ParticlesEffects { public static DatabaseAsset AttackParticles = new DatabaseAsset("AttackParticles", "ParticlesEffects"); public static DatabaseAsset BleedingParticle = new DatabaseAsset("BleedingParticle", "ParticlesEffects"); + public static DatabaseAsset ConstructionParticle = new DatabaseAsset("ConstructionParticle", "ParticlesEffects"); } } diff --git a/Assets/Scripts/SS3D/Interactions/DelayedInteraction.cs b/Assets/Scripts/SS3D/Interactions/DelayedInteraction.cs index 6fc9699596..e8f9432c23 100644 --- a/Assets/Scripts/SS3D/Interactions/DelayedInteraction.cs +++ b/Assets/Scripts/SS3D/Interactions/DelayedInteraction.cs @@ -54,9 +54,7 @@ public override IClientInteraction CreateClient(InteractionEvent interactionEven /// The reference to this interaction public override bool Start(InteractionEvent interactionEvent, InteractionReference reference) { - _startTime = Time.time; - _lastCheck = _startTime; - _hasStarted= true; + StartCounter(); return true; } @@ -67,7 +65,7 @@ public override bool Start(InteractionEvent interactionEvent, InteractionReferen /// The reference to this interaction public override bool Update(InteractionEvent interactionEvent, InteractionReference reference) { - if (_lastCheck + CheckInterval < Time.time) + if (_lastCheck + CheckInterval < Time.time && _hasStarted) { if (!CanInteract(interactionEvent)) { @@ -79,11 +77,11 @@ public override bool Update(InteractionEvent interactionEvent, InteractionRefere _lastCheck = Time.time; } - if (_startTime + Delay < Time.time) + if (_startTime + Delay < Time.time && _hasStarted) { if (CanInteract(interactionEvent)) { - StartDelayed(interactionEvent); + StartDelayed(interactionEvent, reference); return false; } else @@ -97,6 +95,13 @@ public override bool Update(InteractionEvent interactionEvent, InteractionRefere return true; } + protected void StartCounter() + { + _startTime = Time.time; + _lastCheck = _startTime; + _hasStarted = true; + } + /// public abstract override void Cancel(InteractionEvent interactionEvent, InteractionReference reference); @@ -104,6 +109,6 @@ public override bool Update(InteractionEvent interactionEvent, InteractionRefere /// Starts the interaction after the delay has passed /// /// The interaction event - protected abstract void StartDelayed(InteractionEvent interactionEvent); + protected abstract void StartDelayed(InteractionEvent interactionEvent, InteractionReference reference); } } \ No newline at end of file diff --git a/Assets/Scripts/SS3D/Interactions/Interfaces/IInteractionSource.cs b/Assets/Scripts/SS3D/Interactions/Interfaces/IInteractionSource.cs index 077c445fab..938449ff03 100644 --- a/Assets/Scripts/SS3D/Interactions/Interfaces/IInteractionSource.cs +++ b/Assets/Scripts/SS3D/Interactions/Interfaces/IInteractionSource.cs @@ -6,7 +6,7 @@ namespace SS3D.Interactions.Interfaces /// Represents a source for an interaction. /// A screw driver can be a source of interaction for the opening maintenance panels, building and stabbing interactions. /// - public interface IInteractionSource + public interface IInteractionSource : INetworkObjectProvider, IGameObjectProvider { IInteractionSource Source { get; set; } diff --git a/Assets/Scripts/SS3D/Interactions/Interfaces/INetworkObjectProvider.cs b/Assets/Scripts/SS3D/Interactions/Interfaces/INetworkObjectProvider.cs new file mode 100644 index 0000000000..4711d4a188 --- /dev/null +++ b/Assets/Scripts/SS3D/Interactions/Interfaces/INetworkObjectProvider.cs @@ -0,0 +1,9 @@ +using FishNet.Object; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public interface INetworkObjectProvider +{ + public NetworkObject NetworkObject { get; } +} diff --git a/Assets/Scripts/SS3D/Interactions/Interfaces/INetworkObjectProvider.cs.meta b/Assets/Scripts/SS3D/Interactions/Interfaces/INetworkObjectProvider.cs.meta new file mode 100644 index 0000000000..4e20b60e0c --- /dev/null +++ b/Assets/Scripts/SS3D/Interactions/Interfaces/INetworkObjectProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0821471c3afd0e14c9d51a00eba81539 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/SS3D/Systems/Audio/AudioSystem.cs b/Assets/Scripts/SS3D/Systems/Audio/AudioSystem.cs index 8eec60b4a1..992d2fc970 100644 --- a/Assets/Scripts/SS3D/Systems/Audio/AudioSystem.cs +++ b/Assets/Scripts/SS3D/Systems/Audio/AudioSystem.cs @@ -7,7 +7,6 @@ using SS3D.Data; using SS3D.Data.Generated; using UnityEngine; -using UnityEngine.Serialization; namespace SS3D.Systems.Audio { @@ -121,7 +120,8 @@ public void RpcPlayAudioSource(AudioType type, string audioClip, Vector3 positio [ObserversRpc] public void RpcStopAudioSource(NetworkObject parent) { - parent.GetComponentInChildren().Stop(); + AudioSource audioSource = parent.GetComponentInChildren(); + audioSource?.Stop(); } /// @@ -143,7 +143,7 @@ public AudioSource FindAvailableAudioSource(AudioType audioType) //Check the list for an audio source that isn't being used. foreach (AudioSource source in audioSources.List) { - if (!source.isPlaying) + if (source != null && !source.isPlaying) { //If we found one, exit the foreach loop. validSource = source; @@ -231,10 +231,10 @@ public void PurgeUnusedAudioSources() foreach (AudioSource source in List) { //Check that the audio source is idle, and we have more than our minimum number. - if (!source.isPlaying && List.Count > MinAudioSources) + if (source == null || (!source.isPlaying && List.Count > MinAudioSources)) { List.Remove(source); - source.gameObject.Dispose(true); + source?.gameObject.Dispose(true); } } } diff --git a/Assets/Scripts/SS3D/Systems/Crafting/Craft.cs b/Assets/Scripts/SS3D/Systems/Crafting/Craft.cs new file mode 100644 index 0000000000..67a82df0d4 --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Crafting/Craft.cs @@ -0,0 +1,30 @@ +using SS3D.Interactions.Interfaces; +using SS3D.Interactions; +using System.Collections.Generic; +using UnityEngine; + +namespace SS3D.Systems.Crafting +{ + /// + /// Interaction source extension script, to make some game object become source of crafting interactions. + /// More precisely, it triggers opening the crafting menu interactions, which create crafting interaction. + /// + public class Craft : MonoBehaviour, IInteractionSourceExtension + { + /// + /// The different types of interaction the game object with this component on can support. + /// + [SerializeField] + private CraftingInteractionType type; + + public void GetSourceInteractions(IInteractionTarget[] targets, List interactions) + { + OpenCraftingMenuInteraction openCraftingMenuInteraction = new(type); + + foreach (IInteractionTarget target in targets) + { + interactions.Add(new(target, openCraftingMenuInteraction)); + } + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/SS3D/Systems/Crafting/Craft.cs.meta b/Assets/Scripts/SS3D/Systems/Crafting/Craft.cs.meta new file mode 100644 index 0000000000..f05bf1fd0a --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Crafting/Craft.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1dd866b0631d05441982a4824740ff8d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/SS3D/Systems/Crafting/CraftingAssetSlot.cs b/Assets/Scripts/SS3D/Systems/Crafting/CraftingAssetSlot.cs new file mode 100644 index 0000000000..cbd7c89ff6 --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Crafting/CraftingAssetSlot.cs @@ -0,0 +1,33 @@ +using TMPro; +using UnityEngine; +using SS3D.Core; +using System.Linq; + +namespace SS3D.Systems.Crafting +{ + /// + /// Script allowing to set up text slots in the crafting menu. Those slots, when clicked on, should trigger a given crafting + /// interaction. + /// + public class CraftingAssetSlot : MonoBehaviour + { + private int _index; + + /// + /// Set up the name of the recipe step in a UI slot for the crafting menu. + /// + public void Setup(string recipeStepName, int index) + { + _index = index; + GetComponentInChildren().text = recipeStepName; + } + + /// + /// Called when clicking on the button linked to this slot. Set selected interaction in the crafting menu. + /// + public void OnClick() + { + ViewLocator.Get().First().RpcSetSelectedInteraction(_index); + } + } +} diff --git a/Assets/Scripts/SS3D/Systems/Crafting/CraftingAssetSlot.cs.meta b/Assets/Scripts/SS3D/Systems/Crafting/CraftingAssetSlot.cs.meta new file mode 100644 index 0000000000..48f316457b --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Crafting/CraftingAssetSlot.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9b4126c17a93fbe47a8f7cf20d7b6541 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/SS3D/Systems/Crafting/CraftingInteraction.cs b/Assets/Scripts/SS3D/Systems/Crafting/CraftingInteraction.cs index 34562d25e7..1534859512 100644 --- a/Assets/Scripts/SS3D/Systems/Crafting/CraftingInteraction.cs +++ b/Assets/Scripts/SS3D/Systems/Crafting/CraftingInteraction.cs @@ -1,52 +1,81 @@ using FishNet.Object; +using JetBrains.Annotations; +using QuikGraph; using SS3D.Core; using SS3D.Interactions; using SS3D.Interactions.Extensions; -using SS3D.Logging; -using SS3D.Systems.Inventory.Items; -using System.Collections.Generic; using System.Linq; +using UnityEngine; namespace SS3D.Systems.Crafting { - public abstract class CraftingInteraction : DelayedInteraction, ICraftingInteraction + /// + /// Crafting interactions are at the core of the crafting system. They should be mostly created by the crafting menu interaction, + /// and they are the bridge between player inputs and the crafting system. + /// + public class CraftingInteraction : DelayedInteraction { - private List ItemsToConsume; - - private CraftingRecipe recipe; - /// - /// Checks if this interaction can be executed + /// The recipe link associated to this interaction. Crafting interactions are always associated to a recipe link. /// - /// The interaction source - /// If the interaction can be executed - public override bool CanInteract(InteractionEvent interactionEvent) - { - if (!CanCraft(interactionEvent)) return false; + private readonly TaggedEdge _chosenLink; - return true; - } + /// + /// The transform of the game object executing the crafting interaction, useful to check if the source moved + /// during the interaction, for example. + /// + private readonly Transform _characterTransform; - public bool CanCraft(InteractionEvent interactionEvent) - { - if (!Subsystems.TryGet(out CraftingSystem craftingSystem)) return false; + /// + /// The start position of the source of the interaction, when the interaction begins. + /// + private Vector3 _startPosition; - if (interactionEvent.Target is not Item) return false; + /// + /// Type of this interaction, defines which recipe will be available. + /// + private readonly CraftingInteractionType _type; - if (!InteractionExtensions.RangeCheck(interactionEvent)) return false; + /// + /// The start position of the source of the interaction, when the interaction begins. + /// + public Vector3 StartPosition => _startPosition; - Item target = interactionEvent.Target as Item; + /// + /// Type of this interaction, defines which recipe will be available. + /// + public CraftingInteractionType CraftingInteractionType => _type; - if (!craftingSystem.TryGetRecipe(this, target, out recipe)) return false; + /// + /// The transform of the game object executing the crafting interaction, useful to check if the source moved + /// during the interaction, for example. + /// + public Transform CharacterTransform => _characterTransform; - List closeItemsFromTarget = craftingSystem.GetCloseItemsFromTarget(target); + /// + /// The recipe link associated to this interaction. Crafting interactions are always associated to a recipe link. + /// + public TaggedEdge ChosenLink => _chosenLink; - Dictionary potentialRecipeElements = craftingSystem. - ItemListToDictionnaryOfRecipeElements(closeItemsFromTarget); + public CraftingInteraction(float delay, Transform characterTransform, CraftingInteractionType type, TaggedEdge link) + { + _characterTransform = characterTransform; + _startPosition = characterTransform.position; + Delay = delay; + _type = type; + _chosenLink = link; + } - if (!craftingSystem.CheckEnoughCloseItemsForRecipe(potentialRecipeElements, recipe)) return false; + /// + /// Check if the crafting can occur. + /// TODO : Add more conditions, as they are more things, such as obstacles, that can prevent a crafting interaction to occur. + /// + public override bool CanInteract(InteractionEvent interactionEvent) + { + // Check for movement once the interaction started. + if (HasStarted && !InteractionExtensions.CharacterMoveCheck(_startPosition, _characterTransform.position)) return false; - ItemsToConsume = craftingSystem.BuildListOfItemToConsume(closeItemsFromTarget, recipe); + if (!InteractionExtensions.RangeCheck(interactionEvent)) return false; return true; } @@ -54,28 +83,33 @@ public bool CanCraft(InteractionEvent interactionEvent) [Server] public override bool Start(InteractionEvent interactionEvent, InteractionReference reference) { - base.Start(interactionEvent, reference); + StartCounter(); + _startPosition = _characterTransform.position; + Subsystems.TryGet(out CraftingSystem craftingSystem); + craftingSystem.MoveAllObjectsToCraftPoint(this, interactionEvent, reference); + ViewLocator.Get().First().HideMenu(); return true; } - [Server] - public void Craft(InteractionEvent interactionEvent) + protected override void StartDelayed(InteractionEvent interactionEvent, InteractionReference reference) { - if (ItemsToConsume == null) + if (Subsystems.TryGet(out CraftingSystem craftingSystem)) { - Log.Error(this, "List of items to consume is null, call CanInteract first."); - return; + craftingSystem.CancelMoveAllObjectsToCraftPoint(reference); + craftingSystem.Craft(this, interactionEvent); } + } - Subsystems.TryGet(out CraftingSystem craftingSystem); - Item target = interactionEvent.Target as Item; - - craftingSystem.Craft(target, ItemsToConsume, recipe.Result.Select(o => o.GetComponent()).ToList()); + [NotNull] + public override string GetName(InteractionEvent interactionEvent) + { + return GetGenericName() + " " + interactionEvent.Target.GetGameObject().name.Split("(")[0]; } - protected override void StartDelayed(InteractionEvent interactionEvent) + public override void Cancel(InteractionEvent interactionEvent, InteractionReference reference) { - Craft(interactionEvent); + Subsystems.TryGet(out CraftingSystem craftingSystem); + craftingSystem.CancelMoveAllObjectsToCraftPoint(reference); } } } \ No newline at end of file diff --git a/Assets/Scripts/SS3D/Systems/Crafting/CraftingInteractionType.cs b/Assets/Scripts/SS3D/Systems/Crafting/CraftingInteractionType.cs new file mode 100644 index 0000000000..aacc09b34d --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Crafting/CraftingInteractionType.cs @@ -0,0 +1,15 @@ +namespace SS3D.Systems.Crafting +{ + /// + /// Enum for crafting interactions, indicating the type of crafting interaction occuring. + /// + public enum CraftingInteractionType + { + Screw, + Bolt, + Slice, + Handcraft, + Pry, + Weld, + } +} diff --git a/Assets/Scripts/SS3D/Systems/Crafting/CraftingInteractionType.cs.meta b/Assets/Scripts/SS3D/Systems/Crafting/CraftingInteractionType.cs.meta new file mode 100644 index 0000000000..559a0ce84e --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Crafting/CraftingInteractionType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6d2d4c86ced626349bcab336229e4e3a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/SS3D/Systems/Crafting/CraftingMenu.cs b/Assets/Scripts/SS3D/Systems/Crafting/CraftingMenu.cs new file mode 100644 index 0000000000..95f19fa937 --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Crafting/CraftingMenu.cs @@ -0,0 +1,286 @@ +using Coimbra; +using FishNet.Connection; +using FishNet.Object; +using JetBrains.Annotations; +using SS3D.Core; +using SS3D.Data.AssetDatabases; +using SS3D.Interactions; +using SS3D.Interactions.Extensions; +using SS3D.Interactions.Interfaces; +using SS3D.Logging; +using SS3D.Systems.Tile; +using SS3D.Systems.Tile.UI; +using System.Collections.Generic; +using System.Linq; +using TMPro; +using UnityEngine; +using UnityEngine.EventSystems; +using InputSystem = SS3D.Systems.Inputs.InputSystem; +using NetworkView = SS3D.Core.Behaviours.NetworkView; + +namespace SS3D.Systems.Crafting +{ + /// + /// Main script orchestrating displaying the crafting menu, triggering interactions when the player interacts with it. + /// The crafting menu should work this way currently : Select the thing you want to craft in a name list, once selected, + /// it should show all icons of things crafted. When clicking build button, it crafts the thing. + /// + public class CraftingMenu : NetworkView, IPointerEnterHandler, IPointerExitHandler + { + private InputSystem _inputSystem; + + /// + /// The model for a single slot, to display recipe step names in the crafting menu. + /// + [SerializeField] + private GameObject _textSlotPrefab; + + /// + /// The model for an icon for object that are result of the recipe. + /// + [SerializeField] + private GameObject _pictureSlotPrefab; + + /// + /// Game object parent of the area in the crafting menu where the recipe step names will show up. + /// + [SerializeField] + private GameObject _textSlotArea; + + /// + /// Game object parent of the area in the crafting menu where the recipe results icons will show up. + /// + [SerializeField] + private GameObject _pictureSlotArea; + + /// + /// Selected interaction. + /// + private CraftingInteraction _interaction; + + /// + /// Event linked to selected interaction. + /// + private InteractionEvent _interactionEvent; + + /// + /// TMP field to display the selected recipe step's name. + /// + [SerializeField] + private TextMeshProUGUI _objectTitle; + + /// + /// Server only, don't try to access it on client. Hold a list of potential interactions for each client, when + /// they open the crafting menu. + /// + private readonly Dictionary> _interactionsForConnection = new(); + + private readonly Dictionary _eventForConnection = new(); + + private bool _isPointerOnMenu = false; + + public override void OnStartNetwork() + { + base.OnStartNetwork(); + ShowUI(false); + _inputSystem = Subsystems.Get(); + } + + /// + /// Called when pointer enter the UI of the menu. + /// + public void OnPointerEnter(PointerEventData eventData) + { + _inputSystem.ToggleBinding("/scroll/y", false); + _isPointerOnMenu = true; + } + + /// + /// Called when pointer exit the UI of the menu. + /// + public void OnPointerExit(PointerEventData eventData) + { + _inputSystem.ToggleBinding("/scroll/y", true); + _isPointerOnMenu = false; + } + + private void ShowUI(bool isShow) + { + gameObject.SetActive(isShow); + } + + /// + /// Method called when the crafting menu is opened, normally only when multiple options are possible for crafting. + /// + [Server] + public void DisplayMenu(List interactions, InteractionEvent interactionEvent, InteractionReference reference, + CraftingInteractionType craftingInteractionType) + { + _interactionsForConnection.Remove(interactionEvent.Source.NetworkObject.Owner); + _interactionsForConnection.Add(interactionEvent.Source.NetworkObject.Owner, interactions); + + _eventForConnection.Remove(interactionEvent.Source.NetworkObject.Owner); + _eventForConnection.Add(interactionEvent.Source.NetworkObject.Owner, interactionEvent); + + if (interactions.Count == 1) + { + _interaction = interactions[0]; + _interactionEvent = interactionEvent; + StartSelectedInteraction(craftingInteractionType); + } + else + { + List stepNames = interactions.Select(x => x.ChosenLink.Target.Name).ToList(); + TargetOpenCraftingMenu(interactionEvent.Source.NetworkObject.Owner, stepNames); + SetSelectedInteraction(0, interactionEvent.Source.NetworkObject.Owner); + } + } + + public void HideMenu() + { + ShowUI(false); + + if (_isPointerOnMenu) + { + _inputSystem.ToggleBinding("/scroll/y", true); + } + } + + /// + /// Clear all recipe step's name and result icons in the crafting menu. + /// + private void ClearGrid() + { + for (int i = 0; i < _textSlotArea.transform.childCount; i++) + { + _textSlotArea.transform.GetChild(i).gameObject.Dispose(true); + } + + ClearPictures(); + } + + /// + /// Clear the icons in the crafting menu. + /// + private void ClearPictures() + { + for (int i = 0; i < _pictureSlotArea.transform.childCount; i++) + { + _pictureSlotArea.transform.GetChild(i).gameObject.Dispose(true); + } + } + + /// + /// Set up a given interaction, which will be called upon clicking on the build button. + /// + [ServerRpc(RequireOwnership = false)] + public void RpcSetSelectedInteraction(int index, [CanBeNull] NetworkConnection conn = null) + { + SetSelectedInteraction(index, conn); + } + + [Server] + private void SetSelectedInteraction(int index, NetworkConnection conn = null) + { + _interaction = _interactionsForConnection[conn][index]; + _interactionEvent = _eventForConnection[conn]; + List results = new(); + + if (_interaction.ChosenLink.Target.IsTerminal && _interaction.ChosenLink.Target.TryGetResult(out WorldObjectAssetReference result)) + { + results.Add(new (result, 1)); + } + else if (!_interaction.ChosenLink.Target.IsTerminal) + { + results.Add(new (_interaction.ChosenLink.Target.Recipe.Target, 1)); + } + + results.AddRange(_interaction.ChosenLink.Tag.SecondaryResults); + TargetSetVisuals(conn, results, _interaction.ChosenLink.Target.Name); + } + + /// + /// Trigger the selected crafting interaction. + /// + [Client] + public void OnBuildClick() + { + RpcStartSelectedInteraction(); + ShowUI(false); + } + + [TargetRpc] + private void TargetOpenCraftingMenu(NetworkConnection conn, List stepNames) + { + ClearGrid(); + int index = 0; + foreach (string stepName in stepNames) + { + Instantiate(_textSlotPrefab, _textSlotArea.transform, true).GetComponent().Setup(stepName, index); + index++; + } + + ShowUI(true); + } + + [TargetRpc] + private void TargetSetVisuals(NetworkConnection conn, List results, string nextRecipeStepName) + { + ClearPictures(); + + foreach (SecondaryResult result in results) + { + GenericObjectSo asset = Subsystems.Get().GetAsset(result.Asset.Id); + GameObject pictureSlot = Instantiate(_pictureSlotPrefab, _pictureSlotArea.transform, true); + pictureSlot.GetComponent().Setup(asset, result.Amount); + } + + _objectTitle.text = nextRecipeStepName; + } + + [ServerRpc(RequireOwnership = false)] + private void RpcStartSelectedInteraction() + { + if (_interaction == null) + { + Log.Error(this, "can't start selected interaction, it's null"); + return; + } + StartSelectedInteraction(_interaction.CraftingInteractionType); + } + + [Server] + private void StartSelectedInteraction(CraftingInteractionType type) + { + if (_interaction == null || _interactionEvent == null) + { + Log.Error(this, "can't start selected interaction, it's null, or it's interactionEvent is null"); + return; + } + + InteractionReference reference = _interactionEvent.Source.Interact(_interactionEvent, _interaction); + int index = _interactionsForConnection[_interactionEvent.Source.NetworkObject.Owner].IndexOf(_interaction); + RpcClientInteract(_interactionEvent.Source.NetworkObject.Owner, _interactionEvent.Target.GetGameObject(), + _interactionEvent.Source.GameObject, reference.Id, index, _interaction.CraftingInteractionType); + } + + /// + /// Launch the crafting interaction client side (currently only displaying the loading bar). + /// + /// Connection on which to start the client interaction + /// Target of the interaction + /// Source of the interaction + /// The reference of the interaction, client interaction should be set with the same id as server interaction. + /// Index of the interaction, upon creating available interaction from a given interaction event, and a crafting interaction type. + /// Type of the chosen crafting interaction, used to retrieve potential interactions. + [TargetRpc] + private void RpcClientInteract(NetworkConnection conn, GameObject target, GameObject sourceObject, int referenceId, int index, CraftingInteractionType type) + { + Subsystems.TryGet(out CraftingSystem craftingSystem); + IInteractionSource source = sourceObject.GetComponent(); + InteractionEvent interactionEvent = new(source, new InteractionTargetGameObject(target)); + List craftingInteractions = craftingSystem.CreateInteractions(interactionEvent, type); + interactionEvent.Source.ClientInteract(interactionEvent, craftingInteractions[index], new(referenceId)); + } + } +} diff --git a/Assets/Scripts/SS3D/Systems/Crafting/CraftingMenu.cs.meta b/Assets/Scripts/SS3D/Systems/Crafting/CraftingMenu.cs.meta new file mode 100644 index 0000000000..391aa1c3b3 --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Crafting/CraftingMenu.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 71a3e51e853fbc04f966014d5bd7876e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/SS3D/Systems/Crafting/CraftingRecipe.cs b/Assets/Scripts/SS3D/Systems/Crafting/CraftingRecipe.cs index c8b179c07e..26d6c78bba 100644 --- a/Assets/Scripts/SS3D/Systems/Crafting/CraftingRecipe.cs +++ b/Assets/Scripts/SS3D/Systems/Crafting/CraftingRecipe.cs @@ -1,72 +1,106 @@ -using Coimbra; +using QuikGraph; using SS3D.Data.AssetDatabases; -using SS3D.Systems.Inventory.Items; +using SS3D.Logging; using System.Collections.Generic; using System.Linq; using UnityEngine; namespace SS3D.Systems.Crafting { - /// - /// Crafting recipes allow to replace a bunch of item by another, using a specific interaction. - /// - [CreateAssetMenu(fileName = "Recipe", menuName = "SS3D/Crafting/Recipe")] - public class CraftingRecipe : ScriptableObject - { - [SerializeField] - private float _executionTime; + /// + /// Crafting recipes allow to replace a bunch of item by another, using a specific interaction. + /// + [CreateAssetMenu(fileName = "Recipe", menuName = "SS3D/Crafting/Recipe")] + public class CraftingRecipe : ScriptableObject + { + [Tooltip("The target of the crafting, what needs to be clicked on by the player to start the crafting.")] + public WorldObjectAssetReference Target; + + [Tooltip("A bunch of recipe steps, representing each steps of the recipe.")] + public List Steps; - [SerializeField] - private string _interactionName; + [Tooltip("A bunch of recipe links, which link recipe step together.")] + public List StepLinks; - [SerializeField] - private WorldObjectAssetReference _target; + /// + /// First step of the recipe, which should have the same name as the target of the recipe. + /// + public string RootStepName => Target.Prefab.name; + + public bool HasInitial => Steps.Any(x => x.IsInitialState); + + /// + /// Graph representing all steps in a recipe and their link between each other. + /// + public AdjacencyGraph> RecipeGraph { get; private set; } + + private void Awake() + { + Init(); + } - [SerializeField] - private List _result; + private void OnValidate() + { + Init(); + } - [SerializeField] - private SerializableDictionary _elements = new(); + /// + /// Editor only method, that build the directed graph representing the recipe, whenever something in the + /// crafting recipe is modified. + /// + private void Init() + { + RecipeGraph = new(); - /// - /// The items and their respective numbers necessary for the recipe. - /// - public Dictionary Elements - { - get - { - Dictionary elements = new Dictionary(); + foreach (RecipeStep step in Steps) + { + RecipeGraph.AddVertex(step); + step.Recipe = this; + } - foreach (KeyValuePair keyValuePair in _elements) - { - elements.Add(keyValuePair.Key.Prefab.GetComponent(), keyValuePair.Value); - } + foreach (RecipeStepLink link in StepLinks) + { + link.Recipe = this; + bool stepFromFound = TryGetStep(link.From, out RecipeStep stepFrom); + bool stepToFound = TryGetStep(link.To, out RecipeStep stepTo); - return elements; - } - } + if (stepFromFound && stepToFound) + { + RecipeGraph.AddEdge(new(stepFrom, stepTo, link)); + } + else + { + Log.Error(this, $"step with name {link.From} or step with name {link.To} not found in recipe {name}"); + } + } + } - /// - /// Time it takes in second for the crafting to finish. - /// - public float ExecutionTime => _executionTime; - - /// - /// Name of the necessary interaction to perform the recipe. - /// - public string InteractionName => _interactionName; - - /// - /// The target of the recipe, which is the item on which the player must click to get the crafting interactions. - /// - public Item Target => _target.Prefab.GetComponent(); - - /// - /// The result of the crafting. - /// - public List Result => _result.Select(reference => reference.Prefab).ToList(); - - public int ElementsNumber => _elements.Sum(x => x.Value); - } -} + /// + /// Try to get a specific step with a specific name. + /// + /// + public bool TryGetStep(string name, out RecipeStep step) + { + if (RecipeGraph == null) + { + Log.Error(this, "recipeGraph is null"); + step = null; + return false; + } + step = RecipeGraph.Vertices.FirstOrDefault(x => x.Name == name); + return step != null; + } + /// + /// From a given step referenced by its name, get all the recipe links going from it to other steps. + /// + /// + /// + public List> GetLinksFromStep(string name) + { + if (!TryGetStep(name, out RecipeStep step)) return new(); + RecipeGraph.TryGetOutEdges(step, out IEnumerable> results); + return results.ToList(); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/SS3D/Systems/Crafting/CraftingSlot.cs b/Assets/Scripts/SS3D/Systems/Crafting/CraftingSlot.cs new file mode 100644 index 0000000000..5ca99b0837 --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Crafting/CraftingSlot.cs @@ -0,0 +1,18 @@ +using SS3D.Systems.Tile; +using SS3D.Systems.Tile.UI; +using TMPro; +using UnityEngine; + +namespace SS3D.Systems.Crafting +{ + public class CraftingSlot : AssetSlot + { + [SerializeField] + private TMP_Text _textAmount; + public void Setup(GenericObjectSo genericObjectSo, uint amount) + { + base.Setup(genericObjectSo); + _textAmount.text = "x" + amount; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/SS3D/Systems/Crafting/CraftingSlot.cs.meta b/Assets/Scripts/SS3D/Systems/Crafting/CraftingSlot.cs.meta new file mode 100644 index 0000000000..9b2cd4b529 --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Crafting/CraftingSlot.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 4f2a672815e24305933cffd644a49bfa +timeCreated: 1719330248 \ No newline at end of file diff --git a/Assets/Scripts/SS3D/Systems/Crafting/CraftingSystem.cs b/Assets/Scripts/SS3D/Systems/Crafting/CraftingSystem.cs index af61a921f3..54ca814b11 100644 --- a/Assets/Scripts/SS3D/Systems/Crafting/CraftingSystem.cs +++ b/Assets/Scripts/SS3D/Systems/Crafting/CraftingSystem.cs @@ -1,26 +1,52 @@ -using FishNet; +using Coimbra; +using Cysharp.Threading.Tasks; +using FishNet; using FishNet.Object; +using JetBrains.Annotations; +using QuikGraph; +using SS3D.Core; using SS3D.Core.Behaviours; using SS3D.Data; using SS3D.Data.AssetDatabases; using SS3D.Data.Generated; using SS3D.Interactions; +using SS3D.Interactions.Extensions; +using SS3D.Logging; +using SS3D.Systems.Entities.Humanoid; using SS3D.Systems.Inventory.Items; +using SS3D.Systems.Tile; +using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; +using Hand = SS3D.Systems.Inventory.Containers.Hand; +using DG.Tweening; +using DG.Tweening.Core; +using DG.Tweening.Plugins.Options; +using SS3D.Systems.Inventory.Containers; namespace SS3D.Systems.Crafting { - - public class CraftingSystem : NetworkSystem + /// + /// Core of the crafting, store and organize recipes, check what can be crafted, hold the actual craft logic. + /// + public sealed class CraftingSystem : NetworkSystem { /// - /// ItemId is the id of the target item of the recipe. - /// The string is the name of the interaction. - /// The value is a list of craftingRecipe, sorted by their target and needed interactions. + /// First string is the id of the target object of the recipe (as the WorldObjectAssetReference's id). + /// The value is a list of craftingRecipe, for which the target is the key. + /// + private readonly Dictionary> _recipeOrganiser = new(); + + /// + /// Dictionary links crafting interactions to a list of tweeners to cancel them. /// - private Dictionary> _recipeOrganiser = new(); + private readonly Dictionary>> _coroutinesOrganiser = new(); + + /// + /// Dictionary linking crafting interaction references to particles, to start and cancel them. + /// + private readonly Dictionary _craftingSmokes = new(); public override void OnStartNetwork() { @@ -31,7 +57,7 @@ public override void OnStartNetwork() } /// - /// organise the recipes in such a way that it'll be easy to sort through the relevant recipes when looking + /// Organise the recipes in such a way that it'll be easy to sort through the relevant recipes when looking /// up which recipes are available for a given interaction and target. /// [ServerOrClient] @@ -39,132 +65,297 @@ private void FillRecipeOrganiser() { AssetDatabase recipesDataBase = Assets.GetDatabase(AssetDatabases.CraftingRecipes); + if (!recipesDataBase) + { + Log.Error(this, "recipeDatabase is null"); + return; + } + foreach (Object asset in recipesDataBase.Assets.Values) { if (asset is not CraftingRecipe recipe) { - Debug.LogError("Crafting recipe database contains object which are not recipes"); - + Log.Error(this, "Crafting recipe database contains object which is not recipe"); continue; } - - _recipeOrganiser.TryAdd(recipe.Target, new Dictionary()); - _recipeOrganiser[recipe.Target][recipe.InteractionName] = recipe; + + _recipeOrganiser.TryAdd(recipe.Target.Id, new()); + _recipeOrganiser[recipe.Target.Id].Add(recipe); } } - public bool TryGetRecipe(Interaction craftingInteraction, Item target, out CraftingRecipe recipe) + /// + /// Get all potential recipes links. + /// + private bool TryGetRecipeLinks(CraftingInteractionType interactionType, GameObject target, out List> links) { - if (!_recipeOrganiser.TryGetValue(target.Prefab, out Dictionary dic)) + links = new(); + + if (!target.TryGetComponent(out IWorldObjectAsset targetAssetReference)) return false; + + if (targetAssetReference.Asset is null) { - recipe = null; + Log.Warning(this, $"world object asset asset reference is null"); return false; } + + if (!_recipeOrganiser.TryGetValue(targetAssetReference.Asset.Id, out List recipes)) + { + Log.Information(this, $"no recipes with target's name {targetAssetReference.Asset.Id}"); + return false; + } + + string currentStepName = CurrentStepName(target); + links = (from potentialRecipe in recipes from link in potentialRecipe.GetLinksFromStep(currentStepName) + where interactionType == link.Tag?.CraftingInteractionType select link).ToList(); + + if (links.Count == 0) + { + Log.Information(this, $"no recipe links matching interaction type {interactionType}, from recipe step {currentStepName} "); + } + + return links.Count > 0; + } + + /// + /// Get available ingredients meeting all conditions for the recipe. + /// + private List GetIngredientsToConsume(InteractionEvent interactionEvent, TaggedEdge link) + { + List closeItemsFromTarget = GetCloseItemsFromTarget(interactionEvent); + closeItemsFromTarget = link.Tag?.ApplyIngredientConditions(closeItemsFromTarget); + closeItemsFromTarget = BuildListOfItemToConsume(closeItemsFromTarget, link.Tag); + return closeItemsFromTarget; + } + + /// + /// Using a target item, and a list of item to consume, it despawn everything and + /// spawn the result item. + /// + [Server] + public void Craft(CraftingInteraction interaction, InteractionEvent interactionEvent) + { + TaggedEdge link = interaction.ChosenLink; + if (!CanCraftRecipeLink(interactionEvent, link)) return; + List ingredients = GetIngredientsToConsume(interactionEvent, link); + IRecipeIngredient recipeTarget = interactionEvent.Target.GetGameObject().GetComponent(); + + ModifyOrConsumeRecipeTarget(recipeTarget, interaction, interactionEvent, link); + + if (link.Target.TryGetResult(out WorldObjectAssetReference result)) + { + SpawnOrModifyMainResult(result, interaction, interactionEvent, link); + } - if (!dic.TryGetValue(craftingInteraction.GetGenericName(), out CraftingRecipe recipeSearched)) + if (link.Tag == null) { - recipe = null; + Log.Error(this, $"Tag associated to recipe link {link} should not be null"); + return; + } + + foreach (SecondaryResult secondaryResult in link.Tag.SecondaryResults) + { + for (int i = 0; i < secondaryResult.Amount; i++) + { + DefaultCraft(interaction, interactionEvent, secondaryResult.Asset.Prefab, link.Target); + } + } - return false; + foreach (IRecipeIngredient item in ingredients) + { + item.Consume(); } - recipe = recipeSearched; + } - return true; + private void ModifyOrConsumeRecipeTarget(IRecipeIngredient recipeTarget, CraftingInteraction interaction, + InteractionEvent interactionEvent, TaggedEdge link) + { + switch (link.Target.IsTerminal) + { + // Either apply some crafting on the current target, or do it on new game objects. + case false: + interactionEvent.Target.GetGameObject().GetComponent()?.Modify(interaction, interactionEvent, link.Target.Name); + break; + + // Important to do that before spawning, or it'll mess with the spawning of tile objects. + case true: + recipeTarget?.Consume(); + break; + } } + private void SpawnOrModifyMainResult(WorldObjectAssetReference result, CraftingInteraction interaction, + InteractionEvent interactionEvent, TaggedEdge link) + { + GameObject resultInstance; + + if (!result.Prefab) + { + Log.Error(this, $"World object reference {result} has no prefab associated"); + return; + } + + if (link.Target.CustomCraft) + { + resultInstance = result.Prefab.GetComponent()?.Craft(interaction, interactionEvent); + } + else + { + resultInstance = DefaultCraft(interaction, interactionEvent, result.Prefab, link.Target); + } + + if (link.Tag == null || !link.Tag.ModifyResult) return; + + if (!resultInstance) + { + Log.Error(this, "could not craft an instance for the recipe result"); + return; + } + resultInstance.GetComponent()?.Modify(interaction, interactionEvent, link.Target.Name); + } /// - /// Using a target item, and a list of item to consume, it despawn everything and spawn - /// spawn the result item. Be careful, this does not do any recipe check of any sort. + /// Return the current step name of whatever game object is passed in parameter. /// - /// - /// - /// - [Server] - public void Craft(Item target, List itemToConsume, List result) + private string CurrentStepName(GameObject target) + { + if (!target.TryGetComponent(out IWorldObjectAsset targetAssetReference)) + { + Log.Warning(this, $"GameObject {target} has no IWorldObjectAsset component, can't retrieve the current step name"); + return ""; + } + + if (targetAssetReference.Asset.Prefab == null) + { + Log.Error(this, $"IWorldObjectAsset {targetAssetReference} has no prefab associated, returning"); + + return ""; + } + + string rootStepName = targetAssetReference.Asset.Prefab.name; + string stepName; + + if (target.TryGetComponent(out ICraftable craftableTarget) && craftableTarget.CurrentStepName != rootStepName) + { + stepName = craftableTarget.CurrentStepName; + } + else + { + stepName = targetAssetReference.Asset.Prefab.name; + } + + return stepName; + } + + /// + /// Return a list of all available links, fulfilling all crafting conditions. + /// + /// + public bool AvailableRecipeLinks(CraftingInteractionType interactionType, InteractionEvent interactionEvent, + out List> availableLinks) { - target.Despawn(); + availableLinks = new(); - foreach (Item item in itemToConsume) + if (!TryGetRecipeLinks(interactionType, interactionEvent.Target.GetGameObject(), + out List> potentialLinks)) { - item.Despawn(); + return false; } - foreach (Item id in result) + foreach (TaggedEdge link in potentialLinks) { - GameObject itemResult = id.Prefab.GameObject; - GameObject product = Instantiate(itemResult, target.Position, target.Rotation); - InstanceFinder.ServerManager.Spawn(product); + if (!CanCraftRecipeLink(interactionEvent, link)) continue; + availableLinks.Add(link); } + + return availableLinks.Count > 0; + } + + /// + /// Check if all conditions are met to craft following a given recipe link. + /// + private bool CanCraftRecipeLink(InteractionEvent interactionEvent, TaggedEdge link) + { + // Server only checks + if (IsServer) + { + if (!TargetIsValid(interactionEvent)) return false; + + if (!ResultIsValid(interactionEvent, link.Target)) return false; + } + + List ingredients = GetIngredientsToConsume(interactionEvent, link); + Dictionary potentialRecipeElements = ItemListToDictionnaryOfRecipeElements(ingredients); + + return CheckEnoughCloseItemsForRecipe(potentialRecipeElements, link.Tag); } /// /// Build the list of items we want to consume. Don't add more to /// the list than necessary. /// - public List BuildListOfItemToConsume(List closeItemsFromTarget, CraftingRecipe recipe) + [NotNull] + private List BuildListOfItemToConsume([NotNull] List closeItemsFromTarget, + [NotNull] RecipeStepLink recipeStep) { - List itemsToConsume = new List(); - - Dictionary recipeElements = new Dictionary(recipe.Elements); + List itemsToConsume = new(); + Dictionary recipeElements = new(recipeStep.Elements); - foreach (Item item in closeItemsFromTarget) + foreach (IRecipeIngredient item in closeItemsFromTarget) { - if (recipeElements.GetValueOrDefault(item) <= 0) + if (!item.GameObject.TryGetComponent(out IWorldObjectAsset asset)) continue; + + if (recipeElements.GetValueOrDefault(asset.Asset.Id) <= 0) { continue; } itemsToConsume.Add(item); - recipeElements[item] -= 1; + recipeElements[asset.Asset.Id] -= 1; } return itemsToConsume; } /// - /// Find all items in close proximity from the target of the recipe. + /// Find all potential recipe ingredients in close proximity from the target of the recipe. /// TODO : only collider for item ? Should then ensure collider of item is on the /// same game object as item script for all items. Would avoid the getInParent. + /// TODO : game object with no active colliders are not detected by overlapSphere /// - public List GetCloseItemsFromTarget(Item target) + private List GetCloseItemsFromTarget(InteractionEvent interactionEvent) { - Vector3 center = target.Position; - - float radius = 0.5f; - + GameObject target = interactionEvent.Target.GetGameObject(); + List closeItemsFromTarget = new(); + AddRecipeIngredientInHand(interactionEvent, closeItemsFromTarget); + Vector3 center = target.transform.position; + float radius = 3f; Collider[] hitColliders = Physics.OverlapSphere(center, radius); - List closeItemsFromTarget = new List(); - foreach (Collider hitCollider in hitColliders) { - Item item = hitCollider.GetComponentInParent(); - - if (item == null) - continue; - + IRecipeIngredient item = hitCollider.GetComponentInParent(); + if (item == null) continue; closeItemsFromTarget.Add(item); } - return closeItemsFromTarget; + return closeItemsFromTarget.OrderBy(x => Vector3.Distance(x.GameObject.transform.position, center)).ToList(); } /// /// Check if there's enough items for the recipe. /// /// Items that can potentially be used - /// The recipe for which we want to check items + /// The recipe for which we want to check items /// - public bool CheckEnoughCloseItemsForRecipe(Dictionary potentialRecipeElements, CraftingRecipe recipe) + private bool CheckEnoughCloseItemsForRecipe(Dictionary potentialRecipeElements, [NotNull] RecipeStepLink recipeSteplink) { // check if there's enough of each item. - foreach (Item item in recipe.Elements.Keys.ToList()) + foreach (string id in recipeSteplink.Elements.Keys.ToList()) { - int potentialRecipeItemCount = potentialRecipeElements.GetValueOrDefault(item); - - if (potentialRecipeItemCount < recipe.Elements[item]) + int potentialRecipeItemCount = potentialRecipeElements.GetValueOrDefault(id); + if (potentialRecipeItemCount < recipeSteplink.Elements[id]) { return false; } @@ -173,15 +364,293 @@ public bool CheckEnoughCloseItemsForRecipe(Dictionary potentialRecipe return true; } - public Dictionary ItemListToDictionnaryOfRecipeElements(List closeItemsFromTarget) + [NotNull] + private Dictionary ItemListToDictionnaryOfRecipeElements([NotNull] IEnumerable closeItemsFromTarget) { // Transform the list into a dictionnary of itemsID and counts of items. // This is some overhead to allow for fast comparison between recipe and // available items. - Dictionary potentialRecipeElements = closeItemsFromTarget.GroupBy(item => item).ToDictionary(group => group.Key, group => group.Count()); + Dictionary potentialRecipeElements = closeItemsFromTarget + .GroupBy(x => x.GameObject.GetComponent().Asset.Id) + .ToDictionary(group => group.Key, group => group.Count()); return potentialRecipeElements; } + + /// + /// Move objects toward the crafting target, at constant speed. + /// + [Server] + public void MoveAllObjectsToCraftPoint(CraftingInteraction interaction, InteractionEvent interactionEvent, InteractionReference reference) + { + List> coroutines = new(); + Vector3 targetPosition = interactionEvent.Target.GetGameObject().transform.position; + List ingredientsToConsume = + GetIngredientsToConsume(interactionEvent, interaction.ChosenLink).Select(x => x.GameObject).ToList(); + + foreach (GameObject go in ingredientsToConsume) + { + coroutines.Add(go.transform.DOMove(targetPosition, 0.75f)); + } + + _coroutinesOrganiser.Add(reference, coroutines); + AddCraftingSmoke(interactionEvent.Target.GetGameObject(), reference.Id); + } + + /// + /// Stop moving objects, should be called when the interaction is cancelled. + /// + [Server] + public void CancelMoveAllObjectsToCraftPoint(InteractionReference reference) + { + // TODO: Remove checks for null + _coroutinesOrganiser[reference].Where(x => x!= null).ToList().ForEach(x => x.Kill()); + CancelCraftingSmoke(reference.Id); + } + + /// + /// Method that should handle basic spawning for everything. + /// + [Server] + private GameObject DefaultCraft(CraftingInteraction interaction, InteractionEvent interactionEvent, GameObject prefab, RecipeStep recipeStep) + { + GameObject instance; + + // If result is an item held in hand, either put the crafting result in hand or in front of the crafter. + if (interactionEvent.Target is Item targetItem && interactionEvent.Source is Hand hand && + targetItem.Container == hand.Container) + { + instance = DefaultCraftItemHeldInHand(prefab, hand, recipeStep, interaction); + } + // If result is a placed tile object, just place it on the tilemap. + else if (prefab.TryGetComponent(out PlacedTileObject resultTileObject)) + { + instance = DefaultCraftTileObject(interactionEvent, resultTileObject); + } + else if (interactionEvent.Target.GetGameObject().TryGetComponent(out PlacedTileObject _) && prefab.TryGetComponent(out Draggable _)) + { + instance = Instantiate(prefab); + instance.transform.position = interactionEvent.Target.GetGameObject().transform.position; + InstanceFinder.ServerManager.Spawn(instance); + instance.SetActive(true); + } + else + { + instance = Instantiate(prefab); + Vector3 characterGround = interaction.CharacterTransform.position; + characterGround.y = 0.1f; + instance.transform.position = characterGround + interaction.CharacterTransform.forward; + InstanceFinder.ServerManager.Spawn(instance); + instance.SetActive(true); + } + + return instance; + } + + private void AddRecipeIngredientInHand(InteractionEvent interactionEvent, List ingredients) + { + Hands hands = interactionEvent.Source.GameObject.GetComponentInParent(); + if (hands) + { + List itemsInHand = new(); + foreach (Hand hand in hands.PlayerHands) + { + itemsInHand.AddRange(hand.Container.Items); + } + foreach (Item item in itemsInHand) + { + if(item.GameObject.TryGetComponent(out IRecipeIngredient recipeIngredient)) + ingredients.Add(recipeIngredient); + } + } + } + + /// + /// Handles spawning item, when the target is an item held in hand, and the result is whatever. + /// > + [Server] + private GameObject DefaultCraftItemHeldInHand(GameObject prefab, Hand hand, RecipeStep recipeStep, CraftingInteraction interaction) + { + GameObject instance; + + if (prefab.TryGetComponent(out Item resultItem)) + { + instance = Instantiate(prefab); + + // If result is an item, replace whatever is in hand by the new item. + if (recipeStep.IsTerminal) + { + hand.Container.Dump(); + hand.Container.AddItem(resultItem); + } + else + { + Vector3 characterGround = interaction.CharacterTransform.position; + characterGround.y = 0; + instance.transform.position = characterGround + interaction.CharacterTransform.forward; + } + InstanceFinder.ServerManager.Spawn(instance); + } + else + { + instance = Instantiate(prefab); + + Vector3 characterGround = interaction.CharacterTransform.position; + characterGround.y = 0; + instance.transform.position = characterGround + interaction.CharacterTransform.forward; + + InstanceFinder.ServerManager.Spawn(instance); + instance.SetActive(true); + } + + return instance; + } + + /// + /// The default method to craft new tile objects. + /// + [Server] + private GameObject DefaultCraftTileObject([NotNull] InteractionEvent interactionEvent, [NotNull] PlacedTileObject resultTileObject) + { + bool replace = false; + Direction direction = Direction.North; + + if (interactionEvent.Target.GetGameObject().TryGetComponent(out PlacedTileObject targetTileObject) + && targetTileObject.Layer == resultTileObject.Layer) + { + replace = true; + } + + Subsystems.Get().CurrentMap.PlaceTileObject(resultTileObject.tileObjectSO, + TileHelper.GetClosestPosition(interactionEvent.Target.GetGameObject().transform.position), + direction, false, replace, false, out GameObject instance); + + return instance; + } + + /// + /// Check if the crafting recipe target is valid (well placed, in good conditions... whatever). + /// + [Server] + private bool TargetIsValid(InteractionEvent interactionEvent) + { + if (interactionEvent.Target is Item target) + { + return ItemTargetIsValid(interactionEvent, target); + } + + return true; + } + + /// + /// Check if the result of the crafting recipe is valid. Valid depends on the type of the result. + /// + [Server] + private bool ResultIsValid(InteractionEvent interactionEvent, RecipeStep recipeStep) + { + if (!recipeStep.TryGetResult(out WorldObjectAssetReference recipeResult)) return true; + + if (recipeResult.Prefab && recipeResult.Prefab.TryGetComponent(out PlacedTileObject result)) + { + return ResultIsValidPlacedTileObject(result, interactionEvent); + } + + return true; + } + + /// + /// Check if the result placed object won't conflict with other placed tile objects. Should check collisions too probably. + /// + [Server] + private bool ResultIsValidPlacedTileObject([NotNull] PlacedTileObject result, [NotNull] InteractionEvent interactionEvent) + { + bool replace = false; + bool targetIsPlacedTileObject = interactionEvent.Target.GetGameObject().TryGetComponent(out PlacedTileObject target); + + if (targetIsPlacedTileObject && result.Layer == target.Layer) + { + replace = true; + } + + return Subsystems.Get().CanBuild(result.tileObjectSO, interactionEvent.Target.GetGameObject().transform.position, Direction.North, replace); + } + + /// + /// Check if a given item is in a valid configuration to be used in a crafting interaction. + /// + [Server] + private bool ItemTargetIsValid(InteractionEvent interactionEvent, Item target) + { + // item target is valid if it is in hand holding the item or out of container. + if (target.Container && interactionEvent.Source is Hand hand && hand.Container == target.Container) + { + return true; + } + + if (!target.Container) + { + return true; + } + + return false; + } + + /// + /// Add smoke particles around the crafted target during crafting. + /// + [ObserversRpc] + private void AddCraftingSmoke(GameObject target, int referenceId) + { + GameObject particleGameObject = Instantiate(ParticlesEffects.ConstructionParticle.Prefab, target.transform.position, Quaternion.identity); + ParticleSystem particles = particleGameObject.GetComponent(); + + // Get the shape module of the dust cloud particle system + ParticleSystem.ShapeModule shapeModule = particles.shape; + + // Adjust the shape to match the object's bounds + MeshRenderer targetRenderer = target.GetComponentInChildren(); + if (targetRenderer) + { + shapeModule.enabled = true; + shapeModule.shapeType = ParticleSystemShapeType.MeshRenderer; + shapeModule.meshRenderer = targetRenderer; + } + else + { + Debug.LogWarning("The object to hide does not have a Renderer component."); + } + + _craftingSmokes.Add(new(referenceId), particles); + } + + [ObserversRpc] + private void CancelCraftingSmoke(int referenceId) + { + _craftingSmokes[new(referenceId)]?.Dispose(true); + _craftingSmokes.Remove(new(referenceId)); + } + + /// + /// Create available interactions for a given interaction type. + /// + [ServerOrClient] + [NotNull] + public List CreateInteractions(InteractionEvent interactionEvent, CraftingInteractionType craftingInteractionType) + { + List craftingInteractions = new(); + if (!AvailableRecipeLinks(craftingInteractionType, interactionEvent, + out List> availableRecipes)) return craftingInteractions; + + foreach (TaggedEdge recipeLink in availableRecipes) + { + CraftingInteraction interaction = new(recipeLink.Tag.ExecutionTime, + interactionEvent.Source.GameObject.GetComponentInParent().transform, craftingInteractionType, recipeLink); + + craftingInteractions.Add(interaction); + } + + return craftingInteractions; + } } } diff --git a/Assets/Scripts/SS3D/Systems/Crafting/Editor.meta b/Assets/Scripts/SS3D/Systems/Crafting/Editor.meta new file mode 100644 index 0000000000..53729f0e7f --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Crafting/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 82644ea2822564248bf8f4e3e17bc762 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/SS3D/Systems/Crafting/Editor/CraftingRecipeEditor.cs b/Assets/Scripts/SS3D/Systems/Crafting/Editor/CraftingRecipeEditor.cs new file mode 100644 index 0000000000..3e375f0f7b --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Crafting/Editor/CraftingRecipeEditor.cs @@ -0,0 +1,31 @@ +using UnityEditor; + +namespace SS3D.Systems.Crafting +{ + [CustomEditor(typeof(CraftingRecipe))] + public class CraftingRecipeEditor : Editor + { + private SerializedProperty _targetProperty; + private SerializedProperty _stepsProperty; + private SerializedProperty _stepLinksProperty; + private RecipeStep _recipeStep; + + public override void OnInspectorGUI() + { + serializedObject.Update(); + EditorGUILayout.PropertyField(_targetProperty); + EditorGUILayout.PropertyField(_stepsProperty, true); + EditorGUILayout.PropertyField(_stepLinksProperty, true); + serializedObject.ApplyModifiedProperties(); + } + + protected void OnEnable() + { + // Initialize SerializedProperties + CraftingRecipe recipe = serializedObject.targetObject as CraftingRecipe; + _targetProperty = serializedObject.FindProperty(nameof(recipe.Target)); + _stepsProperty = serializedObject.FindProperty(nameof(recipe.Steps)); + _stepLinksProperty = serializedObject.FindProperty(nameof(recipe.StepLinks)); + } + } +} diff --git a/Assets/Scripts/SS3D/Systems/Crafting/Editor/CraftingRecipeEditor.cs.meta b/Assets/Scripts/SS3D/Systems/Crafting/Editor/CraftingRecipeEditor.cs.meta new file mode 100644 index 0000000000..ed9639912a --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Crafting/Editor/CraftingRecipeEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 12b5940d0427e4e4e80b645551e5c762 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/SS3D/Systems/Crafting/Editor/CraftingRecipeVisualizerEditorWindow.cs b/Assets/Scripts/SS3D/Systems/Crafting/Editor/CraftingRecipeVisualizerEditorWindow.cs new file mode 100644 index 0000000000..531971dbab --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Crafting/Editor/CraftingRecipeVisualizerEditorWindow.cs @@ -0,0 +1,270 @@ +using QuikGraph; +using SS3D.Utils; +using System.Collections; +using Unity.EditorCoroutines.Editor; +using UnityEditor; +using UnityEngine; +using UnityEngine.AddressableAssets; + +namespace SS3D.Systems.Crafting +{ + /// + /// Custom window to display recipe graph. It's node positions are chosen using a force constrained algorithm. + /// This window should show the graph position being dynamically chosen, like an animation. + /// + public class CraftingRecipeVisualizerEditorWindow : EditorWindow + { + /// + /// How much vertices are repulsive to each other. + /// + private const float RepulsiveConstant = 100; + + /// + /// How much vertices linked by an edge attract each other. + /// + private const float AttractiveConstant = 3; + + /// + /// Ideal lenght between vertices. + /// + private const float IdealLenght = 80; + + /// + /// Maximum of interation the force algorithm will make. + /// + private const int MaxIteration = 500; + + /// + /// "Speed" factor for the algorithm, the higher it is, the faster it converges + /// toward the solution, but values too high can lead to divergence. + /// + private const float Delta = 10f; + + /// + /// Another criteria to stop the algorithm is what's the max force exerted on any vertices is at a given iteration. + /// When lower than a given amount we consider it won't move much, and we stop. + /// + private const float ForceToStop = 0.1f; + + /// + /// Minimum zoom allowed + /// + private const float KZoomMin = 0.1f; + + /// + /// Maximum zoom allowed + /// + private const float KZoomMax = 10.0f; + + /// + /// Size of vertices drawn in the window. + /// + private const float CircleSize = 5f; + + /// + /// Area in which the zooming will occur. + /// + private readonly Rect _zoomArea = new(0.0f, 100.0f, 1200.0f, 600.0f); + + /// + /// Enhanced recipe Graph with position for vertices. + /// + private AdjacencyGraph, TaggedEdge, RecipeStepLink>> _graphWithPosition; + + /// + /// The current value of the zoom. + /// + private float _zoom = 1.0f; + + private Vector2 _zoomCoordsOrigin = Vector2.zero; + + [SerializeField] + private AssetReferenceT _recipe; + + /// + /// Show this window with the right size and parameters. + /// + [MenuItem("Window/SS3D/Crafting Recipe Display")] + public static void ShowWindow() + { + CraftingRecipeVisualizerEditorWindow window = GetWindow("Crafting Recipe Display"); + window.minSize = new(600.0f, 300.0f); + window.wantsMouseMove = true; + } + + protected void OnGUI() + { + HandleEvents(); + DrawNonZoomArea(); + + // The zoom area clipping is sometimes not fully confined to the passed in rectangle. At certain + // zoom levels you will get a line of pixels rendered outside of the passed in area because of + // floating point imprecision in the scaling. Therefore, it is recommended to draw the zoom + // area first and then draw everything else so that there is no undesired overlap. + DrawZoomArea(); + } + + /// + /// Helper method to find coordinates when zooming from the screen coordinates. + /// + private Vector2 ConvertScreenCoordsToZoomCoords(Vector2 screenCoords) + { + return ((screenCoords - _zoomArea.TopLeft()) / _zoom) + _zoomCoordsOrigin; + } + + /// + /// Draw the area of the window that can be zoomed/panned. + /// + private void DrawZoomArea() + { + // Within the zoom area all coordinates are relative to the top left corner of the zoom area + // with the width and height being scaled versions of the original/unzoomed area's width and height. + EditorZoomArea.Begin(_zoom, _zoomArea); + GUILayout.BeginArea(new(-_zoomCoordsOrigin.x, -_zoomCoordsOrigin.y, 1600.0f, 900.0f)); + + if (_graphWithPosition != null) + { + DrawGraph(_graphWithPosition); + } + + GUILayout.EndArea(); + EditorZoomArea.End(); + } + + /// + /// Draw the area of the window that won't be zoomed/panned. + /// + private void DrawNonZoomArea() + { + EditorGUILayout.LabelField("Recipe display.", EditorStyles.boldLabel); + EditorGUILayout.LabelField("Scroll to zoom, drag to move."); + + if (GUILayout.Button("Draw graph")) + { + if (_recipe == null) + { + return; + } + + EditorCoroutineUtility.StartCoroutine(ComputeGraphPositions(_recipe.editorAsset), this); + } + + SerializedObject so = new(this); + EditorGUILayout.PropertyField(so.FindProperty(nameof(_recipe)), new GUIContent("Recipe")); + } + + /// + /// Apply the spring embedder algorithm and do one step each frame, this is supposed to be called by a coroutine. + /// + private IEnumerator ComputeGraphPositions(CraftingRecipe recipe) + { + _graphWithPosition = SpringEmbedderAlgorithm, RecipeStepLink> + .InitializeGraphWithPositions(recipe.RecipeGraph); + + for (int i = 0; i < MaxIteration; i++) + { + SpringEmbedderAlgorithm, RecipeStepLink> + .SetParameters(RepulsiveConstant, AttractiveConstant, IdealLenght, Delta, ForceToStop); + + bool forceReachedMinimum = SpringEmbedderAlgorithm, RecipeStepLink> + .ComputeOneStep(_graphWithPosition); + + if (forceReachedMinimum) + { + break; + } + + Repaint(); + yield return null; + } + } + + /// + /// Handle user inputs for zoom and panning + /// + private void HandleEvents() + { + // Allow adjusting the zoom with the mouse wheel as well. In this case, use the mouse coordinates + // as the zoom center instead of the top left corner of the zoom area. This is achieved by + // maintaining an origin that is used as offset when drawing any GUI elements in the zoom area. + if (Event.current.type == EventType.ScrollWheel) + { + Vector2 screenCoordsMousePos = Event.current.mousePosition; + Vector2 delta = Event.current.delta; + Vector2 zoomCoordsMousePos = ConvertScreenCoordsToZoomCoords(screenCoordsMousePos); + float zoomDelta = -delta.y / 50.0f; + float oldZoom = _zoom; + _zoom += zoomDelta; + _zoom = Mathf.Clamp(_zoom, KZoomMin, KZoomMax); + _zoomCoordsOrigin += zoomCoordsMousePos - _zoomCoordsOrigin - ((oldZoom / _zoom) * (zoomCoordsMousePos - _zoomCoordsOrigin)); + + Event.current.Use(); + } + + if (Event.current.type == EventType.MouseDrag && Event.current.button == 0) + { + Vector2 delta = Event.current.delta; + delta /= _zoom; + _zoomCoordsOrigin -= delta; + Event.current.Use(); + } + } + + /// + /// Draw the graph + /// + private void DrawGraph(AdjacencyGraph, TaggedEdge, RecipeStepLink>> graphWithPosition) + { + foreach (VerticeWithPosition stepWithPosition in graphWithPosition.Vertices) + { + Color color; + + if (stepWithPosition.Vertice.IsTerminal) + { + color = Color.red; + } + else if (stepWithPosition.Vertice.IsInitialState) + { + color = Color.green; + } + else + { + color = Color.gray; + } + + Handles.color = color; + Handles.DrawSolidDisc(new(stepWithPosition.Position.x, stepWithPosition.Position.y, 0), Vector3.forward, CircleSize); + Handles.color = Color.black; + Handles.DrawWireDisc(new(stepWithPosition.Position.x, stepWithPosition.Position.y, 0), Vector3.forward, CircleSize); + + GUIStyle style = new(GUI.skin.label) + { + fontSize = (int)Mathf.Clamp(12f / _zoom, 4f, 25f), + }; + + EditorGUI.LabelField(new(stepWithPosition.Position.x, stepWithPosition.Position.y, 200, 20), stepWithPosition.Vertice.Name, style); + } + + Handles.color = Color.white; + + foreach (TaggedEdge, RecipeStepLink> edge in graphWithPosition.Edges) + { + Handles.DrawAAPolyLine(3, edge.Source.Position, edge.Target.Position); + DrawArrowhead(edge.Source.Position, edge.Target.Position, 20, 8f); + } + } + + /// + /// Helper method to draw the arrowhead at the tip of edges. + /// + private void DrawArrowhead(Vector2 start, Vector2 end, float arrowheadAngle, float arrowheadLength) + { + Vector2 direction = (end - start).normalized; + Vector2 arrowheadLeft = Quaternion.Euler(0, 0, arrowheadAngle) * -direction * arrowheadLength; + Vector2 arrowheadRight = Quaternion.Euler(0, 0, -arrowheadAngle) * -direction * arrowheadLength; + + Handles.DrawAAPolyLine(3, new Vector3(end.x, end.y, 0), new Vector3(end.x + arrowheadLeft.x, end.y + arrowheadLeft.y, 0)); + Handles.DrawAAPolyLine(3, new Vector3(end.x, end.y, 0), new Vector3(end.x + arrowheadRight.x, end.y + arrowheadRight.y, 0)); + } + } +} diff --git a/Assets/Scripts/SS3D/Systems/Crafting/Editor/CraftingRecipeVisualizerEditorWindow.cs.meta b/Assets/Scripts/SS3D/Systems/Crafting/Editor/CraftingRecipeVisualizerEditorWindow.cs.meta new file mode 100644 index 0000000000..6899f50108 --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Crafting/Editor/CraftingRecipeVisualizerEditorWindow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a85d9f5209b28ca468f6430328592190 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/SS3D/Systems/Crafting/Editor/CraftingSystemEditor.asmdef b/Assets/Scripts/SS3D/Systems/Crafting/Editor/CraftingSystemEditor.asmdef new file mode 100644 index 0000000000..2f207ee3b3 --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Crafting/Editor/CraftingSystemEditor.asmdef @@ -0,0 +1,22 @@ +{ + "name": "CraftingSystemEditor", + "rootNamespace": "", + "references": [ + "GUID:ca7dfa56d1d490249a5fe56aee92a13c", + "GUID:92a1e40b8cccf8645adbdd275ac6371a", + "GUID:478a2357cc57436488a56e564b08d223", + "GUID:6e00473804df0f0468c07310fbce5737", + "GUID:9e24947de15b9834991c9d8411ea37cf" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Assets/Scripts/SS3D/Systems/Crafting/Editor/CraftingSystemEditor.asmdef.meta b/Assets/Scripts/SS3D/Systems/Crafting/Editor/CraftingSystemEditor.asmdef.meta new file mode 100644 index 0000000000..a5be4e5f68 --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Crafting/Editor/CraftingSystemEditor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f274db9dbe916ef4892efaaf88200c0b +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/SS3D/Systems/Crafting/GirderCraftable.cs b/Assets/Scripts/SS3D/Systems/Crafting/GirderCraftable.cs new file mode 100644 index 0000000000..d9aaedae20 --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Crafting/GirderCraftable.cs @@ -0,0 +1,170 @@ +using FishNet.Object; +using SS3D.Interactions; +using SS3D.Interactions.Interfaces; +using SS3D.Logging; +using UnityEngine; + +namespace SS3D.Systems.Crafting +{ + /// + /// Script specifically for girder, to deal with the different crafting step it can go through. + /// + public class GirderCraftable : MultiStepCraftable + { + /// + /// Mesh renderer for the steel wall sheets. + /// + [SerializeField] + private MeshRenderer _wallSheetMesh; + + /// + /// Mesh renderer for the window sheets. + /// + [SerializeField] + private MeshRenderer _windowSheetMesh; + + /// + /// Mesh renderer for the reinforced sheets at the bottom of the girder + /// + [SerializeField] + private MeshRenderer _lowerReinforcedSheetMesh; + + /// + /// Mesh renderer for the reinforced metal sheets on the walls of the girder + /// + [SerializeField] + private MeshRenderer _higherReinforcedWallSheetMesh; + + /// + /// Mesh renderer for the reinforced glass sheets on the walls of the girder + /// + [SerializeField] + private MeshRenderer _higherReinforcedWindowSheetMesh; + + /// + /// Mesh renderer for the support rods the girder + /// + [SerializeField] + private MeshRenderer _supportMesh; + + /// + /// Mesh renderer for the support struts on the girder, the little rods placed horizontally. + /// + [SerializeField] + private MeshRenderer _struts; + + + /// + /// Change the current girder prefab model into another one, modifying its mesh. + /// + [Server] + public override void Modify(IInteraction interaction, InteractionEvent interactionEvent, string step) + { + _currentStepName = step; + + ClientModify(step); + } + + public override GameObject Craft(IInteraction interaction, InteractionEvent interactionEvent) { return gameObject; } + + private void AddMetalSheet() + { + _wallSheetMesh.enabled = true; + } + + private void AddWindowSheet() + { + _windowSheetMesh.enabled = true; + } + + private void AddReinforcedSteelSheets() + { + _higherReinforcedWallSheetMesh.enabled = true; + } + + private void AddReinforcedWindowSheets() + { + _higherReinforcedWindowSheetMesh.enabled = true; + } + + private void AddStruts() + { + _struts.enabled = true; + } + + private void AddSupports() + { + _supportMesh.enabled = true; + } + + + /// + /// Put the girder back to its initial mesh. + /// + [Client] + private void ClearAllMeshes() + { + _wallSheetMesh.enabled = false; + _windowSheetMesh.enabled = false; + _lowerReinforcedSheetMesh.enabled = false; + _higherReinforcedWallSheetMesh.enabled = false; + _higherReinforcedWindowSheetMesh.enabled = false; + _struts.enabled = false; + _supportMesh.enabled = false; + } + + [ObserversRpc(BufferLast = true)] + private void ClientModify(string stepName) + { + SetMeshes(stepName); + } + + [Client] + private void SetMeshes(string stepName) + { + ClearAllMeshes(); + + switch (stepName) + { + case "SteelGirderWithMetalSheet": + AddMetalSheet(); + break; + case "SteelGirderWithGlassSheet": + AddWindowSheet(); + break; + case "ReinforcedSteelGirderWithStruts": + AddStruts(); + AddSupports(); + break; + case "ReinforcedSteelGirderWithBoltedReinforcedMetalSheets": + AddStruts(); + AddSupports(); + AddReinforcedSteelSheets(); + break; + case "ReinforcedSteelGirderWithBoltedReinforcedGlassSheets": + AddStruts(); + AddSupports(); + AddReinforcedWindowSheets(); + break; + case "ReinforcedSteelGirderWithBoltedGlassSheets": + AddStruts(); + AddSupports(); + AddWindowSheet(); + break; + case "ReinforcedSteelGirderWithBoltedMetalSheets": + AddStruts(); + AddSupports(); + AddMetalSheet(); + break; + case "ReinforcedSteelGirder": + AddSupports(); + break; + case "SteelGirder": + break; + default: + Log.Error(this, "step name passed in parameter is not handled by girderCraftable"); + break; + } + } + } +} diff --git a/Assets/Scripts/SS3D/Systems/Crafting/GirderCraftable.cs.meta b/Assets/Scripts/SS3D/Systems/Crafting/GirderCraftable.cs.meta new file mode 100644 index 0000000000..71f1f33d71 --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Crafting/GirderCraftable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3586a2042e5c55d4ead9bca2972c182c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/SS3D/Systems/Crafting/ICraftable.cs b/Assets/Scripts/SS3D/Systems/Crafting/ICraftable.cs new file mode 100644 index 0000000000..6eb64b4ef8 --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Crafting/ICraftable.cs @@ -0,0 +1,24 @@ +using SS3D.Interactions; +using SS3D.Interactions.Interfaces; +using UnityEngine; + +namespace SS3D.Systems.Crafting +{ + public interface ICraftable : INetworkObjectProvider, IGameObjectProvider + { + /// + /// Stuff happening at the end of the crafting process, called on the newly crafted object. Note that Craft is called on + /// prefab, implying that the instantiating and spawning process should be done in it, and said instances should be modified. + /// + /// The specific crafting interaction used. + /// the event linked to the crafting interaction + public GameObject Craft(IInteraction interaction, InteractionEvent interactionEvent); + + public void Modify(IInteraction interaction, InteractionEvent interactionEvent, string step); + + /// + /// for multi step crafting, at which step of the crafting process we are. + /// + public string CurrentStepName { get; } + } +} diff --git a/Assets/Scripts/SS3D/Systems/Crafting/ICraftable.cs.meta b/Assets/Scripts/SS3D/Systems/Crafting/ICraftable.cs.meta new file mode 100644 index 0000000000..524e64fe26 --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Crafting/ICraftable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9c6ef28ecf86f0c44a72b5479d2e3f20 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/SS3D/Systems/Crafting/ICraftingInteraction.cs b/Assets/Scripts/SS3D/Systems/Crafting/ICraftingInteraction.cs deleted file mode 100644 index 151469ac96..0000000000 --- a/Assets/Scripts/SS3D/Systems/Crafting/ICraftingInteraction.cs +++ /dev/null @@ -1,11 +0,0 @@ -using SS3D.Interactions; -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -public interface ICraftingInteraction -{ - public bool CanCraft(InteractionEvent interactionEvent); - - public void Craft(InteractionEvent interactionEvent); -} diff --git a/Assets/Scripts/SS3D/Systems/Crafting/IRecipeIngredient.cs b/Assets/Scripts/SS3D/Systems/Crafting/IRecipeIngredient.cs new file mode 100644 index 0000000000..6d30c49160 --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Crafting/IRecipeIngredient.cs @@ -0,0 +1,15 @@ +using SS3D.Interactions.Interfaces; + +namespace SS3D.Systems.Crafting +{ + /// + /// Interface for things that need to be consumed when a crafting interaction leads to consuming them. + /// + public interface IRecipeIngredient : INetworkObjectProvider, IGameObjectProvider + { + /// + /// Despawn the game object in an expected way. + /// + public void Consume(); + } +} diff --git a/Assets/Scripts/SS3D/Systems/Crafting/IRecipeIngredient.cs.meta b/Assets/Scripts/SS3D/Systems/Crafting/IRecipeIngredient.cs.meta new file mode 100644 index 0000000000..0ab54f66f2 --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Crafting/IRecipeIngredient.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 59af4a75bb2a3ce46bf0513d77f63124 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/SS3D/Systems/Crafting/IngredientCondition.cs b/Assets/Scripts/SS3D/Systems/Crafting/IngredientCondition.cs new file mode 100644 index 0000000000..b8b2dd8b24 --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Crafting/IngredientCondition.cs @@ -0,0 +1,15 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace SS3D.Systems.Crafting +{ + /// + /// Abstract base class to create condition for ingredients, to be valid in crafting recipes. + /// Conditions can be potentially anything, if they should be held in hand, their state, if they should be in a specific container... + /// + public abstract class IngredientCondition : ScriptableObject + { + // TODO add parameters + public abstract List UsableIngredients(List ingredients); + } +} diff --git a/Assets/Scripts/SS3D/Systems/Crafting/IngredientCondition.cs.meta b/Assets/Scripts/SS3D/Systems/Crafting/IngredientCondition.cs.meta new file mode 100644 index 0000000000..f24298a631 --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Crafting/IngredientCondition.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dcea30177c37d2e4fb12b0487e244a6f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/SS3D/Systems/Crafting/IngredientsAreHeldInHand.asset b/Assets/Scripts/SS3D/Systems/Crafting/IngredientsAreHeldInHand.asset new file mode 100644 index 0000000000..6b86e819cb --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Crafting/IngredientsAreHeldInHand.asset @@ -0,0 +1,14 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a54eca6992808ac4f82b60ae5cb773b2, type: 3} + m_Name: IngredientsAreHeldInHand + m_EditorClassIdentifier: diff --git a/Assets/Scripts/SS3D/Systems/Crafting/IngredientsAreHeldInHand.asset.meta b/Assets/Scripts/SS3D/Systems/Crafting/IngredientsAreHeldInHand.asset.meta new file mode 100644 index 0000000000..6819a11305 --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Crafting/IngredientsAreHeldInHand.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 22f5cb218c973ef4291a27c11ca43fe9 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/SS3D/Systems/Crafting/IngredientsAreHeldInHand.cs b/Assets/Scripts/SS3D/Systems/Crafting/IngredientsAreHeldInHand.cs new file mode 100644 index 0000000000..94bdbb1fdb --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Crafting/IngredientsAreHeldInHand.cs @@ -0,0 +1,20 @@ +using SS3D.Systems.Inventory.Containers; +using SS3D.Systems.Inventory.Items; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +namespace SS3D.Systems.Crafting +{ + /// + /// Ingredient condition to check if ingredients are held in hand. + /// + [CreateAssetMenu(fileName = "IngredientsAreHeldInHand", menuName = "SS3D/Crafting/IngredientConditions/IngredientsAreHeldInHand")] + public class IngredientsAreHeldInHand : IngredientCondition + { + public override List UsableIngredients(List ingredients) + { + return ingredients.Where(x => x.GameObject.TryGetComponent(out Item item) && item.Container?.ContainerType == ContainerType.Hand).ToList(); + } + } +} diff --git a/Assets/Scripts/SS3D/Systems/Crafting/IngredientsAreHeldInHand.cs.meta b/Assets/Scripts/SS3D/Systems/Crafting/IngredientsAreHeldInHand.cs.meta new file mode 100644 index 0000000000..7077ad5e54 --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Crafting/IngredientsAreHeldInHand.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a54eca6992808ac4f82b60ae5cb773b2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/SS3D/Systems/Crafting/MultiStepCraftable.cs b/Assets/Scripts/SS3D/Systems/Crafting/MultiStepCraftable.cs new file mode 100644 index 0000000000..0d5ce51536 --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Crafting/MultiStepCraftable.cs @@ -0,0 +1,38 @@ +using SS3D.Interactions.Interfaces; +using SS3D.Interactions; +using UnityEngine; +using SS3D.Core.Behaviours; +using SS3D.Data.AssetDatabases; +using FishNet.Object.Synchronizing; +using SS3D.Logging; + +namespace SS3D.Systems.Crafting +{ + /// + /// base class for game objects that need to apply custom things upon crafting, such as changing models, playing sounds... + /// + public abstract class MultiStepCraftable : NetworkActor, ICraftable + { + [SyncVar] + protected string _currentStepName = ""; + + public string CurrentStepName => _currentStepName; + + public abstract GameObject Craft(IInteraction interaction, InteractionEvent interactionEvent); + + public abstract void Modify(IInteraction interaction, InteractionEvent interactionEvent, string step); + + protected override void OnAwake() + { + if (!gameObject.TryGetComponent(out IWorldObjectAsset targetAssetReference)) + { + Log.Error(this, $"{gameObject} has a ICraftable component but no IWorldObjectAsset component set up on them, add one or it'll cause trouble for multi step crafting"); + _currentStepName = ""; + } + else + { + _currentStepName = targetAssetReference.Asset.Prefab.name; + } + } + } +} diff --git a/Assets/Scripts/SS3D/Systems/Crafting/MultiStepCraftable.cs.meta b/Assets/Scripts/SS3D/Systems/Crafting/MultiStepCraftable.cs.meta new file mode 100644 index 0000000000..47fb847cea --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Crafting/MultiStepCraftable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1c1594479a5b60540950ceb3d2e6fdf7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/SS3D/Systems/Crafting/OpenCraftingMenuInteraction.cs b/Assets/Scripts/SS3D/Systems/Crafting/OpenCraftingMenuInteraction.cs new file mode 100644 index 0000000000..e685bb3d7e --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Crafting/OpenCraftingMenuInteraction.cs @@ -0,0 +1,67 @@ +using QuikGraph; +using SS3D.Core; +using SS3D.Interactions; +using SS3D.Systems.Crafting; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +public class OpenCraftingMenuInteraction : Interaction +{ + private CraftingInteractionType _craftingInteractionType; + + public OpenCraftingMenuInteraction(CraftingInteractionType craftingInteraction) + { + _craftingInteractionType = craftingInteraction; + } + + public override string GetGenericName() => "Open crafting menu"; + + /// + /// Get the name of the interaction + /// + /// The source used in the interaction + /// The display name of the interaction + public override string GetName(InteractionEvent interactionEvent) + { + return "Open crafting menu"; + } + + /// + /// Get the icon of the interaction + /// + public override Sprite GetIcon(InteractionEvent interactionEvent) + { + return null; + } + + /// + /// Check if this interaction can be executed + /// + /// The interaction source + /// If the interaction can be executed + public override bool CanInteract(InteractionEvent interactionEvent) + { + if (!Subsystems.TryGet(out CraftingSystem craftingSystem)) return false; + + bool recipesAvailable = true; + recipesAvailable &= craftingSystem.AvailableRecipeLinks(_craftingInteractionType, interactionEvent, + out List> _); + + return recipesAvailable; + } + + /// + /// Start the interaction (server-side) + /// + /// The source used in the interaction + /// + /// If the interaction should continue running + public override bool Start(InteractionEvent interactionEvent, InteractionReference reference) + { + Subsystems.TryGet(out CraftingSystem craftingSystem); + List craftingInteractions = craftingSystem.CreateInteractions(interactionEvent, _craftingInteractionType); + ViewLocator.Get().First().DisplayMenu(craftingInteractions, interactionEvent, reference, _craftingInteractionType); + return true; + } +} diff --git a/Assets/Scripts/SS3D/Systems/Crafting/OpenCraftingMenuInteraction.cs.meta b/Assets/Scripts/SS3D/Systems/Crafting/OpenCraftingMenuInteraction.cs.meta new file mode 100644 index 0000000000..58feafe69c --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Crafting/OpenCraftingMenuInteraction.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 509fde6acd805dd49b5d3759282ffe05 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/SS3D/Systems/Crafting/RecipeIngredient.cs b/Assets/Scripts/SS3D/Systems/Crafting/RecipeIngredient.cs new file mode 100644 index 0000000000..cd74e10c2b --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Crafting/RecipeIngredient.cs @@ -0,0 +1,33 @@ +using Coimbra; +using FishNet.Object; +using SS3D.Core; +using SS3D.Core.Behaviours; +using SS3D.Systems.Inventory.Items; +using SS3D.Systems.Tile; + +namespace SS3D.Systems.Crafting +{ + /// + /// Simple implementation of the IRecipeIngredient interface. Upon consumption of a crafting ingredient, simply despawn it. + /// + public class RecipeIngredient : NetworkActor, IRecipeIngredient + { + [Server] + public void Consume() + { + if (TryGetComponent(out Item item) && item.IsInContainer()) + { + item.Container.RemoveItem(item); + } + + if (TryGetComponent(out PlacedTileObject tileObject)) + { + Subsystems.Get().CurrentMap.ClearTileObject(gameObject.transform.position, tileObject.Layer, tileObject.Direction); + return; + } + + NetworkObject.Despawn(); + gameObject.Dispose(true); + } + } +} diff --git a/Assets/Scripts/SS3D/Systems/Crafting/RecipeIngredient.cs.meta b/Assets/Scripts/SS3D/Systems/Crafting/RecipeIngredient.cs.meta new file mode 100644 index 0000000000..eba02d886e --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Crafting/RecipeIngredient.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 49d37ab5b82ded9419a6e3ab3d05af02 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/SS3D/Systems/Crafting/RecipeStep.cs b/Assets/Scripts/SS3D/Systems/Crafting/RecipeStep.cs new file mode 100644 index 0000000000..7d4d8547fe --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Crafting/RecipeStep.cs @@ -0,0 +1,77 @@ +using NaughtyAttributes; +using SS3D.Data.AssetDatabases; +using System; +using System.Linq; +using UnityEngine; + +namespace SS3D.Systems.Crafting +{ + /// + /// Represent a single step in a recipe, hold an optionnal result from reaching the step, has a name, + /// and some data regarding what to do when it's reached. + /// + [Serializable] + public class RecipeStep + { + /// + /// The recipe this step belongs to. + /// + [NonSerialized] + public CraftingRecipe Recipe; + + [SerializeField] + [Tooltip("The name of the step. Choose it carefully as it is currently how one can refer to it.")] + private string _name; + + [HideIf(nameof(ShowInitialState))] + [AllowNesting] + [Tooltip("If true, the recipe starts here. There is only one initial step in a recipe." + + " A step can't be terminal and initial at the same time.")] + public bool IsInitialState; + + [AllowNesting] + [HideIf(nameof(IsInitialState))] + [Tooltip("If true, the target is consumed upon reaching this step (despawned)." + + " A step can't be terminal and initial at the same time.")] + public bool IsTerminal; + + [ShowIf(nameof(IsTerminal))] + [AllowNesting] + [Tooltip("If true, the result of the recipe step should use a custom craft method, instead of the default one." + + "Implement the method in a component implementing the ICraftable interface." + + "Should only be true on a terminal step.")] + public bool CustomCraft; + + [ShowIf(nameof(IsTerminal))] + [AllowNesting] + [Tooltip("A resulting object that will spawn at the end of the crafting process, optional.")] + public WorldObjectAssetReference Result; + + /// + /// If true, show IsInitialState in the inspector + /// + private bool ShowInitialState => Recipe.HasInitial && !IsInitialState; + + /// + /// Name of the recipe step. + /// + public string Name => _name; + + public WorldObjectAssetReference GetResultOrTarget() => Result ? Result : Recipe.Target; + + public RecipeStep(CraftingRecipe recipe, string name) + { + Recipe = recipe; + IsTerminal = false; + _name = name; + CustomCraft = false; + Result = new(); + } + + public bool TryGetResult(out WorldObjectAssetReference result) + { + result = Result; + return Result is not null; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/SS3D/Systems/Crafting/RecipeStep.cs.meta b/Assets/Scripts/SS3D/Systems/Crafting/RecipeStep.cs.meta new file mode 100644 index 0000000000..7159d43ad4 --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Crafting/RecipeStep.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 16f6064627f9ab04d831994da31ae0fe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/SS3D/Systems/Crafting/RecipeStepLink.cs b/Assets/Scripts/SS3D/Systems/Crafting/RecipeStepLink.cs new file mode 100644 index 0000000000..f0e9695f83 --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Crafting/RecipeStepLink.cs @@ -0,0 +1,121 @@ +using UnityEngine; +using System; +using System.Collections.Generic; +using Coimbra; +using SS3D.Data.AssetDatabases; +using UnityEngine.Serialization; + +namespace SS3D.Systems.Crafting +{ + /// + /// Class representing a link between two recipe steps. + /// + [Serializable] + public class RecipeStepLink + { + [Tooltip("Elements of the recipe, that will be consumed in the crafting process, and the necessary number of each.")] + [SerializeField] + private SerializableDictionary _elements = new(); + + [Tooltip("Bunch of conditions for ingredients to be valid to use in the recipe.")] + [SerializeField] + private List _conditions = new(); + + [Tooltip("The needed type of crafting interaction to go through this link.")] + [SerializeField] + private CraftingInteractionType _craftingInteractionType; + + [Tooltip("The source recipe step.")] + [SerializeField] + private string _from; + + [Tooltip("The target recipe step. The step reached once the requirement for this step link are met")] + [SerializeField] + private string _to; + + [Tooltip("If true, The main result of the target step will be modified, using the Modify method of the" + + " ICraftable interface. The main result's prefab should have a component implementing the ICraftable interface" + + " for it to work.")] + [SerializeField] + private bool _modifyResult; + + [Tooltip("The time the crafting should take in seconds.")] + [SerializeField] + private float _executionTime; + + [Tooltip("Things produced by going through this recipe link, upon reaching next step. Secondary results" + + " are always crafted using the default crafting method")] + [SerializeField] + private List _secondaryResults; + + /// + /// Time it takes in second for the crafting to finish. + /// + public float ExecutionTime => _executionTime; + + public CraftingRecipe Recipe { get; set; } + + /// + /// The needed type of crafting interaction to go through this link + /// + public CraftingInteractionType CraftingInteractionType => _craftingInteractionType; + + /// + /// Bunch of conditions for ingredients to be valid. + /// + public List Conditions => _conditions; + + /// + /// The source recipe step. + /// + public string From => _from; + + /// + /// The target recipe step. + /// + public string To => _to; + + /// + /// "If true, The main result of the target step will be modified, using the Modify method of the + /// ICraftable interface. The main result's prefab should have a component implementing the ICraftable interface + /// for it to work. + /// + public bool ModifyResult => _modifyResult; + + /// + /// The world objects ids and their respective numbers necessary for the recipe. + /// + public Dictionary Elements + { + get + { + Dictionary elements = new(); + + foreach (KeyValuePair keyValuePair in _elements) + { + elements.Add(keyValuePair.Key.Id, keyValuePair.Value); + } + + return elements; + } + } + + /// + /// The result of the crafting. + /// + public List SecondaryResults => _secondaryResults; + + /// + /// Filter ingredients based on conditions added on this recipe step link. + /// + public List ApplyIngredientConditions(List ingredients) + { + foreach (IngredientCondition condition in _conditions) + { + ingredients = condition.UsableIngredients(ingredients); + } + + return ingredients; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/SS3D/Systems/Crafting/RecipeStepLink.cs.meta b/Assets/Scripts/SS3D/Systems/Crafting/RecipeStepLink.cs.meta new file mode 100644 index 0000000000..aa9b298caa --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Crafting/RecipeStepLink.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3fc52ff257100e8499bad6c3ac904c17 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/SS3D/Systems/Crafting/SecondaryResult.cs b/Assets/Scripts/SS3D/Systems/Crafting/SecondaryResult.cs new file mode 100644 index 0000000000..f47d297f0b --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Crafting/SecondaryResult.cs @@ -0,0 +1,18 @@ +using SS3D.Data.AssetDatabases; +using System; + +namespace SS3D.Systems.Crafting +{ + [Serializable] + public struct SecondaryResult + { + public WorldObjectAssetReference Asset; + public uint Amount; + + public SecondaryResult(WorldObjectAssetReference asset, uint amount) + { + Asset = asset; + Amount = amount; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/SS3D/Systems/Crafting/SecondaryResult.cs.meta b/Assets/Scripts/SS3D/Systems/Crafting/SecondaryResult.cs.meta new file mode 100644 index 0000000000..eb49eb02ef --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Crafting/SecondaryResult.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: acbaee2286234c5b8993f9d5697e5764 +timeCreated: 1719331060 \ No newline at end of file diff --git a/Assets/Scripts/SS3D/Systems/Crafting/Slice.cs b/Assets/Scripts/SS3D/Systems/Crafting/Slice.cs deleted file mode 100644 index 53af211ec5..0000000000 --- a/Assets/Scripts/SS3D/Systems/Crafting/Slice.cs +++ /dev/null @@ -1,24 +0,0 @@ -using Serilog; -using SS3D.Interactions; -using SS3D.Interactions.Extensions; -using SS3D.Interactions.Interfaces; -using System.Collections.Generic; -using UnityEngine; - -namespace SS3D.Systems.Crafting -{ - public class Slice : MonoBehaviour, IInteractionSourceExtension - { - public void GetSourceInteractions(IInteractionTarget[] targets, List interactions) - { - SliceInteraction interaction = new SliceInteraction(2f, GetComponent().transform); - - foreach (IInteractionTarget target in targets) - { - interactions.Add(new InteractionEntry(target, interaction)); - } - } - } -} - - diff --git a/Assets/Scripts/SS3D/Systems/Crafting/SliceInteraction.cs b/Assets/Scripts/SS3D/Systems/Crafting/SliceInteraction.cs deleted file mode 100644 index 263c193b97..0000000000 --- a/Assets/Scripts/SS3D/Systems/Crafting/SliceInteraction.cs +++ /dev/null @@ -1,66 +0,0 @@ -using SS3D.Data.Generated; -using SS3D.Interactions; -using SS3D.Interactions.Extensions; -using SS3D.Systems.Inventory.Items; -using UnityEngine; - -namespace SS3D.Systems.Crafting -{ - public class SliceInteraction : CraftingInteraction - { - private Transform _characterTransform; - private Vector3 _startPosition; - - public SliceInteraction(float delay, Transform characterTransform) - { - _characterTransform = characterTransform; - _startPosition = characterTransform.position; - Delay = delay; - } - - public override bool CanInteract(InteractionEvent interactionEvent) - { - if (interactionEvent.Target is not Item) return false; - - // Should only check for movement once the interaction started. - if (HasStarted && !InteractionExtensions.CharacterMoveCheck(_startPosition, _characterTransform.position)) return false; - - Item target = interactionEvent.Target as Item; - - // Can slice only things out of containers. - if (target.Container != null) return false; - - if (!base.CanInteract(interactionEvent)) return false; - - return true; - } - - public override Sprite GetIcon(InteractionEvent interactionEvent) - { - return Icon != null ? Icon : InteractionIcons.Take; - } - - public override string GetGenericName() - { - return "Slice"; - } - - public override bool Start(InteractionEvent interactionEvent, InteractionReference reference) - { - base.Start(interactionEvent, reference); - _startPosition = _characterTransform.position; - return true; - } - - public override string GetName(InteractionEvent interactionEvent) - { - return GetGenericName() + " " + interactionEvent.Target.GetGameObject().name.Split("(")[0]; - } - - public override void Cancel(InteractionEvent interactionEvent, InteractionReference reference) - { - - } - } -} - diff --git a/Assets/Scripts/SS3D/Systems/Electricity/ElectricitySystem.cs b/Assets/Scripts/SS3D/Systems/Electricity/ElectricitySystem.cs index b51ce98849..1aec841528 100644 --- a/Assets/Scripts/SS3D/Systems/Electricity/ElectricitySystem.cs +++ b/Assets/Scripts/SS3D/Systems/Electricity/ElectricitySystem.cs @@ -9,6 +9,7 @@ using SS3D.Core; using System.Linq; using FishNet.Object; +using SS3D.Systems.Tile.Connections; namespace System.Electricity { @@ -111,7 +112,7 @@ public void AddElectricalElement(IElectricDevice device) VerticeCoordinates deviceCoordinates = new ((short)tileObject.WorldOrigin.x, (short)tileObject.WorldOrigin.y, (byte)tileObject.Layer, (byte)tileObject.Direction); _electricityGraph.AddVertex(deviceCoordinates); - List neighbours = tileObject.Connector.GetNeighbours(); + List neighbours = tileObject.Connector?.GetNeighbours(); foreach(PlacedTileObject neighbour in neighbours) { VerticeCoordinates neighbourCoordinates = new ((short)neighbour.WorldOrigin.x, (short)neighbour.WorldOrigin.y, diff --git a/Assets/Scripts/SS3D/Systems/Entities/Humanoid/HumanoidLivingController.cs b/Assets/Scripts/SS3D/Systems/Entities/Humanoid/HumanoidLivingController.cs index 0e28966493..9540cb894e 100644 --- a/Assets/Scripts/SS3D/Systems/Entities/Humanoid/HumanoidLivingController.cs +++ b/Assets/Scripts/SS3D/Systems/Entities/Humanoid/HumanoidLivingController.cs @@ -25,6 +25,10 @@ public class HumanoidLivingController : HumanoidController [SerializeField] private StaminaController _staminaController; [SerializeField] private FeetController _feetController; + public bool IsDragging { get; set; } + + + public override void OnStartClient() { base.OnStartClient(); @@ -46,7 +50,7 @@ protected override void ProcessCharacterMovement() if (Input.magnitude != 0) { MoveMovementTarget(Input); - RotatePlayerToMovement(); + if(!IsDragging) RotatePlayerToMovement(); MovePlayer(); } else diff --git a/Assets/Scripts/SS3D/Systems/Furniture/DragInteraction.cs b/Assets/Scripts/SS3D/Systems/Furniture/DragInteraction.cs new file mode 100644 index 0000000000..31b80dd77b --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Furniture/DragInteraction.cs @@ -0,0 +1,80 @@ +using SS3D.Data.Generated; +using SS3D.Interactions; +using SS3D.Interactions.Extensions; +using SS3D.Systems.Entities; +using SS3D.Systems.Entities.Humanoid; +using SS3D.Systems.Inventory.Containers; +using UnityEngine; + +namespace SS3D.Systems.Furniture +{ + /// + /// Interaction used to drag heavy stuff around the map. + /// + public class DragInteraction : Interaction + { + /// + /// If the interaction should be range limited + /// + public bool RangeCheck { get; set; } = true; + + + public override string GetName(InteractionEvent interactionEvent) + { + if (interactionEvent.Target.GetGameObject().TryGetComponent(out var draggable)) + { + return draggable.Dragged ? "Drop" : "Drag"; + } + + return null; + } + + public override Sprite GetIcon(InteractionEvent interactionEvent) + { + return InteractionIcons.Discard; + } + + public override bool CanInteract(InteractionEvent interactionEvent) + { + if (RangeCheck && !InteractionExtensions.RangeCheck(interactionEvent)) + { + return false; + } + + if (!IsInFront(interactionEvent.Source.GetComponentInParent().gameObject.transform, interactionEvent.Target.GetGameObject().transform, 20f)) + { + return false; + } + + if (interactionEvent.Source is not Hand) return false; + + return true; + } + + public override bool Start(InteractionEvent interactionEvent, InteractionReference reference) + { + if (!interactionEvent.Target.GetGameObject().TryGetComponent(out var draggable)) + { + return false; + } + + draggable.SetDrag(!draggable.Dragged, interactionEvent.Source.GetComponentInParent().gameObject.transform); + + interactionEvent.Source.GetComponentInParent().IsDragging = draggable.Dragged; + + return false; + } + + bool IsInFront(Transform transformToCheck, Transform target, float toleranceAngle) + { + // Calculate direction from the transform to the target + Vector3 directionToTarget = (target.position - transformToCheck.position).normalized; + + // Calculate the angle between the transform's forward direction and direction to target + float angle = Vector3.Angle(transformToCheck.forward, directionToTarget); + + // Check if the angle is within the tolerance range + return angle <= toleranceAngle; + } + } +} diff --git a/Assets/Scripts/SS3D/Systems/Furniture/DragInteraction.cs.meta b/Assets/Scripts/SS3D/Systems/Furniture/DragInteraction.cs.meta new file mode 100644 index 0000000000..353d524fd9 --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Furniture/DragInteraction.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 728eb34afaa2f8247bfdb95080283903 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/SS3D/Systems/Furniture/Draggable.cs b/Assets/Scripts/SS3D/Systems/Furniture/Draggable.cs new file mode 100644 index 0000000000..0384ab9ec6 --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Furniture/Draggable.cs @@ -0,0 +1,67 @@ +using Coimbra.Services.Events; +using Coimbra.Services.PlayerLoopEvents; +using FishNet.Object.Synchronizing; +using SS3D.Core.Behaviours; +using SS3D.Interactions; +using SS3D.Interactions.Interfaces; +using SS3D.Systems.Furniture; +using SS3D.Systems.Inventory.Interactions; +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; +using UnityEngine.UIElements; + +/// +/// Put this script on things that can be dragged by a player, such as unbolted furnitures. +/// +public class Draggable : NetworkActor, IInteractionTarget, IGameObjectProvider +{ + /// + /// The thing that drag this object + /// + [SerializeField] + private Transform _dragger; + + private Vector3 _draggerToDragged; + + /// + /// True if the object is currently being dragged. + /// + [SyncVar] + private bool _dragged; + + public bool Dragged => _dragged; + + public IInteraction[] CreateTargetInteractions(InteractionEvent interactionEvent) + { + DragInteraction dragInteraction = new DragInteraction(); + + return new IInteraction[] { dragInteraction }; + } + + protected override void OnStart() + { + AddHandle(UpdateEvent.AddListener(HandleUpdate)); + } + + private void HandleUpdate(ref EventContext context, in UpdateEvent e) + { + + if (!_dragged) return; + + gameObject.transform.position = + new Vector3(_dragger.transform.position.x, transform.position.y, _dragger.transform.position.z) + _draggerToDragged; + } + + public void SetDrag(bool drag, Transform dragger) + { + _dragged= drag; + _dragger = dragger; + _draggerToDragged = + new Vector3(transform.position.x - _dragger.transform.position.x, 0f, transform.position.z - _dragger.transform.position.z); + + + } +} diff --git a/Assets/Scripts/SS3D/Systems/Furniture/Draggable.cs.meta b/Assets/Scripts/SS3D/Systems/Furniture/Draggable.cs.meta new file mode 100644 index 0000000000..7bcb19f780 --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Furniture/Draggable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 71c1b65aaa331f84aa6eff7abc1033dc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/SS3D/Systems/Interactions/InteractionController.cs b/Assets/Scripts/SS3D/Systems/Interactions/InteractionController.cs index 7a6623f149..7d0fe7696b 100644 --- a/Assets/Scripts/SS3D/Systems/Interactions/InteractionController.cs +++ b/Assets/Scripts/SS3D/Systems/Interactions/InteractionController.cs @@ -177,7 +177,7 @@ public void InteractInHand(GameObject target, GameObject sourceObject, bool show return; } - InteractionEvent interactionEvent = new(source, null); + InteractionEvent interactionEvent = new(source, null, source.GameObject.transform.position); List targets = GetTargetsFromGameObject(source, target); List entries = GetInteractionsFromTargets(source, targets, interactionEvent); @@ -367,11 +367,12 @@ private IInteractionSource GetActiveInteractionSource() } [ServerRpc] - private void CmdRunInventoryInteraction(GameObject target, GameObject sourceObject, int index, string interactionName) + private void CmdRunInventoryInteraction(GameObject target, GameObject sourceObject, int index, string interactionName) { IInteractionSource source = sourceObject.GetComponent(); List targets = GetTargetsFromGameObject(source, target); - InteractionEvent interactionEvent = new(source, null); + InteractionEvent interactionEvent = new(source, null, source.GameObject.transform.position); + List entries = GetInteractionsFromTargets(source, targets, interactionEvent); // TODO: Validate access to inventory diff --git a/Assets/Scripts/SS3D/Systems/SS3D.Systems.asmdef b/Assets/Scripts/SS3D/Systems/SS3D.Systems.asmdef index 266e95b994..461b3792aa 100644 --- a/Assets/Scripts/SS3D/Systems/SS3D.Systems.asmdef +++ b/Assets/Scripts/SS3D/Systems/SS3D.Systems.asmdef @@ -25,6 +25,7 @@ "GUID:3cf19ecc459d5694491bb233fc4fccbd", "GUID:493bb11add906094faa30425cab7ce2e", "GUID:eec0964c48f6f4e40bc3ec2257ccf8c5", + "GUID:776d03a35f1b52c4a9aed9f56d7b4229", "GUID:84651a3751eca9349aac36a66bba901b" ], "includePlatforms": [], diff --git a/Assets/Scripts/SS3D/Systems/Tile/Connections/AbstractHorizontalConnector.cs b/Assets/Scripts/SS3D/Systems/Tile/Connections/AbstractHorizontalConnector.cs index f7a7fa2d84..2771dfb6e2 100644 --- a/Assets/Scripts/SS3D/Systems/Tile/Connections/AbstractHorizontalConnector.cs +++ b/Assets/Scripts/SS3D/Systems/Tile/Connections/AbstractHorizontalConnector.cs @@ -5,6 +5,7 @@ using SS3D.Core.Behaviours; using SS3D.Logging; using SS3D.Systems.Tile.Connections.AdjacencyTypes; +using System; using System.Collections; using System.Collections.Generic; using System.Linq; @@ -74,6 +75,8 @@ public abstract class AbstractHorizontalConnector : NetworkActor, IAdjacencyConn /// public abstract bool IsConnected(PlacedTileObject neighbourObject); + public EventHandler OnMeshUpdate; + public override void OnStartClient() { @@ -92,7 +95,7 @@ private void Setup() _adjacencyMap = new AdjacencyMap(); _filter = GetComponent(); - _placedObject = GetComponent(); + _placedObject = GetComponentInParent(); if (_placedObject == null) { _genericType = TileObjectGenericType.None; @@ -187,6 +190,8 @@ protected virtual void UpdateMeshAndDirection() localRotation = Quaternion.Euler(eulerRotation.x, info.Rotation, eulerRotation.z); transform.localRotation = localRotation; + + OnMeshUpdate?.Invoke(this, info); } /// diff --git a/Assets/Scripts/SS3D/Systems/Tile/Connections/AdjacencyTypes/AdjacencyDataStructs.cs b/Assets/Scripts/SS3D/Systems/Tile/Connections/AdjacencyTypes/AdjacencyDataStructs.cs index a6c04326f4..0b36db795f 100644 --- a/Assets/Scripts/SS3D/Systems/Tile/Connections/AdjacencyTypes/AdjacencyDataStructs.cs +++ b/Assets/Scripts/SS3D/Systems/Tile/Connections/AdjacencyTypes/AdjacencyDataStructs.cs @@ -9,5 +9,6 @@ public struct MeshDirectionInfo { public Mesh Mesh; public float Rotation; + public AdjacencyShape Shape; } } \ No newline at end of file diff --git a/Assets/Scripts/SS3D/Systems/Tile/Connections/AdjacencyTypes/AdvancedAdjacency.cs b/Assets/Scripts/SS3D/Systems/Tile/Connections/AdjacencyTypes/AdvancedAdjacency.cs index d8dd3074ae..5bc32367b6 100644 --- a/Assets/Scripts/SS3D/Systems/Tile/Connections/AdjacencyTypes/AdvancedAdjacency.cs +++ b/Assets/Scripts/SS3D/Systems/Tile/Connections/AdjacencyTypes/AdvancedAdjacency.cs @@ -172,7 +172,7 @@ public MeshDirectionInfo GetMeshAndDirection(AdjacencyMap adjacencyMap) } } - return new MeshDirectionInfo { Mesh = mesh, Rotation = rotation }; + return new MeshDirectionInfo { Mesh = mesh, Rotation = rotation, Shape = shape }; } } } \ No newline at end of file diff --git a/Assets/Scripts/SS3D/Systems/Tile/Connections/MultiAdjacencyConnector.cs b/Assets/Scripts/SS3D/Systems/Tile/Connections/MultiAdjacencyConnector.cs new file mode 100644 index 0000000000..05fdef95da --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Tile/Connections/MultiAdjacencyConnector.cs @@ -0,0 +1,55 @@ +using SS3D.Core.Behaviours; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +namespace SS3D.Systems.Tile.Connections +{ + /// + /// Add this script on any game objects that need multiple adjacency connectors, such as girders. + /// Note that it means that those connectors won't behave completely independently. + /// Should always be put on the "root" game object, at the same level as the placed tile object script. + /// + public class MultiAdjacencyConnector : Actor, IAdjacencyConnector + { + /// + /// Game objects that hold a IAdjacencyConnector component. + /// + [SerializeField] + private List _connectors; + + /// + /// Return the neighbours of all connectors. + /// + public List GetNeighbours() + { + List neighbours = new(); + + foreach (var connector in _connectors) + { + neighbours.AddRange(connector.GetComponent()?.GetNeighbours()); + } + return neighbours; + } + + /// + /// If any of the connectors is connected, return true, else return false. + /// + public bool IsConnected(PlacedTileObject neighbourObject) + { + return _connectors.Any(x => (bool) x.GetComponent()?.IsConnected(neighbourObject)); + } + + public void UpdateAllConnections() + { + _connectors.ForEach(x => x.GetComponent()?.UpdateAllConnections()); + } + + public bool UpdateSingleConnection(Direction dir, PlacedTileObject neighbourObject, bool updateNeighbour) + { + _connectors.ForEach(x => x.GetComponent()?.UpdateSingleConnection(dir, neighbourObject, updateNeighbour)); + return true; + } + } +} diff --git a/Assets/Scripts/SS3D/Systems/Tile/Connections/MultiAdjacencyConnector.cs.meta b/Assets/Scripts/SS3D/Systems/Tile/Connections/MultiAdjacencyConnector.cs.meta new file mode 100644 index 0000000000..6a863b382d --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Tile/Connections/MultiAdjacencyConnector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: be678463edb44cf4186d58912bf424d4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/SS3D/Systems/Tile/PlacedObjects/PlacedTileObject.cs b/Assets/Scripts/SS3D/Systems/Tile/PlacedObjects/PlacedTileObject.cs index 5dd2d85fa7..4d18511906 100644 --- a/Assets/Scripts/SS3D/Systems/Tile/PlacedObjects/PlacedTileObject.cs +++ b/Assets/Scripts/SS3D/Systems/Tile/PlacedObjects/PlacedTileObject.cs @@ -1,11 +1,14 @@ using FishNet; using FishNet.Object; +using SS3D.Attributes; using SS3D.Core; +using SS3D.Data.AssetDatabases; using SS3D.Logging; using SS3D.Systems.Tile.Connections; using System; using System.Collections; using System.Collections.Generic; +using System.Linq; using UnityEngine; using math = SS3D.Utils.MathUtility; @@ -14,7 +17,7 @@ namespace SS3D.Systems.Tile /// /// Component that is added to every tile object that is part of the tilemap. Tiles are more restrictive and need to have an origin, fixed grid position and direction to face. /// - public class PlacedTileObject: NetworkBehaviour + public class PlacedTileObject: NetworkBehaviour, IWorldObjectAsset { /// /// Creates a new PlacedTileObject from a TileObjectSO at a given position and direction. @@ -52,15 +55,18 @@ public static PlacedTileObject Create(Vector3 worldPosition, Vector2Int origin, return placedObject; } - /// - /// Returns a new SaveObject for use in saving/loading. - /// - /// - + [SerializeField] +#if UNITY_EDITOR + [ReadOnly] + [Header("This field is filled automatically by the AssetData system.")] +#endif + private WorldObjectAssetReference _asset; + [SerializeField] private TileObjectSo _tileObjectSo; private Vector2Int _origin; private Direction _dir; + private IAdjacencyConnector _connector; private Vector2Int _worldOrigin; @@ -84,8 +90,22 @@ public static PlacedTileObject Create(Vector3 worldPosition, Vector2Int origin, public string NameString => _tileObjectSo.NameString; + public TileObjectSo tileObjectSO => _tileObjectSo; + public bool HasAdjacencyConnector => _connector != null; + public WorldObjectAssetReference Asset + { + get => _asset; + set + { + if (UnityEngine.Application.isPlaying) + { + Serilog.Log.Warning($"Field {nameof(Asset)} is being modified in runtime. This should not happen in normal conditions."); + } + _asset = value; + } + } public IAdjacencyConnector Connector => _connector; /// diff --git a/Assets/Scripts/SS3D/Systems/Tile/TileMap.cs b/Assets/Scripts/SS3D/Systems/Tile/TileMap.cs index 08d20a742b..966c655252 100644 --- a/Assets/Scripts/SS3D/Systems/Tile/TileMap.cs +++ b/Assets/Scripts/SS3D/Systems/Tile/TileMap.cs @@ -197,9 +197,10 @@ public bool CanBuild(TileObjectSo tileObjectSo, Vector3 placePosition, Direction } public bool PlaceTileObject(TileObjectSo tileObjectSo, Vector3 placePosition, Direction dir, - bool skipBuildCheck, bool replaceExisting, bool skipAdjacency) + bool skipBuildCheck, bool replaceExisting, bool skipAdjacency, out GameObject placedObjectGo) { bool canBuild = CanBuild(tileObjectSo, placePosition, dir, replaceExisting); + placedObjectGo = null; if (canBuild || skipBuildCheck) { @@ -225,7 +226,8 @@ public bool PlaceTileObject(TileObjectSo tileObjectSo, Vector3 placePosition, Di if (!skipAdjacency){ placedObject.UpdateAdjacencies(); } - + + placedObjectGo = placedObject.gameObject; } return canBuild; @@ -387,7 +389,7 @@ public void Load([CanBeNull] SavedTileMap saveObject) Vector3 placePosition = chunk.GetWorldPosition(savedTile.Location.x, savedTile.Location.y); // Skipping build check here to allow loading tile objects in a non-valid order - PlaceTileObject(toBePlaced, placePosition, savedObject.dir, true, false, true); + PlaceTileObject(toBePlaced, placePosition, savedObject.dir, true, false, true, out GameObject placedObject); } } } diff --git a/Assets/Scripts/SS3D/Systems/Tile/TileMapCreator/AssetGrid.cs b/Assets/Scripts/SS3D/Systems/Tile/TileMapCreator/AssetGrid.cs index d6b1d65197..79260dc4dc 100644 --- a/Assets/Scripts/SS3D/Systems/Tile/TileMapCreator/AssetGrid.cs +++ b/Assets/Scripts/SS3D/Systems/Tile/TileMapCreator/AssetGrid.cs @@ -70,7 +70,7 @@ public void FindAssets(string text) foreach (GenericObjectSo asset in _objectDatabase) { if (!asset.name.Contains(text, StringComparison.OrdinalIgnoreCase)) continue; - Instantiate(_slotPrefab, _contentRoot.transform, true).GetComponent().Setup(asset); + Instantiate(_slotPrefab, _contentRoot.transform, true).GetComponent().Setup(asset); } } @@ -90,7 +90,7 @@ private void LoadObjectGrid(TileLayer[] allowedLayers, bool isItems) case false when asset is TileObjectSo so && !allowedLayers.Contains(so.layer): continue; } - Instantiate(_slotPrefab, _contentRoot.transform, true).GetComponent().Setup(asset); + Instantiate(_slotPrefab, _contentRoot.transform, true).GetComponent().Setup(asset); } } diff --git a/Assets/Scripts/SS3D/Systems/Tile/TileMapCreator/AssetSlot.cs b/Assets/Scripts/SS3D/Systems/Tile/TileMapCreator/AssetSlot.cs index f90163c77c..bd7785cfaf 100644 --- a/Assets/Scripts/SS3D/Systems/Tile/TileMapCreator/AssetSlot.cs +++ b/Assets/Scripts/SS3D/Systems/Tile/TileMapCreator/AssetSlot.cs @@ -1,5 +1,4 @@ -using SS3D.Systems.Tile.TileMapCreator; -using TMPro; +using TMPro; using UnityEngine; using UnityEngine.UI; @@ -11,26 +10,21 @@ namespace SS3D.Systems.Tile.UI /// public class AssetSlot : MonoBehaviour { - private GenericObjectSo _genericObjectSo; - - private ConstructionHologramManager _hologramManager; + [SerializeField] + protected Image Image; + [SerializeField] + protected TMP_Text AssetName; + protected GenericObjectSo GenericObjectSo; + /// /// Load an UI icon and string for the item/tile. /// /// public void Setup(GenericObjectSo genericObjectSo) { - _genericObjectSo = genericObjectSo; - GetComponent().sprite = genericObjectSo.icon; - transform.localScale = Vector3.one; - GetComponentInChildren().text = genericObjectSo.NameString; - - _hologramManager = GetComponentInParent(); - } - - public void OnClick() - { - _hologramManager.SetSelectedObject(_genericObjectSo); + GenericObjectSo = genericObjectSo; + Image.sprite = genericObjectSo.icon; + AssetName.text = genericObjectSo.NameString; } } } \ No newline at end of file diff --git a/Assets/Scripts/SS3D/Systems/Tile/TileMapCreator/ConstructionSlot.cs b/Assets/Scripts/SS3D/Systems/Tile/TileMapCreator/ConstructionSlot.cs new file mode 100644 index 0000000000..d921cd1109 --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Tile/TileMapCreator/ConstructionSlot.cs @@ -0,0 +1,20 @@ +using SS3D.Systems.Tile.UI; + +namespace SS3D.Systems.Tile.TileMapCreator +{ + public class ConstructionSlot : AssetSlot + { + private ConstructionHologramManager _hologramManager; + + public void Setup(GenericObjectSo genericObjectSo) + { + base.Setup(genericObjectSo); + _hologramManager = GetComponentInParent(); + } + + public void OnClick() + { + _hologramManager.SetSelectedObject(GenericObjectSo); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/SS3D/Systems/Tile/TileMapCreator/ConstructionSlot.cs.meta b/Assets/Scripts/SS3D/Systems/Tile/TileMapCreator/ConstructionSlot.cs.meta new file mode 100644 index 0000000000..a3671f90f5 --- /dev/null +++ b/Assets/Scripts/SS3D/Systems/Tile/TileMapCreator/ConstructionSlot.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 280d894b63274c4e8d6242ad3ddc1217 +timeCreated: 1719329204 \ No newline at end of file diff --git a/Assets/Scripts/SS3D/Systems/Tile/TileSystem.cs b/Assets/Scripts/SS3D/Systems/Tile/TileSystem.cs index 83529836e2..eb2aba7ad2 100644 --- a/Assets/Scripts/SS3D/Systems/Tile/TileSystem.cs +++ b/Assets/Scripts/SS3D/Systems/Tile/TileSystem.cs @@ -87,7 +87,7 @@ private bool PlaceObject(GenericObjectSo genericObjectSo, Vector3 placePosition, switch (genericObjectSo) { case TileObjectSo so: - return _currentMap.PlaceTileObject(so, placePosition, dir, false, replaceExisting, false); + return _currentMap.PlaceTileObject(so, placePosition, dir, false, replaceExisting, false, out GameObject placedObject); case ItemObjectSo so: _currentMap.PlaceItemObject(placePosition, Quaternion.Euler(0, TileHelper.GetRotationAngle(dir), 0), so); break; diff --git a/Assets/Scripts/SS3D/Utils/EditorZoomArea.cs b/Assets/Scripts/SS3D/Utils/EditorZoomArea.cs new file mode 100644 index 0000000000..e52e4a1c2a --- /dev/null +++ b/Assets/Scripts/SS3D/Utils/EditorZoomArea.cs @@ -0,0 +1,37 @@ +using UnityEngine; + +namespace SS3D.Utils +{ + /// + /// An utility class to allow zoom and panning to work in editor windows. + /// heavily inpired by this code : http://martinecker.com/martincodes/unity-editor-window-zooming/ + /// + public class EditorZoomArea + { + private const float KEditorWindowTabHeight = 21.0f; + private static Matrix4x4 PrevGuiMatrix; + + public static Rect Begin(float zoomScale, Rect screenCoordsArea) + { + GUI.EndGroup(); // End the group Unity begins automatically for an EditorWindow to clip out the window tab. This allows us to draw outside of the size of the EditorWindow. + + Rect clippedArea = screenCoordsArea.ScaleSizeBy(1.0f / zoomScale, screenCoordsArea.TopLeft()); + clippedArea.y += KEditorWindowTabHeight; + GUI.BeginGroup(clippedArea); + + PrevGuiMatrix = GUI.matrix; + Matrix4x4 translation = Matrix4x4.TRS(clippedArea.TopLeft(), Quaternion.identity, Vector3.one); + Matrix4x4 scale = Matrix4x4.Scale(new Vector3(zoomScale, zoomScale, 1.0f)); + GUI.matrix = translation * scale * translation.inverse * GUI.matrix; + + return clippedArea; + } + + public static void End() + { + GUI.matrix = PrevGuiMatrix; + GUI.EndGroup(); + GUI.BeginGroup(new Rect(0.0f, KEditorWindowTabHeight, Screen.width, Screen.height)); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/SS3D/Utils/EditorZoomArea.cs.meta b/Assets/Scripts/SS3D/Utils/EditorZoomArea.cs.meta new file mode 100644 index 0000000000..b50124a98b --- /dev/null +++ b/Assets/Scripts/SS3D/Utils/EditorZoomArea.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 50ae8c3f6619e624695ed33df660e928 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/SS3D/Utils/RectExtensions.cs b/Assets/Scripts/SS3D/Utils/RectExtensions.cs new file mode 100644 index 0000000000..c01dd29862 --- /dev/null +++ b/Assets/Scripts/SS3D/Utils/RectExtensions.cs @@ -0,0 +1,51 @@ +using UnityEngine; + +namespace SS3D.Utils +{ + /// + /// Helper class providing some useful method for rects. Currently mostly used for zoom/unzoom functionnalities in editor windows, + /// such as the graph visualiser window. + /// + public static class RectExtensions + { + public static Vector2 TopLeft(this Rect rect) + { + return new Vector2(rect.xMin, rect.yMin); + } + public static Rect ScaleSizeBy(this Rect rect, float scale) + { + return rect.ScaleSizeBy(scale, rect.center); + } + public static Rect ScaleSizeBy(this Rect rect, float scale, Vector2 pivotPoint) + { + Rect result = rect; + result.x -= pivotPoint.x; + result.y -= pivotPoint.y; + result.xMin *= scale; + result.xMax *= scale; + result.yMin *= scale; + result.yMax *= scale; + result.x += pivotPoint.x; + result.y += pivotPoint.y; + return result; + } + public static Rect ScaleSizeBy(this Rect rect, Vector2 scale) + { + return rect.ScaleSizeBy(scale, rect.center); + } + + public static Rect ScaleSizeBy(this Rect rect, Vector2 scale, Vector2 pivotPoint) + { + Rect result = rect; + result.x -= pivotPoint.x; + result.y -= pivotPoint.y; + result.xMin *= scale.x; + result.xMax *= scale.x; + result.yMin *= scale.y; + result.yMax *= scale.y; + result.x += pivotPoint.x; + result.y += pivotPoint.y; + return result; + } + } +} diff --git a/Assets/Scripts/SS3D/Utils/RectExtensions.cs.meta b/Assets/Scripts/SS3D/Utils/RectExtensions.cs.meta new file mode 100644 index 0000000000..42d1585e55 --- /dev/null +++ b/Assets/Scripts/SS3D/Utils/RectExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0fa7c16c6f7de2b4784a949716a2abc6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/SS3D/Utils/SpringEmbedderAlgorithm.cs b/Assets/Scripts/SS3D/Utils/SpringEmbedderAlgorithm.cs new file mode 100644 index 0000000000..cfa8e62351 --- /dev/null +++ b/Assets/Scripts/SS3D/Utils/SpringEmbedderAlgorithm.cs @@ -0,0 +1,208 @@ +using QuikGraph; +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +namespace SS3D.Utils +{ + public class VerticeWithPosition + { + public TVertex Vertice; + public Vector2 Position; + } + + /// + /// Inspired by this doc : https://i11www.iti.kit.edu/_media/teaching/winter2016/graphvis/graphvis-ws16-v6.pdf + /// The spring embedder algorithm simulates the behavior of negative charged particles, linked by spring between + /// themselves, and the shape it takes after it reaches its minimum energy leads to an easy-to-read graph. + /// + public static class SpringEmbedderAlgorithm + { + /// + /// How much vertices are repulsive to each other. + /// + private static float RepulsiveConstant = 1; + + /// + /// How much vertices linked by an an edge attract each other. + /// + private static float AttractiveConstant = 1; + + /// + /// Ideal lenght between vertices. + /// + private static float IdealLenght = 80; + + /// + /// Delta acts like a "speed" factor for the algorithm, the higher it is, the faster it converges + /// toward the solution, but values too high can lead to divergence. + /// + private static float Delta = 1f; + + /// + /// Another criteria to stop the algorithm is what's the max force exerted on any vertices is at a given iteration. + /// When lower than a given amount we consider it won't move much still, and we stop. + /// + private static float ForceToStop = 0.1f; + + /// + /// Set all parameters of the algorithm, should be called + /// Z + public static void SetParameters(float repulsive, float attractive, float idealLenght, float delta, float forceToStop) + { + RepulsiveConstant= repulsive; + AttractiveConstant= attractive; + IdealLenght = idealLenght; + ForceToStop = forceToStop; + Delta = delta; + } + + /// + /// Take any graph with tagged edges, and return an enhanced graph with a position for each edges. + /// + public static AdjacencyGraph, TaggedEdge, TTag>> InitializeGraphWithPositions( + AdjacencyGraph> originalGraph) + { + AdjacencyGraph, TaggedEdge, TTag>> graphWithPosition = new(); + + // make a new graph giving positions to vertices. + foreach (TaggedEdge edge in originalGraph.Edges) + { + VerticeWithPosition source = graphWithPosition.Vertices.FirstOrDefault(x => x.Vertice.Equals(edge.Source)); + VerticeWithPosition target = graphWithPosition.Vertices.FirstOrDefault(x => x.Vertice.Equals(edge.Target)); + + TaggedEdge, TTag> edgeWithPosition = new( + source != null ? source : new() { Vertice = edge.Source, Position = GetRandomCirclePosition() }, + target != null ? target : new() { Vertice = edge.Target, Position = GetRandomCirclePosition() }, + edge.Tag + ); + graphWithPosition.AddVerticesAndEdge(edgeWithPosition); + } + + return graphWithPosition; + } + + /// + /// Used to initialize randomly the position of vertices. + /// + private static Vector2 GetRandomCirclePosition() + { + return UnityEngine.Random.insideUnitCircle * 200 + new Vector2(300, 200); + } + + /// + /// Compute a sing step of the algorithm, return true if conditions are met to stop it. + /// + public static bool ComputeOneStep(AdjacencyGraph, TaggedEdge, TTag>> graphWithPosition) + { + Tuple, Vector2>[] forcesOnVertices = ComputeForceAllVertices(graphWithPosition); + + Vector2 maxForce = forcesOnVertices.Select(x => x.Item2) + .Aggregate(Vector2.zero, (current, next) => + current.magnitude > next.magnitude ? current : next, result => result); + + if (maxForce.magnitude < ForceToStop) return true; + + foreach (Tuple, Vector2> t in forcesOnVertices) + { + t.Item1.Position += Delta * t.Item2; + } + + return false; + } + + /// + /// Compute the average force exerted on each vertices in the graph. + /// + private static Tuple, Vector2>[] ComputeForceAllVertices( + AdjacencyGraph, TaggedEdge, TTag>> graph) + { + Tuple, Vector2>[] forcesOnVertice = new Tuple, Vector2>[graph.VertexCount]; + int i = 0; + foreach (VerticeWithPosition vertice in graph.Vertices) + { + forcesOnVertice[i] = new(vertice, ComputeForceSingleVertice(vertice, graph)); + i++; + } + + return forcesOnVertice; + } + + /// + /// Compute the average force exerted on a single vertice in the graph. + /// + private static Vector2 ComputeForceSingleVertice(VerticeWithPosition vertice, + AdjacencyGraph, TaggedEdge, TTag>> graph) + { + List> conVertices = new(); + + // Inefficient way of getting neighbour edges, but I could not find a better one. + foreach (Edge> edge in graph.Edges) + { + if (edge.Target == vertice && edge.Source != vertice) + { + conVertices.Add(edge.Source); + } + else if (edge.Source == vertice && edge.Target != vertice) + { + conVertices.Add(edge.Target); + } + } + + List> currentVertice = new() { vertice }; + + IEnumerable> unconnectedVertices = graph.Vertices.Except(currentVertice); + + Vector2 attractive = ComputeAttractiveComponent(vertice, conVertices); + Vector2 repulsive = ComputeRepulsiveComponent(vertice, unconnectedVertices); + + return attractive + repulsive; + } + + /// + /// Compute the attractive average force exerted by vertices on a single vertice. + /// + private static Vector2 ComputeAttractiveComponent(VerticeWithPosition vertice, IEnumerable> vertices) + { + Vector2 result = Vector2.zero; + + foreach (VerticeWithPosition target in vertices) + { + result += AttractiveForce(vertice.Position, target.Position); + } + + return result; + } + + /// + /// Compute the repulsive average force exerted by vertices on a single vertice. + /// + private static Vector2 ComputeRepulsiveComponent(VerticeWithPosition vertice, IEnumerable> vertices) + { + Vector2 result = Vector2.zero; + foreach (VerticeWithPosition target in vertices) + { + result += RepulsiveForce(vertice.Position, target.Position); + } + + return result; + } + + /// + /// Method to compute the repulsive force between two vertices. + /// + private static Vector2 RepulsiveForce(Vector2 v1, Vector2 v2) + { + return (RepulsiveConstant / (Vector2.Distance(v1, v2) * Vector2.Distance(v1, v2))) * (v1 - v2).normalized; + } + + /// + /// Method to compute the attractive force between two vertices. + /// + private static Vector2 AttractiveForce(Vector2 v1, Vector2 v2) + { + return (AttractiveConstant * Mathf.Log(Vector2.Distance(v1, v2)) / IdealLenght) * (v2 - v1).normalized; + } + } +} diff --git a/Assets/Scripts/SS3D/Utils/SpringEmbedderAlgorithm.cs.meta b/Assets/Scripts/SS3D/Utils/SpringEmbedderAlgorithm.cs.meta new file mode 100644 index 0000000000..01c7d645e7 --- /dev/null +++ b/Assets/Scripts/SS3D/Utils/SpringEmbedderAlgorithm.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eaea99c04eeafdf4ba44280f335c3c43 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Settings/NetworkSettings.asset b/Assets/Settings/NetworkSettings.asset index e1b150a0ad..ae9bc560d0 100644 --- a/Assets/Settings/NetworkSettings.asset +++ b/Assets/Settings/NetworkSettings.asset @@ -17,5 +17,5 @@ MonoBehaviour: NetworkType: 2 Ckey: editorUser ServerAddress: 127.0.0.1 - ServerPort: 1151 + ServerPort: 8616 EnableNetworkBandwidthUsageStats: 1 diff --git a/Builds/Game/Data/Tilemaps/teststation.json b/Builds/Game/Data/Tilemaps/teststation.json index d282e5cd7f..39eeb8576b 100644 --- a/Builds/Game/Data/Tilemaps/teststation.json +++ b/Builds/Game/Data/Tilemaps/teststation.json @@ -1 +1 @@ -{"mapName":"UnnamedMap","savedChunkList":[{"chunkKey":{"x":0,"y":0},"originPosition":{"x":0.0,"y":0.0,"z":0.0},"savedTiles":[{"rid":1000},{"rid":1001},{"rid":1002},{"rid":1003},{"rid":1004},{"rid":1005},{"rid":1006},{"rid":1007},{"rid":1008},{"rid":1009},{"rid":1010},{"rid":1011},{"rid":1012},{"rid":1013},{"rid":1014},{"rid":1015},{"rid":1016},{"rid":1017},{"rid":1018},{"rid":1019},{"rid":1020},{"rid":1021},{"rid":1022},{"rid":1023},{"rid":1024},{"rid":1025},{"rid":1026},{"rid":1027},{"rid":1028},{"rid":1029},{"rid":1030},{"rid":1031},{"rid":1032},{"rid":1033},{"rid":1034},{"rid":1035},{"rid":1036},{"rid":1037},{"rid":1038},{"rid":1039},{"rid":1040},{"rid":1041},{"rid":1042},{"rid":1043},{"rid":1044},{"rid":1045},{"rid":1046},{"rid":1047},{"rid":1048},{"rid":1049},{"rid":1050},{"rid":1051},{"rid":1052},{"rid":1053},{"rid":1054},{"rid":1055},{"rid":1056},{"rid":1057},{"rid":1058},{"rid":1059},{"rid":1060},{"rid":1061},{"rid":1062},{"rid":1063},{"rid":1064},{"rid":1065},{"rid":1066},{"rid":1067},{"rid":1068},{"rid":1069},{"rid":1070},{"rid":1071},{"rid":1072},{"rid":1073},{"rid":1074},{"rid":1075},{"rid":1076},{"rid":1077},{"rid":1078},{"rid":1079},{"rid":1080},{"rid":1081},{"rid":1082},{"rid":1083},{"rid":1084},{"rid":1085},{"rid":1086},{"rid":1087},{"rid":1088},{"rid":1089},{"rid":1090},{"rid":1091},{"rid":1092},{"rid":1093},{"rid":1094},{"rid":1095},{"rid":1096},{"rid":1097},{"rid":1098},{"rid":1099},{"rid":1100},{"rid":1101},{"rid":1102},{"rid":1103},{"rid":1104},{"rid":1105},{"rid":1106},{"rid":1107},{"rid":1108},{"rid":1109},{"rid":1110},{"rid":1111},{"rid":1112},{"rid":1113},{"rid":1114},{"rid":1115},{"rid":1116},{"rid":1117},{"rid":1118},{"rid":1119},{"rid":1120},{"rid":1121},{"rid":1122},{"rid":1123},{"rid":1124},{"rid":1125},{"rid":1126},{"rid":1127},{"rid":1128},{"rid":1129},{"rid":1130},{"rid":1131},{"rid":1132},{"rid":1133},{"rid":1134},{"rid":1135},{"rid":1136},{"rid":1137},{"rid":1138},{"rid":1139},{"rid":1140},{"rid":1141},{"rid":1142},{"rid":1143},{"rid":1144},{"rid":1145},{"rid":1146},{"rid":1147},{"rid":1148},{"rid":1149},{"rid":1150},{"rid":1151},{"rid":1152},{"rid":1153},{"rid":1154},{"rid":1155},{"rid":1156},{"rid":1157},{"rid":1158},{"rid":1159},{"rid":1160},{"rid":1161},{"rid":1162},{"rid":1163},{"rid":1164},{"rid":1165},{"rid":1166},{"rid":1167},{"rid":1168},{"rid":1169},{"rid":1170},{"rid":1171},{"rid":1172},{"rid":1173},{"rid":1174},{"rid":1175},{"rid":1176},{"rid":1177},{"rid":1178},{"rid":1179},{"rid":1180},{"rid":1181},{"rid":1182},{"rid":1183},{"rid":1184},{"rid":1185},{"rid":1186},{"rid":1187},{"rid":1188},{"rid":1189},{"rid":1190},{"rid":1191},{"rid":1192},{"rid":1193},{"rid":1194},{"rid":1195},{"rid":1196},{"rid":1197},{"rid":1198},{"rid":1199},{"rid":1200},{"rid":1201},{"rid":1202},{"rid":1203},{"rid":1204},{"rid":1205},{"rid":1206},{"rid":1207},{"rid":1208},{"rid":1209},{"rid":1210},{"rid":1211},{"rid":1212},{"rid":1213},{"rid":1214},{"rid":1215},{"rid":1216},{"rid":1217},{"rid":1218},{"rid":1219},{"rid":1220},{"rid":1221},{"rid":1222},{"rid":1223},{"rid":1224},{"rid":1225},{"rid":1226},{"rid":1227},{"rid":1228},{"rid":1229},{"rid":1230},{"rid":1231},{"rid":1232},{"rid":1233},{"rid":1234},{"rid":1235},{"rid":1236},{"rid":1237},{"rid":1238},{"rid":1239},{"rid":1240},{"rid":1241},{"rid":1242},{"rid":1243},{"rid":1244},{"rid":1245},{"rid":1246},{"rid":1247},{"rid":1248},{"rid":1249},{"rid":1250},{"rid":1251},{"rid":1252},{"rid":1253},{"rid":1254},{"rid":1255},{"rid":1256},{"rid":1257},{"rid":1258},{"rid":1259},{"rid":1260},{"rid":1261},{"rid":1262},{"rid":1263},{"rid":1264},{"rid":1265},{"rid":1266},{"rid":1267},{"rid":1268},{"rid":1269},{"rid":1270},{"rid":1271},{"rid":1272},{"rid":1273},{"rid":1274},{"rid":1275},{"rid":1276},{"rid":1277},{"rid":1278},{"rid":1279},{"rid":1280},{"rid":1281},{"rid":1282},{"rid":1283},{"rid":1284},{"rid":1285},{"rid":1286},{"rid":1287},{"rid":1288},{"rid":1289},{"rid":1290},{"rid":1291},{"rid":1292},{"rid":1293},{"rid":1294},{"rid":1295},{"rid":1296},{"rid":1297},{"rid":1298},{"rid":1299},{"rid":1300},{"rid":1301},{"rid":1302},{"rid":1303},{"rid":1304},{"rid":1305},{"rid":1306},{"rid":1307},{"rid":1308},{"rid":1309},{"rid":1310},{"rid":1311},{"rid":1312},{"rid":1313},{"rid":1314},{"rid":1315},{"rid":1316},{"rid":1317},{"rid":1318},{"rid":1319},{"rid":1320},{"rid":1321},{"rid":1322},{"rid":1323},{"rid":1324},{"rid":1325},{"rid":1326},{"rid":1327},{"rid":1328},{"rid":1329},{"rid":1330},{"rid":1331},{"rid":1332},{"rid":1333},{"rid":1334},{"rid":1335},{"rid":1336},{"rid":1337},{"rid":1338},{"rid":1339},{"rid":1340},{"rid":1341},{"rid":1342}]},{"chunkKey":{"x":0,"y":-1},"originPosition":{"x":0.0,"y":0.0,"z":-16.0},"savedTiles":[{"rid":1343},{"rid":1344},{"rid":1345},{"rid":1346},{"rid":1347},{"rid":1348},{"rid":1349},{"rid":1350},{"rid":1351},{"rid":1352},{"rid":1353},{"rid":1354},{"rid":1355},{"rid":1356},{"rid":1357},{"rid":1358},{"rid":1359},{"rid":1360},{"rid":1361},{"rid":1362},{"rid":1363},{"rid":1364},{"rid":1365},{"rid":1366},{"rid":1367},{"rid":1368},{"rid":1369},{"rid":1370},{"rid":1371},{"rid":1372},{"rid":1373},{"rid":1374},{"rid":1375},{"rid":1376},{"rid":1377},{"rid":1378},{"rid":1379},{"rid":1380}]},{"chunkKey":{"x":-1,"y":-1},"originPosition":{"x":-16.0,"y":0.0,"z":-16.0},"savedTiles":[{"rid":1381},{"rid":1382}]},{"chunkKey":{"x":-1,"y":0},"originPosition":{"x":-16.0,"y":0.0,"z":0.0},"savedTiles":[{"rid":1383},{"rid":1384},{"rid":1385},{"rid":1386},{"rid":1387},{"rid":1388},{"rid":1389},{"rid":1390},{"rid":1391},{"rid":1392},{"rid":1393},{"rid":1394},{"rid":1395},{"rid":1396},{"rid":1397},{"rid":1398},{"rid":1399},{"rid":1400},{"rid":1401},{"rid":1402},{"rid":1403},{"rid":1404}]},{"chunkKey":{"x":1,"y":0},"originPosition":{"x":16.0,"y":0.0,"z":0.0},"savedTiles":[]},{"chunkKey":{"x":1,"y":-1},"originPosition":{"x":16.0,"y":0.0,"z":-16.0},"savedTiles":[]},{"chunkKey":{"x":0,"y":1},"originPosition":{"x":0.0,"y":0.0,"z":16.0},"savedTiles":[]},{"chunkKey":{"x":-1,"y":1},"originPosition":{"x":-16.0,"y":0.0,"z":16.0},"savedTiles":[]}],"savedItemList":[{"itemName":"MedicalPatch","worldPosition":{"x":9.624053001403809,"y":0.0,"z":0.8157830238342285},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"itemName":"TruckerCap","worldPosition":{"x":9.354508399963379,"y":0.0,"z":0.4625563621520996},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"itemName":"NuclearAuthenticationDisk","worldPosition":{"x":13.746637344360352,"y":0.0,"z":1.75032377243042},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"itemName":"ToolboxBlue","worldPosition":{"x":9.057815551757813,"y":0.0,"z":-0.10215282440185547},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"itemName":"FlashlightBlue","worldPosition":{"x":8.813741683959961,"y":0.0,"z":0.6101324558258057},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"itemName":"PowerCell","worldPosition":{"x":9.31202507019043,"y":0.0,"z":-0.34058332443237307},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"itemName":"PowerCellAdmin","worldPosition":{"x":8.93199348449707,"y":0.0,"z":-0.2970088720321655},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"itemName":"OxygenTank","worldPosition":{"x":12.00244140625,"y":0.0,"z":0.17459535598754884},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"itemName":"IDCard","worldPosition":{"x":11.753877639770508,"y":0.0,"z":-0.2418375015258789},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"itemName":"PDA","worldPosition":{"x":11.723039627075196,"y":0.0,"z":0.05744528770446777},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"itemName":"SecurityIDCard","worldPosition":{"x":11.746342658996582,"y":0.0,"z":-0.7475697994232178},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"itemName":"SecurityPDA","worldPosition":{"x":11.753644943237305,"y":0.0,"z":-0.4941682815551758},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"itemName":"ElectricalCable","worldPosition":{"x":14.867317199707032,"y":0.0,"z":2.8870205879211427},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"itemName":"ElectricalWire","worldPosition":{"x":14.269027709960938,"y":0.0,"z":2.9813904762268068},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"itemName":"SteelSheet","worldPosition":{"x":14.865055084228516,"y":0.0,"z":3.8756930828094484},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}}],"references":{"version":2,"RefIds":[{"rid":1000,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":0,"y":0},"dir":0},"_x":0,"_y":0}},{"rid":1001,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":0,"y":1},"dir":0},"_x":0,"_y":1}},{"rid":1002,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":0,"y":2},"dir":0},"_x":0,"_y":2}},{"rid":1003,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":0,"y":3},"dir":0},"_x":0,"_y":3}},{"rid":1004,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":0,"y":4},"dir":0},"_x":0,"_y":4}},{"rid":1005,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":0,"y":5},"dir":0},"_x":0,"_y":5}},{"rid":1006,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":0,"y":6},"dir":0},"_x":0,"_y":6}},{"rid":1007,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":0,"y":7},"dir":0},"_x":0,"_y":7}},{"rid":1008,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":0,"y":8},"dir":0},"_x":0,"_y":8}},{"rid":1009,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":0,"y":9},"dir":0},"_x":0,"_y":9}},{"rid":1010,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":0,"y":10},"dir":0},"_x":0,"_y":10}},{"rid":1011,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":0,"y":11},"dir":0},"_x":0,"_y":11}},{"rid":1012,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":0,"y":12},"dir":0},"_x":0,"_y":12}},{"rid":1013,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":0,"y":13},"dir":0},"_x":0,"_y":13}},{"rid":1014,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":1,"y":0},"dir":0},"_x":1,"_y":0}},{"rid":1015,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":1,"y":1},"dir":0},"_x":1,"_y":1}},{"rid":1016,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":1,"y":2},"dir":0},"_x":1,"_y":2}},{"rid":1017,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":1,"y":3},"dir":0},"_x":1,"_y":3}},{"rid":1018,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":1,"y":4},"dir":0},"_x":1,"_y":4}},{"rid":1019,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":1,"y":5},"dir":0},"_x":1,"_y":5}},{"rid":1020,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":1,"y":6},"dir":0},"_x":1,"_y":6}},{"rid":1021,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":1,"y":7},"dir":0},"_x":1,"_y":7}},{"rid":1022,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":1,"y":8},"dir":0},"_x":1,"_y":8}},{"rid":1023,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":1,"y":9},"dir":0},"_x":1,"_y":9}},{"rid":1024,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":1,"y":10},"dir":0},"_x":1,"_y":10}},{"rid":1025,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":1,"y":11},"dir":0},"_x":1,"_y":11}},{"rid":1026,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":1,"y":12},"dir":0},"_x":1,"_y":12}},{"rid":1027,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":1,"y":13},"dir":0},"_x":1,"_y":13}},{"rid":1028,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":2,"y":0},"dir":0},"_x":2,"_y":0}},{"rid":1029,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":2,"y":1},"dir":0},"_x":2,"_y":1}},{"rid":1030,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":2,"y":2},"dir":0},"_x":2,"_y":2}},{"rid":1031,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":2,"y":3},"dir":0},"_x":2,"_y":3}},{"rid":1032,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":2,"y":4},"dir":0},"_x":2,"_y":4}},{"rid":1033,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":2,"y":5},"dir":0},"_x":2,"_y":5}},{"rid":1034,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":2,"y":6},"dir":0},"_x":2,"_y":6}},{"rid":1035,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":2,"y":7},"dir":0},"_x":2,"_y":7}},{"rid":1036,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":2,"y":8},"dir":0},"_x":2,"_y":8}},{"rid":1037,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":2,"y":9},"dir":0},"_x":2,"_y":9}},{"rid":1038,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":2,"y":10},"dir":0},"_x":2,"_y":10}},{"rid":1039,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":2,"y":11},"dir":0},"_x":2,"_y":11}},{"rid":1040,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":2,"y":12},"dir":0},"_x":2,"_y":12}},{"rid":1041,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":2,"y":13},"dir":0},"_x":2,"_y":13}},{"rid":1042,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":3,"y":0},"dir":0},"_x":3,"_y":0}},{"rid":1043,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":3,"y":1},"dir":0},"_x":3,"_y":1}},{"rid":1044,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":3,"y":2},"dir":0},"_x":3,"_y":2}},{"rid":1045,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":3,"y":3},"dir":0},"_x":3,"_y":3}},{"rid":1046,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":3,"y":4},"dir":0},"_x":3,"_y":4}},{"rid":1047,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":3,"y":5},"dir":0},"_x":3,"_y":5}},{"rid":1048,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":3,"y":6},"dir":0},"_x":3,"_y":6}},{"rid":1049,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":3,"y":7},"dir":0},"_x":3,"_y":7}},{"rid":1050,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":3,"y":8},"dir":0},"_x":3,"_y":8}},{"rid":1051,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":3,"y":9},"dir":0},"_x":3,"_y":9}},{"rid":1052,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":3,"y":10},"dir":0},"_x":3,"_y":10}},{"rid":1053,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":3,"y":11},"dir":0},"_x":3,"_y":11}},{"rid":1054,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":3,"y":12},"dir":0},"_x":3,"_y":12}},{"rid":1055,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":3,"y":13},"dir":0},"_x":3,"_y":13}},{"rid":1056,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":4,"y":0},"dir":0},"_x":4,"_y":0}},{"rid":1057,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":4,"y":1},"dir":0},"_x":4,"_y":1}},{"rid":1058,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":4,"y":2},"dir":0},"_x":4,"_y":2}},{"rid":1059,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":4,"y":3},"dir":0},"_x":4,"_y":3}},{"rid":1060,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":4,"y":4},"dir":0},"_x":4,"_y":4}},{"rid":1061,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":4,"y":5},"dir":0},"_x":4,"_y":5}},{"rid":1062,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":4,"y":6},"dir":0},"_x":4,"_y":6}},{"rid":1063,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":4,"y":7},"dir":0},"_x":4,"_y":7}},{"rid":1064,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":4,"y":8},"dir":0},"_x":4,"_y":8}},{"rid":1065,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":4,"y":9},"dir":0},"_x":4,"_y":9}},{"rid":1066,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":4,"y":10},"dir":0},"_x":4,"_y":10}},{"rid":1067,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":4,"y":11},"dir":0},"_x":4,"_y":11}},{"rid":1068,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":4,"y":12},"dir":0},"_x":4,"_y":12}},{"rid":1069,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":4,"y":13},"dir":0},"_x":4,"_y":13}},{"rid":1070,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":5,"y":0},"dir":0},"_x":5,"_y":0}},{"rid":1071,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":5,"y":1},"dir":0},"_x":5,"_y":1}},{"rid":1072,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":5,"y":2},"dir":0},"_x":5,"_y":2}},{"rid":1073,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":5,"y":3},"dir":0},"_x":5,"_y":3}},{"rid":1074,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":5,"y":4},"dir":0},"_x":5,"_y":4}},{"rid":1075,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":5,"y":5},"dir":0},"_x":5,"_y":5}},{"rid":1076,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":5,"y":6},"dir":0},"_x":5,"_y":6}},{"rid":1077,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":5,"y":7},"dir":0},"_x":5,"_y":7}},{"rid":1078,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":5,"y":8},"dir":0},"_x":5,"_y":8}},{"rid":1079,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":5,"y":9},"dir":0},"_x":5,"_y":9}},{"rid":1080,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":5,"y":10},"dir":0},"_x":5,"_y":10}},{"rid":1081,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":5,"y":11},"dir":0},"_x":5,"_y":11}},{"rid":1082,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":5,"y":12},"dir":0},"_x":5,"_y":12}},{"rid":1083,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":5,"y":13},"dir":0},"_x":5,"_y":13}},{"rid":1084,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":6,"y":0},"dir":0},"_x":6,"_y":0}},{"rid":1085,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":6,"y":1},"dir":0},"_x":6,"_y":1}},{"rid":1086,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":6,"y":2},"dir":0},"_x":6,"_y":2}},{"rid":1087,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":6,"y":3},"dir":0},"_x":6,"_y":3}},{"rid":1088,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":6,"y":4},"dir":0},"_x":6,"_y":4}},{"rid":1089,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":6,"y":5},"dir":0},"_x":6,"_y":5}},{"rid":1090,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":6,"y":6},"dir":0},"_x":6,"_y":6}},{"rid":1091,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":6,"y":7},"dir":0},"_x":6,"_y":7}},{"rid":1092,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":6,"y":8},"dir":0},"_x":6,"_y":8}},{"rid":1093,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":6,"y":9},"dir":0},"_x":6,"_y":9}},{"rid":1094,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":6,"y":10},"dir":0},"_x":6,"_y":10}},{"rid":1095,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":6,"y":11},"dir":0},"_x":6,"_y":11}},{"rid":1096,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":6,"y":12},"dir":0},"_x":6,"_y":12}},{"rid":1097,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":6,"y":13},"dir":0},"_x":6,"_y":13}},{"rid":1098,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":7,"y":0},"dir":0},"_x":7,"_y":0}},{"rid":1099,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":7,"y":1},"dir":0},"_x":7,"_y":1}},{"rid":1100,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":7,"y":2},"dir":0},"_x":7,"_y":2}},{"rid":1101,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":7,"y":3},"dir":0},"_x":7,"_y":3}},{"rid":1102,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":7,"y":4},"dir":0},"_x":7,"_y":4}},{"rid":1103,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":7,"y":5},"dir":0},"_x":7,"_y":5}},{"rid":1104,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":7,"y":6},"dir":0},"_x":7,"_y":6}},{"rid":1105,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":7,"y":7},"dir":0},"_x":7,"_y":7}},{"rid":1106,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":7,"y":8},"dir":0},"_x":7,"_y":8}},{"rid":1107,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":7,"y":9},"dir":0},"_x":7,"_y":9}},{"rid":1108,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":7,"y":10},"dir":0},"_x":7,"_y":10}},{"rid":1109,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":7,"y":11},"dir":0},"_x":7,"_y":11}},{"rid":1110,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":7,"y":12},"dir":0},"_x":7,"_y":12}},{"rid":1111,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":7,"y":13},"dir":0},"_x":7,"_y":13}},{"rid":1112,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":8,"y":0},"dir":0},"_x":8,"_y":0}},{"rid":1113,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":8,"y":1},"dir":0},"_x":8,"_y":1}},{"rid":1114,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":8,"y":2},"dir":0},"_x":8,"_y":2}},{"rid":1115,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":8,"y":3},"dir":0},"_x":8,"_y":3}},{"rid":1116,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":8,"y":4},"dir":0},"_x":8,"_y":4}},{"rid":1117,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":8,"y":5},"dir":0},"_x":8,"_y":5}},{"rid":1118,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":8,"y":6},"dir":0},"_x":8,"_y":6}},{"rid":1119,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":8,"y":7},"dir":0},"_x":8,"_y":7}},{"rid":1120,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":8,"y":8},"dir":0},"_x":8,"_y":8}},{"rid":1121,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":8,"y":9},"dir":0},"_x":8,"_y":9}},{"rid":1122,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":8,"y":10},"dir":0},"_x":8,"_y":10}},{"rid":1123,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":8,"y":11},"dir":0},"_x":8,"_y":11}},{"rid":1124,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":8,"y":12},"dir":0},"_x":8,"_y":12}},{"rid":1125,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":8,"y":13},"dir":0},"_x":8,"_y":13}},{"rid":1126,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":9,"y":0},"dir":0},"_x":9,"_y":0}},{"rid":1127,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":9,"y":1},"dir":0},"_x":9,"_y":1}},{"rid":1128,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":9,"y":2},"dir":0},"_x":9,"_y":2}},{"rid":1129,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":9,"y":3},"dir":0},"_x":9,"_y":3}},{"rid":1130,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":9,"y":4},"dir":0},"_x":9,"_y":4}},{"rid":1131,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":9,"y":5},"dir":0},"_x":9,"_y":5}},{"rid":1132,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":9,"y":6},"dir":0},"_x":9,"_y":6}},{"rid":1133,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":9,"y":7},"dir":0},"_x":9,"_y":7}},{"rid":1134,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":9,"y":8},"dir":0},"_x":9,"_y":8}},{"rid":1135,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":9,"y":9},"dir":0},"_x":9,"_y":9}},{"rid":1136,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":9,"y":10},"dir":0},"_x":9,"_y":10}},{"rid":1137,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":9,"y":11},"dir":0},"_x":9,"_y":11}},{"rid":1138,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":9,"y":12},"dir":0},"_x":9,"_y":12}},{"rid":1139,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":9,"y":13},"dir":0},"_x":9,"_y":13}},{"rid":1140,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":10,"y":0},"dir":0},"_x":10,"_y":0}},{"rid":1141,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":10,"y":1},"dir":0},"_x":10,"_y":1}},{"rid":1142,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":10,"y":2},"dir":0},"_x":10,"_y":2}},{"rid":1143,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":10,"y":3},"dir":0},"_x":10,"_y":3}},{"rid":1144,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":10,"y":4},"dir":0},"_x":10,"_y":4}},{"rid":1145,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":10,"y":5},"dir":0},"_x":10,"_y":5}},{"rid":1146,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":10,"y":6},"dir":0},"_x":10,"_y":6}},{"rid":1147,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":10,"y":7},"dir":0},"_x":10,"_y":7}},{"rid":1148,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":10,"y":8},"dir":0},"_x":10,"_y":8}},{"rid":1149,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":10,"y":9},"dir":0},"_x":10,"_y":9}},{"rid":1150,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":10,"y":10},"dir":0},"_x":10,"_y":10}},{"rid":1151,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":10,"y":11},"dir":0},"_x":10,"_y":11}},{"rid":1152,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":10,"y":12},"dir":0},"_x":10,"_y":12}},{"rid":1153,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":10,"y":13},"dir":0},"_x":10,"_y":13}},{"rid":1154,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":11,"y":0},"dir":0},"_x":11,"_y":0}},{"rid":1155,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":11,"y":1},"dir":0},"_x":11,"_y":1}},{"rid":1156,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":11,"y":2},"dir":0},"_x":11,"_y":2}},{"rid":1157,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":11,"y":3},"dir":0},"_x":11,"_y":3}},{"rid":1158,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":11,"y":4},"dir":0},"_x":11,"_y":4}},{"rid":1159,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":11,"y":5},"dir":0},"_x":11,"_y":5}},{"rid":1160,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":11,"y":6},"dir":0},"_x":11,"_y":6}},{"rid":1161,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":11,"y":7},"dir":0},"_x":11,"_y":7}},{"rid":1162,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":11,"y":8},"dir":0},"_x":11,"_y":8}},{"rid":1163,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":11,"y":9},"dir":0},"_x":11,"_y":9}},{"rid":1164,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":11,"y":10},"dir":0},"_x":11,"_y":10}},{"rid":1165,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":11,"y":11},"dir":0},"_x":11,"_y":11}},{"rid":1166,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":11,"y":12},"dir":0},"_x":11,"_y":12}},{"rid":1167,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":11,"y":13},"dir":0},"_x":11,"_y":13}},{"rid":1168,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":12,"y":0},"dir":0},"_x":12,"_y":0}},{"rid":1169,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":12,"y":1},"dir":0},"_x":12,"_y":1}},{"rid":1170,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":12,"y":2},"dir":0},"_x":12,"_y":2}},{"rid":1171,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":12,"y":3},"dir":0},"_x":12,"_y":3}},{"rid":1172,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":12,"y":4},"dir":0},"_x":12,"_y":4}},{"rid":1173,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":12,"y":5},"dir":0},"_x":12,"_y":5}},{"rid":1174,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":12,"y":6},"dir":0},"_x":12,"_y":6}},{"rid":1175,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":12,"y":7},"dir":0},"_x":12,"_y":7}},{"rid":1176,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":12,"y":8},"dir":0},"_x":12,"_y":8}},{"rid":1177,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":12,"y":9},"dir":0},"_x":12,"_y":9}},{"rid":1178,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":12,"y":10},"dir":0},"_x":12,"_y":10}},{"rid":1179,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":12,"y":11},"dir":0},"_x":12,"_y":11}},{"rid":1180,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":12,"y":12},"dir":0},"_x":12,"_y":12}},{"rid":1181,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":12,"y":13},"dir":0},"_x":12,"_y":13}},{"rid":1182,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":13,"y":0},"dir":0},"_x":13,"_y":0}},{"rid":1183,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":13,"y":1},"dir":0},"_x":13,"_y":1}},{"rid":1184,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":13,"y":2},"dir":0},"_x":13,"_y":2}},{"rid":1185,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":13,"y":3},"dir":0},"_x":13,"_y":3}},{"rid":1186,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":13,"y":4},"dir":0},"_x":13,"_y":4}},{"rid":1187,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":13,"y":5},"dir":0},"_x":13,"_y":5}},{"rid":1188,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":13,"y":6},"dir":0},"_x":13,"_y":6}},{"rid":1189,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":13,"y":7},"dir":0},"_x":13,"_y":7}},{"rid":1190,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":13,"y":8},"dir":0},"_x":13,"_y":8}},{"rid":1191,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":13,"y":9},"dir":0},"_x":13,"_y":9}},{"rid":1192,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":13,"y":10},"dir":0},"_x":13,"_y":10}},{"rid":1193,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":13,"y":11},"dir":0},"_x":13,"_y":11}},{"rid":1194,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":13,"y":12},"dir":0},"_x":13,"_y":12}},{"rid":1195,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":13,"y":13},"dir":0},"_x":13,"_y":13}},{"rid":1196,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":14,"y":0},"dir":0},"_x":14,"_y":0}},{"rid":1197,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":14,"y":1},"dir":0},"_x":14,"_y":1}},{"rid":1198,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":14,"y":2},"dir":0},"_x":14,"_y":2}},{"rid":1199,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":14,"y":3},"dir":0},"_x":14,"_y":3}},{"rid":1200,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":14,"y":4},"dir":0},"_x":14,"_y":4}},{"rid":1201,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":14,"y":5},"dir":0},"_x":14,"_y":5}},{"rid":1202,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":14,"y":6},"dir":0},"_x":14,"_y":6}},{"rid":1203,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":14,"y":7},"dir":0},"_x":14,"_y":7}},{"rid":1204,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":14,"y":8},"dir":0},"_x":14,"_y":8}},{"rid":1205,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":14,"y":9},"dir":0},"_x":14,"_y":9}},{"rid":1206,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":14,"y":10},"dir":0},"_x":14,"_y":10}},{"rid":1207,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":14,"y":11},"dir":0},"_x":14,"_y":11}},{"rid":1208,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":14,"y":12},"dir":0},"_x":14,"_y":12}},{"rid":1209,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":14,"y":13},"dir":0},"_x":14,"_y":13}},{"rid":1210,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":0},"dir":0},"_x":15,"_y":0}},{"rid":1211,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":1},"dir":0},"_x":15,"_y":1}},{"rid":1212,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":2},"dir":0},"_x":15,"_y":2}},{"rid":1213,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":3},"dir":0},"_x":15,"_y":3}},{"rid":1214,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":4},"dir":0},"_x":15,"_y":4}},{"rid":1215,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":5},"dir":0},"_x":15,"_y":5}},{"rid":1216,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":6},"dir":0},"_x":15,"_y":6}},{"rid":1217,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":7},"dir":0},"_x":15,"_y":7}},{"rid":1218,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":8},"dir":0},"_x":15,"_y":8}},{"rid":1219,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":9},"dir":0},"_x":15,"_y":9}},{"rid":1220,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":10},"dir":0},"_x":15,"_y":10}},{"rid":1221,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":11},"dir":0},"_x":15,"_y":11}},{"rid":1222,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":12},"dir":0},"_x":15,"_y":12}},{"rid":1223,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":13},"dir":0},"_x":15,"_y":13}},{"rid":1224,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":9,"y":0},"dir":0},"_x":9,"_y":0}},{"rid":1225,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":9,"y":1},"dir":0},"_x":9,"_y":1}},{"rid":1226,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":9,"y":2},"dir":0},"_x":9,"_y":2}},{"rid":1227,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":9,"y":3},"dir":0},"_x":9,"_y":3}},{"rid":1228,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":9,"y":4},"dir":0},"_x":9,"_y":4}},{"rid":1229,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":10,"y":0},"dir":0},"_x":10,"_y":0}},{"rid":1230,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":10,"y":1},"dir":0},"_x":10,"_y":1}},{"rid":1231,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":10,"y":2},"dir":0},"_x":10,"_y":2}},{"rid":1232,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":10,"y":3},"dir":0},"_x":10,"_y":3}},{"rid":1233,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":10,"y":4},"dir":0},"_x":10,"_y":4}},{"rid":1234,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":11,"y":0},"dir":0},"_x":11,"_y":0}},{"rid":1235,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":11,"y":1},"dir":0},"_x":11,"_y":1}},{"rid":1236,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":11,"y":2},"dir":0},"_x":11,"_y":2}},{"rid":1237,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":11,"y":3},"dir":0},"_x":11,"_y":3}},{"rid":1238,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":11,"y":4},"dir":0},"_x":11,"_y":4}},{"rid":1239,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":12,"y":0},"dir":0},"_x":12,"_y":0}},{"rid":1240,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":12,"y":1},"dir":0},"_x":12,"_y":1}},{"rid":1241,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":12,"y":2},"dir":0},"_x":12,"_y":2}},{"rid":1242,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":12,"y":3},"dir":0},"_x":12,"_y":3}},{"rid":1243,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":12,"y":4},"dir":0},"_x":12,"_y":4}},{"rid":1244,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":13,"y":0},"dir":0},"_x":13,"_y":0}},{"rid":1245,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":13,"y":1},"dir":0},"_x":13,"_y":1}},{"rid":1246,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":13,"y":2},"dir":0},"_x":13,"_y":2}},{"rid":1247,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":13,"y":3},"dir":0},"_x":13,"_y":3}},{"rid":1248,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":13,"y":4},"dir":0},"_x":13,"_y":4}},{"rid":1249,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":14,"y":0},"dir":0},"_x":14,"_y":0}},{"rid":1250,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":14,"y":1},"dir":0},"_x":14,"_y":1}},{"rid":1251,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":14,"y":2},"dir":0},"_x":14,"_y":2}},{"rid":1252,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":14,"y":3},"dir":0},"_x":14,"_y":3}},{"rid":1253,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":14,"y":4},"dir":0},"_x":14,"_y":4}},{"rid":1254,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":15,"y":0},"dir":0},"_x":15,"_y":0}},{"rid":1255,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":15,"y":1},"dir":0},"_x":15,"_y":1}},{"rid":1256,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":15,"y":2},"dir":0},"_x":15,"_y":2}},{"rid":1257,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":15,"y":3},"dir":0},"_x":15,"_y":3}},{"rid":1258,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":15,"y":4},"dir":0},"_x":15,"_y":4}},{"rid":1259,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Cables","origin":{"x":0,"y":0},"dir":0},"_x":0,"_y":0}},{"rid":1260,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Cables","origin":{"x":0,"y":1},"dir":0},"_x":0,"_y":1}},{"rid":1261,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Cables","origin":{"x":0,"y":2},"dir":0},"_x":0,"_y":2}},{"rid":1262,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Cables","origin":{"x":0,"y":3},"dir":0},"_x":0,"_y":3}},{"rid":1263,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Cables","origin":{"x":0,"y":4},"dir":0},"_x":0,"_y":4}},{"rid":1264,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Cables","origin":{"x":0,"y":5},"dir":0},"_x":0,"_y":5}},{"rid":1265,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Cables","origin":{"x":0,"y":6},"dir":0},"_x":0,"_y":6}},{"rid":1266,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Cables","origin":{"x":1,"y":0},"dir":0},"_x":1,"_y":0}},{"rid":1267,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Cables","origin":{"x":2,"y":0},"dir":0},"_x":2,"_y":0}},{"rid":1268,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Cables","origin":{"x":3,"y":0},"dir":0},"_x":3,"_y":0}},{"rid":1269,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Cables","origin":{"x":4,"y":0},"dir":0},"_x":4,"_y":0}},{"rid":1270,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Cables","origin":{"x":5,"y":0},"dir":0},"_x":5,"_y":0}},{"rid":1271,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Cables","origin":{"x":5,"y":1},"dir":0},"_x":5,"_y":1}},{"rid":1272,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Cables","origin":{"x":5,"y":2},"dir":0},"_x":5,"_y":2}},{"rid":1273,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Cables","origin":{"x":5,"y":3},"dir":0},"_x":5,"_y":3}},{"rid":1274,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Cables","origin":{"x":5,"y":4},"dir":0},"_x":5,"_y":4}},{"rid":1275,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Cables","origin":{"x":5,"y":5},"dir":0},"_x":5,"_y":5}},{"rid":1276,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"DisposalPipes","origin":{"x":13,"y":11},"dir":0},"_x":13,"_y":11}},{"rid":1277,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"DisposalPipes","origin":{"x":13,"y":12},"dir":0},"_x":13,"_y":12}},{"rid":1278,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"DisposalPipes","origin":{"x":14,"y":7},"dir":0},"_x":14,"_y":7}},{"rid":1279,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"DisposalPipes","origin":{"x":14,"y":8},"dir":0},"_x":14,"_y":8}},{"rid":1280,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"DisposalPipes","origin":{"x":14,"y":9},"dir":0},"_x":14,"_y":9}},{"rid":1281,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"DisposalPipes","origin":{"x":14,"y":10},"dir":0},"_x":14,"_y":10}},{"rid":1282,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"DisposalPipes","origin":{"x":14,"y":11},"dir":0},"_x":14,"_y":11}},{"rid":1283,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"DisposalPipes","origin":{"x":14,"y":12},"dir":0},"_x":14,"_y":12}},{"rid":1284,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL4","origin":{"x":1,"y":9},"dir":0},"_x":1,"_y":9}},{"rid":1285,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL4","origin":{"x":2,"y":9},"dir":0},"_x":2,"_y":9}},{"rid":1286,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL4","origin":{"x":3,"y":9},"dir":0},"_x":3,"_y":9}},{"rid":1287,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL4","origin":{"x":4,"y":9},"dir":0},"_x":4,"_y":9}},{"rid":1288,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL4","origin":{"x":5,"y":9},"dir":0},"_x":5,"_y":9}},{"rid":1289,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL4","origin":{"x":6,"y":9},"dir":0},"_x":6,"_y":9}},{"rid":1290,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL4","origin":{"x":7,"y":9},"dir":0},"_x":7,"_y":9}},{"rid":1291,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL4","origin":{"x":7,"y":11},"dir":0},"_x":7,"_y":11}},{"rid":1292,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL4","origin":{"x":7,"y":12},"dir":0},"_x":7,"_y":12}},{"rid":1293,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL4","origin":{"x":8,"y":9},"dir":0},"_x":8,"_y":9}},{"rid":1294,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL4","origin":{"x":8,"y":10},"dir":0},"_x":8,"_y":10}},{"rid":1295,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL4","origin":{"x":8,"y":11},"dir":0},"_x":8,"_y":11}},{"rid":1296,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL4","origin":{"x":8,"y":12},"dir":0},"_x":8,"_y":12}},{"rid":1297,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"SMES","origin":{"x":5,"y":3},"dir":6},"_x":5,"_y":3}},{"rid":1298,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"SMES","origin":{"x":5,"y":4},"dir":6},"_x":5,"_y":4}},{"rid":1299,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"PacManGenerator","origin":{"x":5,"y":5},"dir":6},"_x":5,"_y":5}},{"rid":1300,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"LockerSecure","origin":{"x":10,"y":0},"dir":0},"_x":10,"_y":0}},{"rid":1301,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Locker","origin":{"x":11,"y":0},"dir":0},"_x":11,"_y":0}},{"rid":1302,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"NukeCart","origin":{"x":14,"y":1},"dir":0},"_x":14,"_y":1}},{"rid":1303,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"DisposalBin","origin":{"x":14,"y":7},"dir":0},"_x":14,"_y":7}},{"rid":1304,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL2","origin":{"x":1,"y":9},"dir":0},"_x":1,"_y":9}},{"rid":1305,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL2","origin":{"x":2,"y":9},"dir":0},"_x":2,"_y":9}},{"rid":1306,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL2","origin":{"x":3,"y":9},"dir":0},"_x":3,"_y":9}},{"rid":1307,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL2","origin":{"x":3,"y":11},"dir":0},"_x":3,"_y":11}},{"rid":1308,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL2","origin":{"x":3,"y":12},"dir":0},"_x":3,"_y":12}},{"rid":1309,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL2","origin":{"x":4,"y":9},"dir":0},"_x":4,"_y":9}},{"rid":1310,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL2","origin":{"x":4,"y":10},"dir":0},"_x":4,"_y":10}},{"rid":1311,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL2","origin":{"x":4,"y":11},"dir":0},"_x":4,"_y":11}},{"rid":1312,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL2","origin":{"x":4,"y":12},"dir":0},"_x":4,"_y":12}},{"rid":1313,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL2","origin":{"x":5,"y":9},"dir":0},"_x":5,"_y":9}},{"rid":1314,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL2","origin":{"x":6,"y":9},"dir":0},"_x":6,"_y":9}},{"rid":1315,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL2","origin":{"x":7,"y":9},"dir":0},"_x":7,"_y":9}},{"rid":1316,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL2","origin":{"x":8,"y":9},"dir":0},"_x":8,"_y":9}},{"rid":1317,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL1","origin":{"x":1,"y":9},"dir":0},"_x":1,"_y":9}},{"rid":1318,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL1","origin":{"x":1,"y":11},"dir":0},"_x":1,"_y":11}},{"rid":1319,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL1","origin":{"x":1,"y":12},"dir":0},"_x":1,"_y":12}},{"rid":1320,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL1","origin":{"x":2,"y":9},"dir":0},"_x":2,"_y":9}},{"rid":1321,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL1","origin":{"x":2,"y":10},"dir":0},"_x":2,"_y":10}},{"rid":1322,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL1","origin":{"x":2,"y":11},"dir":0},"_x":2,"_y":11}},{"rid":1323,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL1","origin":{"x":2,"y":12},"dir":0},"_x":2,"_y":12}},{"rid":1324,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL1","origin":{"x":3,"y":9},"dir":0},"_x":3,"_y":9}},{"rid":1325,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL1","origin":{"x":4,"y":9},"dir":0},"_x":4,"_y":9}},{"rid":1326,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL1","origin":{"x":5,"y":9},"dir":0},"_x":5,"_y":9}},{"rid":1327,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL1","origin":{"x":6,"y":9},"dir":0},"_x":6,"_y":9}},{"rid":1328,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL1","origin":{"x":7,"y":9},"dir":0},"_x":7,"_y":9}},{"rid":1329,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL1","origin":{"x":8,"y":9},"dir":0},"_x":8,"_y":9}},{"rid":1330,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL3","origin":{"x":1,"y":9},"dir":0},"_x":1,"_y":9}},{"rid":1331,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL3","origin":{"x":2,"y":9},"dir":0},"_x":2,"_y":9}},{"rid":1332,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL3","origin":{"x":3,"y":9},"dir":0},"_x":3,"_y":9}},{"rid":1333,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL3","origin":{"x":4,"y":9},"dir":0},"_x":4,"_y":9}},{"rid":1334,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL3","origin":{"x":5,"y":9},"dir":0},"_x":5,"_y":9}},{"rid":1335,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL3","origin":{"x":5,"y":11},"dir":0},"_x":5,"_y":11}},{"rid":1336,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL3","origin":{"x":5,"y":12},"dir":0},"_x":5,"_y":12}},{"rid":1337,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL3","origin":{"x":6,"y":9},"dir":0},"_x":6,"_y":9}},{"rid":1338,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL3","origin":{"x":6,"y":10},"dir":0},"_x":6,"_y":10}},{"rid":1339,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL3","origin":{"x":6,"y":11},"dir":0},"_x":6,"_y":11}},{"rid":1340,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL3","origin":{"x":6,"y":12},"dir":0},"_x":6,"_y":12}},{"rid":1341,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL3","origin":{"x":7,"y":9},"dir":0},"_x":7,"_y":9}},{"rid":1342,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL3","origin":{"x":8,"y":9},"dir":0},"_x":8,"_y":9}},{"rid":1343,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":0,"y":15},"dir":0},"_x":0,"_y":15}},{"rid":1344,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":1,"y":15},"dir":0},"_x":1,"_y":15}},{"rid":1345,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":2,"y":15},"dir":0},"_x":2,"_y":15}},{"rid":1346,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":3,"y":15},"dir":0},"_x":3,"_y":15}},{"rid":1347,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":4,"y":15},"dir":0},"_x":4,"_y":15}},{"rid":1348,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":5,"y":15},"dir":0},"_x":5,"_y":15}},{"rid":1349,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":6,"y":15},"dir":0},"_x":6,"_y":15}},{"rid":1350,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":7,"y":15},"dir":0},"_x":7,"_y":15}},{"rid":1351,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":8,"y":15},"dir":0},"_x":8,"_y":15}},{"rid":1352,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":9,"y":15},"dir":0},"_x":9,"_y":15}},{"rid":1353,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":10,"y":15},"dir":0},"_x":10,"_y":15}},{"rid":1354,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":11,"y":15},"dir":0},"_x":11,"_y":15}},{"rid":1355,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":12,"y":15},"dir":0},"_x":12,"_y":15}},{"rid":1356,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":13,"y":15},"dir":0},"_x":13,"_y":15}},{"rid":1357,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":14,"y":15},"dir":0},"_x":14,"_y":15}},{"rid":1358,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":15},"dir":0},"_x":15,"_y":15}},{"rid":1359,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"SteelWall","origin":{"x":0,"y":15},"dir":0},"_x":0,"_y":15}},{"rid":1360,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"SteelWall","origin":{"x":1,"y":15},"dir":0},"_x":1,"_y":15}},{"rid":1361,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"SteelWall","origin":{"x":2,"y":15},"dir":0},"_x":2,"_y":15}},{"rid":1362,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"SteelWall","origin":{"x":3,"y":15},"dir":0},"_x":3,"_y":15}},{"rid":1363,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"SteelWall","origin":{"x":4,"y":15},"dir":0},"_x":4,"_y":15}},{"rid":1364,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"SteelWall","origin":{"x":5,"y":15},"dir":0},"_x":5,"_y":15}},{"rid":1365,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"CivillianAirlock","origin":{"x":6,"y":15},"dir":0},"_x":6,"_y":15}},{"rid":1366,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"SteelWall","origin":{"x":7,"y":15},"dir":0},"_x":7,"_y":15}},{"rid":1367,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"SteelWall","origin":{"x":8,"y":15},"dir":0},"_x":8,"_y":15}},{"rid":1368,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":9,"y":15},"dir":0},"_x":9,"_y":15}},{"rid":1369,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":10,"y":15},"dir":0},"_x":10,"_y":15}},{"rid":1370,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":11,"y":15},"dir":0},"_x":11,"_y":15}},{"rid":1371,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":12,"y":15},"dir":0},"_x":12,"_y":15}},{"rid":1372,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":13,"y":15},"dir":0},"_x":13,"_y":15}},{"rid":1373,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":14,"y":15},"dir":0},"_x":14,"_y":15}},{"rid":1374,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":15,"y":15},"dir":0},"_x":15,"_y":15}},{"rid":1375,"type":{"class":"SavedTileCardinalLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObjects":[{"tileObjectSOName":"LightBulbFixture","origin":{"x":2,"y":15},"dir":0}],"x":2,"y":15}},{"rid":1376,"type":{"class":"SavedTileCardinalLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObjects":[{"tileObjectSOName":"LightBulbFixture","origin":{"x":5,"y":15},"dir":0}],"x":5,"y":15}},{"rid":1377,"type":{"class":"SavedTileCardinalLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObjects":[{"tileObjectSOName":"APC","origin":{"x":2,"y":15},"dir":0}],"x":2,"y":15}},{"rid":1378,"type":{"class":"SavedTileCardinalLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObjects":[{"tileObjectSOName":"LightSwitch","origin":{"x":4,"y":15},"dir":0}],"x":4,"y":15}},{"rid":1379,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"PowerCellCharger","origin":{"x":9,"y":15},"dir":0},"_x":9,"_y":15}},{"rid":1380,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"VendorYouTool","origin":{"x":13,"y":15},"dir":0},"_x":13,"_y":15}},{"rid":1381,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":15},"dir":0},"_x":15,"_y":15}},{"rid":1382,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"SteelWall","origin":{"x":15,"y":15},"dir":0},"_x":15,"_y":15}},{"rid":1383,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":0},"dir":0},"_x":15,"_y":0}},{"rid":1384,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":1},"dir":0},"_x":15,"_y":1}},{"rid":1385,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":2},"dir":0},"_x":15,"_y":2}},{"rid":1386,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":3},"dir":0},"_x":15,"_y":3}},{"rid":1387,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":4},"dir":0},"_x":15,"_y":4}},{"rid":1388,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":5},"dir":0},"_x":15,"_y":5}},{"rid":1389,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":6},"dir":0},"_x":15,"_y":6}},{"rid":1390,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":7},"dir":0},"_x":15,"_y":7}},{"rid":1391,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":8},"dir":0},"_x":15,"_y":8}},{"rid":1392,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":9},"dir":0},"_x":15,"_y":9}},{"rid":1393,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":10},"dir":0},"_x":15,"_y":10}},{"rid":1394,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":11},"dir":0},"_x":15,"_y":11}},{"rid":1395,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":12},"dir":0},"_x":15,"_y":12}},{"rid":1396,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":13},"dir":0},"_x":15,"_y":13}},{"rid":1397,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"SteelWall","origin":{"x":15,"y":0},"dir":0},"_x":15,"_y":0}},{"rid":1398,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"SteelWall","origin":{"x":15,"y":1},"dir":0},"_x":15,"_y":1}},{"rid":1399,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"SteelWall","origin":{"x":15,"y":2},"dir":0},"_x":15,"_y":2}},{"rid":1400,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"SteelWall","origin":{"x":15,"y":3},"dir":0},"_x":15,"_y":3}},{"rid":1401,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"SteelWall","origin":{"x":15,"y":4},"dir":0},"_x":15,"_y":4}},{"rid":1402,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"SteelWall","origin":{"x":15,"y":5},"dir":0},"_x":15,"_y":5}},{"rid":1403,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"SteelWall","origin":{"x":15,"y":6},"dir":0},"_x":15,"_y":6}},{"rid":1404,"type":{"class":"SavedTileCardinalLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObjects":[{"tileObjectSOName":"LightTubeFixture","origin":{"x":15,"y":4},"dir":2}],"x":15,"y":4}}]}} \ No newline at end of file +{"mapName":"UnnamedMap","savedChunkList":[{"chunkKey":{"x":0,"y":0},"originPosition":{"x":0.0,"y":0.0,"z":0.0},"savedTiles":[{"rid":1000},{"rid":1001},{"rid":1002},{"rid":1003},{"rid":1004},{"rid":1005},{"rid":1006},{"rid":1007},{"rid":1008},{"rid":1009},{"rid":1010},{"rid":1011},{"rid":1012},{"rid":1013},{"rid":1014},{"rid":1015},{"rid":1016},{"rid":1017},{"rid":1018},{"rid":1019},{"rid":1020},{"rid":1021},{"rid":1022},{"rid":1023},{"rid":1024},{"rid":1025},{"rid":1026},{"rid":1027},{"rid":1028},{"rid":1029},{"rid":1030},{"rid":1031},{"rid":1032},{"rid":1033},{"rid":1034},{"rid":1035},{"rid":1036},{"rid":1037},{"rid":1038},{"rid":1039},{"rid":1040},{"rid":1041},{"rid":1042},{"rid":1043},{"rid":1044},{"rid":1045},{"rid":1046},{"rid":1047},{"rid":1048},{"rid":1049},{"rid":1050},{"rid":1051},{"rid":1052},{"rid":1053},{"rid":1054},{"rid":1055},{"rid":1056},{"rid":1057},{"rid":1058},{"rid":1059},{"rid":1060},{"rid":1061},{"rid":1062},{"rid":1063},{"rid":1064},{"rid":1065},{"rid":1066},{"rid":1067},{"rid":1068},{"rid":1069},{"rid":1070},{"rid":1071},{"rid":1072},{"rid":1073},{"rid":1074},{"rid":1075},{"rid":1076},{"rid":1077},{"rid":1078},{"rid":1079},{"rid":1080},{"rid":1081},{"rid":1082},{"rid":1083},{"rid":1084},{"rid":1085},{"rid":1086},{"rid":1087},{"rid":1088},{"rid":1089},{"rid":1090},{"rid":1091},{"rid":1092},{"rid":1093},{"rid":1094},{"rid":1095},{"rid":1096},{"rid":1097},{"rid":1098},{"rid":1099},{"rid":1100},{"rid":1101},{"rid":1102},{"rid":1103},{"rid":1104},{"rid":1105},{"rid":1106},{"rid":1107},{"rid":1108},{"rid":1109},{"rid":1110},{"rid":1111},{"rid":1112},{"rid":1113},{"rid":1114},{"rid":1115},{"rid":1116},{"rid":1117},{"rid":1118},{"rid":1119},{"rid":1120},{"rid":1121},{"rid":1122},{"rid":1123},{"rid":1124},{"rid":1125},{"rid":1126},{"rid":1127},{"rid":1128},{"rid":1129},{"rid":1130},{"rid":1131},{"rid":1132},{"rid":1133},{"rid":1134},{"rid":1135},{"rid":1136},{"rid":1137},{"rid":1138},{"rid":1139},{"rid":1140},{"rid":1141},{"rid":1142},{"rid":1143},{"rid":1144},{"rid":1145},{"rid":1146},{"rid":1147},{"rid":1148},{"rid":1149},{"rid":1150},{"rid":1151},{"rid":1152},{"rid":1153},{"rid":1154},{"rid":1155},{"rid":1156},{"rid":1157},{"rid":1158},{"rid":1159},{"rid":1160},{"rid":1161},{"rid":1162},{"rid":1163},{"rid":1164},{"rid":1165},{"rid":1166},{"rid":1167},{"rid":1168},{"rid":1169},{"rid":1170},{"rid":1171},{"rid":1172},{"rid":1173},{"rid":1174},{"rid":1175},{"rid":1176},{"rid":1177},{"rid":1178},{"rid":1179},{"rid":1180},{"rid":1181},{"rid":1182},{"rid":1183},{"rid":1184},{"rid":1185},{"rid":1186},{"rid":1187},{"rid":1188},{"rid":1189},{"rid":1190},{"rid":1191},{"rid":1192},{"rid":1193},{"rid":1194},{"rid":1195},{"rid":1196},{"rid":1197},{"rid":1198},{"rid":1199},{"rid":1200},{"rid":1201},{"rid":1202},{"rid":1203},{"rid":1204},{"rid":1205},{"rid":1206},{"rid":1207},{"rid":1208},{"rid":1209},{"rid":1210},{"rid":1211},{"rid":1212},{"rid":1213},{"rid":1214},{"rid":1215},{"rid":1216},{"rid":1217},{"rid":1218},{"rid":1219},{"rid":1220},{"rid":1221},{"rid":1222},{"rid":1223},{"rid":1224},{"rid":1225},{"rid":1226},{"rid":1227},{"rid":1228},{"rid":1229},{"rid":1230},{"rid":1231},{"rid":1232},{"rid":1233},{"rid":1234},{"rid":1235},{"rid":1236},{"rid":1237},{"rid":1238},{"rid":1239},{"rid":1240},{"rid":1241},{"rid":1242},{"rid":1243},{"rid":1244},{"rid":1245},{"rid":1246},{"rid":1247},{"rid":1248},{"rid":1249},{"rid":1250},{"rid":1251},{"rid":1252},{"rid":1253},{"rid":1254},{"rid":1255},{"rid":1256},{"rid":1257},{"rid":1258},{"rid":1259},{"rid":1260},{"rid":1261},{"rid":1262},{"rid":1263},{"rid":1264},{"rid":1265},{"rid":1266},{"rid":1267},{"rid":1268},{"rid":1269},{"rid":1270},{"rid":1271},{"rid":1272},{"rid":1273},{"rid":1274},{"rid":1275},{"rid":1276},{"rid":1277},{"rid":1278},{"rid":1279},{"rid":1280},{"rid":1281},{"rid":1282},{"rid":1283},{"rid":1284},{"rid":1285},{"rid":1286},{"rid":1287},{"rid":1288},{"rid":1289},{"rid":1290},{"rid":1291},{"rid":1292},{"rid":1293},{"rid":1294},{"rid":1295},{"rid":1296},{"rid":1297},{"rid":1298},{"rid":1299},{"rid":1300},{"rid":1301},{"rid":1302},{"rid":1303},{"rid":1304},{"rid":1305},{"rid":1306},{"rid":1307},{"rid":1308},{"rid":1309},{"rid":1310},{"rid":1311},{"rid":1312},{"rid":1313},{"rid":1314},{"rid":1315},{"rid":1316},{"rid":1317},{"rid":1318},{"rid":1319},{"rid":1320},{"rid":1321},{"rid":1322},{"rid":1323},{"rid":1324},{"rid":1325},{"rid":1326},{"rid":1327},{"rid":1328},{"rid":1329},{"rid":1330},{"rid":1331},{"rid":1332},{"rid":1333},{"rid":1334},{"rid":1335},{"rid":1336},{"rid":1337},{"rid":1338},{"rid":1339},{"rid":1340},{"rid":1341},{"rid":1342}]},{"chunkKey":{"x":0,"y":-1},"originPosition":{"x":0.0,"y":0.0,"z":-16.0},"savedTiles":[{"rid":1343},{"rid":1344},{"rid":1345},{"rid":1346},{"rid":1347},{"rid":1348},{"rid":1349},{"rid":1350},{"rid":1351},{"rid":1352},{"rid":1353},{"rid":1354},{"rid":1355},{"rid":1356},{"rid":1357},{"rid":1358},{"rid":1359},{"rid":1360},{"rid":1361},{"rid":1362},{"rid":1363},{"rid":1364},{"rid":1365},{"rid":1366},{"rid":1367},{"rid":1368},{"rid":1369},{"rid":1370},{"rid":1371},{"rid":1372},{"rid":1373},{"rid":1374},{"rid":1375},{"rid":1376},{"rid":1377},{"rid":1378},{"rid":1379},{"rid":1380}]},{"chunkKey":{"x":-1,"y":-1},"originPosition":{"x":-16.0,"y":0.0,"z":-16.0},"savedTiles":[{"rid":1381},{"rid":1382}]},{"chunkKey":{"x":-1,"y":0},"originPosition":{"x":-16.0,"y":0.0,"z":0.0},"savedTiles":[{"rid":1383},{"rid":1384},{"rid":1385},{"rid":1386},{"rid":1387},{"rid":1388},{"rid":1389},{"rid":1390},{"rid":1391},{"rid":1392},{"rid":1393},{"rid":1394},{"rid":1395},{"rid":1396},{"rid":1397},{"rid":1398},{"rid":1399},{"rid":1400},{"rid":1401},{"rid":1402},{"rid":1403},{"rid":1404},{"rid":1405},{"rid":1406},{"rid":1407}]},{"chunkKey":{"x":1,"y":0},"originPosition":{"x":16.0,"y":0.0,"z":0.0},"savedTiles":[]},{"chunkKey":{"x":1,"y":-1},"originPosition":{"x":16.0,"y":0.0,"z":-16.0},"savedTiles":[]},{"chunkKey":{"x":0,"y":1},"originPosition":{"x":0.0,"y":0.0,"z":16.0},"savedTiles":[]},{"chunkKey":{"x":-1,"y":1},"originPosition":{"x":-16.0,"y":0.0,"z":16.0},"savedTiles":[]}],"savedItemList":[{"itemName":"MedicalPatch","worldPosition":{"x":9.624053001403809,"y":0.0,"z":0.8157830238342285},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"itemName":"TruckerCap","worldPosition":{"x":9.354508399963379,"y":0.0,"z":0.4625563621520996},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"itemName":"NuclearAuthenticationDisk","worldPosition":{"x":13.746637344360352,"y":0.0,"z":1.75032377243042},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"itemName":"ToolboxBlue","worldPosition":{"x":9.057815551757813,"y":0.0,"z":-0.10215282440185547},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"itemName":"FlashlightBlue","worldPosition":{"x":8.813741683959961,"y":0.0,"z":0.6101324558258057},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"itemName":"PowerCell","worldPosition":{"x":9.31202507019043,"y":0.0,"z":-0.34058332443237307},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"itemName":"PowerCellAdmin","worldPosition":{"x":8.93199348449707,"y":0.0,"z":-0.2970088720321655},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"itemName":"OxygenTank","worldPosition":{"x":12.00244140625,"y":0.0,"z":0.17459535598754884},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"itemName":"IDCard","worldPosition":{"x":11.753877639770508,"y":0.0,"z":-0.2418375015258789},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"itemName":"PDA","worldPosition":{"x":11.723039627075196,"y":0.0,"z":0.05744528770446777},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"itemName":"SecurityIDCard","worldPosition":{"x":11.746342658996582,"y":0.0,"z":-0.7475697994232178},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"itemName":"SecurityPDA","worldPosition":{"x":11.753644943237305,"y":0.0,"z":-0.4941682815551758},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"itemName":"ElectricalCable","worldPosition":{"x":14.867317199707032,"y":0.0,"z":2.8870205879211427},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"itemName":"ElectricalWire","worldPosition":{"x":14.269027709960938,"y":0.0,"z":2.9813904762268068},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"itemName":"SteelSheet","worldPosition":{"x":14.865055084228516,"y":0.0,"z":3.8756930828094484},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"itemName":"Crowbar","worldPosition":{"x":1.3455476760864258,"y":0.0,"z":6.16580057144165},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"itemName":"GlassSheet","worldPosition":{"x":1.5190348625183106,"y":0.0,"z":7.620061874389648},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"itemName":"GlassSheet","worldPosition":{"x":2.1813740730285646,"y":0.0,"z":7.5093536376953129},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"itemName":"SteelSheet","worldPosition":{"x":2.895289182662964,"y":0.0,"z":7.469751358032227},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"itemName":"SteelSheet","worldPosition":{"x":3.6651458740234377,"y":0.0,"z":7.500688552856445},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"itemName":"SteelSheet","worldPosition":{"x":4.280452728271484,"y":-2.384185791015625e-7,"z":7.605213642120361},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"itemName":"SteelSheet","worldPosition":{"x":5.037445068359375,"y":0.0,"z":7.59712553024292},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"itemName":"GlassReinforcedSheet","worldPosition":{"x":1.4117233753204346,"y":0.0,"z":8.744744300842286},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"itemName":"GlassReinforcedSheet","worldPosition":{"x":2.2499260902404787,"y":0.0,"z":8.679733276367188},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"itemName":"SteelReinforcedSheet","worldPosition":{"x":3.2649953365325929,"y":0.0,"z":8.780290603637696},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"itemName":"SteelReinforcedSheet","worldPosition":{"x":4.103688716888428,"y":2.384185791015625e-7,"z":8.688765525817871},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"itemName":"ScrewdriverBlue","worldPosition":{"x":2.624904155731201,"y":0.0,"z":5.727200984954834},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"itemName":"Wrench","worldPosition":{"x":3.0432448387145998,"y":0.0,"z":5.849344730377197},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"itemName":"SteelGirderUnbolted","worldPosition":{"x":2.08583402633667,"y":-4.76837158203125e-7,"z":10.702445030212403},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"itemName":"SteelGirderUnbolted","worldPosition":{"x":3.6961007118225099,"y":0.0,"z":11.60938549041748},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}},{"itemName":"Welder","worldPosition":{"x":1.2422152757644654,"y":0.0,"z":5.804487705230713},"rotation":{"x":0.0,"y":0.0,"z":0.0,"w":1.0}}],"references":{"version":2,"RefIds":[{"rid":1000,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":0,"y":0},"dir":0},"_x":0,"_y":0}},{"rid":1001,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":0,"y":1},"dir":0},"_x":0,"_y":1}},{"rid":1002,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":0,"y":2},"dir":0},"_x":0,"_y":2}},{"rid":1003,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":0,"y":3},"dir":0},"_x":0,"_y":3}},{"rid":1004,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":0,"y":4},"dir":0},"_x":0,"_y":4}},{"rid":1005,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":0,"y":5},"dir":0},"_x":0,"_y":5}},{"rid":1006,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":0,"y":6},"dir":0},"_x":0,"_y":6}},{"rid":1007,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":0,"y":7},"dir":0},"_x":0,"_y":7}},{"rid":1008,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":0,"y":8},"dir":0},"_x":0,"_y":8}},{"rid":1009,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":0,"y":9},"dir":0},"_x":0,"_y":9}},{"rid":1010,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":0,"y":10},"dir":0},"_x":0,"_y":10}},{"rid":1011,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":0,"y":11},"dir":0},"_x":0,"_y":11}},{"rid":1012,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":0,"y":12},"dir":0},"_x":0,"_y":12}},{"rid":1013,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":0,"y":13},"dir":0},"_x":0,"_y":13}},{"rid":1014,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":1,"y":0},"dir":0},"_x":1,"_y":0}},{"rid":1015,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":1,"y":1},"dir":0},"_x":1,"_y":1}},{"rid":1016,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":1,"y":2},"dir":0},"_x":1,"_y":2}},{"rid":1017,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":1,"y":3},"dir":0},"_x":1,"_y":3}},{"rid":1018,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":1,"y":4},"dir":0},"_x":1,"_y":4}},{"rid":1019,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":1,"y":5},"dir":0},"_x":1,"_y":5}},{"rid":1020,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":1,"y":6},"dir":0},"_x":1,"_y":6}},{"rid":1021,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":1,"y":7},"dir":0},"_x":1,"_y":7}},{"rid":1022,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":1,"y":8},"dir":0},"_x":1,"_y":8}},{"rid":1023,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":1,"y":9},"dir":0},"_x":1,"_y":9}},{"rid":1024,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":1,"y":10},"dir":0},"_x":1,"_y":10}},{"rid":1025,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":1,"y":11},"dir":0},"_x":1,"_y":11}},{"rid":1026,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":1,"y":12},"dir":0},"_x":1,"_y":12}},{"rid":1027,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":1,"y":13},"dir":0},"_x":1,"_y":13}},{"rid":1028,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":2,"y":0},"dir":0},"_x":2,"_y":0}},{"rid":1029,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":2,"y":1},"dir":0},"_x":2,"_y":1}},{"rid":1030,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":2,"y":2},"dir":0},"_x":2,"_y":2}},{"rid":1031,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":2,"y":3},"dir":0},"_x":2,"_y":3}},{"rid":1032,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":2,"y":4},"dir":0},"_x":2,"_y":4}},{"rid":1033,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":2,"y":5},"dir":0},"_x":2,"_y":5}},{"rid":1034,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":2,"y":6},"dir":0},"_x":2,"_y":6}},{"rid":1035,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":2,"y":7},"dir":0},"_x":2,"_y":7}},{"rid":1036,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":2,"y":8},"dir":0},"_x":2,"_y":8}},{"rid":1037,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":2,"y":9},"dir":0},"_x":2,"_y":9}},{"rid":1038,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":2,"y":10},"dir":0},"_x":2,"_y":10}},{"rid":1039,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":2,"y":11},"dir":0},"_x":2,"_y":11}},{"rid":1040,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":2,"y":12},"dir":0},"_x":2,"_y":12}},{"rid":1041,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":2,"y":13},"dir":0},"_x":2,"_y":13}},{"rid":1042,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":3,"y":0},"dir":0},"_x":3,"_y":0}},{"rid":1043,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":3,"y":1},"dir":0},"_x":3,"_y":1}},{"rid":1044,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":3,"y":2},"dir":0},"_x":3,"_y":2}},{"rid":1045,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":3,"y":3},"dir":0},"_x":3,"_y":3}},{"rid":1046,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":3,"y":4},"dir":0},"_x":3,"_y":4}},{"rid":1047,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":3,"y":5},"dir":0},"_x":3,"_y":5}},{"rid":1048,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":3,"y":6},"dir":0},"_x":3,"_y":6}},{"rid":1049,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":3,"y":7},"dir":0},"_x":3,"_y":7}},{"rid":1050,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":3,"y":8},"dir":0},"_x":3,"_y":8}},{"rid":1051,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":3,"y":9},"dir":0},"_x":3,"_y":9}},{"rid":1052,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":3,"y":10},"dir":0},"_x":3,"_y":10}},{"rid":1053,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":3,"y":11},"dir":0},"_x":3,"_y":11}},{"rid":1054,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":3,"y":12},"dir":0},"_x":3,"_y":12}},{"rid":1055,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":3,"y":13},"dir":0},"_x":3,"_y":13}},{"rid":1056,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":4,"y":0},"dir":0},"_x":4,"_y":0}},{"rid":1057,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":4,"y":1},"dir":0},"_x":4,"_y":1}},{"rid":1058,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":4,"y":2},"dir":0},"_x":4,"_y":2}},{"rid":1059,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":4,"y":3},"dir":0},"_x":4,"_y":3}},{"rid":1060,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":4,"y":4},"dir":0},"_x":4,"_y":4}},{"rid":1061,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":4,"y":5},"dir":0},"_x":4,"_y":5}},{"rid":1062,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":4,"y":6},"dir":0},"_x":4,"_y":6}},{"rid":1063,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":4,"y":7},"dir":0},"_x":4,"_y":7}},{"rid":1064,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":4,"y":8},"dir":0},"_x":4,"_y":8}},{"rid":1065,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":4,"y":9},"dir":0},"_x":4,"_y":9}},{"rid":1066,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":4,"y":10},"dir":0},"_x":4,"_y":10}},{"rid":1067,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":4,"y":11},"dir":0},"_x":4,"_y":11}},{"rid":1068,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":4,"y":12},"dir":0},"_x":4,"_y":12}},{"rid":1069,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":4,"y":13},"dir":0},"_x":4,"_y":13}},{"rid":1070,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":5,"y":0},"dir":0},"_x":5,"_y":0}},{"rid":1071,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":5,"y":1},"dir":0},"_x":5,"_y":1}},{"rid":1072,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":5,"y":2},"dir":0},"_x":5,"_y":2}},{"rid":1073,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":5,"y":3},"dir":0},"_x":5,"_y":3}},{"rid":1074,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":5,"y":4},"dir":0},"_x":5,"_y":4}},{"rid":1075,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":5,"y":5},"dir":0},"_x":5,"_y":5}},{"rid":1076,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":5,"y":6},"dir":0},"_x":5,"_y":6}},{"rid":1077,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":5,"y":7},"dir":0},"_x":5,"_y":7}},{"rid":1078,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":5,"y":8},"dir":0},"_x":5,"_y":8}},{"rid":1079,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":5,"y":9},"dir":0},"_x":5,"_y":9}},{"rid":1080,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":5,"y":10},"dir":0},"_x":5,"_y":10}},{"rid":1081,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":5,"y":11},"dir":0},"_x":5,"_y":11}},{"rid":1082,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":5,"y":12},"dir":0},"_x":5,"_y":12}},{"rid":1083,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":5,"y":13},"dir":0},"_x":5,"_y":13}},{"rid":1084,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":6,"y":0},"dir":0},"_x":6,"_y":0}},{"rid":1085,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":6,"y":1},"dir":0},"_x":6,"_y":1}},{"rid":1086,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":6,"y":2},"dir":0},"_x":6,"_y":2}},{"rid":1087,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":6,"y":3},"dir":0},"_x":6,"_y":3}},{"rid":1088,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":6,"y":4},"dir":0},"_x":6,"_y":4}},{"rid":1089,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":6,"y":5},"dir":0},"_x":6,"_y":5}},{"rid":1090,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":6,"y":6},"dir":0},"_x":6,"_y":6}},{"rid":1091,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":6,"y":7},"dir":0},"_x":6,"_y":7}},{"rid":1092,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":6,"y":8},"dir":0},"_x":6,"_y":8}},{"rid":1093,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":6,"y":9},"dir":0},"_x":6,"_y":9}},{"rid":1094,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":6,"y":10},"dir":0},"_x":6,"_y":10}},{"rid":1095,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":6,"y":11},"dir":0},"_x":6,"_y":11}},{"rid":1096,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":6,"y":12},"dir":0},"_x":6,"_y":12}},{"rid":1097,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":6,"y":13},"dir":0},"_x":6,"_y":13}},{"rid":1098,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":7,"y":0},"dir":0},"_x":7,"_y":0}},{"rid":1099,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":7,"y":1},"dir":0},"_x":7,"_y":1}},{"rid":1100,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":7,"y":2},"dir":0},"_x":7,"_y":2}},{"rid":1101,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":7,"y":3},"dir":0},"_x":7,"_y":3}},{"rid":1102,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":7,"y":4},"dir":0},"_x":7,"_y":4}},{"rid":1103,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":7,"y":5},"dir":0},"_x":7,"_y":5}},{"rid":1104,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":7,"y":6},"dir":0},"_x":7,"_y":6}},{"rid":1105,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":7,"y":7},"dir":0},"_x":7,"_y":7}},{"rid":1106,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":7,"y":8},"dir":0},"_x":7,"_y":8}},{"rid":1107,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":7,"y":9},"dir":0},"_x":7,"_y":9}},{"rid":1108,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":7,"y":10},"dir":0},"_x":7,"_y":10}},{"rid":1109,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":7,"y":11},"dir":0},"_x":7,"_y":11}},{"rid":1110,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":7,"y":12},"dir":0},"_x":7,"_y":12}},{"rid":1111,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":7,"y":13},"dir":0},"_x":7,"_y":13}},{"rid":1112,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":8,"y":0},"dir":0},"_x":8,"_y":0}},{"rid":1113,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":8,"y":1},"dir":0},"_x":8,"_y":1}},{"rid":1114,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":8,"y":2},"dir":0},"_x":8,"_y":2}},{"rid":1115,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":8,"y":3},"dir":0},"_x":8,"_y":3}},{"rid":1116,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":8,"y":4},"dir":0},"_x":8,"_y":4}},{"rid":1117,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":8,"y":5},"dir":0},"_x":8,"_y":5}},{"rid":1118,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":8,"y":6},"dir":0},"_x":8,"_y":6}},{"rid":1119,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":8,"y":7},"dir":0},"_x":8,"_y":7}},{"rid":1120,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":8,"y":8},"dir":0},"_x":8,"_y":8}},{"rid":1121,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":8,"y":9},"dir":0},"_x":8,"_y":9}},{"rid":1122,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":8,"y":10},"dir":0},"_x":8,"_y":10}},{"rid":1123,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":8,"y":11},"dir":0},"_x":8,"_y":11}},{"rid":1124,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":8,"y":12},"dir":0},"_x":8,"_y":12}},{"rid":1125,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":8,"y":13},"dir":0},"_x":8,"_y":13}},{"rid":1126,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":9,"y":0},"dir":0},"_x":9,"_y":0}},{"rid":1127,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":9,"y":1},"dir":0},"_x":9,"_y":1}},{"rid":1128,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":9,"y":2},"dir":0},"_x":9,"_y":2}},{"rid":1129,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":9,"y":3},"dir":0},"_x":9,"_y":3}},{"rid":1130,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":9,"y":4},"dir":0},"_x":9,"_y":4}},{"rid":1131,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":9,"y":5},"dir":0},"_x":9,"_y":5}},{"rid":1132,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":9,"y":6},"dir":0},"_x":9,"_y":6}},{"rid":1133,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":9,"y":7},"dir":0},"_x":9,"_y":7}},{"rid":1134,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":9,"y":8},"dir":0},"_x":9,"_y":8}},{"rid":1135,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":9,"y":9},"dir":0},"_x":9,"_y":9}},{"rid":1136,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":9,"y":10},"dir":0},"_x":9,"_y":10}},{"rid":1137,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":9,"y":11},"dir":0},"_x":9,"_y":11}},{"rid":1138,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":9,"y":12},"dir":0},"_x":9,"_y":12}},{"rid":1139,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":9,"y":13},"dir":0},"_x":9,"_y":13}},{"rid":1140,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":10,"y":0},"dir":0},"_x":10,"_y":0}},{"rid":1141,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":10,"y":1},"dir":0},"_x":10,"_y":1}},{"rid":1142,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":10,"y":2},"dir":0},"_x":10,"_y":2}},{"rid":1143,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":10,"y":3},"dir":0},"_x":10,"_y":3}},{"rid":1144,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":10,"y":4},"dir":0},"_x":10,"_y":4}},{"rid":1145,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":10,"y":5},"dir":0},"_x":10,"_y":5}},{"rid":1146,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":10,"y":6},"dir":0},"_x":10,"_y":6}},{"rid":1147,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":10,"y":7},"dir":0},"_x":10,"_y":7}},{"rid":1148,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":10,"y":8},"dir":0},"_x":10,"_y":8}},{"rid":1149,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":10,"y":9},"dir":0},"_x":10,"_y":9}},{"rid":1150,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":10,"y":10},"dir":0},"_x":10,"_y":10}},{"rid":1151,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":10,"y":11},"dir":0},"_x":10,"_y":11}},{"rid":1152,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":10,"y":12},"dir":0},"_x":10,"_y":12}},{"rid":1153,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":10,"y":13},"dir":0},"_x":10,"_y":13}},{"rid":1154,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":11,"y":0},"dir":0},"_x":11,"_y":0}},{"rid":1155,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":11,"y":1},"dir":0},"_x":11,"_y":1}},{"rid":1156,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":11,"y":2},"dir":0},"_x":11,"_y":2}},{"rid":1157,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":11,"y":3},"dir":0},"_x":11,"_y":3}},{"rid":1158,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":11,"y":4},"dir":0},"_x":11,"_y":4}},{"rid":1159,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":11,"y":5},"dir":0},"_x":11,"_y":5}},{"rid":1160,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":11,"y":6},"dir":0},"_x":11,"_y":6}},{"rid":1161,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":11,"y":7},"dir":0},"_x":11,"_y":7}},{"rid":1162,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":11,"y":8},"dir":0},"_x":11,"_y":8}},{"rid":1163,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":11,"y":9},"dir":0},"_x":11,"_y":9}},{"rid":1164,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":11,"y":10},"dir":0},"_x":11,"_y":10}},{"rid":1165,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":11,"y":11},"dir":0},"_x":11,"_y":11}},{"rid":1166,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":11,"y":12},"dir":0},"_x":11,"_y":12}},{"rid":1167,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":11,"y":13},"dir":0},"_x":11,"_y":13}},{"rid":1168,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":12,"y":0},"dir":0},"_x":12,"_y":0}},{"rid":1169,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":12,"y":1},"dir":0},"_x":12,"_y":1}},{"rid":1170,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":12,"y":2},"dir":0},"_x":12,"_y":2}},{"rid":1171,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":12,"y":3},"dir":0},"_x":12,"_y":3}},{"rid":1172,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":12,"y":4},"dir":0},"_x":12,"_y":4}},{"rid":1173,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":12,"y":5},"dir":0},"_x":12,"_y":5}},{"rid":1174,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":12,"y":6},"dir":0},"_x":12,"_y":6}},{"rid":1175,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":12,"y":7},"dir":0},"_x":12,"_y":7}},{"rid":1176,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":12,"y":8},"dir":0},"_x":12,"_y":8}},{"rid":1177,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":12,"y":9},"dir":0},"_x":12,"_y":9}},{"rid":1178,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":12,"y":10},"dir":0},"_x":12,"_y":10}},{"rid":1179,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":12,"y":11},"dir":0},"_x":12,"_y":11}},{"rid":1180,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":12,"y":12},"dir":0},"_x":12,"_y":12}},{"rid":1181,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":12,"y":13},"dir":0},"_x":12,"_y":13}},{"rid":1182,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":13,"y":0},"dir":0},"_x":13,"_y":0}},{"rid":1183,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":13,"y":1},"dir":0},"_x":13,"_y":1}},{"rid":1184,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":13,"y":2},"dir":0},"_x":13,"_y":2}},{"rid":1185,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":13,"y":3},"dir":0},"_x":13,"_y":3}},{"rid":1186,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":13,"y":4},"dir":0},"_x":13,"_y":4}},{"rid":1187,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":13,"y":5},"dir":0},"_x":13,"_y":5}},{"rid":1188,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":13,"y":6},"dir":0},"_x":13,"_y":6}},{"rid":1189,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":13,"y":7},"dir":0},"_x":13,"_y":7}},{"rid":1190,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":13,"y":8},"dir":0},"_x":13,"_y":8}},{"rid":1191,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":13,"y":9},"dir":0},"_x":13,"_y":9}},{"rid":1192,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":13,"y":10},"dir":0},"_x":13,"_y":10}},{"rid":1193,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":13,"y":11},"dir":0},"_x":13,"_y":11}},{"rid":1194,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":13,"y":12},"dir":0},"_x":13,"_y":12}},{"rid":1195,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":13,"y":13},"dir":0},"_x":13,"_y":13}},{"rid":1196,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":14,"y":0},"dir":0},"_x":14,"_y":0}},{"rid":1197,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":14,"y":1},"dir":0},"_x":14,"_y":1}},{"rid":1198,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":14,"y":2},"dir":0},"_x":14,"_y":2}},{"rid":1199,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":14,"y":3},"dir":0},"_x":14,"_y":3}},{"rid":1200,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":14,"y":4},"dir":0},"_x":14,"_y":4}},{"rid":1201,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":14,"y":5},"dir":0},"_x":14,"_y":5}},{"rid":1202,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":14,"y":6},"dir":0},"_x":14,"_y":6}},{"rid":1203,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":14,"y":7},"dir":0},"_x":14,"_y":7}},{"rid":1204,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":14,"y":8},"dir":0},"_x":14,"_y":8}},{"rid":1205,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":14,"y":9},"dir":0},"_x":14,"_y":9}},{"rid":1206,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":14,"y":10},"dir":0},"_x":14,"_y":10}},{"rid":1207,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":14,"y":11},"dir":0},"_x":14,"_y":11}},{"rid":1208,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":14,"y":12},"dir":0},"_x":14,"_y":12}},{"rid":1209,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":14,"y":13},"dir":0},"_x":14,"_y":13}},{"rid":1210,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":0},"dir":0},"_x":15,"_y":0}},{"rid":1211,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":1},"dir":0},"_x":15,"_y":1}},{"rid":1212,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":2},"dir":0},"_x":15,"_y":2}},{"rid":1213,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":3},"dir":0},"_x":15,"_y":3}},{"rid":1214,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":4},"dir":0},"_x":15,"_y":4}},{"rid":1215,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":5},"dir":0},"_x":15,"_y":5}},{"rid":1216,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":6},"dir":0},"_x":15,"_y":6}},{"rid":1217,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":7},"dir":0},"_x":15,"_y":7}},{"rid":1218,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":8},"dir":0},"_x":15,"_y":8}},{"rid":1219,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":9},"dir":0},"_x":15,"_y":9}},{"rid":1220,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":10},"dir":0},"_x":15,"_y":10}},{"rid":1221,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":11},"dir":0},"_x":15,"_y":11}},{"rid":1222,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":12},"dir":0},"_x":15,"_y":12}},{"rid":1223,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":13},"dir":0},"_x":15,"_y":13}},{"rid":1224,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":9,"y":0},"dir":0},"_x":9,"_y":0}},{"rid":1225,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":9,"y":1},"dir":0},"_x":9,"_y":1}},{"rid":1226,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":9,"y":2},"dir":0},"_x":9,"_y":2}},{"rid":1227,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":9,"y":3},"dir":0},"_x":9,"_y":3}},{"rid":1228,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":9,"y":4},"dir":0},"_x":9,"_y":4}},{"rid":1229,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":10,"y":0},"dir":0},"_x":10,"_y":0}},{"rid":1230,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":10,"y":1},"dir":0},"_x":10,"_y":1}},{"rid":1231,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":10,"y":2},"dir":0},"_x":10,"_y":2}},{"rid":1232,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":10,"y":3},"dir":0},"_x":10,"_y":3}},{"rid":1233,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":10,"y":4},"dir":0},"_x":10,"_y":4}},{"rid":1234,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":11,"y":0},"dir":0},"_x":11,"_y":0}},{"rid":1235,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":11,"y":1},"dir":0},"_x":11,"_y":1}},{"rid":1236,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":11,"y":2},"dir":0},"_x":11,"_y":2}},{"rid":1237,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":11,"y":3},"dir":0},"_x":11,"_y":3}},{"rid":1238,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":11,"y":4},"dir":0},"_x":11,"_y":4}},{"rid":1239,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":12,"y":0},"dir":0},"_x":12,"_y":0}},{"rid":1240,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":12,"y":1},"dir":0},"_x":12,"_y":1}},{"rid":1241,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":12,"y":2},"dir":0},"_x":12,"_y":2}},{"rid":1242,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":12,"y":3},"dir":0},"_x":12,"_y":3}},{"rid":1243,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":12,"y":4},"dir":0},"_x":12,"_y":4}},{"rid":1244,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":13,"y":0},"dir":0},"_x":13,"_y":0}},{"rid":1245,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":13,"y":1},"dir":0},"_x":13,"_y":1}},{"rid":1246,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":13,"y":2},"dir":0},"_x":13,"_y":2}},{"rid":1247,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":13,"y":3},"dir":0},"_x":13,"_y":3}},{"rid":1248,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":13,"y":4},"dir":0},"_x":13,"_y":4}},{"rid":1249,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":14,"y":0},"dir":0},"_x":14,"_y":0}},{"rid":1250,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":14,"y":1},"dir":0},"_x":14,"_y":1}},{"rid":1251,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":14,"y":2},"dir":0},"_x":14,"_y":2}},{"rid":1252,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":14,"y":3},"dir":0},"_x":14,"_y":3}},{"rid":1253,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":14,"y":4},"dir":0},"_x":14,"_y":4}},{"rid":1254,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":15,"y":0},"dir":0},"_x":15,"_y":0}},{"rid":1255,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":15,"y":1},"dir":0},"_x":15,"_y":1}},{"rid":1256,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":15,"y":2},"dir":0},"_x":15,"_y":2}},{"rid":1257,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":15,"y":3},"dir":0},"_x":15,"_y":3}},{"rid":1258,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":15,"y":4},"dir":0},"_x":15,"_y":4}},{"rid":1259,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Cables","origin":{"x":0,"y":0},"dir":0},"_x":0,"_y":0}},{"rid":1260,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Cables","origin":{"x":0,"y":1},"dir":0},"_x":0,"_y":1}},{"rid":1261,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Cables","origin":{"x":0,"y":2},"dir":0},"_x":0,"_y":2}},{"rid":1262,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Cables","origin":{"x":0,"y":3},"dir":0},"_x":0,"_y":3}},{"rid":1263,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Cables","origin":{"x":0,"y":4},"dir":0},"_x":0,"_y":4}},{"rid":1264,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Cables","origin":{"x":0,"y":5},"dir":0},"_x":0,"_y":5}},{"rid":1265,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Cables","origin":{"x":0,"y":6},"dir":0},"_x":0,"_y":6}},{"rid":1266,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Cables","origin":{"x":1,"y":0},"dir":0},"_x":1,"_y":0}},{"rid":1267,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Cables","origin":{"x":2,"y":0},"dir":0},"_x":2,"_y":0}},{"rid":1268,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Cables","origin":{"x":3,"y":0},"dir":0},"_x":3,"_y":0}},{"rid":1269,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Cables","origin":{"x":4,"y":0},"dir":0},"_x":4,"_y":0}},{"rid":1270,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Cables","origin":{"x":5,"y":0},"dir":0},"_x":5,"_y":0}},{"rid":1271,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Cables","origin":{"x":5,"y":1},"dir":0},"_x":5,"_y":1}},{"rid":1272,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Cables","origin":{"x":5,"y":2},"dir":0},"_x":5,"_y":2}},{"rid":1273,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Cables","origin":{"x":5,"y":3},"dir":0},"_x":5,"_y":3}},{"rid":1274,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Cables","origin":{"x":5,"y":4},"dir":0},"_x":5,"_y":4}},{"rid":1275,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Cables","origin":{"x":5,"y":5},"dir":0},"_x":5,"_y":5}},{"rid":1276,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"DisposalPipes","origin":{"x":13,"y":11},"dir":0},"_x":13,"_y":11}},{"rid":1277,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"DisposalPipes","origin":{"x":13,"y":12},"dir":0},"_x":13,"_y":12}},{"rid":1278,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"DisposalPipes","origin":{"x":14,"y":7},"dir":0},"_x":14,"_y":7}},{"rid":1279,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"DisposalPipes","origin":{"x":14,"y":8},"dir":0},"_x":14,"_y":8}},{"rid":1280,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"DisposalPipes","origin":{"x":14,"y":9},"dir":0},"_x":14,"_y":9}},{"rid":1281,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"DisposalPipes","origin":{"x":14,"y":10},"dir":0},"_x":14,"_y":10}},{"rid":1282,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"DisposalPipes","origin":{"x":14,"y":11},"dir":0},"_x":14,"_y":11}},{"rid":1283,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"DisposalPipes","origin":{"x":14,"y":12},"dir":0},"_x":14,"_y":12}},{"rid":1284,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL4","origin":{"x":1,"y":9},"dir":0},"_x":1,"_y":9}},{"rid":1285,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL4","origin":{"x":2,"y":9},"dir":0},"_x":2,"_y":9}},{"rid":1286,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL4","origin":{"x":3,"y":9},"dir":0},"_x":3,"_y":9}},{"rid":1287,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL4","origin":{"x":4,"y":9},"dir":0},"_x":4,"_y":9}},{"rid":1288,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL4","origin":{"x":5,"y":9},"dir":0},"_x":5,"_y":9}},{"rid":1289,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL4","origin":{"x":6,"y":9},"dir":0},"_x":6,"_y":9}},{"rid":1290,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL4","origin":{"x":7,"y":9},"dir":0},"_x":7,"_y":9}},{"rid":1291,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL4","origin":{"x":7,"y":11},"dir":0},"_x":7,"_y":11}},{"rid":1292,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL4","origin":{"x":7,"y":12},"dir":0},"_x":7,"_y":12}},{"rid":1293,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL4","origin":{"x":8,"y":9},"dir":0},"_x":8,"_y":9}},{"rid":1294,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL4","origin":{"x":8,"y":10},"dir":0},"_x":8,"_y":10}},{"rid":1295,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL4","origin":{"x":8,"y":11},"dir":0},"_x":8,"_y":11}},{"rid":1296,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL4","origin":{"x":8,"y":12},"dir":0},"_x":8,"_y":12}},{"rid":1297,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"SMES","origin":{"x":5,"y":3},"dir":6},"_x":5,"_y":3}},{"rid":1298,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"SMES","origin":{"x":5,"y":4},"dir":6},"_x":5,"_y":4}},{"rid":1299,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"PacManGenerator","origin":{"x":5,"y":5},"dir":6},"_x":5,"_y":5}},{"rid":1300,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"LockerSecure","origin":{"x":10,"y":0},"dir":0},"_x":10,"_y":0}},{"rid":1301,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Locker","origin":{"x":11,"y":0},"dir":0},"_x":11,"_y":0}},{"rid":1302,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"NukeCart","origin":{"x":14,"y":1},"dir":0},"_x":14,"_y":1}},{"rid":1303,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"DisposalBin","origin":{"x":14,"y":7},"dir":0},"_x":14,"_y":7}},{"rid":1304,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL2","origin":{"x":1,"y":9},"dir":0},"_x":1,"_y":9}},{"rid":1305,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL2","origin":{"x":2,"y":9},"dir":0},"_x":2,"_y":9}},{"rid":1306,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL2","origin":{"x":3,"y":9},"dir":0},"_x":3,"_y":9}},{"rid":1307,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL2","origin":{"x":3,"y":11},"dir":0},"_x":3,"_y":11}},{"rid":1308,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL2","origin":{"x":3,"y":12},"dir":0},"_x":3,"_y":12}},{"rid":1309,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL2","origin":{"x":4,"y":9},"dir":0},"_x":4,"_y":9}},{"rid":1310,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL2","origin":{"x":4,"y":10},"dir":0},"_x":4,"_y":10}},{"rid":1311,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL2","origin":{"x":4,"y":11},"dir":0},"_x":4,"_y":11}},{"rid":1312,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL2","origin":{"x":4,"y":12},"dir":0},"_x":4,"_y":12}},{"rid":1313,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL2","origin":{"x":5,"y":9},"dir":0},"_x":5,"_y":9}},{"rid":1314,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL2","origin":{"x":6,"y":9},"dir":0},"_x":6,"_y":9}},{"rid":1315,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL2","origin":{"x":7,"y":9},"dir":0},"_x":7,"_y":9}},{"rid":1316,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL2","origin":{"x":8,"y":9},"dir":0},"_x":8,"_y":9}},{"rid":1317,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL1","origin":{"x":1,"y":9},"dir":0},"_x":1,"_y":9}},{"rid":1318,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL1","origin":{"x":1,"y":11},"dir":0},"_x":1,"_y":11}},{"rid":1319,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL1","origin":{"x":1,"y":12},"dir":0},"_x":1,"_y":12}},{"rid":1320,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL1","origin":{"x":2,"y":9},"dir":0},"_x":2,"_y":9}},{"rid":1321,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL1","origin":{"x":2,"y":10},"dir":0},"_x":2,"_y":10}},{"rid":1322,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL1","origin":{"x":2,"y":11},"dir":0},"_x":2,"_y":11}},{"rid":1323,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL1","origin":{"x":2,"y":12},"dir":0},"_x":2,"_y":12}},{"rid":1324,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL1","origin":{"x":3,"y":9},"dir":0},"_x":3,"_y":9}},{"rid":1325,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL1","origin":{"x":4,"y":9},"dir":0},"_x":4,"_y":9}},{"rid":1326,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL1","origin":{"x":5,"y":9},"dir":0},"_x":5,"_y":9}},{"rid":1327,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL1","origin":{"x":6,"y":9},"dir":0},"_x":6,"_y":9}},{"rid":1328,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL1","origin":{"x":7,"y":9},"dir":0},"_x":7,"_y":9}},{"rid":1329,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL1","origin":{"x":8,"y":9},"dir":0},"_x":8,"_y":9}},{"rid":1330,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL3","origin":{"x":1,"y":9},"dir":0},"_x":1,"_y":9}},{"rid":1331,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL3","origin":{"x":2,"y":9},"dir":0},"_x":2,"_y":9}},{"rid":1332,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL3","origin":{"x":3,"y":9},"dir":0},"_x":3,"_y":9}},{"rid":1333,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL3","origin":{"x":4,"y":9},"dir":0},"_x":4,"_y":9}},{"rid":1334,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL3","origin":{"x":5,"y":9},"dir":0},"_x":5,"_y":9}},{"rid":1335,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL3","origin":{"x":5,"y":11},"dir":0},"_x":5,"_y":11}},{"rid":1336,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL3","origin":{"x":5,"y":12},"dir":0},"_x":5,"_y":12}},{"rid":1337,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL3","origin":{"x":6,"y":9},"dir":0},"_x":6,"_y":9}},{"rid":1338,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL3","origin":{"x":6,"y":10},"dir":0},"_x":6,"_y":10}},{"rid":1339,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL3","origin":{"x":6,"y":11},"dir":0},"_x":6,"_y":11}},{"rid":1340,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL3","origin":{"x":6,"y":12},"dir":0},"_x":6,"_y":12}},{"rid":1341,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL3","origin":{"x":7,"y":9},"dir":0},"_x":7,"_y":9}},{"rid":1342,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"AtmosPipesL3","origin":{"x":8,"y":9},"dir":0},"_x":8,"_y":9}},{"rid":1343,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":0,"y":15},"dir":0},"_x":0,"_y":15}},{"rid":1344,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":1,"y":15},"dir":0},"_x":1,"_y":15}},{"rid":1345,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":2,"y":15},"dir":0},"_x":2,"_y":15}},{"rid":1346,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":3,"y":15},"dir":0},"_x":3,"_y":15}},{"rid":1347,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":4,"y":15},"dir":0},"_x":4,"_y":15}},{"rid":1348,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":5,"y":15},"dir":0},"_x":5,"_y":15}},{"rid":1349,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":6,"y":15},"dir":0},"_x":6,"_y":15}},{"rid":1350,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":7,"y":15},"dir":0},"_x":7,"_y":15}},{"rid":1351,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":8,"y":15},"dir":0},"_x":8,"_y":15}},{"rid":1352,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":9,"y":15},"dir":0},"_x":9,"_y":15}},{"rid":1353,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":10,"y":15},"dir":0},"_x":10,"_y":15}},{"rid":1354,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":11,"y":15},"dir":0},"_x":11,"_y":15}},{"rid":1355,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":12,"y":15},"dir":0},"_x":12,"_y":15}},{"rid":1356,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":13,"y":15},"dir":0},"_x":13,"_y":15}},{"rid":1357,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":14,"y":15},"dir":0},"_x":14,"_y":15}},{"rid":1358,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":15},"dir":0},"_x":15,"_y":15}},{"rid":1359,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"SteelWall","origin":{"x":0,"y":15},"dir":0},"_x":0,"_y":15}},{"rid":1360,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"SteelWall","origin":{"x":1,"y":15},"dir":0},"_x":1,"_y":15}},{"rid":1361,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"SteelWall","origin":{"x":2,"y":15},"dir":0},"_x":2,"_y":15}},{"rid":1362,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"SteelWall","origin":{"x":3,"y":15},"dir":0},"_x":3,"_y":15}},{"rid":1363,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"SteelWall","origin":{"x":4,"y":15},"dir":0},"_x":4,"_y":15}},{"rid":1364,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"SteelWall","origin":{"x":5,"y":15},"dir":0},"_x":5,"_y":15}},{"rid":1365,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"CivillianAirlock","origin":{"x":6,"y":15},"dir":0},"_x":6,"_y":15}},{"rid":1366,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"SteelWall","origin":{"x":7,"y":15},"dir":0},"_x":7,"_y":15}},{"rid":1367,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"SteelWall","origin":{"x":8,"y":15},"dir":0},"_x":8,"_y":15}},{"rid":1368,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":9,"y":15},"dir":0},"_x":9,"_y":15}},{"rid":1369,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":10,"y":15},"dir":0},"_x":10,"_y":15}},{"rid":1370,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":11,"y":15},"dir":0},"_x":11,"_y":15}},{"rid":1371,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":12,"y":15},"dir":0},"_x":12,"_y":15}},{"rid":1372,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":13,"y":15},"dir":0},"_x":13,"_y":15}},{"rid":1373,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":14,"y":15},"dir":0},"_x":14,"_y":15}},{"rid":1374,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"TileGrey","origin":{"x":15,"y":15},"dir":0},"_x":15,"_y":15}},{"rid":1375,"type":{"class":"SavedTileCardinalLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObjects":[{"tileObjectSOName":"LightBulbFixture","origin":{"x":2,"y":15},"dir":0}],"x":2,"y":15}},{"rid":1376,"type":{"class":"SavedTileCardinalLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObjects":[{"tileObjectSOName":"LightBulbFixture","origin":{"x":5,"y":15},"dir":0}],"x":5,"y":15}},{"rid":1377,"type":{"class":"SavedTileCardinalLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObjects":[{"tileObjectSOName":"APC","origin":{"x":2,"y":15},"dir":0}],"x":2,"y":15}},{"rid":1378,"type":{"class":"SavedTileCardinalLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObjects":[{"tileObjectSOName":"LightSwitch","origin":{"x":4,"y":15},"dir":0}],"x":4,"y":15}},{"rid":1379,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"PowerCellCharger","origin":{"x":9,"y":15},"dir":0},"_x":9,"_y":15}},{"rid":1380,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"VendorYouTool","origin":{"x":13,"y":15},"dir":0},"_x":13,"_y":15}},{"rid":1381,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":15},"dir":0},"_x":15,"_y":15}},{"rid":1382,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"SteelWall","origin":{"x":15,"y":15},"dir":0},"_x":15,"_y":15}},{"rid":1383,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":0},"dir":0},"_x":15,"_y":0}},{"rid":1384,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":1},"dir":0},"_x":15,"_y":1}},{"rid":1385,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":2},"dir":0},"_x":15,"_y":2}},{"rid":1386,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":3},"dir":0},"_x":15,"_y":3}},{"rid":1387,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":4},"dir":0},"_x":15,"_y":4}},{"rid":1388,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":5},"dir":0},"_x":15,"_y":5}},{"rid":1389,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":6},"dir":0},"_x":15,"_y":6}},{"rid":1390,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":7},"dir":0},"_x":15,"_y":7}},{"rid":1391,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":8},"dir":0},"_x":15,"_y":8}},{"rid":1392,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":9},"dir":0},"_x":15,"_y":9}},{"rid":1393,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":10},"dir":0},"_x":15,"_y":10}},{"rid":1394,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":11},"dir":0},"_x":15,"_y":11}},{"rid":1395,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":12},"dir":0},"_x":15,"_y":12}},{"rid":1396,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"Plenum","origin":{"x":15,"y":13},"dir":0},"_x":15,"_y":13}},{"rid":1397,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"SteelWall","origin":{"x":15,"y":0},"dir":0},"_x":15,"_y":0}},{"rid":1398,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"SteelWall","origin":{"x":15,"y":1},"dir":0},"_x":15,"_y":1}},{"rid":1399,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"SteelWall","origin":{"x":15,"y":2},"dir":0},"_x":15,"_y":2}},{"rid":1400,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"SteelWall","origin":{"x":15,"y":3},"dir":0},"_x":15,"_y":3}},{"rid":1401,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"SteelWall","origin":{"x":15,"y":4},"dir":0},"_x":15,"_y":4}},{"rid":1402,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"SteelWall","origin":{"x":15,"y":5},"dir":0},"_x":15,"_y":5}},{"rid":1403,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"SteelWall","origin":{"x":15,"y":6},"dir":0},"_x":15,"_y":6}},{"rid":1404,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"SteelGirder","origin":{"x":15,"y":7},"dir":0},"_x":15,"_y":7}},{"rid":1405,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"SteelGirder","origin":{"x":15,"y":8},"dir":0},"_x":15,"_y":8}},{"rid":1406,"type":{"class":"SavedTileSingleLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObject":{"tileObjectSOName":"SteelGirder","origin":{"x":15,"y":9},"dir":0},"_x":15,"_y":9}},{"rid":1407,"type":{"class":"SavedTileCardinalLocation","ns":"SS3D.Systems.Tile","asm":"SS3D.Systems"},"data":{"_placedSaveObjects":[{"tileObjectSOName":"LightTubeFixture","origin":{"x":15,"y":4},"dir":2}],"x":15,"y":4}}]}} \ No newline at end of file diff --git a/Packages/manifest.json b/Packages/manifest.json index 33bc9ad35e..7ae4114512 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -5,6 +5,7 @@ "com.johannesmp.unityscenereference": "1.1.1", "com.unity.2d.sprite": "1.0.0", "com.unity.collab-proxy": "1.17.7", + "com.unity.editorcoroutines": "1.0.0", "com.unity.ide.rider": "3.0.28", "com.unity.ide.visualstudio": "2.0.22", "com.unity.ide.vscode": "1.2.5", diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json index 88cea24ea4..f7ffa35f72 100644 --- a/Packages/packages-lock.json +++ b/Packages/packages-lock.json @@ -63,6 +63,13 @@ }, "url": "https://packages.unity.com" }, + "com.unity.editorcoroutines": { + "version": "1.0.0", + "depth": 0, + "source": "registry", + "dependencies": {}, + "url": "https://packages.unity.com" + }, "com.unity.ext.nunit": { "version": "1.0.6", "depth": 1,