Merge branch 'common-resources' into somework

This commit is contained in:
Nick 2021-12-30 16:48:04 -05:00 committed by GitHub
commit f76e36fc86
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 159 additions and 174 deletions

View File

@ -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();
}
}
}

View File

@ -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>