mirror of
https://github.com/Outer-Wilds-New-Horizons/new-horizons.git
synced 2025-12-11 20:15:44 +01:00
Merge branch 'common-resources' into somework
This commit is contained in:
commit
f76e36fc86
@ -1,149 +1,155 @@
|
|||||||
using NewHorizons.External;
|
using NewHorizons.External;
|
||||||
using NewHorizons.OrbitalPhysics;
|
using NewHorizons.OrbitalPhysics;
|
||||||
using NewHorizons.Utility;
|
using NewHorizons.Utility;
|
||||||
using OWML.Common;
|
using OWML.Common;
|
||||||
using OWML.Utils;
|
using OWML.Utils;
|
||||||
using PacificEngine.OW_CommonResources.Game;
|
using PacificEngine.OW_CommonResources.Game;
|
||||||
using PacificEngine.OW_CommonResources.Game.Resource;
|
using PacificEngine.OW_CommonResources.Game.Resource;
|
||||||
using PacificEngine.OW_CommonResources.Game.State;
|
using PacificEngine.OW_CommonResources.Game.State;
|
||||||
using PacificEngine.OW_CommonResources.Geometry.Orbits;
|
using PacificEngine.OW_CommonResources.Geometry.Orbits;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using Logger = NewHorizons.Utility.Logger;
|
using Logger = NewHorizons.Utility.Logger;
|
||||||
|
|
||||||
namespace NewHorizons.Builder.General
|
namespace NewHorizons.Builder.General
|
||||||
{
|
{
|
||||||
public static class HeavenlyBodyBuilder
|
public static class HeavenlyBodyBuilder
|
||||||
{
|
{
|
||||||
private static readonly Dictionary<string, HeavenlyBody> _bodyMap = new Dictionary<string, HeavenlyBody>();
|
private static readonly Dictionary<string, HeavenlyBody> _bodyMap = new Dictionary<string, HeavenlyBody>();
|
||||||
|
|
||||||
public static void Make(GameObject body, IPlanetConfig config, float SOI, GravityVolume bodyGravity, InitialMotion initialMotion)
|
public static void Make(GameObject body, IPlanetConfig config, float SOI, GravityVolume bodyGravity, InitialMotion initialMotion)
|
||||||
{
|
{
|
||||||
var size = new Position.Size(config.Base.SurfaceSize, SOI);
|
var size = new Position.Size(config.Base.SurfaceSize, SOI);
|
||||||
var gravity = getGravity(bodyGravity);
|
var gravity = getGravity(bodyGravity);
|
||||||
var parent = GetBody(config.Orbit.PrimaryBody);
|
var parent = GetBody(config.Orbit.PrimaryBody);
|
||||||
var orbit = OrbitalHelper.KeplerCoordinatesFromOrbitModule(config.Orbit);
|
var orbit = OrbitalHelper.KeplerCoordinatesFromOrbitModule(config.Orbit);
|
||||||
if (parent == HeavenlyBody.None)
|
if (parent == HeavenlyBody.None)
|
||||||
{
|
{
|
||||||
Helper.helper.Console.WriteLine($"Could not find planet ({config.Name}) reference to its parent {config.Orbit.PrimaryBody}", MessageType.Warning);
|
Helper.helper.Console.WriteLine($"Could not find planet ({config.Name}) reference to its parent {config.Orbit.PrimaryBody}", MessageType.Warning);
|
||||||
}
|
}
|
||||||
|
|
||||||
var hb = GetBody(config.Name);
|
var hb = GetBody(config.Name);
|
||||||
if (hb == null)
|
if (hb == null)
|
||||||
{
|
{
|
||||||
hb = AddHeavenlyBody(config.Name);
|
hb = AddHeavenlyBody(config.Name);
|
||||||
}
|
}
|
||||||
|
|
||||||
var mapping = Planet.defaultMapping;
|
Planet.Plantoid planetoid;
|
||||||
if (!config.Orbit.IsStatic)
|
|
||||||
{
|
if (!config.Orbit.IsStatic)
|
||||||
var planetoid = new Planet.Plantoid(size, gravity, body.transform.rotation, initialMotion._initAngularSpeed, parent, orbit);
|
{
|
||||||
|
planetoid = new Planet.Plantoid(size, gravity, body.transform.rotation, initialMotion._initAngularSpeed, parent, orbit);
|
||||||
mapping[hb] = planetoid;
|
}
|
||||||
Planet.defaultMapping = mapping;
|
else
|
||||||
}
|
{
|
||||||
|
planetoid = new Planet.Plantoid(size, gravity, body.transform.rotation, 0f, HeavenlyBody.None, body.transform.position, Vector3.zero);
|
||||||
// Fix for binary focal points
|
}
|
||||||
var focalPoint = Position.AstroLookup[parent].Invoke()?.gameObject.GetComponent<BinaryFocalPoint>();
|
|
||||||
if (focalPoint != null && mapping.ContainsKey(parent))
|
var mapping = Planet.defaultMapping;
|
||||||
{
|
mapping[hb] = planetoid;
|
||||||
var primary = Position.getBody(GetBody(focalPoint.PrimaryName));
|
Planet.defaultMapping = mapping;
|
||||||
var secondary = Position.getBody(GetBody(focalPoint.SecondaryName));
|
|
||||||
|
// Fix for binary focal points
|
||||||
if(primary != null && secondary != null)
|
var focalPoint = Position.AstroLookup[parent].Invoke()?.gameObject.GetComponent<BinaryFocalPoint>();
|
||||||
{
|
if (focalPoint != null && mapping.ContainsKey(parent))
|
||||||
Logger.Log($"Fixing BinaryFocalPoint HeavenlyBody gravity value for {parent.name}");
|
{
|
||||||
var primaryGravity = getGravity(primary?.GetAttachedGravityVolume());
|
var primary = Position.getBody(GetBody(focalPoint.PrimaryName));
|
||||||
var secondaryGravity = getGravity(secondary?.GetAttachedGravityVolume());
|
var secondary = Position.getBody(GetBody(focalPoint.SecondaryName));
|
||||||
|
|
||||||
var exponent = (primaryGravity.exponent + secondaryGravity.exponent) / 2f;
|
if(primary != null && secondary != null)
|
||||||
var mass = (primaryGravity.mass + secondaryGravity.mass) / 4f;
|
{
|
||||||
|
Logger.Log($"Fixing BinaryFocalPoint HeavenlyBody gravity value for {parent.name}");
|
||||||
mapping[parent] = new Planet.Plantoid(mapping[parent].size, Gravity.of(exponent, mass), mapping[parent].state);
|
var primaryGravity = getGravity(primary?.GetAttachedGravityVolume());
|
||||||
Planet.defaultMapping = mapping;
|
var secondaryGravity = getGravity(secondary?.GetAttachedGravityVolume());
|
||||||
}
|
|
||||||
}
|
var exponent = (primaryGravity.exponent + secondaryGravity.exponent) / 2f;
|
||||||
}
|
var mass = (primaryGravity.mass + secondaryGravity.mass) / 4f;
|
||||||
|
|
||||||
public static void Remove(AstroObject obj)
|
mapping[parent] = new Planet.Plantoid(mapping[parent].size, Gravity.of(exponent, mass), mapping[parent].state);
|
||||||
{
|
Planet.defaultMapping = mapping;
|
||||||
var astro = Position.find(obj);
|
}
|
||||||
|
}
|
||||||
var mapping = Planet.defaultMapping;
|
}
|
||||||
mapping.Remove(astro);
|
|
||||||
Planet.defaultMapping = mapping;
|
public static void Remove(AstroObject obj)
|
||||||
}
|
{
|
||||||
|
var astro = Position.find(obj);
|
||||||
private static Gravity getGravity(GravityVolume volume)
|
|
||||||
{
|
var mapping = Planet.defaultMapping;
|
||||||
if (volume == null)
|
mapping.Remove(astro);
|
||||||
{
|
Planet.defaultMapping = mapping;
|
||||||
return Gravity.of(2, 0);
|
}
|
||||||
}
|
|
||||||
|
private static Gravity getGravity(GravityVolume volume)
|
||||||
var exponent = volume._falloffType != GravityVolume.FalloffType.linear ? 2f : 1f;
|
{
|
||||||
var mass = (volume._surfaceAcceleration * Mathf.Pow(volume._upperSurfaceRadius, exponent)) / GravityVolume.GRAVITATIONAL_CONSTANT;
|
if (volume == null)
|
||||||
|
{
|
||||||
return Gravity.of(exponent, mass);
|
return Gravity.of(2, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static HeavenlyBody AddHeavenlyBody(string name)
|
var exponent = volume._falloffType != GravityVolume.FalloffType.linear ? 2f : 1f;
|
||||||
{
|
var mass = (volume._surfaceAcceleration * Mathf.Pow(volume._upperSurfaceRadius, exponent)) / GravityVolume.GRAVITATIONAL_CONSTANT;
|
||||||
var hb = new HeavenlyBody(name);
|
|
||||||
_bodyMap.Add(name, hb);
|
return Gravity.of(exponent, mass);
|
||||||
|
}
|
||||||
var astroLookup = Position.AstroLookup;
|
|
||||||
var bodyLookup = Position.BodyLookup;
|
private static HeavenlyBody AddHeavenlyBody(string name)
|
||||||
|
{
|
||||||
astroLookup.Add(hb, () => GetAstroObject(name));
|
var hb = new HeavenlyBody(name);
|
||||||
bodyLookup.Add(hb, () => GetOWRigidbody(name));
|
_bodyMap.Add(name, hb);
|
||||||
|
|
||||||
Position.AstroLookup = astroLookup;
|
var astroLookup = Position.AstroLookup;
|
||||||
Position.BodyLookup = bodyLookup;
|
var bodyLookup = Position.BodyLookup;
|
||||||
|
|
||||||
return hb;
|
astroLookup.Add(hb, () => GetAstroObject(name));
|
||||||
}
|
bodyLookup.Add(hb, () => GetOWRigidbody(name));
|
||||||
|
|
||||||
private static HeavenlyBody GetBody(string name)
|
Position.AstroLookup = astroLookup;
|
||||||
{
|
Position.BodyLookup = bodyLookup;
|
||||||
if (_bodyMap.ContainsKey(name))
|
|
||||||
{
|
return hb;
|
||||||
return _bodyMap[name];
|
}
|
||||||
}
|
|
||||||
|
private static HeavenlyBody GetBody(string name)
|
||||||
var hb = Position.find(AstroObjectLocator.GetAstroObject(name));
|
{
|
||||||
if (hb != null)
|
if (_bodyMap.ContainsKey(name))
|
||||||
{
|
{
|
||||||
_bodyMap.Add(name, hb);
|
return _bodyMap[name];
|
||||||
}
|
}
|
||||||
return hb;
|
|
||||||
}
|
var hb = Position.find(AstroObjectLocator.GetAstroObject(name));
|
||||||
|
if (hb != null)
|
||||||
public static void Reset()
|
{
|
||||||
{
|
_bodyMap.Add(name, hb);
|
||||||
Planet.defaultMapping = Planet.standardMapping;
|
}
|
||||||
}
|
return hb;
|
||||||
|
}
|
||||||
private static AstroObject GetAstroObject(string name)
|
|
||||||
{
|
public static void Reset()
|
||||||
var astroBody = AstroObjectLocator.GetAstroObject(name);
|
{
|
||||||
if (astroBody == null
|
Planet.defaultMapping = Planet.standardMapping;
|
||||||
|| astroBody.gameObject == null)
|
}
|
||||||
{
|
|
||||||
return null;
|
private static AstroObject GetAstroObject(string name)
|
||||||
}
|
{
|
||||||
|
var astroBody = AstroObjectLocator.GetAstroObject(name);
|
||||||
return astroBody;
|
if (astroBody == null
|
||||||
}
|
|| astroBody.gameObject == null)
|
||||||
|
{
|
||||||
private static OWRigidbody GetOWRigidbody(string name)
|
return null;
|
||||||
{
|
}
|
||||||
var astroBody = GetAstroObject(name);
|
|
||||||
return astroBody?.GetOWRigidbody();
|
return astroBody;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
private static OWRigidbody GetOWRigidbody(string name)
|
||||||
|
{
|
||||||
|
var astroBody = GetAstroObject(name);
|
||||||
|
return astroBody?.GetOWRigidbody();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ProjectGuid>{8A39F9E7-1A89-430C-9C3E-BDFB3B7E17DF}</ProjectGuid>
|
<ProjectGuid>{8A39F9E7-1A89-430C-9C3E-BDFB3B7E17DF}</ProjectGuid>
|
||||||
<TargetFramework>net48</TargetFramework>
|
<TargetFramework>net48</TargetFramework>
|
||||||
@ -33,27 +32,7 @@
|
|||||||
<HintPath>$(OuterWildsModsDirectory)\PacificEngine.OW_CommonResources\PacificEngine.OW_CommonResources.dll</HintPath>
|
<HintPath>$(OuterWildsModsDirectory)\PacificEngine.OW_CommonResources\PacificEngine.OW_CommonResources.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<ItemGroup>
|
||||||
<PropertyGroup>
|
<Content Include="NewHorizons.csproj.user" />
|
||||||
<PostBuildEvent>
|
</ItemGroup>
|
||||||
rmdir /Q /S "$(OuterWildsModsDirectory)\$(ProjectName)"
|
|
||||||
md "$(OuterWildsModsDirectory)\$(ProjectName)"
|
|
||||||
md "$(OuterWildsModsDirectory)\$(ProjectName)\AssetBundle"
|
|
||||||
copy /y "$(ProjectDir)default-config.json" "$(OuterWildsModsDirectory)\$(ProjectName)"
|
|
||||||
copy /y "$(ProjectDir)manifest.json" "$(OuterWildsModsDirectory)\$(ProjectName)"
|
|
||||||
copy /y "$(ProjectDir)AssetBundle" "$(OuterWildsModsDirectory)\$(ProjectName)\AssetBundle"
|
|
||||||
copy /y "$(TargetPath)" "$(OuterWildsModsDirectory)\$(ProjectName)"
|
|
||||||
|
|
||||||
rmdir /Q /S "$(ProjectDir)$(ProjectName)"
|
|
||||||
md "$(ProjectDir)$(ProjectName)"
|
|
||||||
md "$(ProjectDir)$(ProjectName)\AssetBundle"
|
|
||||||
copy /y "$(ProjectDir)default-config.json" "$(ProjectDir)$(ProjectName)"
|
|
||||||
copy /y "$(ProjectDir)manifest.json" "$(ProjectDir)$(ProjectName)"
|
|
||||||
copy /y "$(ProjectDir)AssetBundle" "$(ProjectDir)$(ProjectName)\AssetBundle"
|
|
||||||
copy /y "$(TargetPath)" "$(ProjectDir)$(ProjectName)"
|
|
||||||
del /q "$(ProjectDir)..\$(ProjectName).zip"
|
|
||||||
powershell Compress-Archive "$(ProjectDir)$(ProjectName)" "$(ProjectDir)..\$(ProjectName).zip"
|
|
||||||
rmdir /Q /S "$(ProjectDir)$(ProjectName)"
|
|
||||||
</PostBuildEvent>
|
|
||||||
</PropertyGroup>
|
|
||||||
</Project>
|
</Project>
|
||||||
Loading…
x
Reference in New Issue
Block a user