Merge branch 'dev' into fixed-barycenter

This commit is contained in:
Nick 2022-07-05 18:52:34 -04:00
commit 151ebd3919
6 changed files with 111 additions and 27 deletions

View File

@ -1,4 +1,5 @@
using NewHorizons.External.Modules; using NewHorizons.External.Modules;
using NewHorizons.Components;
using NewHorizons.Utility; using NewHorizons.Utility;
using OWML.Common; using OWML.Common;
using System; using System;
@ -20,7 +21,7 @@ namespace NewHorizons.Builder.Atmosphere
private static readonly int CapTex = Shader.PropertyToID("_CapTex"); private static readonly int CapTex = Shader.PropertyToID("_CapTex");
private static readonly int ColorRamp = Shader.PropertyToID("_ColorRamp"); private static readonly int ColorRamp = Shader.PropertyToID("_ColorRamp");
public static void Make(GameObject planetGO, Sector sector, AtmosphereModule atmo, IModBehaviour mod) public static void Make(GameObject planetGO, Sector sector, AtmosphereModule atmo, bool cloaked, IModBehaviour mod)
{ {
if (_lightningPrefab == null) _lightningPrefab = SearchUtilities.Find("GiantsDeep_Body/Sector_GD/Clouds_GD/LightningGenerator_GD"); if (_lightningPrefab == null) _lightningPrefab = SearchUtilities.Find("GiantsDeep_Body/Sector_GD/Clouds_GD/LightningGenerator_GD");
if (_colorRamp == null) _colorRamp = ImageUtilities.GetTexture(Main.Instance, "Assets/textures/Clouds_Bottom_ramp.png"); if (_colorRamp == null) _colorRamp = ImageUtilities.GetTexture(Main.Instance, "Assets/textures/Clouds_Bottom_ramp.png");
@ -65,8 +66,10 @@ namespace NewHorizons.Builder.Atmosphere
bottomTSR.LODBias = 0; bottomTSR.LODBias = 0;
bottomTSR.LODRadius = 1f; bottomTSR.LODRadius = 1f;
TessSphereSectorToggle bottomTSST = cloudsBottomGO.AddComponent<TessSphereSectorToggle>(); if (cloaked)
bottomTSST._sector = sector; cloudsBottomGO.AddComponent<CloakedTessSphereSectorToggle>()._sector = sector;
else
cloudsBottomGO.AddComponent<TessSphereSectorToggle>()._sector = sector;
GameObject cloudsFluidGO = new GameObject("CloudsFluid"); GameObject cloudsFluidGO = new GameObject("CloudsFluid");
cloudsFluidGO.SetActive(false); cloudsFluidGO.SetActive(false);

View File

@ -19,7 +19,6 @@ namespace NewHorizons.Builder.Atmosphere
// Going to copy from dark bramble // Going to copy from dark bramble
var dbFog = SearchUtilities.Find("DarkBramble_Body/Atmosphere_DB/FogLOD"); var dbFog = SearchUtilities.Find("DarkBramble_Body/Atmosphere_DB/FogLOD");
var dbPlanetaryFogController = SearchUtilities.Find("DarkBramble_Body/Atmosphere_DB/FogSphere_DB").GetComponent<PlanetaryFogController>(); var dbPlanetaryFogController = SearchUtilities.Find("DarkBramble_Body/Atmosphere_DB/FogSphere_DB").GetComponent<PlanetaryFogController>();
var brambleLODFog = SearchUtilities.Find("DarkBramble_Body/Sector_DB/Proxy_DB/LOD_DB_VolumeticFog");
MeshFilter MF = fogGO.AddComponent<MeshFilter>(); MeshFilter MF = fogGO.AddComponent<MeshFilter>();
MF.mesh = dbFog.GetComponent<MeshFilter>().mesh; MF.mesh = dbFog.GetComponent<MeshFilter>().mesh;
@ -37,30 +36,9 @@ namespace NewHorizons.Builder.Atmosphere
PFC.fogColorRampIntensity = 1f; PFC.fogColorRampIntensity = 1f;
PFC.fogTint = atmo.fogTint.ToColor(); PFC.fogTint = atmo.fogTint.ToColor();
GameObject lodFogGO = new GameObject("LODFogSphere");
lodFogGO.SetActive(false);
lodFogGO.transform.parent = fogGO.transform;
lodFogGO.transform.localScale = Vector3.one * atmo.size / 320f;
MeshFilter lodMF = lodFogGO.AddComponent<MeshFilter>();
lodMF.mesh = brambleLODFog.GetComponent<MeshFilter>().mesh;
MeshRenderer lodMR = lodFogGO.AddComponent<MeshRenderer>();
lodMR.material = new Material(brambleLODFog.GetComponent<MeshRenderer>().material);
lodMR.material.color = atmo.fogTint.ToColor();
lodMR.material.renderQueue = 1000;
/*
SectorProxy lodFogSectorProxy = lodFogGO.AddComponent<SectorProxy>();
lodFogSectorProxy._renderers = new List<Renderer> { lodMR };
lodFogSectorProxy.SetSector(sector);
*/
fogGO.transform.position = planetGO.transform.position; fogGO.transform.position = planetGO.transform.position;
lodFogGO.transform.position = planetGO.transform.position;
fogGO.SetActive(true); fogGO.SetActive(true);
lodFogGO.SetActive(true);
} }
} }
} }

