From b66752980c6465c00c4945236d4d4e678913cb05 Mon Sep 17 00:00:00 2001 From: Ben C Date: Thu, 12 May 2022 18:11:00 -0400 Subject: [PATCH] Add orb proxies --- NewHorizons/Builder/Body/ProxyBuilder.cs | 52 +++++++++++++++++++ .../Builder/General/PlanetDestroyer.cs | 20 +++---- .../Builder/StarSystem/SkyboxBuilder.cs | 13 ++--- NewHorizons/Components/NHProxy.cs | 38 ++++++++++++++ NewHorizons/Handlers/PlanetCreationHandler.cs | 7 ++- NewHorizons/Patches/OWCameraPatch.cs | 27 +++++++--- 6 files changed, 130 insertions(+), 27 deletions(-) create mode 100644 NewHorizons/Builder/Body/ProxyBuilder.cs create mode 100644 NewHorizons/Components/NHProxy.cs diff --git a/NewHorizons/Builder/Body/ProxyBuilder.cs b/NewHorizons/Builder/Body/ProxyBuilder.cs new file mode 100644 index 00000000..56234629 --- /dev/null +++ b/NewHorizons/Builder/Body/ProxyBuilder.cs @@ -0,0 +1,52 @@ +using NewHorizons.Components; +using NewHorizons.Utility; +using OWML.Common; +using UnityEngine; + +namespace NewHorizons.Builder.Body +{ + public class ProxyBuilder + { + public static void Make(GameObject gameObject, NewHorizonsBody body) + { + var proxyName = $"{body.Config.Name}_Proxy"; + + // Stars don't work yet so uh + /* + if (body.Config.Star != null) + { + var sunProxy = SearchUtilities.CachedFind("SunProxy(Clone)"); + var oldProxyEffectController = sunProxy.GetComponentInChildren(); + var newProxy = Object.Instantiate(sunProxy, gameObject.transform.position, Quaternion.identity); + newProxy.name = proxyName; + var proxyController = newProxy.GetComponent(); + proxyController._proxySunController = newProxy.GetComponentInChildren(); + proxyController._proxySunController._atmosphereMaterial = oldProxyEffectController._atmosphereMaterial; + proxyController._proxySunController._fogMaterial = oldProxyEffectController._fogMaterial; + Main.Instance.ModHelper.Events.Unity.FireOnNextUpdate(() => + { + proxyController._sunTransform = gameObject.transform; + proxyController._realSunController = gameObject.GetComponent(); + }); + } + */ + // TODO: Make it not do it on vanilla bodies + var newModel = GameObject.CreatePrimitive(PrimitiveType.Sphere); + Object.Destroy(newModel.GetComponent()); + var newProxy = new GameObject(proxyName); + newModel.transform.SetParent(newProxy.transform); + newModel.transform.position = Vector3.zero; + newModel.transform.localScale = 1000 * Vector3.one; + newModel.transform.rotation = Quaternion.identity; + var proxyController = newProxy.AddComponent(); + proxyController.astroName = body.Config.Name; + proxyController._realObjectDiameter = body.Config.Base?.SurfaceSize ?? 100f; + proxyController.renderer = newProxy.GetComponentInChildren(); + } + + private static void MakeHeightMapProxy(NewHorizonsBody body, IModBehaviour mod) + { + + } + } +} \ No newline at end of file diff --git a/NewHorizons/Builder/General/PlanetDestroyer.cs b/NewHorizons/Builder/General/PlanetDestroyer.cs index 9a0cdc43..435a1b2a 100644 --- a/NewHorizons/Builder/General/PlanetDestroyer.cs +++ b/NewHorizons/Builder/General/PlanetDestroyer.cs @@ -202,16 +202,16 @@ namespace NewHorizons.Builder.General private static void RemoveProxy(string name) { - if (name.Equals("TowerTwin")) name = "AshTwin"; - if (name.Equals("CaveTwin")) name = "EmberTwin"; - var distantProxy = GameObject.Find(name + "_DistantProxy"); - var distantProxyClone = GameObject.Find(name + "_DistantProxy(Clone)"); - - if (distantProxy != null) GameObject.Destroy(distantProxy.gameObject); - if (distantProxyClone != null) GameObject.Destroy(distantProxyClone.gameObject); - - if (distantProxy == null && distantProxyClone == null) - Logger.Log($"Couldn't find proxy for {name}"); + // if (name.Equals("TowerTwin")) name = "AshTwin"; + // if (name.Equals("CaveTwin")) name = "EmberTwin"; + // var distantProxy = GameObject.Find(name + "_DistantProxy"); + // var distantProxyClone = GameObject.Find(name + "_DistantProxy(Clone)"); + // + // if (distantProxy != null) GameObject.Destroy(distantProxy.gameObject); + // if (distantProxyClone != null) GameObject.Destroy(distantProxyClone.gameObject); + // + // if (distantProxy == null && distantProxyClone == null) + // Logger.Log($"Couldn't find proxy for {name}"); } } } diff --git a/NewHorizons/Builder/StarSystem/SkyboxBuilder.cs b/NewHorizons/Builder/StarSystem/SkyboxBuilder.cs index f3557854..b15e20ec 100644 --- a/NewHorizons/Builder/StarSystem/SkyboxBuilder.cs +++ b/NewHorizons/Builder/StarSystem/SkyboxBuilder.cs @@ -49,15 +49,10 @@ namespace NewHorizons.Builder.StarSystem Logger.Log("Building Skybox"); Material skyBoxMaterial = LoadMaterial(info.assetBundle, info.path, mod.ModHelper.Manifest.UniqueName, mod); RenderSettings.skybox = skyBoxMaterial; - DynamicGI.UpdateEnvironment(); - Main.Instance.ModHelper.Events.Unity.FireOnNextUpdate(() => + foreach (var camera in Resources.FindObjectsOfTypeAll()) { - foreach (var camera in Resources.FindObjectsOfTypeAll()) - { - camera.clearFlags = CameraClearFlags.Skybox; - } - }); + camera.clearFlags = CameraClearFlags.Skybox; + } } - } -} +} \ No newline at end of file diff --git a/NewHorizons/Components/NHProxy.cs b/NewHorizons/Components/NHProxy.cs new file mode 100644 index 00000000..608be57a --- /dev/null +++ b/NewHorizons/Components/NHProxy.cs @@ -0,0 +1,38 @@ +using NewHorizons.Utility; +using UnityEngine; + +namespace NewHorizons.Components +{ + public class NHProxy : ProxyPlanet + { + public string astroName; + public Renderer renderer; + + public override void Initialize() + { + AstroObject astroObject = AstroObjectLocator.GetAstroObject(astroName); + _realObjectTransform = astroObject.transform; + _hasAtmosphere = _atmosphere != null; + if (_hasAtmosphere) + { + _atmosphereMaterial = new Material(_atmosphere.sharedMaterial); + _baseAtmoMatShellInnerRadius = _atmosphereMaterial.GetFloat(propID_AtmoInnerRadius); + _baseAtmoMatShellOuterRadius = _atmosphereMaterial.GetFloat(propID_AtmoOuterRadius); + _atmosphere.sharedMaterial = _atmosphereMaterial; + } + if (_fog != null) + { + _hasFog = true; + _fogMaterial = new Material(_fog.sharedMaterial); + _fogMaterial.SetFloat(propID_LODFade, 1f); + _fog.sharedMaterial = _fogMaterial; + } + } + + public override void ToggleRendering(bool on) + { + base.ToggleRendering(on); + renderer.enabled = on; + } + } +} \ No newline at end of file diff --git a/NewHorizons/Handlers/PlanetCreationHandler.cs b/NewHorizons/Handlers/PlanetCreationHandler.cs index 67bdaa22..a1dc74fd 100644 --- a/NewHorizons/Handlers/PlanetCreationHandler.cs +++ b/NewHorizons/Handlers/PlanetCreationHandler.cs @@ -119,7 +119,7 @@ namespace NewHorizons.Handlers Logger.Log("Done loading bodies"); // I don't know what these do but they look really weird from a distance - Main.Instance.ModHelper.Events.Unity.FireOnNextUpdate(PlanetDestroyer.RemoveAllProxies); + // Main.Instance.ModHelper.Events.Unity.FireOnNextUpdate(PlanetDestroyer.RemoveAllProxies); if (Main.SystemDict[Main.Instance.CurrentStarSystem].Config.destroyStockPlanets) PlanetDestroyer.RemoveSolarSystem(); } @@ -398,6 +398,11 @@ namespace NewHorizons.Handlers // Has to go last probably if (body.Config.Base.CloakRadius != 0f) CloakBuilder.Make(go, sector, body.Config.Base.CloakRadius); + + Main.Instance.ModHelper.Events.Unity.FireOnNextUpdate(() => + { + ProxyBuilder.Make(go, body); + }); return go; } diff --git a/NewHorizons/Patches/OWCameraPatch.cs b/NewHorizons/Patches/OWCameraPatch.cs index 5bfde6ee..917ba797 100644 --- a/NewHorizons/Patches/OWCameraPatch.cs +++ b/NewHorizons/Patches/OWCameraPatch.cs @@ -5,6 +5,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using UnityEngine; +using UnityEngine.Rendering; namespace NewHorizons.Patches { @@ -15,13 +16,25 @@ namespace NewHorizons.Patches [HarmonyPatch(typeof(OWCamera), nameof(OWCamera.Awake))] public static void OnOWCameraAwake(OWCamera __instance) { - var oldDist = __instance.farClipPlane; - var newDist = __instance.farClipPlane * 10f; - if (__instance.useFarCamera) Mathf.Clamp(newDist, oldDist, 50000f); - else newDist = Mathf.Clamp(newDist, oldDist, 10000000f); - __instance.farClipPlane = newDist; - __instance.farCameraDistance = newDist; - __instance.mainCamera.farClipPlane = newDist; + // var oldDist = __instance.farClipPlane; + // var newDist = __instance.farClipPlane * 10f; + // if (__instance.useFarCamera) Mathf.Clamp(newDist, oldDist, 50000f); + // else newDist = Mathf.Clamp(newDist, oldDist, 10000000f); + // __instance.farClipPlane = newDist; + // __instance.farCameraDistance = newDist; + // __instance.mainCamera.farClipPlane = newDist; } + + // [HarmonyPrefix] + // [HarmonyPatch(typeof(OWCamera), nameof(OWCamera.RebuildSkybox))] + // public static bool OnOWCameraRebuildSkybox(OWCamera __instance) + // { + // __instance._skyboxCommandBuffer = new CommandBuffer(); + // __instance._skyboxCommandBuffer.name = "Skybox"; + // var camera = __instance._useFarCamera && !SystemInfo.usesReversedZBuffer ? __instance._farCamera : __instance._mainCamera; + // CameraEvent evt = CameraEvent.BeforeSkybox; + // camera.AddCommandBuffer(evt, __instance._skyboxCommandBuffer); + // return false; + // } } }