mirror of
https://github.com/Outer-Wilds-New-Horizons/new-horizons.git
synced 2025-12-11 20:15:44 +01:00
Clean up OrbitUpdater
This commit is contained in:
parent
819ae6e952
commit
1a0ac92de7
69
NewHorizons/Builder/Updater/OrbitUpdater.cs
Normal file
69
NewHorizons/Builder/Updater/OrbitUpdater.cs
Normal 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}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -4,6 +4,7 @@ using NewHorizons.Builder.Body;
|
|||||||
using NewHorizons.Builder.General;
|
using NewHorizons.Builder.General;
|
||||||
using NewHorizons.Builder.Orbital;
|
using NewHorizons.Builder.Orbital;
|
||||||
using NewHorizons.Builder.Props;
|
using NewHorizons.Builder.Props;
|
||||||
|
using NewHorizons.Builder.Updater;
|
||||||
using NewHorizons.Components;
|
using NewHorizons.Components;
|
||||||
using NewHorizons.External;
|
using NewHorizons.External;
|
||||||
using NewHorizons.External.VariableSize;
|
using NewHorizons.External.VariableSize;
|
||||||
@ -429,55 +430,7 @@ namespace NewHorizons
|
|||||||
// Since orbits are always there just check if they set a semi major axis
|
// Since orbits are always there just check if they set a semi major axis
|
||||||
if (body.Config.Orbit != null && body.Config.Orbit.SemiMajorAxis != 0f)
|
if (body.Config.Orbit != null && body.Config.Orbit.SemiMajorAxis != 0f)
|
||||||
{
|
{
|
||||||
var mapping = Planet.defaultMapping;
|
OrbitUpdater.Update(body, go);
|
||||||
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}");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return go;
|
return go;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user