View File

@ -11,6 +11,8 @@ namespace NewHorizons.Components
private bool _isInitialized; private bool _isInitialized;
private List<Renderer> _renderers = null; private List<Renderer> _renderers = null;
private List<TessellatedRenderer> _tessellatedRenderers = null;
private List<CloakedTessSphereSectorToggle> _tessSphereToggles = null;
public static bool isPlayerInside = false; public static bool isPlayerInside = false;
public static bool isProbeInside = false; public static bool isProbeInside = false;
@ -51,6 +53,8 @@ namespace NewHorizons.Components
private void SetUpList() private void SetUpList()
{ {
_renderers = _root.GetComponentsInChildren<Renderer>().ToList(); _renderers = _root.GetComponentsInChildren<Renderer>().ToList();
_tessellatedRenderers = _root.GetComponentsInChildren<TessellatedRenderer>().ToList();
_tessSphereToggles = _root.GetComponentsInChildren<CloakedTessSphereSectorToggle>().ToList();
} }
public void OnPlayerEnter() public void OnPlayerEnter()
@ -62,6 +66,16 @@ namespace NewHorizons.Components
renderer.forceRenderingOff = false; renderer.forceRenderingOff = false;
} }
foreach (var tessellatedRenderer in _tessellatedRenderers)
{
tessellatedRenderer.enabled = true;
}
foreach (var tessSphereSectorToggle in _tessSphereToggles)
{
tessSphereSectorToggle.OnEnterCloakField();
}
isPlayerInside = true; isPlayerInside = true;
GlobalMessenger.FireEvent("PlayerEnterCloakField"); GlobalMessenger.FireEvent("PlayerEnterCloakField");
} }
@ -75,6 +89,16 @@ namespace NewHorizons.Components
renderer.forceRenderingOff = true; renderer.forceRenderingOff = true;
} }
foreach (var tessellatedRenderer in _tessellatedRenderers)
{
tessellatedRenderer.enabled = false;
}
foreach (var tessSphereSectorToggle in _tessSphereToggles)
{
tessSphereSectorToggle.OnExitCloakField();
}
isPlayerInside = false; isPlayerInside = false;
GlobalMessenger.FireEvent("PlayerExitCloakField"); GlobalMessenger.FireEvent("PlayerExitCloakField");
} }

View File

