Clean up OrbitUpdater

This commit is contained in:
Nick J. Connors 2022-02-11 00:38:08 -05:00
parent 819ae6e952
commit 1a0ac92de7
2 changed files with 71 additions and 49 deletions

View File

@ -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<ConstantForceDetector>()._detectableFields = new ForceVolume[] { parentAO.GetGravityVolume() };
go.GetComponent<AstroObject>()._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}");
}
}
}
}

View File

@ -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<ConstantForceDetector>()._detectableFields = new ForceVolume[] { parentAO.GetGravityVolume() };
go.GetComponent<AstroObject>()._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;