mirror of
https://github.com/Outer-Wilds-New-Horizons/new-horizons.git
synced 2025-12-11 20:15:44 +01:00
Make cloaks also turn off tessellated renderers.
Stops water, sand, inner clouds, and any other tessellated renderer from showing even when player is not inside cloak.
This commit is contained in:
parent
164cdbd1b9
commit
4862947b06
@ -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);
|
||||||
|
|||||||
@ -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");
|
||||||
}
|
}
|
||||||
|
|||||||
74
NewHorizons/Components/CloakedTessSphereSectorToggle.cs
Normal file
74
NewHorizons/Components/CloakedTessSphereSectorToggle.cs
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -432,6 +432,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()
|
||||||
@ -448,7 +450,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);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -477,7 +479,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);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user