diff --git a/.gitignore b/.gitignore index 728f0260..1fbbe24e 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,5 @@ packages .vs bin obj + +*.csproj.user \ No newline at end of file diff --git a/NewHorizons.zip b/NewHorizons.zip new file mode 100644 index 00000000..0a454348 Binary files /dev/null and b/NewHorizons.zip differ diff --git a/NewHorizons/Build/NewHorizons.dll b/NewHorizons/Build/NewHorizons.dll new file mode 100644 index 00000000..d4087e5e Binary files /dev/null and b/NewHorizons/Build/NewHorizons.dll differ diff --git a/NewHorizons/Build/NewHorizons.pdb b/NewHorizons/Build/NewHorizons.pdb new file mode 100644 index 00000000..661d8722 Binary files /dev/null and b/NewHorizons/Build/NewHorizons.pdb differ diff --git a/NewHorizons/Build/PacificEngine.OW_CommonResources.dll b/NewHorizons/Build/PacificEngine.OW_CommonResources.dll new file mode 100644 index 00000000..a224fcf8 Binary files /dev/null and b/NewHorizons/Build/PacificEngine.OW_CommonResources.dll differ diff --git a/NewHorizons/Build/default-config.json b/NewHorizons/Build/default-config.json new file mode 100644 index 00000000..d0637618 --- /dev/null +++ b/NewHorizons/Build/default-config.json @@ -0,0 +1,3 @@ +{ + "enabled": true +} \ No newline at end of file diff --git a/NewHorizons/Build/manifest.json b/NewHorizons/Build/manifest.json new file mode 100644 index 00000000..707cd8d5 --- /dev/null +++ b/NewHorizons/Build/manifest.json @@ -0,0 +1,8 @@ +{ + "filename": "NewHorizons.dll", + "author": "xen", + "name": "New Horizons", + "uniqueName": "xen.NewHorizons", + "version": "0.1.5", + "owmlVersion": "2.1.0" +} diff --git a/NewHorizons/Builder/General/HeavenlyBodyBuilder.cs b/NewHorizons/Builder/General/HeavenlyBodyBuilder.cs index 6f4ebad6..5689cf15 100644 --- a/NewHorizons/Builder/General/HeavenlyBodyBuilder.cs +++ b/NewHorizons/Builder/General/HeavenlyBodyBuilder.cs @@ -1,6 +1,6 @@ using NewHorizons.External; using NewHorizons.OrbitalPhysics; -using NewHorizons.Utility; +using NewHorizons.Utility; using PacificEngine.OW_CommonResources.Game.Resource; using PacificEngine.OW_CommonResources.Game.State; using PacificEngine.OW_CommonResources.Geometry.Orbits; @@ -15,22 +15,57 @@ namespace NewHorizons.Builder.General { public static class HeavenlyBodyBuilder { + private static Dictionary bodyName = new Dictionary(); + public static void Make(GameObject body, IPlanetConfig config, float SOI, GravityVolume bodyGravity, InitialMotion initialMotion, AstroObject ao) { var size = new Position.Size(config.Base.SurfaceSize, SOI); var G = GravityVolume.GRAVITATIONAL_CONSTANT; - var gravity = new Gravity(G, bodyGravity == null ? 0 : bodyGravity.GetFalloffExponent(), bodyGravity == null ? 0 : bodyGravity.GetStandardGravitationalParameter() / G); - var parent = HeavenlyBody.FromString(config.Orbit.PrimaryBody); + var gravity = Gravity.of(bodyGravity == null ? 2f : bodyGravity.GetFalloffExponent(), bodyGravity == null ? 0 : bodyGravity.GetStandardGravitationalParameter() / G); + var parent = getBody(config.Orbit.PrimaryBody); var orbit = OrbitalHelper.KeplerCoordinatesFromOrbitModule(config.Orbit); - var hb = new HeavenlyBody(config.Name); - var planetoid = new Planet.Plantoid(size, gravity, body.transform.rotation, initialMotion._initAngularSpeed, parent, orbit); + var hb = getBody(config.Name); + if (hb == null) + { + hb = addHeavenlyBody(config.Name); + } + var planetoid = new Planet.Plantoid(size, gravity, body.transform.rotation, initialMotion._initAngularSpeed, parent, orbit); + + var mapping = Planet.defaultMapping; + mapping[hb] = planetoid; + Planet.defaultMapping = mapping; + } - Planet.mapping.Add(hb, planetoid); - Planet.defaultMapping.Add(hb, planetoid); + private static HeavenlyBody addHeavenlyBody(string name) + { + var hb = new HeavenlyBody(name); + bodyName.Add(name, hb); + + var astroLookup = Position.AstroLookup; + astroLookup.Add(hb, () => AstroObjectLocator.GetAstroObject(name)); + Position.AstroLookup = astroLookup; - Position.AstroLookup.Add(hb, () => ao); - Position.BodyLookup.Add(hb, () => ao?.GetAttachedOWRigidbody()); + var bodyLookup = Position.BodyLookup; + bodyLookup.Add(hb, () => AstroObjectLocator.GetAstroObject(name)?.GetAttachedOWRigidbody()); + Position.BodyLookup = bodyLookup; + + return hb; + } + + private static HeavenlyBody getBody(string name) + { + if (bodyName.ContainsKey(name)) + { + return bodyName[name]; + } + + var hb = Position.find(AstroObjectLocator.GetAstroObject(name)); + if (hb != null) + { + bodyName.Add(name, hb); + } + return hb; } } } diff --git a/NewHorizons/Builder/Orbital/OrbitlineBuilder.cs b/NewHorizons/Builder/Orbital/OrbitlineBuilder.cs index eaeba4e3..13304cf7 100644 --- a/NewHorizons/Builder/Orbital/OrbitlineBuilder.cs +++ b/NewHorizons/Builder/Orbital/OrbitlineBuilder.cs @@ -24,8 +24,8 @@ namespace NewHorizons.Builder.Orbital var ecc = config.Orbit.Eccentricity; OrbitLine orbitLine; - if (ecc == 0) orbitLine = orbitGO.AddComponent(); - else if (ecc > 0 && ecc < 1) orbitLine = orbitGO.AddComponent(); + if (ecc == 0) orbitLine = orbitGO.AddComponent(); + else if (ecc > 0 && ecc < 1) orbitLine = orbitGO.AddComponent(); else orbitLine = orbitGO.AddComponent(); var color = Color.white; diff --git a/NewHorizons/NewHorizons.csproj b/NewHorizons/NewHorizons.csproj index 404c67b0..e1139148 100644 --- a/NewHorizons/NewHorizons.csproj +++ b/NewHorizons/NewHorizons.csproj @@ -1,4 +1,5 @@ - + + {8A39F9E7-1A89-430C-9C3E-BDFB3B7E17DF} net48 @@ -27,12 +28,32 @@ Always - - - $(OuterWildsModsDirectory)\PacificEngine.OW_CommonResources\PacificEngine.OW_CommonResources.dll + + + + 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)" + + \ No newline at end of file diff --git a/NewHorizons/NewHorizons.csproj.user b/NewHorizons/NewHorizons.csproj.user deleted file mode 100644 index 0199f732..00000000 --- a/NewHorizons/NewHorizons.csproj.user +++ /dev/null @@ -1,8 +0,0 @@ - - - - ProjectFiles - $(AppData)\OuterWildsModManager\OWML\Mods\xen.NewHorizons - $(AppData)\OuterWildsModManager\OWML\Mods - -