diff --git a/NewHorizons/Builder/Body/WaterBuilder.cs b/NewHorizons/Builder/Body/WaterBuilder.cs index a05dd63e..6b75af04 100644 --- a/NewHorizons/Builder/Body/WaterBuilder.cs +++ b/NewHorizons/Builder/Body/WaterBuilder.cs @@ -3,7 +3,6 @@ using NewHorizons.Utility; using UnityEngine; using NewHorizons.External.Modules.VariableSize; using Tessellation; -using NewHorizons.Components.Volumes; namespace NewHorizons.Builder.Body { @@ -80,7 +79,7 @@ namespace NewHorizons.Builder.Body var buoyancyTriggerVolume = buoyancyObject.AddComponent(); buoyancyTriggerVolume._owCollider = owCollider; - var fluidVolume = buoyancyObject.AddComponent(); + var fluidVolume = buoyancyObject.AddComponent(); fluidVolume._fluidType = FluidVolume.Type.WATER; fluidVolume._attachedBody = rb; fluidVolume._triggerVolume = buoyancyTriggerVolume; diff --git a/NewHorizons/Builder/Props/RaftBuilder.cs b/NewHorizons/Builder/Props/RaftBuilder.cs index 2e8c6a15..65e54f46 100644 --- a/NewHorizons/Builder/Props/RaftBuilder.cs +++ b/NewHorizons/Builder/Props/RaftBuilder.cs @@ -1,5 +1,4 @@ -using NewHorizons.Components.Volumes; -using NewHorizons.External.Modules; +using NewHorizons.External.Modules; using NewHorizons.Handlers; using NewHorizons.Utility; using UnityEngine; @@ -38,13 +37,15 @@ namespace NewHorizons.Builder.Props raftController._riverFluid = null; raftController._sector = sector; + raftController._acceleration = info.acceleration; sector.OnOccupantEnterSector += raftController.OnOccupantEnterSector; sector.OnOccupantExitSector += raftController.OnOccupantExitSector; // Detectors var fluidDetector = raftObject.transform.Find("Detector_Raft").GetComponent(); - var waterVolume = planetGO.GetComponentInChildren(); + var waterVolume = planetGO.GetComponentInChildren(); fluidDetector._alignmentFluid = waterVolume; + fluidDetector._buoyancy.checkAgainstWaves = true; // Light sensors foreach (var lightSensor in raftObject.GetComponentsInChildren()) diff --git a/NewHorizons/Components/Volumes/NHFluidVolume.cs b/NewHorizons/Components/Volumes/NHFluidVolume.cs deleted file mode 100644 index 3b5a4a00..00000000 --- a/NewHorizons/Components/Volumes/NHFluidVolume.cs +++ /dev/null @@ -1,13 +0,0 @@ -using UnityEngine; -namespace NewHorizons.Components.Volumes -{ - public class NHFluidVolume : RadialFluidVolume - { - public override float GetDepthAtPosition(Vector3 worldPosition) - { - Vector3 vector = transform.InverseTransformPoint(worldPosition); - float dist = Mathf.Sqrt(vector.x * vector.x + vector.z * vector.z + vector.y * vector.y); - return dist - _radius; - } - } -} diff --git a/NewHorizons/External/Modules/PropModule.cs b/NewHorizons/External/Modules/PropModule.cs index 807aa9d6..fa81ebf0 100644 --- a/NewHorizons/External/Modules/PropModule.cs +++ b/NewHorizons/External/Modules/PropModule.cs @@ -233,6 +233,11 @@ namespace NewHorizons.External.Modules /// Position of the raft /// public MVector3 position; + + /// + /// Acceleration of the raft. Default acceleration is 5. + /// + [DefaultValue(5f)] public float acceleration = 5f; } [JsonObject] diff --git a/NewHorizons/Patches/RaftPatches.cs b/NewHorizons/Patches/RaftPatches.cs index fea55497..196885c0 100644 --- a/NewHorizons/Patches/RaftPatches.cs +++ b/NewHorizons/Patches/RaftPatches.cs @@ -1,5 +1,4 @@ using HarmonyLib; -using NewHorizons.Components.Volumes; using UnityEngine; namespace NewHorizons.Patches { @@ -74,17 +73,17 @@ namespace NewHorizons.Patches } [HarmonyReversePatch] - [HarmonyPatch(typeof(AsymmetricFluidDetector), "ManagedFixedUpdate")] + [HarmonyPatch(typeof(AsymmetricFluidDetector), nameof(AsymmetricFluidDetector.ManagedFixedUpdate))] public static void AsymmetricFluidDetector_ManagedFixedUpdate(AsymmetricFluidDetector __instance) { // This is like doing base.FixedUpdate } [HarmonyPrefix] - [HarmonyPatch(typeof(AlignToSurfaceFluidDetector), "ManagedFixedUpdate")] + [HarmonyPatch(typeof(AlignToSurfaceFluidDetector), nameof(AlignToSurfaceFluidDetector.ManagedFixedUpdate))] public static bool AlignToSurfaceFluidDetector_ManagedFixedUpdate(AlignToSurfaceFluidDetector __instance) { - if (!(__instance._alignmentFluid is NHFluidVolume)) return true; + if (__instance._alignmentFluid is not RadialFluidVolume) return true; // Mostly copy pasting from the AlignWithDirection class AsymmetricFluidDetector_ManagedFixedUpdate(__instance); @@ -104,5 +103,16 @@ namespace NewHorizons.Patches return false; } + + [HarmonyPrefix] + [HarmonyPatch(typeof(FluidVolume), nameof(FluidVolume.GetDepthAtPosition))] + public static bool FluidVolume_GetDepthAtPosition(FluidVolume __instance, ref float __result, Vector3 worldPosition) + { + if (__instance is not RadialFluidVolume radialFluidVolume) return true; + + Vector3 vector = radialFluidVolume.transform.InverseTransformPoint(worldPosition); + __result = Mathf.Sqrt(vector.x * vector.x + vector.z * vector.z + vector.y * vector.y) - radialFluidVolume._radius; + return false; + } } } diff --git a/NewHorizons/Schemas/body_schema.json b/NewHorizons/Schemas/body_schema.json index ddfb16c5..cbd0b20d 100644 --- a/NewHorizons/Schemas/body_schema.json +++ b/NewHorizons/Schemas/body_schema.json @@ -1339,6 +1339,12 @@ "position": { "description": "Position of the raft", "$ref": "#/definitions/MVector3" + }, + "acceleration": { + "type": "number", + "description": "Acceleration of the raft. Default acceleration is 5.", + "format": "float", + "default": 5.0 } } },