diff --git a/Assets/Art/Models/Structures/Pipes/Scrubber.fbx b/Assets/Art/Models/Structures/Pipes/Scrubber.fbx new file mode 100644 index 0000000000..8b883e2aa9 Binary files /dev/null and b/Assets/Art/Models/Structures/Pipes/Scrubber.fbx differ diff --git a/Assets/Art/Models/Structures/Pipes/Scrubber.fbx.meta b/Assets/Art/Models/Structures/Pipes/Scrubber.fbx.meta new file mode 100644 index 0000000000..bd295d988c --- /dev/null +++ b/Assets/Art/Models/Structures/Pipes/Scrubber.fbx.meta @@ -0,0 +1,102 @@ +fileFormatVersion: 2 +guid: 27a9a8aefa5425041b49a19d88589c4b +ModelImporter: + serializedVersion: 19300 + internalIDToNameTable: + - first: + 74: -6692001049259174838 + second: AirScrubberFans|On + - first: + 74: 619003842051949599 + second: AirScrubberFans|On.001 + externalObjects: {} + materials: + materialImportMode: 1 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 2 + humanoidOversampling: 1 + avatarSetup: 0 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Art/Models/Structures/Pipes/Vent.fbx b/Assets/Art/Models/Structures/Pipes/Vent.fbx new file mode 100644 index 0000000000..156f6a597f Binary files /dev/null and b/Assets/Art/Models/Structures/Pipes/Vent.fbx differ diff --git a/Assets/Art/Models/Structures/Pipes/Vent.fbx.meta b/Assets/Art/Models/Structures/Pipes/Vent.fbx.meta new file mode 100644 index 0000000000..6df93c2b4d --- /dev/null +++ b/Assets/Art/Models/Structures/Pipes/Vent.fbx.meta @@ -0,0 +1,102 @@ +fileFormatVersion: 2 +guid: 306763192ed5c254883b84ad42b5e420 +ModelImporter: + serializedVersion: 19300 + internalIDToNameTable: + - first: + 74: -5183151006770252600 + second: Vent.Fan|On + - first: + 74: -637453913362771955 + second: Vent.Fan|On.001 + externalObjects: {} + materials: + materialImportMode: 1 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 2 + humanoidOversampling: 1 + avatarSetup: 0 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pipe Layers/Pipe - Under L2.prefab b/Assets/Content/Structures/Pipes/Atmospherics/Pipe Layers/Pipe - Under L2.prefab index 93932424a2..a488e07c95 100644 --- a/Assets/Content/Structures/Pipes/Atmospherics/Pipe Layers/Pipe - Under L2.prefab +++ b/Assets/Content/Structures/Pipes/Atmospherics/Pipe Layers/Pipe - Under L2.prefab @@ -14,6 +14,7 @@ GameObject: - component: {fileID: -4998431523760016775} - component: {fileID: 840758331285195934} - component: {fileID: 3397851465445616214} + - component: {fileID: 7512257876715568575} m_Layer: 0 m_Name: Pipe - Under L2 m_TagString: Untagged @@ -132,3 +133,17 @@ MonoBehaviour: DisplayName: Atmospheric Pipe Text: MaxDistance: 0 +--- !u!114 &7512257876715568575 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2802364579275783218} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2fb7ede8181b28b4082944d5e44dd86e, type: 3} + m_Name: + m_EditorClassIdentifier: + layer: 1 + volume: 1 diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pipe Layers/Pipe - Under L3.prefab b/Assets/Content/Structures/Pipes/Atmospherics/Pipe Layers/Pipe - Under L3.prefab index 1fe018a81c..0ee2b76ba2 100644 --- a/Assets/Content/Structures/Pipes/Atmospherics/Pipe Layers/Pipe - Under L3.prefab +++ b/Assets/Content/Structures/Pipes/Atmospherics/Pipe Layers/Pipe - Under L3.prefab @@ -137,6 +137,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 2fb7ede8181b28b4082944d5e44dd86e, type: 3} m_Name: m_EditorClassIdentifier: + layer: 2 volume: 1 --- !u!114 &8044363620118605159 MonoBehaviour: diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pipe Layers/Pipe - Under L4.prefab b/Assets/Content/Structures/Pipes/Atmospherics/Pipe Layers/Pipe - Under L4.prefab index a12d410afc..c1ff62efda 100644 --- a/Assets/Content/Structures/Pipes/Atmospherics/Pipe Layers/Pipe - Under L4.prefab +++ b/Assets/Content/Structures/Pipes/Atmospherics/Pipe Layers/Pipe - Under L4.prefab @@ -14,6 +14,7 @@ GameObject: - component: {fileID: -4998431523760016775} - component: {fileID: 840758331285195934} - component: {fileID: -4121827069175738176} + - component: {fileID: 7576599040857772993} m_Layer: 0 m_Name: Pipe - Under L4 m_TagString: Untagged @@ -132,3 +133,17 @@ MonoBehaviour: DisplayName: Atmospheric Pipe Text: MaxDistance: 0 +--- !u!114 &7576599040857772993 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2802364579275783218} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2fb7ede8181b28b4082944d5e44dd86e, type: 3} + m_Name: + m_EditorClassIdentifier: + layer: 3 + volume: 1 diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/3 Layer Manifold.prefab b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/3 Layer Manifold.prefab index 3e068eb33c..b0f9277174 100644 --- a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/3 Layer Manifold.prefab +++ b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/3 Layer Manifold.prefab @@ -12,9 +12,9 @@ GameObject: - component: {fileID: 5937939672719015625} - component: {fileID: 4012921308355476879} - component: {fileID: 8936394620877737717} - - component: {fileID: 6406515006924486677} - component: {fileID: 7650047217586248362} - component: {fileID: 8054511455686520210} + - component: {fileID: 5079598720285918506} m_Layer: 0 m_Name: 3 Layer Manifold m_TagString: Untagged @@ -100,19 +100,6 @@ MeshRenderer: m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 ---- !u!114 &6406515006924486677 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 6937106039017095358} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 2fb7ede8181b28b4082944d5e44dd86e, type: 3} - m_Name: - m_EditorClassIdentifier: - volume: 1 --- !u!64 &7650047217586248362 MeshCollider: m_ObjectHideFlags: 0 @@ -142,3 +129,18 @@ MonoBehaviour: DisplayName: Atmospheric Pipe Layer Manifold Text: MaxDistance: 0 +--- !u!114 &5079598720285918506 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6937106039017095358} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f2325e25557c9e9428c2f0d4a6e3a1b9, type: 3} + m_Name: + m_EditorClassIdentifier: + layer: 1 + volume: 0.1 + manifoldType: 1 diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/3LayerManifold.asset b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/3LayerManifold.asset new file mode 100644 index 0000000000..2317be9f14 --- /dev/null +++ b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/3LayerManifold.asset @@ -0,0 +1,17 @@ +%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: 4c19744d19c6b14409c8e0a535f90136, type: 3} + m_Name: 3LayerManifold + m_EditorClassIdentifier: + id: 3_layer_manifold + genericType: pipe + prefab: {fileID: 6937106039017095358, guid: 38905c1e96f82d8408d029a917a46a0f, type: 3} diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/3LayerManifold.asset.meta b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/3LayerManifold.asset.meta new file mode 100644 index 0000000000..e851c9dd68 --- /dev/null +++ b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/3LayerManifold.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6fbc6e42e26b9074d8d1a34ed25e229e +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/4 Layer Manifold.prefab b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/4 Layer Manifold.prefab index 9ae75be750..afe5e1a9e8 100644 --- a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/4 Layer Manifold.prefab +++ b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/4 Layer Manifold.prefab @@ -12,9 +12,9 @@ GameObject: - component: {fileID: 2382204943904143396} - component: {fileID: 4960790609789451106} - component: {fileID: 1111533559529162776} - - component: {fileID: 3134510946630319864} - component: {fileID: 1820275602808757319} - component: {fileID: -3158576899531344565} + - component: {fileID: 5542861277348029082} m_Layer: 0 m_Name: 4 Layer Manifold m_TagString: Untagged @@ -100,19 +100,6 @@ MeshRenderer: m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 ---- !u!114 &3134510946630319864 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1381773157775214163} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 2fb7ede8181b28b4082944d5e44dd86e, type: 3} - m_Name: - m_EditorClassIdentifier: - volume: 1 --- !u!64 &1820275602808757319 MeshCollider: m_ObjectHideFlags: 0 @@ -142,3 +129,17 @@ MonoBehaviour: DisplayName: Atmospheric Pipe Layer Manifold Text: MaxDistance: 0 +--- !u!114 &5542861277348029082 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1381773157775214163} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f2325e25557c9e9428c2f0d4a6e3a1b9, type: 3} + m_Name: + m_EditorClassIdentifier: + layer: 3 + volume: 0.1 diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/4LayerManifold.asset b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/4LayerManifold.asset new file mode 100644 index 0000000000..b4ebb42348 --- /dev/null +++ b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/4LayerManifold.asset @@ -0,0 +1,17 @@ +%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: 4c19744d19c6b14409c8e0a535f90136, type: 3} + m_Name: 4LayerManifold + m_EditorClassIdentifier: + id: 4_layer_manifold + genericType: pipe + prefab: {fileID: 1381773157775214163, guid: b6511528502689241b2a5e8b6dc7bc42, type: 3} diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/4LayerManifold.asset.meta b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/4LayerManifold.asset.meta new file mode 100644 index 0000000000..ca230ae151 --- /dev/null +++ b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/4LayerManifold.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7d707d71bed102e4eb3f8780e6952040 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/AirScrubberFans.controller b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/AirScrubberFans.controller new file mode 100644 index 0000000000..7f856eb43a --- /dev/null +++ b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/AirScrubberFans.controller @@ -0,0 +1,72 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!91 &9100000 +AnimatorController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: AirScrubberFans + serializedVersion: 5 + m_AnimatorParameters: [] + m_AnimatorLayers: + - serializedVersion: 5 + m_Name: Base Layer + m_StateMachine: {fileID: 5769638170819478978} + m_Mask: {fileID: 0} + m_Motions: [] + m_Behaviours: [] + m_BlendingMode: 0 + m_SyncedLayerIndex: -1 + m_DefaultWeight: 0 + m_IKPass: 0 + m_SyncedLayerAffectsTiming: 0 + m_Controller: {fileID: 9100000} +--- !u!1107 &5769638170819478978 +AnimatorStateMachine: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Base Layer + m_ChildStates: + - serializedVersion: 1 + m_State: {fileID: 6461542961272674157} + m_Position: {x: 200, y: 0, z: 0} + m_ChildStateMachines: [] + m_AnyStateTransitions: [] + m_EntryTransitions: [] + m_StateMachineTransitions: {} + m_StateMachineBehaviours: [] + m_AnyStatePosition: {x: 50, y: 20, z: 0} + m_EntryPosition: {x: 50, y: 120, z: 0} + m_ExitPosition: {x: 800, y: 120, z: 0} + m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} + m_DefaultState: {fileID: 6461542961272674157} +--- !u!1102 &6461542961272674157 +AnimatorState: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ScrubberRotate + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: [] + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 7400000, guid: 275b210e4c4e4c2488ac30726d36ba8a, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/AirScrubberFans.controller.meta b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/AirScrubberFans.controller.meta new file mode 100644 index 0000000000..c0ac0c1dbb --- /dev/null +++ b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/AirScrubberFans.controller.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9e330adf5af540943a87eeaab924880f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Filter.asset b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Filter.asset new file mode 100644 index 0000000000..7438d3cbc9 --- /dev/null +++ b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Filter.asset @@ -0,0 +1,17 @@ +%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: 1d72368ce8da05a44864afc6112ce014, type: 3} + m_Name: Filter + m_EditorClassIdentifier: + id: filter + genericType: pipe + prefab: {fileID: 4547427899952614001, guid: 12bc8d2281e82f443a935a031364bb46, type: 3} diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Filter.asset.meta b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Filter.asset.meta new file mode 100644 index 0000000000..b966570ee8 --- /dev/null +++ b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Filter.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d3395484048c8474699e9d582eb3e842 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Filter_Left.prefab b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Filter_Left.prefab new file mode 100644 index 0000000000..c8d70edec9 --- /dev/null +++ b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Filter_Left.prefab @@ -0,0 +1,100 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &4547427899952614001 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8336161746844593761} + - component: {fileID: 9096347498010139519} + - component: {fileID: 23622894637019491} + m_Layer: 0 + m_Name: Filter_Left + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8336161746844593761 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4547427899952614001} + m_LocalRotation: {x: -6.123234e-17, y: 1, z: 6.123234e-17, w: -3.7493994e-33} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!137 &9096347498010139519 +SkinnedMeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4547427899952614001} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 7b91bd4845c08c04f96e3a5f5c47aeca, type: 2} + - {fileID: 2100000, guid: a4136159677bfb546846ebe3f0e64d9c, 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 + serializedVersion: 2 + m_Quality: 0 + m_UpdateWhenOffscreen: 1 + m_SkinnedMotionVectors: 1 + m_Mesh: {fileID: -9056860649016513077, guid: 2a30be4c78c286b4e89636ae631df4d0, type: 3} + m_Bones: [] + m_BlendShapeWeights: [] + m_RootBone: {fileID: 0} + m_AABB: + m_Center: {x: 0.006011963, y: 0.09530464, z: 0.0035936236} + m_Extent: {x: 0.4051467, y: 0.091608524, z: 0.4051467} + m_DirtyAABB: 0 +--- !u!114 &23622894637019491 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4547427899952614001} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2fb7ede8181b28b4082944d5e44dd86e, type: 3} + m_Name: + m_EditorClassIdentifier: + layer: 3 + volume: 1 diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Filter_Left.prefab.meta b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Filter_Left.prefab.meta new file mode 100644 index 0000000000..590548a29b --- /dev/null +++ b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Filter_Left.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 12bc8d2281e82f443a935a031364bb46 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Mixer.asset b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Mixer.asset new file mode 100644 index 0000000000..1fb7fa6874 --- /dev/null +++ b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Mixer.asset @@ -0,0 +1,17 @@ +%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: 1d72368ce8da05a44864afc6112ce014, type: 3} + m_Name: Mixer + m_EditorClassIdentifier: + id: mixer + genericType: pipe + prefab: {fileID: 9154955770433736351, guid: 86eb9c3b2f232bc4095d900f5a28421b, type: 3} diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Mixer.asset.meta b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Mixer.asset.meta new file mode 100644 index 0000000000..b8fef56159 --- /dev/null +++ b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Mixer.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cbba9e36799c96543b934d74c8a6d31b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/PressurePump.asset b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/PressurePump.asset new file mode 100644 index 0000000000..d2c7cc61da --- /dev/null +++ b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/PressurePump.asset @@ -0,0 +1,17 @@ +%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: 1d72368ce8da05a44864afc6112ce014, type: 3} + m_Name: PressurePump + m_EditorClassIdentifier: + id: pressure_pump + genericType: pipe + prefab: {fileID: 9154955770433736351, guid: fc39937b22feb034d8580328485c9ef6, type: 3} diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/PressurePump.asset.meta b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/PressurePump.asset.meta new file mode 100644 index 0000000000..ab76487a98 --- /dev/null +++ b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/PressurePump.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9d3d311ee4f13a44d8d46acc751044b6 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Scrubber.meta b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Scrubber.meta new file mode 100644 index 0000000000..b0c1cc09bb --- /dev/null +++ b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Scrubber.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 25eb315720bba2a4293640224afbebd1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Scrubber.asset b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Scrubber/Scrubber.asset similarity index 100% rename from Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Scrubber.asset rename to Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Scrubber/Scrubber.asset diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Scrubber.asset.meta b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Scrubber/Scrubber.asset.meta similarity index 100% rename from Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Scrubber.asset.meta rename to Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Scrubber/Scrubber.asset.meta diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Scrubber/Scrubber.controller b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Scrubber/Scrubber.controller new file mode 100644 index 0000000000..57fadfce13 --- /dev/null +++ b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Scrubber/Scrubber.controller @@ -0,0 +1,272 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1102 &-6947316653545214660 +AnimatorState: + serializedVersion: 5 + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: scrub slow + m_Speed: 0.5 + m_CycleOffset: 0 + m_Transitions: + - {fileID: -6333699823092986983} + - {fileID: 4125128465750283276} + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 7400000, guid: 1604375cac400ca40bf235f951d2a8b1, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1101 &-6333699823092986983 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 1 + m_ConditionEvent: scrubActive + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 6726985834031004463} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0 + m_TransitionOffset: 0 + m_ExitTime: 1 + m_HasExitTime: 0 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1101 &-5825964981250576404 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 2 + m_ConditionEvent: deviceActive + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 8067458038474779615} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0.25 + m_TransitionOffset: 0 + m_ExitTime: 1 + m_HasExitTime: 0 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1101 &-4516792263828827772 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 2 + m_ConditionEvent: scrubActive + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: -6947316653545214660} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0 + m_TransitionOffset: 0 + m_ExitTime: 1 + m_HasExitTime: 0 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1101 &-3965025682109137130 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 1 + m_ConditionEvent: deviceActive + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: -6947316653545214660} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0.25 + m_TransitionOffset: 0 + m_ExitTime: 0.75 + m_HasExitTime: 0 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!91 &9100000 +AnimatorController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Scrubber + serializedVersion: 5 + m_AnimatorParameters: + - m_Name: scrubActive + m_Type: 4 + m_DefaultFloat: 0 + m_DefaultInt: 0 + m_DefaultBool: 0 + m_Controller: {fileID: 0} + - m_Name: deviceActive + m_Type: 4 + m_DefaultFloat: 0 + m_DefaultInt: 0 + m_DefaultBool: 0 + m_Controller: {fileID: 0} + m_AnimatorLayers: + - serializedVersion: 5 + m_Name: Base Layer + m_StateMachine: {fileID: 5832060959595093381} + m_Mask: {fileID: 0} + m_Motions: [] + m_Behaviours: [] + m_BlendingMode: 0 + m_SyncedLayerIndex: -1 + m_DefaultWeight: 0 + m_IKPass: 0 + m_SyncedLayerAffectsTiming: 0 + m_Controller: {fileID: 9100000} +--- !u!1101 &4125128465750283276 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 2 + m_ConditionEvent: deviceActive + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 8067458038474779615} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0.25 + m_TransitionOffset: 0 + m_ExitTime: 1 + m_HasExitTime: 0 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1107 &5832060959595093381 +AnimatorStateMachine: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Base Layer + m_ChildStates: + - serializedVersion: 1 + m_State: {fileID: 6726985834031004463} + m_Position: {x: 260, y: 0, z: 0} + - serializedVersion: 1 + m_State: {fileID: -6947316653545214660} + m_Position: {x: 260, y: 140, z: 0} + - serializedVersion: 1 + m_State: {fileID: 8067458038474779615} + m_Position: {x: 490, y: 70, z: 0} + m_ChildStateMachines: [] + m_AnyStateTransitions: [] + m_EntryTransitions: [] + m_StateMachineTransitions: {} + m_StateMachineBehaviours: [] + m_AnyStatePosition: {x: 50, y: 20, z: 0} + m_EntryPosition: {x: 50, y: 120, z: 0} + m_ExitPosition: {x: 800, y: 120, z: 0} + m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} + m_DefaultState: {fileID: -6947316653545214660} +--- !u!1102 &6726985834031004463 +AnimatorState: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: scrub + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: + - {fileID: -4516792263828827772} + - {fileID: -5825964981250576404} + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 7400000, guid: 275b210e4c4e4c2488ac30726d36ba8a, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1102 &8067458038474779615 +AnimatorState: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: scrub stop + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: + - {fileID: -3965025682109137130} + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 0} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Scrubber/Scrubber.controller.meta b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Scrubber/Scrubber.controller.meta new file mode 100644 index 0000000000..ec81a4ece7 --- /dev/null +++ b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Scrubber/Scrubber.controller.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0b60a6b65f27ff84d82e9ba0a4655f6b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Scrubber.prefab b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Scrubber/Scrubber.prefab similarity index 84% rename from Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Scrubber.prefab rename to Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Scrubber/Scrubber.prefab index b4b3e11f7d..ae4191412d 100644 --- a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Scrubber.prefab +++ b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Scrubber/Scrubber.prefab @@ -113,6 +113,8 @@ GameObject: - component: {fileID: 3409554715360446247} - component: {fileID: 9018827270936400976} - component: {fileID: 9164798415427084553} + - component: {fileID: 1042403641076010174} + - component: {fileID: 4484013068238330198} m_Layer: 0 m_Name: Scrubber m_TagString: Untagged @@ -228,3 +230,43 @@ MonoBehaviour: DisplayName: Scrubber Text: MaxDistance: 0 +--- !u!114 &1042403641076010174 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9154955770433736351} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8cc8189ffaa055041a7bf1a81283cb61, type: 3} + m_Name: + m_EditorClassIdentifier: + MaxPressure: 4500 + TargetPressure: 4500 + mode: 1 + range: 0 + filterOxygen: 0 + filterNitrogen: 0 + filterCarbonDioxide: 1 + filterPlasma: 0 + pipeLayer: 2 +--- !u!95 &4484013068238330198 +Animator: + serializedVersion: 3 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9154955770433736351} + m_Enabled: 1 + m_Avatar: {fileID: 0} + m_Controller: {fileID: 9100000, guid: 0b60a6b65f27ff84d82e9ba0a4655f6b, type: 2} + m_CullingMode: 0 + m_UpdateMode: 0 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorControllerStateOnDisable: 0 diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Scrubber.prefab.meta b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Scrubber/Scrubber.prefab.meta similarity index 100% rename from Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Scrubber.prefab.meta rename to Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Scrubber/Scrubber.prefab.meta diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Scrubber/ScrubberRotate.anim b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Scrubber/ScrubberRotate.anim new file mode 100644 index 0000000000..22442d9b99 --- /dev/null +++ b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Scrubber/ScrubberRotate.anim @@ -0,0 +1,217 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ScrubberRotate + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: {x: 0, y: 0, z: 0} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 360, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + - serializedVersion: 3 + time: 1 + value: {x: 0, y: 360, z: 0} + inSlope: {x: 0, y: 360, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: Scrubber Fan + m_PositionCurves: [] + m_ScaleCurves: [] + m_FloatCurves: [] + m_PPtrCurves: + - curve: + - time: 0 + value: {fileID: 2100000, guid: a4136159677bfb546846ebe3f0e64d9c, type: 2} + - time: 0.51666665 + value: {fileID: 2100000, guid: 7b91bd4845c08c04f96e3a5f5c47aeca, type: 2} + attribute: m_Materials.Array.data[1] + path: + classID: 23 + script: {fileID: 0} + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - serializedVersion: 2 + path: 3867931180 + attribute: 4 + script: {fileID: 0} + typeID: 4 + customType: 4 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 1 + script: {fileID: 0} + typeID: 23 + customType: 21 + isPPtrCurve: 1 + pptrCurveMapping: + - {fileID: 2100000, guid: a4136159677bfb546846ebe3f0e64d9c, type: 2} + - {fileID: 2100000, guid: 7b91bd4845c08c04f96e3a5f5c47aeca, type: 2} + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 1 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 1 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: localEulerAnglesRaw.x + path: Scrubber Fan + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 360 + tangentMode: 65 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 360 + inSlope: 360 + outSlope: 0 + tangentMode: 5 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: localEulerAnglesRaw.y + path: Scrubber Fan + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 65 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: localEulerAnglesRaw.z + path: Scrubber Fan + classID: 4 + script: {fileID: 0} + m_EulerEditorCurves: + - curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalEulerAngles.x + path: Scrubber Fan + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalEulerAngles.y + path: Scrubber Fan + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalEulerAngles.z + path: Scrubber Fan + classID: 4 + script: {fileID: 0} + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Scrubber/ScrubberRotate.anim.meta b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Scrubber/ScrubberRotate.anim.meta new file mode 100644 index 0000000000..ede6b4227b --- /dev/null +++ b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Scrubber/ScrubberRotate.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 275b210e4c4e4c2488ac30726d36ba8a +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Scrubber/ScrubberRotateNoLight.anim b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Scrubber/ScrubberRotateNoLight.anim new file mode 100644 index 0000000000..2c7080deb1 --- /dev/null +++ b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Scrubber/ScrubberRotateNoLight.anim @@ -0,0 +1,199 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ScrubberRotateNoLight + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: {x: 0, y: 0, z: 0} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 360, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + - serializedVersion: 3 + time: 1 + value: {x: 0, y: 360, z: 0} + inSlope: {x: 0, y: 360, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: Scrubber Fan + m_PositionCurves: [] + m_ScaleCurves: [] + m_FloatCurves: [] + m_PPtrCurves: [] + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - serializedVersion: 2 + path: 3867931180 + attribute: 4 + script: {fileID: 0} + typeID: 4 + customType: 4 + isPPtrCurve: 0 + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 1 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 1 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: localEulerAnglesRaw.x + path: Scrubber Fan + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 360 + tangentMode: 65 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 360 + inSlope: 360 + outSlope: 0 + tangentMode: 5 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: localEulerAnglesRaw.y + path: Scrubber Fan + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 65 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: localEulerAnglesRaw.z + path: Scrubber Fan + classID: 4 + script: {fileID: 0} + m_EulerEditorCurves: + - curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalEulerAngles.x + path: Scrubber Fan + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalEulerAngles.y + path: Scrubber Fan + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalEulerAngles.z + path: Scrubber Fan + classID: 4 + script: {fileID: 0} + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Scrubber/ScrubberRotateNoLight.anim.meta b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Scrubber/ScrubberRotateNoLight.anim.meta new file mode 100644 index 0000000000..ac42bd67f0 --- /dev/null +++ b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Scrubber/ScrubberRotateNoLight.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1604375cac400ca40bf235f951d2a8b1 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/UnaryVent.asset b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/UnaryVent.asset new file mode 100644 index 0000000000..dd84212559 --- /dev/null +++ b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/UnaryVent.asset @@ -0,0 +1,17 @@ +%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: 1d72368ce8da05a44864afc6112ce014, type: 3} + m_Name: UnaryVent + m_EditorClassIdentifier: + id: unary_vent + genericType: pipe + prefab: {fileID: 8428429231987922514, guid: 47ae1a4e566d90041bf9e14f7c6756f6, type: 3} diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/UnaryVent.asset.meta b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/UnaryVent.asset.meta new file mode 100644 index 0000000000..738f7e002c --- /dev/null +++ b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/UnaryVent.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: abbeec3054e6dfa4499b85f984eb132e +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Vent.meta b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Vent.meta new file mode 100644 index 0000000000..83c10cdfe2 --- /dev/null +++ b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Vent.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3571c692e62d3b6439a4ca9561c67ab1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Vent.asset b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Vent/Vent.asset similarity index 100% rename from Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Vent.asset rename to Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Vent/Vent.asset diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Vent.asset.meta b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Vent/Vent.asset.meta similarity index 100% rename from Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Vent.asset.meta rename to Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Vent/Vent.asset.meta diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Vent/Vent.controller b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Vent/Vent.controller new file mode 100644 index 0000000000..e3d3dfc295 --- /dev/null +++ b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Vent/Vent.controller @@ -0,0 +1,272 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1101 &-8126536765227237405 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 1 + m_ConditionEvent: deviceActive + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 4251804249209372335} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0.25 + m_TransitionOffset: 0 + m_ExitTime: 0.75 + m_HasExitTime: 0 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1102 &-4191641982085495630 +AnimatorState: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: vent stop + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: + - {fileID: -8126536765227237405} + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 0} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1101 &-3765797310277346792 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 2 + m_ConditionEvent: deviceActive + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: -4191641982085495630} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0.25 + m_TransitionOffset: 0 + m_ExitTime: 1 + m_HasExitTime: 0 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!91 &9100000 +AnimatorController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Vent + serializedVersion: 5 + m_AnimatorParameters: + - m_Name: ventActive + m_Type: 4 + m_DefaultFloat: 0 + m_DefaultInt: 0 + m_DefaultBool: 0 + m_Controller: {fileID: 0} + - m_Name: deviceActive + m_Type: 4 + m_DefaultFloat: 0 + m_DefaultInt: 0 + m_DefaultBool: 0 + m_Controller: {fileID: 0} + m_AnimatorLayers: + - serializedVersion: 5 + m_Name: Base Layer + m_StateMachine: {fileID: 5832060959595093381} + m_Mask: {fileID: 0} + m_Motions: [] + m_Behaviours: [] + m_BlendingMode: 0 + m_SyncedLayerIndex: -1 + m_DefaultWeight: 0 + m_IKPass: 0 + m_SyncedLayerAffectsTiming: 0 + m_Controller: {fileID: 9100000} +--- !u!1102 &3121305535523519547 +AnimatorState: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: vent + m_Speed: 2 + m_CycleOffset: 0 + m_Transitions: + - {fileID: 7010209064260112694} + - {fileID: 4440775611513430155} + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 7400000, guid: f4d70d3a4f03b404499caff18eec1f81, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1102 &4251804249209372335 +AnimatorState: + serializedVersion: 5 + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: vent slow + m_Speed: 0.5 + m_CycleOffset: 0 + m_Transitions: + - {fileID: 8731466954727726782} + - {fileID: -3765797310277346792} + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 7400000, guid: 5dc683c7bd392ca43a6928faaa64d852, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1101 &4440775611513430155 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 2 + m_ConditionEvent: deviceActive + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: -4191641982085495630} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0.25 + m_TransitionOffset: 0 + m_ExitTime: 1 + m_HasExitTime: 0 + m_HasFixedDuration: 0 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1107 &5832060959595093381 +AnimatorStateMachine: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Base Layer + m_ChildStates: + - serializedVersion: 1 + m_State: {fileID: 3121305535523519547} + m_Position: {x: 390, y: -10, z: 0} + - serializedVersion: 1 + m_State: {fileID: 4251804249209372335} + m_Position: {x: 390, y: 200, z: 0} + - serializedVersion: 1 + m_State: {fileID: -4191641982085495630} + m_Position: {x: 600, y: 90, z: 0} + m_ChildStateMachines: [] + m_AnyStateTransitions: [] + m_EntryTransitions: [] + m_StateMachineTransitions: {} + m_StateMachineBehaviours: [] + m_AnyStatePosition: {x: 50, y: 20, z: 0} + m_EntryPosition: {x: 50, y: 120, z: 0} + m_ExitPosition: {x: 830, y: 30, z: 0} + m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} + m_DefaultState: {fileID: 4251804249209372335} +--- !u!1101 &7010209064260112694 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 2 + m_ConditionEvent: ventActive + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 4251804249209372335} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0 + m_TransitionOffset: 0 + m_ExitTime: 1 + m_HasExitTime: 0 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1101 &8731466954727726782 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 1 + m_ConditionEvent: ventActive + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 3121305535523519547} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0 + m_TransitionOffset: 0 + m_ExitTime: 1 + m_HasExitTime: 0 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Vent/Vent.controller.meta b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Vent/Vent.controller.meta new file mode 100644 index 0000000000..9a68d697f4 --- /dev/null +++ b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Vent/Vent.controller.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 184acb3f23e0eb346a7f87d8fa7f05d4 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Vent.prefab b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Vent/Vent.prefab similarity index 85% rename from Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Vent.prefab rename to Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Vent/Vent.prefab index c3b15c158a..79c1accae4 100644 --- a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Vent.prefab +++ b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Vent/Vent.prefab @@ -110,6 +110,8 @@ GameObject: - component: {fileID: 3409554715360446247} - component: {fileID: 9018827270936400976} - component: {fileID: 9164798415427084553} + - component: {fileID: 8105352960179789592} + - component: {fileID: 7551927119831908791} m_Layer: 0 m_Name: Vent m_TagString: Untagged @@ -225,3 +227,37 @@ MonoBehaviour: DisplayName: Vent Text: MaxDistance: 0 +--- !u!114 &8105352960179789592 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9154955770433736351} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 34c38d00d3fea3845878d76ab7eeeb81, type: 3} + m_Name: + m_EditorClassIdentifier: + mode: 2 + TargetPressure: 101.3 + pipeLayer: 0 +--- !u!95 &7551927119831908791 +Animator: + serializedVersion: 3 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9154955770433736351} + m_Enabled: 1 + m_Avatar: {fileID: 0} + m_Controller: {fileID: 9100000, guid: 184acb3f23e0eb346a7f87d8fa7f05d4, type: 2} + m_CullingMode: 0 + m_UpdateMode: 0 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorControllerStateOnDisable: 0 diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Vent.prefab.meta b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Vent/Vent.prefab.meta similarity index 100% rename from Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Vent.prefab.meta rename to Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Vent/Vent.prefab.meta diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Vent/VentRotate.anim b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Vent/VentRotate.anim new file mode 100644 index 0000000000..c2b40af9da --- /dev/null +++ b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Vent/VentRotate.anim @@ -0,0 +1,217 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: VentRotate + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: {x: 0, y: 0, z: 0} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 360, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + - serializedVersion: 3 + time: 1 + value: {x: 0, y: 360, z: 0} + inSlope: {x: 0, y: 360, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: Vent Fan + m_PositionCurves: [] + m_ScaleCurves: [] + m_FloatCurves: [] + m_PPtrCurves: + - curve: + - time: 0 + value: {fileID: 2100000, guid: a4136159677bfb546846ebe3f0e64d9c, type: 2} + - time: 0.5 + value: {fileID: 2100000, guid: 7b91bd4845c08c04f96e3a5f5c47aeca, type: 2} + attribute: m_Materials.Array.data[1] + path: + classID: 23 + script: {fileID: 0} + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - serializedVersion: 2 + path: 327165626 + attribute: 4 + script: {fileID: 0} + typeID: 4 + customType: 4 + isPPtrCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 1 + script: {fileID: 0} + typeID: 23 + customType: 21 + isPPtrCurve: 1 + pptrCurveMapping: + - {fileID: 2100000, guid: a4136159677bfb546846ebe3f0e64d9c, type: 2} + - {fileID: 2100000, guid: 7b91bd4845c08c04f96e3a5f5c47aeca, type: 2} + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 1 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 1 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: localEulerAnglesRaw.x + path: Vent Fan + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 360 + tangentMode: 65 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 360 + inSlope: 360 + outSlope: 0 + tangentMode: 5 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: localEulerAnglesRaw.y + path: Vent Fan + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 69 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: localEulerAnglesRaw.z + path: Vent Fan + classID: 4 + script: {fileID: 0} + m_EulerEditorCurves: + - curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalEulerAngles.x + path: Vent Fan + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalEulerAngles.y + path: Vent Fan + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalEulerAngles.z + path: Vent Fan + classID: 4 + script: {fileID: 0} + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Vent/VentRotate.anim.meta b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Vent/VentRotate.anim.meta new file mode 100644 index 0000000000..d55c0c6f2b --- /dev/null +++ b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Vent/VentRotate.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f4d70d3a4f03b404499caff18eec1f81 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Vent/VentRotateNoLight.anim b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Vent/VentRotateNoLight.anim new file mode 100644 index 0000000000..0601690c2a --- /dev/null +++ b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Vent/VentRotateNoLight.anim @@ -0,0 +1,199 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: VentRotateNoLight + serializedVersion: 6 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: {x: 0, y: 0, z: 0} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 360, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + - serializedVersion: 3 + time: 1 + value: {x: 0, y: 360, z: 0} + inSlope: {x: 0, y: 360, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: Vent Fan + m_PositionCurves: [] + m_ScaleCurves: [] + m_FloatCurves: [] + m_PPtrCurves: [] + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - serializedVersion: 2 + path: 327165626 + attribute: 4 + script: {fileID: 0} + typeID: 4 + customType: 4 + isPPtrCurve: 0 + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 1 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 1 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: localEulerAnglesRaw.x + path: Vent Fan + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 360 + tangentMode: 65 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 360 + inSlope: 360 + outSlope: 0 + tangentMode: 5 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: localEulerAnglesRaw.y + path: Vent Fan + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 69 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: localEulerAnglesRaw.z + path: Vent Fan + classID: 4 + script: {fileID: 0} + m_EulerEditorCurves: + - curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalEulerAngles.x + path: Vent Fan + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalEulerAngles.y + path: Vent Fan + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalEulerAngles.z + path: Vent Fan + classID: 4 + script: {fileID: 0} + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Vent/VentRotateNoLight.anim.meta b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Vent/VentRotateNoLight.anim.meta new file mode 100644 index 0000000000..0cd4a3a57e --- /dev/null +++ b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/Vent/VentRotateNoLight.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5dc683c7bd392ca43a6928faaa64d852 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/VolumePump.asset b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/VolumePump.asset new file mode 100644 index 0000000000..42adb1abb2 --- /dev/null +++ b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/VolumePump.asset @@ -0,0 +1,17 @@ +%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: 1d72368ce8da05a44864afc6112ce014, type: 3} + m_Name: VolumePump + m_EditorClassIdentifier: + id: volume_pump + genericType: pipe + prefab: {fileID: 9154955770433736351, guid: 60b050be75d1f2045810e7362069d7c2, type: 3} diff --git a/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/VolumePump.asset.meta b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/VolumePump.asset.meta new file mode 100644 index 0000000000..1242df844b --- /dev/null +++ b/Assets/Content/Structures/Pipes/Atmospherics/Pumps, Valves, Etc/VolumePump.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c1921c116066cd24dadd7ed65a8d2e17 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Engine/Atmospherics/AtmosManager.cs b/Assets/Engine/Atmospherics/AtmosManager.cs index d274d6b7f1..3530f9130b 100644 --- a/Assets/Engine/Atmospherics/AtmosManager.cs +++ b/Assets/Engine/Atmospherics/AtmosManager.cs @@ -1,4 +1,5 @@ using SS3D.Engine.Tiles; +using SS3D.Engine.Tiles.Connections; using System; using System.Collections; using System.Collections.Generic; @@ -9,7 +10,7 @@ namespace SS3D.Engine.Atmospherics { - [ExecuteAlways] + // [ExecuteAlways] public class AtmosManager : MonoBehaviour { // Test @@ -23,7 +24,9 @@ public enum ViewType { Pressure, Content, Temperature, Combined, Wind }; public bool showMessages = false; public bool isAddingGas = false; public bool showPipes = false; + public bool showOnlySelectedPipes = false; private AtmosGasses gasToAdd = AtmosGasses.Oxygen; + public PipeLayer selectedPipeLayer = PipeLayer.Upper; private TileManager tileManager; private List tileObjects; @@ -123,18 +126,21 @@ private void Initialize() // Pipe init - PipeObject pipe = tile.GetComponentInChildren(); - if (pipe != null) + PipeObject[] pipes = tile.GetComponentsInChildren(); + foreach (PipeObject pipe in pipes) { - pipe.SetTileNeighbour(tileNeighbour, 0); - pipe.SetTileNeighbour(tileNeighbour2, 1); - pipe.SetTileNeighbour(tileNeighbour3, 2); - pipe.SetTileNeighbour(tileNeighbour4, 3); - pipeTiles.Add(pipe); - pipesInstantiated++; + if (pipe != null) + { + pipe.SetTileNeighbour(tileNeighbour, 0); + pipe.SetTileNeighbour(tileNeighbour2, 1); + pipe.SetTileNeighbour(tileNeighbour3, 2); + pipe.SetTileNeighbour(tileNeighbour4, 3); + pipeTiles.Add(pipe); + pipesInstantiated++; + } } - //// Do pumps + // Do pumps IAtmosLoop device = tile.GetComponentInChildren(); if (device != null) { @@ -154,9 +160,12 @@ private void Initialize() { // Atmos tiles and pipes tile.atmos.setAtmosNeighbours(); - PipeObject pipe = tile.GetComponentInChildren(); - if (pipe) - pipe.SetAtmosNeighbours(); + PipeObject[] pipes = tile.GetComponentsInChildren(); + foreach (PipeObject pipe in pipes) + { + if (pipe) + pipe.SetAtmosNeighbours(); + } IAtmosLoop device = tile.GetComponentInChildren(); if (device != null) @@ -234,26 +243,32 @@ void Update() } else if (showPipes) { - PipeObject pipe = tile.GetComponentInChildren(); - if (pipe) + PipeObject[] pipes = tile.GetComponentsInChildren(); + bool pipeLayerFound = false; + foreach (PipeObject pipe in pipes) { - if (isAddingGas) + if (pipe && pipe.layer == selectedPipeLayer) { - pipe.AddGas(gasToAdd, 30f); - } - else - { - Debug.Log("Pipe, Pressure (kPa): " + pipe.GetPressure() + " Temperature (K): " + pipe.GetAtmosContainer().GetTemperature() + " State: " + pipe.GetState().ToString() + "\t" + - " Oxygen content: " + pipe.GetAtmosContainer().GetGasses()[0] + - " Nitrogen content: " + pipe.GetAtmosContainer().GetGasses()[1] + - " Carbon Dioxide content: " + pipe.GetAtmosContainer().GetGasses()[2] + - " Plasma content: " + pipe.GetAtmosContainer().GetGasses()[3]); - lastClick = Time.fixedTime; + pipeLayerFound = true; + if (isAddingGas) + { + pipe.AddGas(gasToAdd, 30f); + } + else + { + Debug.Log("Pipe, Pressure (kPa): " + pipe.GetPressure() + " Temperature (K): " + pipe.GetAtmosContainer().GetTemperature() + " State: " + pipe.GetState().ToString() + "\t" + + " Oxygen content: " + pipe.GetAtmosContainer().GetGasses()[0] + + " Nitrogen content: " + pipe.GetAtmosContainer().GetGasses()[1] + + " Carbon Dioxide content: " + pipe.GetAtmosContainer().GetGasses()[2] + + " Plasma content: " + pipe.GetAtmosContainer().GetGasses()[3]); + lastClick = Time.fixedTime; + } } } - else + + if (!pipeLayerFound) { - Debug.Log("No pipe found on the clicked tile"); + Debug.Log("No pipe found on the clicked tile for layer " + selectedPipeLayer.ToString()); lastClick = Time.fixedTime; } } @@ -524,64 +539,78 @@ private void OnDrawGizmos() } } + drawSize = 1f; + // Draw pipe contents if (showPipes) { - PipeObject pipe = tile.GetComponentInChildren(); - if (pipe) + PipeObject[] pipes = tile.GetComponentsInChildren(); + foreach (PipeObject pipe in pipes) { - switch (pipe.GetState()) + if (!showOnlySelectedPipes || (showOnlySelectedPipes && pipe.layer == selectedPipeLayer)) { - case AtmosStates.Active: state = new Color(0, 0, 0, 0); break; - case AtmosStates.Semiactive: state = new Color(0, 0, 0, 0.8f); break; - case AtmosStates.Inactive: state = new Color(0, 0, 0, 0.8f); break; - default: state = new Color(0, 0, 0, 1); break; - } + float rotation = 0f; + OffsetPipesAdjacencyConnector offsetConnector = pipe.GetComponent(); + OffsetPipesAdjacencyConnector.PipeOrientation pipeOrientation = OffsetPipesAdjacencyConnector.PipeOrientation.o; + if (offsetConnector) + { + pipeOrientation = offsetConnector.GetPipeOrientation(); + rotation = offsetConnector.GetRotation(); + } - switch (drawView) - { - case ViewType.Content: - float[] gases = new float[5]; + switch (pipe.GetState()) + { + case AtmosStates.Active: state = new Color(0, 0, 0, 0); break; + case AtmosStates.Semiactive: state = new Color(0, 0, 0, 0.8f); break; + case AtmosStates.Inactive: state = new Color(0, 0, 0, 0.8f); break; + default: state = new Color(0, 0, 0, 1); break; + } - Color[] colors = new Color[] { Color.yellow, Color.white, Color.gray, Color.magenta }; - float offset = 0f; + switch (drawView) + { + case ViewType.Content: + float[] gases = new float[5]; - for (int k = 0; k < 4; ++k) - { - float moles = pipe.GetAtmosContainer().GetGasses()[k] / 30f; + Color[] colors = new Color[] { Color.yellow, Color.white, Color.gray, Color.magenta }; + float offset = 0f; - if (moles != 0f) + for (int k = 0; k < 4; ++k) { - Gizmos.color = colors[k] - state; - if (drawAll || k == 3) // Only draw plasma + float moles = pipe.GetAtmosContainer().GetGasses()[k] / 30f; + + if (moles != 0f) { - Gizmos.DrawCube(new Vector3(x, moles / 2f + offset, y), new Vector3(0.5f * drawSize, moles, 0.5f * drawSize)); - offset += moles; + Gizmos.color = colors[k] - state; + if (drawAll || k == 3) // Only draw plasma + { + DrawPipeCube(x, y, pipe.layer, moles / 2f + offset, pipeOrientation, drawSize, rotation); + offset += moles; + } } } - } - break; - case ViewType.Pressure: - pressure = pipe.GetPressure() / 160f; + break; + case ViewType.Pressure: + pressure = pipe.GetPressure() / 160f; - if (drawAll || pipe.GetState() == AtmosStates.Active) - { - Gizmos.color = Color.white - state; - Gizmos.DrawCube(new Vector3(x, pressure / 2f, y), new Vector3(0.5f * drawSize, pressure, 0.5f * drawSize)); - } - break; - case ViewType.Temperature: - float temperatue = pipe.GetAtmosContainer().GetTemperature() / 100f; - - Gizmos.color = Color.red - state; - Gizmos.DrawCube(new Vector3(x, temperatue / 2f, y), new Vector3(0.5f * drawSize, temperatue, 0.5f * drawSize)); - break; - case ViewType.Combined: - pressure = pipe.GetPressure() / 30f; - - Gizmos.color = new Color(pipe.GetAtmosContainer().GetTemperature() / 500f, 0, 0, 1) - state; - Gizmos.DrawCube(new Vector3(x, pressure / 2f, y), new Vector3(0.5f * drawSize, pressure, 0.5f * drawSize)); - break; + if (drawAll || pipe.GetState() == AtmosStates.Active) + { + Gizmos.color = Color.white - state; + DrawPipeCube(x, y, pipe.layer, pressure, pipeOrientation, drawSize, rotation); + } + break; + case ViewType.Temperature: + float temperatue = pipe.GetAtmosContainer().GetTemperature() / 100f; + + Gizmos.color = Color.red - state; + DrawPipeCube(x, y, pipe.layer, temperatue / 2f, pipeOrientation, drawSize, rotation); + break; + case ViewType.Combined: + pressure = pipe.GetPressure() / 30f; + + Gizmos.color = new Color(pipe.GetAtmosContainer().GetTemperature() / 500f, 0, 0, 1) - state; + DrawPipeCube(x, y, pipe.layer, pressure, pipeOrientation, drawSize, rotation); + break; + } } } } @@ -589,5 +618,155 @@ private void OnDrawGizmos() } } + + private void DrawPipeCube(float x, float y, PipeLayer layer, float value, OffsetPipesAdjacencyConnector.PipeOrientation orientation, float drawSize, float rotation) + { + float offsetX = 0f; + float offsetY = 0f; + + switch (layer) + { + case PipeLayer.L1: + offsetX = -0.25f; + offsetY = 0.25f; + break; + case PipeLayer.L3: + offsetX = 0.25f; + offsetY = -0.25f; + break; + } + + switch (orientation) + { + case OffsetPipesAdjacencyConnector.PipeOrientation.o: + if (layer == PipeLayer.L2 || layer == PipeLayer.Upper) + Gizmos.DrawCube(new Vector3(x, value / 2f, y), new Vector3(0.2f * drawSize, value, 0.2f * drawSize)); + break; + + case OffsetPipesAdjacencyConnector.PipeOrientation.i: + if (rotation > 0) + Gizmos.DrawCube(new Vector3(x, value / 2f, y + offsetY), new Vector3(drawSize, value, 0.2f * drawSize)); + else + Gizmos.DrawCube(new Vector3(x + offsetX, value / 2f, y), new Vector3(0.2f * drawSize, value, drawSize)); + break; + + case OffsetPipesAdjacencyConnector.PipeOrientation.cNorth: + if (rotation > 0) + Gizmos.DrawCube(new Vector3(x + 0.25f, value / 2f, y + offsetY), new Vector3(0.5f * drawSize, value, 0.2f * drawSize)); + else + Gizmos.DrawCube(new Vector3(x + offsetX, value / 2f, y + 0.25f), new Vector3(0.2f * drawSize, value, 0.5f * drawSize)); + + break; + case OffsetPipesAdjacencyConnector.PipeOrientation.cSouth: + if (rotation > 0) + Gizmos.DrawCube(new Vector3(x - 0.25f, value / 2f, y + offsetY), new Vector3(0.5f * drawSize, value, 0.2f * drawSize)); + else + Gizmos.DrawCube(new Vector3(x + offsetX, value / 2f, y - 0.25f), new Vector3(0.2f * drawSize, value, 0.5f * drawSize)); + break; + + case OffsetPipesAdjacencyConnector.PipeOrientation.tNEW: + if (layer == PipeLayer.L3) + { + Gizmos.DrawCube(new Vector3(x, value / 2f, y + offsetY), new Vector3(drawSize, value, 0.2f * drawSize)); + Gizmos.DrawCube(new Vector3(x + offsetX, value / 2f, y), new Vector3(0.2f * drawSize, value, drawSize)); + } + else if (layer == PipeLayer.L1) + { + Gizmos.DrawCube(new Vector3(x, value / 2f, y + offsetY), new Vector3(drawSize, value, 0.2f * drawSize)); + Gizmos.DrawCube(new Vector3(x + offsetX, value / 2f, y + 0.33f), new Vector3(0.2f * drawSize, value, 0.35f * drawSize)); + } + break; + + case OffsetPipesAdjacencyConnector.PipeOrientation.tNSE: + if (layer == PipeLayer.L3) + { + Gizmos.DrawCube(new Vector3(x + 0.33f, value / 2f, y + offsetY), new Vector3(0.35f * drawSize, value, 0.2f * drawSize)); + Gizmos.DrawCube(new Vector3(x + offsetX, value / 2f, y), new Vector3(0.2f * drawSize, value, drawSize)); + } + else if (layer == PipeLayer.L1) + { + Gizmos.DrawCube(new Vector3(x, value / 2f, y + offsetY), new Vector3(drawSize, value, 0.2f * drawSize)); + Gizmos.DrawCube(new Vector3(x + offsetX, value / 2f, y), new Vector3(0.2f * drawSize, value, drawSize)); + } + break; + + case OffsetPipesAdjacencyConnector.PipeOrientation.tNSW: + if (layer == PipeLayer.L3) + { + Gizmos.DrawCube(new Vector3(x, value / 2f, y + offsetY), new Vector3(drawSize, value, 0.2f * drawSize)); + Gizmos.DrawCube(new Vector3(x + offsetX, value / 2f, y), new Vector3(0.2f * drawSize, value, drawSize)); + } + else if (layer == PipeLayer.L1) + { + Gizmos.DrawCube(new Vector3(x - 0.33f, value / 2f, y + offsetY), new Vector3(0.35f * drawSize, value, 0.2f * drawSize)); + Gizmos.DrawCube(new Vector3(x + offsetX, value / 2f, y), new Vector3(0.2f * drawSize, value, drawSize)); + } + break; + + case OffsetPipesAdjacencyConnector.PipeOrientation.tSWE: + if (layer == PipeLayer.L3) + { + Gizmos.DrawCube(new Vector3(x, value / 2f, y + offsetY), new Vector3(drawSize, value, 0.2f * drawSize)); + } + else if (layer == PipeLayer.L1) + { + Gizmos.DrawCube(new Vector3(x + offsetX, value / 2f, y), new Vector3(0.2f * drawSize, value, drawSize)); + Gizmos.DrawCube(new Vector3(x, value / 2f, y + offsetY), new Vector3(drawSize, value, 0.2f * drawSize)); + } + break; + + case OffsetPipesAdjacencyConnector.PipeOrientation.lNE: + if (layer == PipeLayer.L1) + { + Gizmos.DrawCube(new Vector3(x, value / 2f, y + offsetY), new Vector3(drawSize, value, 0.2f * drawSize)); + } + else if (layer == PipeLayer.L3) + { + Gizmos.DrawCube(new Vector3(x + offsetX, value / 2f, y), new Vector3(0.2f * drawSize, value, drawSize)); + } + break; + + case OffsetPipesAdjacencyConnector.PipeOrientation.lNW: + if (layer == PipeLayer.L1) + { + Gizmos.DrawCube(new Vector3(x + offsetX, value / 2f, y + offsetY), new Vector3(0.35f * drawSize, value, 0.2f * drawSize)); + } + else if (layer == PipeLayer.L3) + { + Gizmos.DrawCube(new Vector3(x + offsetX, value / 2f, y), new Vector3(0.2f * drawSize, value, drawSize)); + Gizmos.DrawCube(new Vector3(x, value / 2f, y + offsetY), new Vector3(drawSize, value, 0.2f * drawSize)); + } + break; + + case OffsetPipesAdjacencyConnector.PipeOrientation.lSE: + if (layer == PipeLayer.L3) + { + Gizmos.DrawCube(new Vector3(x + offsetX, value / 2f, y + offsetY), new Vector3(0.35f * drawSize, value, 0.2f * drawSize)); + } + else if (layer == PipeLayer.L1) + { + Gizmos.DrawCube(new Vector3(x + offsetX, value / 2f, y), new Vector3(0.2f * drawSize, value, drawSize)); + Gizmos.DrawCube(new Vector3(x, value / 2f, y + offsetY), new Vector3(drawSize, value, 0.2f * drawSize)); + } + break; + + case OffsetPipesAdjacencyConnector.PipeOrientation.lSW: + if (layer == PipeLayer.L3) + { + Gizmos.DrawCube(new Vector3(x, value / 2f, y + offsetY), new Vector3(drawSize, value, 0.2f * drawSize)); + } + else if (layer == PipeLayer.L1) + { + Gizmos.DrawCube(new Vector3(x + offsetX, value / 2f, y), new Vector3(0.2f * drawSize, value, drawSize)); + } + break; + + case OffsetPipesAdjacencyConnector.PipeOrientation.x: + Gizmos.DrawCube(new Vector3(x + offsetX, value / 2f, y), new Vector3(0.2f * drawSize, value, drawSize)); + Gizmos.DrawCube(new Vector3(x, value / 2f, y + offsetY), new Vector3(drawSize, value, 0.2f * drawSize)); + break; + } + + } } } diff --git a/Assets/Engine/Atmospherics/AtmosObject.cs b/Assets/Engine/Atmospherics/AtmosObject.cs index d196910931..07c2fa1916 100644 --- a/Assets/Engine/Atmospherics/AtmosObject.cs +++ b/Assets/Engine/Atmospherics/AtmosObject.cs @@ -107,6 +107,15 @@ public void RemoveGas(int index, float amount) } } + public void RemoveGas(AtmosGasses gas, float amount) + { + if (state != AtmosStates.Blocked) + { + atmosContainer.RemoveGas(gas, amount); + state = AtmosStates.Active; + } + } + public void SetGasses(float[] amounts) { atmosContainer.SetGasses(amounts); @@ -370,8 +379,12 @@ public void SimulateMixing() if (atmosObject.state != AtmosStates.Blocked) { difference[i] = (atmosContainer.GetGasses()[i] - atmosObject.GetAtmosContainer().GetGasses()[i]) * Gas.mixRate; - if (difference[i] >= Gas.mixRate) + if (difference[i] >= 0.05f || (atmosContainer.GetGasses()[i] - atmosObject.GetAtmosContainer().GetGasses()[i]) >= 0.01f) { + // For small difference, we just split the diff + if (difference[i] < 0.05f) + difference[i] = (atmosContainer.GetGasses()[i] - atmosObject.GetAtmosContainer().GetGasses()[i]) / 2f; + // Increase neighbouring tiles moles atmosObject.GetAtmosContainer().AddGas(i, difference[i]); @@ -396,7 +409,13 @@ public void SimulateMixing() if (!mixed && state == AtmosStates.Semiactive) { - state = AtmosStates.Inactive; + // Delete tiny amount of gasses before going to inactive + for (int i = 0; i < Gas.numOfGases; i++) + { + if (atmosContainer.GetGasses()[i] <= 0.1 && atmosContainer.GetGasses()[i] > 0) + atmosContainer.RemoveGas(i, 1); // Resets it to zero + } + state = AtmosStates.Inactive; } s_SimlateMixingPerfMarker.End(); } diff --git a/Assets/Engine/Atmospherics/Editor/AtmosDebug.cs b/Assets/Engine/Atmospherics/Editor/AtmosDebug.cs index 8884ad269d..7e095aa2d9 100644 --- a/Assets/Engine/Atmospherics/Editor/AtmosDebug.cs +++ b/Assets/Engine/Atmospherics/Editor/AtmosDebug.cs @@ -78,6 +78,11 @@ public void OnGUI() EditorGUILayout.Space(); EditorGUILayout.PrefixLabel("Insert gas:"); gassSelection = (AtmosGasses)EditorGUILayout.EnumPopup(gassSelection); + + EditorGUILayout.Space(); + showOnlySelectedPipeLayer = EditorGUILayout.Toggle("Show only selected layer: ", showOnlySelectedPipeLayer); + EditorGUILayout.PrefixLabel("Selected pipe layer:"); + selectedPipeLayer = (PipeLayer)EditorGUILayout.EnumPopup(selectedPipeLayer); if (GUILayout.Button("Add gas")) { Debug.Log("Click to add gas. Press escape to stop"); @@ -96,6 +101,8 @@ public void OnGUI() atmosManager.showPipes = showPipes; + atmosManager.selectedPipeLayer = selectedPipeLayer; + atmosManager.showOnlySelectedPipes = showOnlySelectedPipeLayer; // HandleUtility.Repaint(); } @@ -110,9 +117,11 @@ public void OnGUI() private bool showMessages = false; private bool showPipes = false; + private bool showOnlySelectedPipeLayer = false; private float updateRate = 0f; private AtmosManager.ViewType drawView; private AtmosGasses gassSelection; + private PipeLayer selectedPipeLayer; } } diff --git a/Assets/Engine/Atmospherics/Gas.cs b/Assets/Engine/Atmospherics/Gas.cs index a2c0d4aef0..2764e6ef9d 100644 --- a/Assets/Engine/Atmospherics/Gas.cs +++ b/Assets/Engine/Atmospherics/Gas.cs @@ -47,13 +47,16 @@ public static class Gas public const float gasConstant = 8.314f; // Universal gas constant public const float drag = 0.95f; // Fluid drag, slows down flux so that gases don't infinitely slosh public const float thermalBase = 0.024f; // * volume | Rate of temperature equalization - public const float mixRate = 0.05f; // Rate of gas mixing + public const float mixRate = 0.1f; // Rate of gas mixing public const float fluxEpsilon = 0.025f; // Minimum pressure difference to simulate public const float thermalEpsilon = 0.01f; // Minimum temperature difference to simulate public const float windFactor = 0.2f; // How much force will any wind apply public const float minimumWind = 1f; // Minimum wind required to move items + public const float maxMoleTransfer = 2f; // The maximum amount of moles that machines can move per atmos step + public const float minMoleTransfer = 0.1f; // The minimum amount of moles that are transfered for every step + public static int numOfGases = Enum.GetNames(typeof(AtmosStates)).Length; } } \ No newline at end of file diff --git a/Assets/Engine/Atmospherics/Machinery.meta b/Assets/Engine/Atmospherics/Machinery.meta new file mode 100644 index 0000000000..ceeb895d9e --- /dev/null +++ b/Assets/Engine/Atmospherics/Machinery.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2f3d0696ae5827046ae669f848a747b3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Engine/Atmospherics/Machinery/FilterObject.cs b/Assets/Engine/Atmospherics/Machinery/FilterObject.cs new file mode 100644 index 0000000000..5559c12d54 --- /dev/null +++ b/Assets/Engine/Atmospherics/Machinery/FilterObject.cs @@ -0,0 +1,128 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using SS3D.Content.Systems.Interactions; +using SS3D.Engine.Interactions; +using SS3D.Engine.Tiles; +using UnityEngine; + +namespace SS3D.Engine.Atmospherics +{ + public class FilterObject : PipeGeneric, IAtmosLoop, IInteractionTarget + { + public float MaxPressure = 4500f; + public float TargetPressure = 101f; + + public bool filterOxygen = false; + public bool filterNitrogen = false; + public bool filterCarbonDioxide = false; + public bool filterPlasma = false; + + public bool filterActive = false; + + private float _targetPressure; + + // Update is called once per frame + void Update() + { + if (_targetPressure != TargetPressure) + { + _targetPressure = Mathf.Clamp(TargetPressure, 0, MaxPressure); + TargetPressure = _targetPressure; + } + } + public void SetActive(bool filterActive) + { + this.filterActive = filterActive; + } + + public void Initialize() + { + SetAtmosNeighbours(); + } + + bool IsFiltered(AtmosGasses gas) + { + switch (gas) + { + case AtmosGasses.Oxygen: + return filterOxygen; + case AtmosGasses.Nitrogen: + return filterNitrogen; + case AtmosGasses.CarbonDioxide: + return filterCarbonDioxide; + case AtmosGasses.Plasma: + return filterPlasma; + } + return false; + } + + public void Step() + { + if (filterActive) + { + PipeObject input = atmosNeighbours[0]; + PipeObject outputFiltered = atmosNeighbours[3]; + PipeObject outputOther = atmosNeighbours[1]; + + // Return when there is no gas + if (input == null || input.GetTotalMoles() <= 1f || outputFiltered == null || outputOther == null) + return; + + AtmosContainer inputContainer = input.GetAtmosContainer(); + + // Both outputs must not be blocked + if (outputFiltered.GetPressure() <= _targetPressure && outputOther.GetPressure() <= _targetPressure) + { + // Use the pipe with the highest pressure as reference + PipeObject nearestOutput = (outputFiltered.GetPressure() > outputOther.GetPressure()) ? outputFiltered : outputOther; + + // Calculate necessary moles to transfer using PV=nRT + float pressureDifference = _targetPressure - nearestOutput.GetPressure(); + float transferMoles = pressureDifference * 1000 * nearestOutput.volume / (nearestOutput.GetAtmosContainer().GetTemperature() * Gas.gasConstant); + + // We can not transfer more moles than the machinery allows + transferMoles = Mathf.Min(Gas.maxMoleTransfer, transferMoles); + + // We can't transfer more moles than there are in the input + if (transferMoles > input.GetTotalMoles()) + transferMoles = input.GetTotalMoles(); + + // for (int i = 0; i < Gas.numOfGases; i++) + foreach (AtmosGasses gas in Enum.GetValues(typeof(AtmosGasses))) + { + // Divide the moles according to their percentage + float molePerGas = (inputContainer.GetGas(gas) / input.GetTotalMoles()) * transferMoles; + if (inputContainer.GetGas(gas) > 0f) + { + input.RemoveGas(gas, molePerGas); + + // Determine output based on filtering setting + if (IsFiltered(gas)) + outputFiltered.AddGas(gas, molePerGas); + else + outputOther.AddGas(gas, molePerGas); + } + } + } + } + } + + + + public IInteraction[] GenerateInteractions(InteractionEvent interactionEvent) + { + return new IInteraction[] + { + new SimpleInteraction + { + Name = filterActive ? "Stop filter" : "Start filter", Interact = FilterInteract, RangeCheck = true + } + }; + } + private void FilterInteract(InteractionEvent interactionEvent, InteractionReference arg2) + { + SetActive(!filterActive); + } + } +} \ No newline at end of file diff --git a/Assets/Engine/Atmospherics/Machinery/FilterObject.cs.meta b/Assets/Engine/Atmospherics/Machinery/FilterObject.cs.meta new file mode 100644 index 0000000000..57832e30d8 --- /dev/null +++ b/Assets/Engine/Atmospherics/Machinery/FilterObject.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 43acb6da8c3c7fd4cb675c9b2fde577a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Engine/Atmospherics/InjectorObject.cs b/Assets/Engine/Atmospherics/Machinery/InjectorObject.cs similarity index 71% rename from Assets/Engine/Atmospherics/InjectorObject.cs rename to Assets/Engine/Atmospherics/Machinery/InjectorObject.cs index 2c34dcd489..61196a5f1d 100644 --- a/Assets/Engine/Atmospherics/InjectorObject.cs +++ b/Assets/Engine/Atmospherics/Machinery/InjectorObject.cs @@ -6,7 +6,7 @@ namespace SS3D.Engine.Atmospherics { - public class InjectorObject : MonoBehaviour, IAtmosLoop + public class InjectorObject : PipeGeneric, IAtmosLoop { private TileObject tileNeighbour; private PipeObject atmosNeighbour; @@ -19,20 +19,6 @@ public void Initialize() SetAtmosNeighbours(); } - public void SetTileNeighbour(TileObject tile, int index) - { - // We only connect the North side - if (index == 0) - { - tileNeighbour = tile; - } - } - - public void SetAtmosNeighbours() - { - atmosNeighbour = tileNeighbour?.transform.GetComponentInChildren(); - } - public void Step() { if (atmosNeighbour) diff --git a/Assets/Engine/Atmospherics/InjectorObject.cs.meta b/Assets/Engine/Atmospherics/Machinery/InjectorObject.cs.meta similarity index 100% rename from Assets/Engine/Atmospherics/InjectorObject.cs.meta rename to Assets/Engine/Atmospherics/Machinery/InjectorObject.cs.meta diff --git a/Assets/Engine/Atmospherics/MixerObject.cs b/Assets/Engine/Atmospherics/Machinery/MixerObject.cs similarity index 85% rename from Assets/Engine/Atmospherics/MixerObject.cs rename to Assets/Engine/Atmospherics/Machinery/MixerObject.cs index 11abfa27b6..9bf389493c 100644 --- a/Assets/Engine/Atmospherics/MixerObject.cs +++ b/Assets/Engine/Atmospherics/Machinery/MixerObject.cs @@ -7,7 +7,7 @@ namespace SS3D.Engine.Atmospherics { - public class MixerObject : MonoBehaviour, IAtmosLoop, IInteractionTarget + public class MixerObject : PipeGeneric, IAtmosLoop, IInteractionTarget { public float InputOneAmount = 50f; public float MaxPressure = 4500f; @@ -16,11 +16,6 @@ public class MixerObject : MonoBehaviour, IAtmosLoop, IInteractionTarget private float _targetPressure; private float ratioOnetoTwo; - private const float stepsToEqualize = 10f; - - private TileObject[] tileNeighbours = { null, null, null, null }; - private PipeObject[] atmosNeighbours = { null, null, null, null }; - public void Initialize() @@ -28,17 +23,6 @@ public void Initialize() SetAtmosNeighbours(); } - public void SetAtmosNeighbours() - { - int i = 0; - foreach (TileObject tile in tileNeighbours) - { - if (tile != null) - atmosNeighbours[i] = tile.transform.GetComponentInChildren(); - i++; - } - } - void Start() { ratioOnetoTwo = InputOneAmount / 100f; @@ -53,11 +37,6 @@ public void Update() } } - public void SetTileNeighbour(TileObject tile, int index) - { - tileNeighbours[index] = tile; - } - public void SetActive(bool mixerActive) { this.mixerActive = mixerActive; @@ -91,8 +70,8 @@ public void Step() float pressureDifference = _targetPressure - output.GetPressure(); float transferMoles = pressureDifference * 1000 * output.volume / (output.GetAtmosContainer().GetTemperature() * Gas.gasConstant); - // Reach our target pressure in N steps - transferMoles = transferMoles / stepsToEqualize; + // We can not transfer more moles than the machinery allows + transferMoles = Mathf.Min(Gas.maxMoleTransfer, transferMoles); float transfer_moles1 = ratioOnetoTwo * transferMoles; float transfer_moles2 = (1f - ratioOnetoTwo) * transferMoles; diff --git a/Assets/Engine/Atmospherics/MixerObject.cs.meta b/Assets/Engine/Atmospherics/Machinery/MixerObject.cs.meta similarity index 100% rename from Assets/Engine/Atmospherics/MixerObject.cs.meta rename to Assets/Engine/Atmospherics/Machinery/MixerObject.cs.meta diff --git a/Assets/Engine/Atmospherics/PumpObject.cs b/Assets/Engine/Atmospherics/Machinery/PumpObject.cs similarity index 67% rename from Assets/Engine/Atmospherics/PumpObject.cs rename to Assets/Engine/Atmospherics/Machinery/PumpObject.cs index 40259c8631..99f25ae097 100644 --- a/Assets/Engine/Atmospherics/PumpObject.cs +++ b/Assets/Engine/Atmospherics/Machinery/PumpObject.cs @@ -7,7 +7,7 @@ namespace SS3D.Engine.Atmospherics { - public class PumpObject : MonoBehaviour, IAtmosLoop, IInteractionTarget + public class PumpObject : PipeGeneric, IAtmosLoop, IInteractionTarget { public enum PumpType { @@ -15,13 +15,9 @@ public enum PumpType Volume } - private TileObject[] tileNeighbours = { null, null }; - private PipeObject[] atmosNeighbours = { null, null }; - private const float maxPressureSetting = 4500f; private const float maxVolumeSetting = 200f; private const float molesPerStep = 5f; - private const float stepsToEqualize = 10f; public PumpType pumpType; public float TargetPressure = 300f; @@ -39,8 +35,7 @@ public void Step() if (input.GetTotalMoles() == 0) return; - float[] inputGasses = input.GetAtmosContainer().GetGasses(); - float[] outputGasses = output.GetAtmosContainer().GetGasses(); + AtmosContainer inputContainer = input.GetAtmosContainer(); // And the output pressure is acceptable if (pumpType == PumpType.Pressure) @@ -53,8 +48,8 @@ public void Step() float pressureDifference = TargetPressure - output.GetPressure(); float transferMoles = pressureDifference * 1000 * output.volume / (output.GetAtmosContainer().GetTemperature() * Gas.gasConstant); - // Reach our target pressure in N steps - transferMoles = transferMoles / stepsToEqualize; + // We can not transfer more moles than the machinery allows + transferMoles = Mathf.Min(Gas.maxMoleTransfer, transferMoles); // We can't transfer more moles than there are if (transferMoles > totalMoles) @@ -63,15 +58,13 @@ public void Step() for (int i = 0; i < Gas.numOfGases; i++) { // Divide the moles according to their percentage - float molePerGas = (inputGasses[i] / totalMoles) * transferMoles; - if (inputGasses[i] > 0f) + float molePerGas = (inputContainer.GetGas(i) / totalMoles) * transferMoles; + if (inputContainer.GetGas(i) > 0f) { - inputGasses[i] -= molePerGas; - outputGasses[i] += molePerGas; + input.RemoveGas(i, molePerGas); + output.AddGas(i, molePerGas); } } - input.SetStateActive(); - output.SetStateActive(); } } // TODO: different pump speeds between volume/pressure pumps @@ -82,6 +75,9 @@ public void Step() float transferMoles = input.GetPressure() * 1000 * inputVolume / (input.GetAtmosContainer().GetTemperature() * Gas.gasConstant); float totalMoles = input.GetTotalMoles(); + // We can not transfer more moles than the machinery allows + transferMoles = Mathf.Min(molesPerStep, transferMoles); + for (int i = 0; i < Gas.numOfGases; i++) { // We can't transfer more moles than there are @@ -89,37 +85,18 @@ public void Step() transferMoles = totalMoles; // Divide the moles according to their percentage - float molePerGas = (inputGasses[i] / totalMoles) * transferMoles; + float molePerGas = (inputContainer.GetGas(i) / totalMoles) * transferMoles; - if (inputGasses[i] >= molePerGas) + if (inputContainer.GetGas(i) >= molePerGas) { - inputGasses[i] -= molePerGas; - outputGasses[i] += molePerGas; - input.SetStateActive(); - output.SetStateActive(); + input.RemoveGas(i, molePerGas); + output.AddGas(i, molePerGas); } } } } } - public void SetTileNeighbour(TileObject neighbour, int index) - { - if (index == 0 || index == 1) - tileNeighbours[index] = neighbour; - } - - public void SetAtmosNeighbours() - { - int i = 0; - foreach (TileObject tile in tileNeighbours) - { - if (tile != null) - atmosNeighbours[i] = tile.transform.GetComponentInChildren(); - i++; - } - } - public void SetActive(bool pumpActive) { this.pumpActive = pumpActive; diff --git a/Assets/Engine/Atmospherics/PumpObject.cs.meta b/Assets/Engine/Atmospherics/Machinery/PumpObject.cs.meta similarity index 100% rename from Assets/Engine/Atmospherics/PumpObject.cs.meta rename to Assets/Engine/Atmospherics/Machinery/PumpObject.cs.meta diff --git a/Assets/Engine/Atmospherics/Machinery/ScrubberObject.cs b/Assets/Engine/Atmospherics/Machinery/ScrubberObject.cs new file mode 100644 index 0000000000..de01a3c1a7 --- /dev/null +++ b/Assets/Engine/Atmospherics/Machinery/ScrubberObject.cs @@ -0,0 +1,242 @@ +using SS3D.Content.Systems.Interactions; +using SS3D.Engine.Interactions; +using SS3D.Engine.Tiles; +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace SS3D.Engine.Atmospherics +{ + public class ScrubberObject : MonoBehaviour, IAtmosLoop, IInteractionTarget + { + public enum OperatingMode + { + Off, + Scrubbing, + Siphoning + } + + public enum Range + { + Normal, + Extended + } + + public float MaxPressure = 4500f; + public float TargetPressure = 101f; + + public OperatingMode mode = OperatingMode.Scrubbing; + public Range range = Range.Normal; + + public bool filterOxygen = false; + public bool filterNitrogen = false; + public bool filterCarbonDioxide = false; + public bool filterPlasma = false; + + + public PipeLayer pipeLayer; + + private bool deviceActive = true; + private bool siphonActive = false; + private Animator anim; + private float _targetPressure; + private PipeObject connectedPipe; + private TileObject[] tileNeighbours = { null, null, null, null }; + private AtmosObject[] atmosNeighbours = { null, null, null, null }; + + void Update() + { + if (_targetPressure != TargetPressure) + { + _targetPressure = Mathf.Clamp(TargetPressure, 0, MaxPressure); + TargetPressure = _targetPressure; + } + } + + public void Initialize() + { + // Get the animator for our spin animation + anim = GetComponent(); + + // We only check the pipes that are on our own tile + TileObject tileObject = GetComponentInParent(); + PipeObject[] pipes = tileObject.GetComponentsInChildren(); + + foreach (PipeObject pipe in pipes) + { + // Only take the pipe which matches the seleced layer + if (pipe.layer == pipeLayer) + { + connectedPipe = pipe; + } + } + + SetAtmosNeighbours(); + } + + public void Step() + { + int numOfTiles = 0; + bool scrubActive = false; + + switch (range) + { + case Range.Normal: + numOfTiles = 1; + break; + case Range.Extended: + numOfTiles = 5; + break; + } + if (deviceActive) + { + // We loop 1 or 5 times based on the range setting + for (int i = 0; i < numOfTiles; i++) + { + + AtmosObject input = null; + if (i == 0) + input = GetComponentInParent().atmos; + else + input = atmosNeighbours[i - 1]; + + PipeObject output = connectedPipe; + + if (input == null || input.GetTotalMoles() == 0 || output == null || mode == OperatingMode.Off) + return; + + AtmosContainer inputContainer = input.GetAtmosContainer(); + AtmosContainer outputContainer = output.GetAtmosContainer(); + + + + // If the output pressure is acceptable + if (output.GetPressure() <= TargetPressure - 1f) + { + float totalMoles = input.GetTotalMoles(); + + // Calculate necessary moles to transfer using PV=nRT + float pressureDifference = _targetPressure - output.GetPressure(); + float transferMoles = pressureDifference * 1000 * output.volume / (output.GetAtmosContainer().GetTemperature() * Gas.gasConstant); + + // We can not transfer more moles than the machinery allows + transferMoles = Mathf.Min(Gas.maxMoleTransfer, transferMoles); + + // We don't transfer tiny amounts + transferMoles = Mathf.Max(transferMoles, Gas.minMoleTransfer); + + // We can't transfer more moles than there are in the input + if (transferMoles > totalMoles) + transferMoles = totalMoles; + + foreach (AtmosGasses gas in Enum.GetValues(typeof(AtmosGasses))) + { + if (mode == OperatingMode.Siphoning) + { + scrubActive = true; + + // Divide the moles according to their percentage + float molePerGas = (inputContainer.GetGas(gas) / input.GetTotalMoles()) * transferMoles; + if (inputContainer.GetGas(gas) > 0f) + { + input.RemoveGas(gas, molePerGas); + output.AddGas(gas, molePerGas); + + } + } + + // If scrubbing, remove only filtered gas + if (mode == OperatingMode.Scrubbing && IsFiltered(gas)) + { + if (inputContainer.GetGas(gas) > 0f) + { + scrubActive = true; + + // To avoid leaving a small amount of a certain gas, we apply the min threshold again + float molePerGas = Mathf.Min(transferMoles, inputContainer.GetGas(gas)); + + input.RemoveGas(gas, molePerGas); + output.AddGas(gas, molePerGas); + } + } + } + } + } + } + + // Update the animator + anim.SetBool("scrubActive", scrubActive); + anim.SetBool("deviceActive", deviceActive); + } + + bool IsFiltered(AtmosGasses gas) + { + switch (gas) + { + case AtmosGasses.Oxygen: + return filterOxygen; + case AtmosGasses.Nitrogen: + return filterNitrogen; + case AtmosGasses.CarbonDioxide: + return filterCarbonDioxide; + case AtmosGasses.Plasma: + return filterPlasma; + } + return false; + } + + public void SetTileNeighbour(TileObject tile, int index) + { + tileNeighbours[index] = tile; + } + + public void SetAtmosNeighbours() + { + int i = 0; + foreach (TileObject tile in tileNeighbours) + { + if (tile != null) + { + AtmosObject atmosObject = tile.atmos; + atmosNeighbours[i] = atmosObject; + } + i++; + } + } + + public IInteraction[] GenerateInteractions(InteractionEvent interactionEvent) + { + return new IInteraction[] + { + new SimpleInteraction + { + Name = deviceActive ? "Stop scrubbber" : "Start scrubber", Interact = ActiveInteract, RangeCheck = true + }, + new SimpleInteraction + { + Name = siphonActive ? "Siphon mode" : "Scrubbing mode", Interact = ModeInteract, RangeCheck = true + } + }; + } + + private void ActiveInteract(InteractionEvent interactionEvent, InteractionReference arg2) + { + deviceActive = !deviceActive; + } + + private void ModeInteract(InteractionEvent interactionEvent, InteractionReference arg2) + { + if (mode == OperatingMode.Scrubbing) + { + mode = OperatingMode.Siphoning; + siphonActive = true; + } + else if (mode == OperatingMode.Siphoning) + { + mode = OperatingMode.Scrubbing; + siphonActive = false; + } + } + } +} \ No newline at end of file diff --git a/Assets/Engine/Atmospherics/Machinery/ScrubberObject.cs.meta b/Assets/Engine/Atmospherics/Machinery/ScrubberObject.cs.meta new file mode 100644 index 0000000000..60854dcd73 --- /dev/null +++ b/Assets/Engine/Atmospherics/Machinery/ScrubberObject.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8cc8189ffaa055041a7bf1a81283cb61 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Engine/Atmospherics/ValveObject.cs b/Assets/Engine/Atmospherics/Machinery/ValveObject.cs similarity index 100% rename from Assets/Engine/Atmospherics/ValveObject.cs rename to Assets/Engine/Atmospherics/Machinery/ValveObject.cs diff --git a/Assets/Engine/Atmospherics/ValveObject.cs.meta b/Assets/Engine/Atmospherics/Machinery/ValveObject.cs.meta similarity index 100% rename from Assets/Engine/Atmospherics/ValveObject.cs.meta rename to Assets/Engine/Atmospherics/Machinery/ValveObject.cs.meta diff --git a/Assets/Engine/Atmospherics/Machinery/VentObject.cs b/Assets/Engine/Atmospherics/Machinery/VentObject.cs new file mode 100644 index 0000000000..481789c663 --- /dev/null +++ b/Assets/Engine/Atmospherics/Machinery/VentObject.cs @@ -0,0 +1,177 @@ +using System.Collections; +using System.Collections.Generic; +using SS3D.Content.Systems.Interactions; +using SS3D.Engine.Interactions; +using SS3D.Engine.Tiles; +using UnityEngine; + +namespace SS3D.Engine.Atmospherics +{ + public class VentObject : MonoBehaviour, IAtmosLoop, IInteractionTarget + { + public enum OperatingMode + { + Off, + Internal, + External + } + + public OperatingMode mode; + public float TargetPressure = 101.3f; + public PipeLayer pipeLayer; + + private PipeObject connectedPipe; + private Animator anim; + private bool deviceActive = true; + private bool internalActive = false; + + public void Initialize() + { + // Get the animator for our spin animation + anim = GetComponent(); + + // We only check the pipes that are on our own tile + TileObject tileObject = GetComponentInParent(); + PipeObject[] pipes = tileObject.GetComponentsInChildren(); + + foreach (PipeObject pipe in pipes) + { + // Only take the pipe which matches the seleced layer + if (pipe.layer == pipeLayer) + { + connectedPipe = pipe; + } + } + } + + public void Step() + { + bool ventActive = false; + + if (deviceActive) + { + PipeObject input = connectedPipe; + AtmosObject output = GetComponentInParent().atmos; + + if (input != null || input.GetTotalMoles() > 0) + { + + AtmosContainer inputContainer = input.GetAtmosContainer(); + + + if (mode == OperatingMode.External) + { + // If the output pressure is acceptable + if (output.GetPressure() <= TargetPressure - 1f) + { + ventActive = true; + float totalMoles = input.GetTotalMoles(); + + // Calculate necessary moles to transfer using PV=nRT + float pressureDifference = TargetPressure - output.GetPressure(); + float transferMoles = pressureDifference * 1000 * output.GetAtmosContainer().Volume / (output.GetAtmosContainer().GetTemperature() * Gas.gasConstant); + + // We can not transfer more moles than the machinery allows + transferMoles = Mathf.Min(Gas.maxMoleTransfer, transferMoles); + + // We can't transfer more moles than there are + if (transferMoles > totalMoles) + transferMoles = totalMoles; + + for (int i = 0; i < Gas.numOfGases; i++) + { + // Divide the moles according to their percentage + float molePerGas = (inputContainer.GetGas(i) / totalMoles) * transferMoles; + if (inputContainer.GetGas(i) > 0f) + { + input.RemoveGas(i, molePerGas); + output.AddGas(i, molePerGas); + } + } + } + } + + else if (mode == OperatingMode.Internal) + { + // If the output pressure is acceptable + if (input.GetPressure() >= TargetPressure + 1f) + { + ventActive = true; + float totalMoles = input.GetTotalMoles(); + + // Calculate necessary moles to transfer using PV=nRT + float pressureDifference = input.GetPressure() - TargetPressure; + float transferMoles = pressureDifference * 1000 * input.GetAtmosContainer().Volume / (input.GetAtmosContainer().GetTemperature() * Gas.gasConstant); + + // We can not transfer more moles than the machinery allows + transferMoles = Mathf.Min(Gas.maxMoleTransfer, transferMoles); + + // We can't transfer more moles than there are in the input + if (transferMoles > totalMoles) + transferMoles = totalMoles; + + for (int i = 0; i < Gas.numOfGases; i++) + { + // Divide the moles according to their percentage + float molePerGas = (inputContainer.GetGas(i) / totalMoles) * transferMoles; + if (inputContainer.GetGas(i) > 0f) + { + input.RemoveGas(i, molePerGas); + output.AddGas(i, molePerGas); + } + } + } + } + } + } + + // Update the animator + anim.SetBool("ventActive", ventActive); + anim.SetBool("deviceActive", deviceActive); + } + + public void SetTileNeighbour(TileObject tile, int index) + { + return; + } + + public void SetAtmosNeighbours() + { + return; + } + + public IInteraction[] GenerateInteractions(InteractionEvent interactionEvent) + { + return new IInteraction[] + { + new SimpleInteraction + { + Name = deviceActive ? "Stop vent" : "Start vent", Interact = ActiveInteract, RangeCheck = true + }, + new SimpleInteraction + { + Name = internalActive ? "External mode" : "Internal mode", Interact = ModeInteract, RangeCheck = true + } + }; + } + + private void ActiveInteract(InteractionEvent interactionEvent, InteractionReference arg2) + { + deviceActive = !deviceActive; + } + + private void ModeInteract(InteractionEvent interactionEvent, InteractionReference arg2) + { + if (mode == OperatingMode.Internal) + { + mode = OperatingMode.External; + internalActive = false; + } + else if (mode == OperatingMode.External) + { + mode = OperatingMode.Internal; + internalActive = true; + } + } + } +} \ No newline at end of file diff --git a/Assets/Engine/Atmospherics/Machinery/VentObject.cs.meta b/Assets/Engine/Atmospherics/Machinery/VentObject.cs.meta new file mode 100644 index 0000000000..5e4df8b060 --- /dev/null +++ b/Assets/Engine/Atmospherics/Machinery/VentObject.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 34c38d00d3fea3845878d76ab7eeeb81 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Engine/Atmospherics/Pipes.meta b/Assets/Engine/Atmospherics/Pipes.meta new file mode 100644 index 0000000000..fdb071638d --- /dev/null +++ b/Assets/Engine/Atmospherics/Pipes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7015a22203a198c42986a56e9721bb04 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Engine/Atmospherics/Pipes/ManifoldObject.cs b/Assets/Engine/Atmospherics/Pipes/ManifoldObject.cs new file mode 100644 index 0000000000..d0cfc2d5c9 --- /dev/null +++ b/Assets/Engine/Atmospherics/Pipes/ManifoldObject.cs @@ -0,0 +1,54 @@ +using SS3D.Engine.Tiles; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace SS3D.Engine.Atmospherics +{ + public class ManifoldObject : PipeObject, IAtmosLoop + { + public enum ManifoldType + { + FourLayer, + ThreeLayer + } + + public ManifoldType manifoldType; + + // We initialize via atmosloop as a device, so that we are sure that all pipes are set up + public void Initialize() + { + // We only check the pipes that are on our own tile + TileObject tileObject = GetComponentInParent(); + PipeObject[] pipes = tileObject.GetComponentsInChildren(); + + int i = 0; + foreach (PipeObject pipe in pipes) + { + // Skip ourselves + if (pipe.name == this.name) + continue; + + // For the three layer manifold, we skip the upper pipe layer + if (manifoldType == ManifoldType.ThreeLayer && pipe.layer == PipeLayer.Upper) + continue; + + atmosNeighbours[i] = pipe; + pipe.ForceNeighbour(this); + + i++; + } + } + + // Override as we don't behave like a normal pipe + public override void SetAtmosNeighbours() + { + + } + + public void Step() + { + return; + } + } +} \ No newline at end of file diff --git a/Assets/Engine/Atmospherics/Pipes/ManifoldObject.cs.meta b/Assets/Engine/Atmospherics/Pipes/ManifoldObject.cs.meta new file mode 100644 index 0000000000..6a9502ed5e --- /dev/null +++ b/Assets/Engine/Atmospherics/Pipes/ManifoldObject.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f2325e25557c9e9428c2f0d4a6e3a1b9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Engine/Atmospherics/Pipes/PipeGeneric.cs b/Assets/Engine/Atmospherics/Pipes/PipeGeneric.cs new file mode 100644 index 0000000000..575b6dd328 --- /dev/null +++ b/Assets/Engine/Atmospherics/Pipes/PipeGeneric.cs @@ -0,0 +1,58 @@ +using SS3D.Engine.Tiles; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace SS3D.Engine.Atmospherics +{ + public enum PipeLayer + { + L1, + L2, + L3, + Upper + } + + public class PipeGeneric : MonoBehaviour + { + protected TileObject[] tileNeighbours = { null, null, null, null }; + protected PipeObject[] atmosNeighbours = { null, null, null, null }; + public PipeLayer layer; + + // Start is called before the first frame update + void Start() + { + + } + + // Update is called once per frame + void Update() + { + + } + + public void SetTileNeighbour(TileObject neighbour, int index) + { + tileNeighbours[index] = neighbour; + } + + public virtual void SetAtmosNeighbours() + { + int i = 0; + foreach (TileObject tile in tileNeighbours) + { + if (tile != null) + { + PipeObject[] pipes = tile.transform.GetComponentsInChildren(); + foreach (PipeObject pipe in pipes) + { + if (pipe.layer == this.layer) + atmosNeighbours[i] = pipe; + } + } + i++; + } + } + + } +} \ No newline at end of file diff --git a/Assets/Engine/Atmospherics/Pipes/PipeGeneric.cs.meta b/Assets/Engine/Atmospherics/Pipes/PipeGeneric.cs.meta new file mode 100644 index 0000000000..02f3ce251b --- /dev/null +++ b/Assets/Engine/Atmospherics/Pipes/PipeGeneric.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b8c83ba83fe59564cab1f5dd6818e7db +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Engine/Atmospherics/Pipes/PipeHelper.cs b/Assets/Engine/Atmospherics/Pipes/PipeHelper.cs new file mode 100644 index 0000000000..3e91db36d5 --- /dev/null +++ b/Assets/Engine/Atmospherics/Pipes/PipeHelper.cs @@ -0,0 +1,18 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class PipeHelper : MonoBehaviour +{ + // Start is called before the first frame update + void Start() + { + + } + + // Update is called once per frame + void Update() + { + + } +} diff --git a/Assets/Engine/Atmospherics/Pipes/PipeHelper.cs.meta b/Assets/Engine/Atmospherics/Pipes/PipeHelper.cs.meta new file mode 100644 index 0000000000..989d89d962 --- /dev/null +++ b/Assets/Engine/Atmospherics/Pipes/PipeHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fcc6d7779bef7564ebf321d2dc7adf45 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Engine/Atmospherics/PipeObject.cs b/Assets/Engine/Atmospherics/Pipes/PipeObject.cs similarity index 91% rename from Assets/Engine/Atmospherics/PipeObject.cs rename to Assets/Engine/Atmospherics/Pipes/PipeObject.cs index 6aa1d71d67..59e60fdbbd 100644 --- a/Assets/Engine/Atmospherics/PipeObject.cs +++ b/Assets/Engine/Atmospherics/Pipes/PipeObject.cs @@ -6,17 +6,14 @@ namespace SS3D.Engine.Atmospherics { - public class PipeObject : MonoBehaviour + public class PipeObject : PipeGeneric { private const float maxPipePressure = 2000f; - public float volume = 1f; private AtmosContainer atmosContainer = new AtmosContainer(); private float[] tileFlux = { 0f, 0f, 0f, 0f }; private AtmosStates state = AtmosStates.Active; - private TileObject[] tileNeighbours = { null, null, null, null }; - private PipeObject[] atmosNeighbours = { null, null, null, null }; private bool tempSetting = false; private bool[] activeDirection = { false, // Top AtmosObject active @@ -38,22 +35,6 @@ public AtmosContainer GetAtmosContainer() return atmosContainer; } - public void SetTileNeighbour(TileObject neighbour, int index) - { - tileNeighbours[index] = neighbour; - } - - public void SetAtmosNeighbours() - { - int i = 0; - foreach (TileObject tile in tileNeighbours) - { - if (tile != null) - atmosNeighbours[i] = tile.transform.GetComponentInChildren(); - i++; - } - } - public AtmosStates GetState() { return state; @@ -76,6 +57,20 @@ public void SetBlocked(bool blocked) } } + public void ForceNeighbour(PipeObject neighbour) + { + for (int i = 0; i < atmosNeighbours.Length; i++) + { + if (atmosNeighbours[i] == null || atmosNeighbours[i] == neighbour) + { + atmosNeighbours[i] = neighbour; + return; + } + } + + Debug.LogError("Forcing pipe neighbour, but no empty found"); + } + public void RemoveFlux() { tileFlux = new float[] { 0f, 0f, 0f, 0f }; @@ -90,6 +85,15 @@ public void AddGas(AtmosGasses gas, float amount) } } + public void AddGas(int index, float amount) + { + if (state != AtmosStates.Blocked) + { + atmosContainer.AddGas(index, amount); + state = AtmosStates.Active; + } + } + public void RemoveGas(int index, float amount) { if (state != AtmosStates.Blocked) @@ -99,6 +103,15 @@ public void RemoveGas(int index, float amount) } } + public void RemoveGas(AtmosGasses gas, float amount) + { + if (state != AtmosStates.Blocked) + { + atmosContainer.RemoveGas(gas, amount); + state = AtmosStates.Active; + } + } + public void SetGasses(float[] amounts) { atmosContainer.SetGasses(amounts); diff --git a/Assets/Engine/Atmospherics/PipeObject.cs.meta b/Assets/Engine/Atmospherics/Pipes/PipeObject.cs.meta similarity index 100% rename from Assets/Engine/Atmospherics/PipeObject.cs.meta rename to Assets/Engine/Atmospherics/Pipes/PipeObject.cs.meta diff --git a/Assets/Engine/Tile/Connections/OffsetPipesAdjacencyConnector.cs b/Assets/Engine/Tile/Connections/OffsetPipesAdjacencyConnector.cs index 744fef9b22..91cca2d497 100644 --- a/Assets/Engine/Tile/Connections/OffsetPipesAdjacencyConnector.cs +++ b/Assets/Engine/Tile/Connections/OffsetPipesAdjacencyConnector.cs @@ -17,11 +17,28 @@ public enum TileLayer Fixture, } + public enum PipeOrientation + { + o, + cNorth, + cSouth, + i, + lNE, + lNW, + lSE, + lSW, + tNEW, + tNSW, + tNSE, + tSWE, + x + } + public int LayerIndex { get; set; } // Id that adjacent objects must be to count. If null, any id is accepted public string type; - + private PipeOrientation orientation; [Header("Meshes")] [Tooltip("A mesh where no edges are connected")] @@ -51,6 +68,18 @@ public enum TileLayer [Tooltip("A mesh where all edges are connected")] public Mesh x; + public PipeOrientation GetPipeOrientation() + { + return orientation; + } + + public float GetRotation() + { + var cardinalInfo = adjacents.GetCardinalInfo(); + return OrientationHelper.AngleBetween(Orientation.Vertical, cardinalInfo.GetFirstOrientation()); + } + + /** * When a single adjacent turf is updated */ @@ -101,18 +130,28 @@ private void UpdateMeshAndDirection() Mesh mesh; if (cardinalInfo.IsO()) + { mesh = o; + orientation = PipeOrientation.o; + } else if (cardinalInfo.IsC()) { - if(cardinalInfo.north > 0||cardinalInfo.east > 0) + if (cardinalInfo.north > 0 || cardinalInfo.east > 0) + { mesh = cNorth; + orientation = PipeOrientation.cNorth; + } else + { mesh = cSouth; + orientation = PipeOrientation.cSouth; + } rotation = DirectionHelper.AngleBetween(Direction.North, cardinalInfo.GetOnlyPositive()); } else if (cardinalInfo.IsI()) { mesh = i; + orientation = PipeOrientation.i; rotation = OrientationHelper.AngleBetween(Orientation.Vertical, cardinalInfo.GetFirstOrientation()); } else if (cardinalInfo.IsL()) @@ -122,6 +161,12 @@ private void UpdateMeshAndDirection() : sides == Direction.SouthEast ? lSE : sides == Direction.SouthWest ? lSW : lNW; + + orientation = sides == Direction.NorthEast ? PipeOrientation.lNE + : sides == Direction.SouthEast ? PipeOrientation.lSE + : sides == Direction.SouthWest ? PipeOrientation.lSW + : PipeOrientation.lNW; + rotation = 90; } else if (cardinalInfo.IsT()) @@ -131,11 +176,19 @@ private void UpdateMeshAndDirection() : notside == Direction.East ? tNSW : notside == Direction.South ? tNEW : tNSE; + + orientation = notside == Direction.North ? PipeOrientation.tSWE + : notside == Direction.East ? PipeOrientation.tNSW + : notside == Direction.South ? PipeOrientation.tNEW + : PipeOrientation.tNSE; + rotation = 90; } else // Must be X { mesh = x; + orientation = PipeOrientation.x; + rotation = 90; }