@ -0,0 +1,74 @@
using UnityEngine;
namespace NewHorizons.Components
{
[RequireComponent(typeof(TessellatedSphereRenderer))]
public class CloakedTessSphereSectorToggle : SectoredMonoBehaviour
{
protected TessellatedSphereRenderer _renderer;
protected bool _inMapView;
protected bool _inCloakField;
public override void Awake()
{
_renderer = GetComponent<TessellatedSphereRenderer>();
GlobalMessenger.AddListener("EnterMapView", OnEnterMapView);
GlobalMessenger.AddListener("ExitMapView", OnExitMapView);
}
public override void OnDestroy()
{
GlobalMessenger.RemoveListener("EnterMapView", OnEnterMapView);
GlobalMessenger.RemoveListener("ExitMapView", OnExitMapView);
}
public override void OnChangeSector(Sector oldSector, Sector newSector) => OnSectorOccupantsUpdated();
public override void OnSectorOccupantsUpdated()
{
if (_inMapView || !_inCloakField)
return;
if (_sector != null)
{
if (_sector.ContainsAnyOccupants(DynamicOccupant.Player | DynamicOccupant.Probe) && !_renderer.enabled)
{
_renderer.enabled = true;
}
else
{
if (_sector.ContainsAnyOccupants(DynamicOccupant.Player | DynamicOccupant.Probe) || !_renderer.enabled)
return;
_renderer.enabled = false;
}
}
else
_renderer.enabled = true;
}
public virtual void OnEnterMapView()
{
_inMapView = true;
if (_renderer.enabled)
_renderer.enabled = false;
}
public virtual void OnExitMapView()
{
_inMapView = false;
OnSectorOccupantsUpdated();
}
public virtual void OnEnterCloakField()
{
_inCloakField = true;
OnSectorOccupantsUpdated();
}
public virtual void OnExitCloakField()
{
_inCloakField = false;
if (_renderer.enabled)
_renderer.enabled = false;
}
}
}

View File

@ -435,6 +435,8 @@ namespace NewHorizons.Handlers
SandBuilder.Make(go, sector, rb, body.Config.Sand); SandBuilder.Make(go, sector, rb, body.Config.Sand);
} }
var willHaveCloak = body.Config.Cloak != null && body.Config.Cloak.radius != 0f;
if (body.Config.Atmosphere != null) if (body.Config.Atmosphere != null)
{ {
var airInfo = new AtmosphereModule.AirInfo() var airInfo = new AtmosphereModule.AirInfo()
@ -451,7 +453,7 @@ namespace NewHorizons.Handlers
if (!string.IsNullOrEmpty(body.Config.Atmosphere?.clouds?.texturePath)) if (!string.IsNullOrEmpty(body.Config.Atmosphere?.clouds?.texturePath))
{ {
CloudsBuilder.Make(go, sector, body.Config.Atmosphere, body.Mod); CloudsBuilder.Make(go, sector, body.Config.Atmosphere, willHaveCloak, body.Mod);
SunOverrideBuilder.Make(go, sector, body.Config.Atmosphere, body.Config.Water, surfaceSize); SunOverrideBuilder.Make(go, sector, body.Config.Atmosphere, body.Config.Water, surfaceSize);
} }
@ -480,7 +482,7 @@ namespace NewHorizons.Handlers
} }
// Has to go last probably // Has to go last probably
if (body.Config.Cloak != null && body.Config.Cloak.radius != 0f) if (willHaveCloak)
{ {
CloakBuilder.Make(go, sector, rb, body.Config.Cloak, !body.Config.ReferenceFrame.hideInMap, body.Mod); CloakBuilder.Make(go, sector, rb, body.Config.Cloak, !body.Config.ReferenceFrame.hideInMap, body.Mod);
} }

View File

@ -92,6 +92,9 @@ namespace NewHorizons.Utility
{ {
if (CachedGameObjects.TryGetValue(path, out var go)) return go; if (CachedGameObjects.TryGetValue(path, out var go)) return go;
go = GameObject.Find(path);
if (go != null) return go;
var names = path.Split('/'); var names = path.Split('/');
var rootName = names[0]; var rootName = names[0];
var root = SceneManager.GetActiveScene().GetRootGameObjects().FirstOrDefault(x => x.name == rootName); var root = SceneManager.GetActiveScene().GetRootGameObjects().FirstOrDefault(x => x.name == rootName);