diff --git a/NewHorizons/Builder/Updater/OrbitUpdater.cs b/NewHorizons/Builder/Updater/OrbitUpdater.cs new file mode 100644 index 00000000..695d9c87 --- /dev/null +++ b/NewHorizons/Builder/Updater/OrbitUpdater.cs @@ -0,0 +1,69 @@ +using NewHorizons.Builder.Orbital; +using NewHorizons.OrbitalPhysics; +using NewHorizons.Utility; +using PacificEngine.OW_CommonResources.Game.Resource; +using PacificEngine.OW_CommonResources.Game.State; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; +using Logger = NewHorizons.Utility.Logger; + +namespace NewHorizons.Builder.Updater +{ + public static class OrbitUpdater + { + public static void Update(NewHorizonsBody body, GameObject go) + { + var mapping = Planet.defaultMapping; + var heavenlyBody = CommonResourcesUtilities.HeavenlyBodyFromAstroObject(AstroObjectLocator.GetAstroObject(body.Config.Name)); + + Logger.Log($"Updating position of {body.Config.Name}/{heavenlyBody}"); + + if (heavenlyBody != HeavenlyBody.None) + { + var original = mapping[heavenlyBody]; + + var coords = OrbitalHelper.KeplerCoordinatesFromOrbitModule(body.Config.Orbit); + + var parent = original.state.parent; + if (body.Config.Orbit.PrimaryBody != null) + { + var parentAO = AstroObjectLocator.GetAstroObject(body.Config.Orbit.PrimaryBody); + var newParent = CommonResourcesUtilities.HeavenlyBodyFromAstroObject(parentAO); + if (newParent != HeavenlyBody.None) + { + Logger.LogWarning($"Sorry, can't change primary body for planets yet. You tried making {body.Config.Name} orbit {newParent}"); + /* + parent = newParent; + // Have to change the gravity stuff + go.GetComponentInChildren()._detectableFields = new ForceVolume[] { parentAO.GetGravityVolume() }; + go.GetComponent()._primaryBody = parentAO; + */ + } + else Logger.LogError($"Couldn't find new parent {body.Config.Orbit.PrimaryBody}"); + } + + var planetoid = new Planet.Plantoid( + original.size, + original.gravity, + go.transform.rotation, + InitialMotionBuilder.SiderealPeriodToAngularSpeed(body.Config.Orbit.SiderealPeriod), + parent, + coords + ); + + mapping[heavenlyBody] = planetoid; + + Planet.defaultMapping = mapping; + Planet.mapping = mapping; + } + else + { + Logger.LogError($"Couldn't find heavenlyBody for {body.Config.Name}"); + } + } + } +} diff --git a/NewHorizons/Main.cs b/NewHorizons/Main.cs index 0e238d07..74d73c23 100644 --- a/NewHorizons/Main.cs +++ b/NewHorizons/Main.cs @@ -4,6 +4,7 @@ using NewHorizons.Builder.Body; using NewHorizons.Builder.General; using NewHorizons.Builder.Orbital; using NewHorizons.Builder.Props; +using NewHorizons.Builder.Updater; using NewHorizons.Components; using NewHorizons.External; using NewHorizons.External.VariableSize; @@ -429,55 +430,7 @@ namespace NewHorizons // Since orbits are always there just check if they set a semi major axis if (body.Config.Orbit != null && body.Config.Orbit.SemiMajorAxis != 0f) { - var mapping = Planet.defaultMapping; - var heavenlyBody = CommonResourcesUtilities.HeavenlyBodyFromAstroObject(AstroObjectLocator.GetAstroObject(body.Config.Name)); - - Logger.Log($"Updating position of {body.Config.Name} -> {heavenlyBody}"); - - if (heavenlyBody != PacificEngine.OW_CommonResources.Game.Resource.HeavenlyBody.None) - { - var original = mapping[heavenlyBody]; - - var targetScale = original.state.orbit.scale; - var coords = OrbitalHelper.KeplerCoordinatesFromOrbitModule(body.Config.Orbit); - var orientation = original.state.orbit.orientation; - - var parent = original.state.parent; - if (body.Config.Orbit.PrimaryBody != null) - { - var parentAO = AstroObjectLocator.GetAstroObject(body.Config.Orbit.PrimaryBody); - var newParent = CommonResourcesUtilities.HeavenlyBodyFromAstroObject(parentAO); - if (newParent != HeavenlyBody.None) - { - parent = newParent; - // Have to change the gravity stuff - go.GetComponentInChildren()._detectableFields = new ForceVolume[] { parentAO.GetGravityVolume() }; - go.GetComponent()._primaryBody = parentAO; - Logger.Log($"WHO???? {body.Config.Name}, {parentAO.name}"); - //Instance.ModHelper.Events.Unity.FireOnNextUpdate(() => UpdatePosition(go, body, parentAO)); - } - else Logger.LogError($"Couldn't find new parent {body.Config.Orbit.PrimaryBody}"); - } - - Logger.Log($"{body.Config.Name} has parent {parent}"); - var planetoid = new Planet.Plantoid( - original.size, - original.gravity, - go.transform.rotation, - InitialMotionBuilder.SiderealPeriodToAngularSpeed(body.Config.Orbit.SiderealPeriod), - parent, - coords - ); - - mapping[heavenlyBody] = planetoid; - - Planet.defaultMapping = mapping; - Planet.mapping = mapping; - } - else - { - Logger.LogError($"Couldn't find heavenlyBody for {body.Config.Name}"); - } + OrbitUpdater.Update(body, go); } return go;