mirror of
https://github.com/Outer-Wilds-New-Horizons/new-horizons.git
synced 2025-12-11 20:15:44 +01:00
Merge branch 'dev' into fix-remove-children
This commit is contained in:
commit
9c55f0fbbd
@ -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);
|
||||||
|
|||||||
@ -1,141 +1,153 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
namespace NewHorizons.Components
|
namespace NewHorizons.Components
|
||||||
{
|
{
|
||||||
public class CloakSectorController : MonoBehaviour
|
public class CloakSectorController : MonoBehaviour
|
||||||
{
|
{
|
||||||
private CloakFieldController _cloak;
|
private CloakFieldController _cloak;
|
||||||
private GameObject _root;
|
private GameObject _root;
|
||||||
|
|
||||||
private bool _isInitialized;
|
private bool _isInitialized;
|
||||||
|
|
||||||
private List<Renderer> _renderers = null;
|
private List<Renderer> _renderers = null;
|
||||||
private List<TessellatedRenderer> _tessellatedRenderers = null;
|
private List<TessellatedRenderer> _tessellatedRenderers = null;
|
||||||
|
private List<CloakedTessSphereSectorToggle> _tessSphereToggles = null;
|
||||||
public static bool isPlayerInside = false;
|
|
||||||
public static bool isProbeInside = false;
|
public static bool isPlayerInside = false;
|
||||||
public static bool isShipInside = false;
|
public static bool isProbeInside = false;
|
||||||
|
public static bool isShipInside = false;
|
||||||
public void Init(CloakFieldController cloak, GameObject root)
|
|
||||||
{
|
public void Init(CloakFieldController cloak, GameObject root)
|
||||||
_cloak = cloak;
|
{
|
||||||
_root = root;
|
_cloak = cloak;
|
||||||
|
_root = root;
|
||||||
// Lets just clear these off idc
|
|
||||||
_cloak.OnPlayerEnter = new OWEvent();
|
// Lets just clear these off idc
|
||||||
_cloak.OnPlayerExit = new OWEvent();
|
_cloak.OnPlayerEnter = new OWEvent();
|
||||||
_cloak.OnProbeEnter = new OWEvent();
|
_cloak.OnPlayerExit = new OWEvent();
|
||||||
_cloak.OnProbeExit = new OWEvent();
|
_cloak.OnProbeEnter = new OWEvent();
|
||||||
_cloak.OnShipEnter = new OWEvent();
|
_cloak.OnProbeExit = new OWEvent();
|
||||||
_cloak.OnShipExit = new OWEvent();
|
_cloak.OnShipEnter = new OWEvent();
|
||||||
|
_cloak.OnShipExit = new OWEvent();
|
||||||
_cloak.OnPlayerEnter += OnPlayerEnter;
|
|
||||||
_cloak.OnPlayerExit += OnPlayerExit;
|
_cloak.OnPlayerEnter += OnPlayerEnter;
|
||||||
_cloak.OnProbeEnter += OnProbeEnter;
|
_cloak.OnPlayerExit += OnPlayerExit;
|
||||||
_cloak.OnProbeExit += OnProbeExit;
|
_cloak.OnProbeEnter += OnProbeEnter;
|
||||||
_cloak.OnShipEnter += OnShipEnter;
|
_cloak.OnProbeExit += OnProbeExit;
|
||||||
_cloak.OnShipExit += OnShipExit;
|
_cloak.OnShipEnter += OnShipEnter;
|
||||||
|
_cloak.OnShipExit += OnShipExit;
|
||||||
_isInitialized = true;
|
|
||||||
}
|
_isInitialized = true;
|
||||||
|
}
|
||||||
void OnDestroy()
|
|
||||||
{
|
void OnDestroy()
|
||||||
if (_isInitialized)
|
{
|
||||||
{
|
if (_isInitialized)
|
||||||
_cloak.OnPlayerEnter -= OnPlayerEnter;
|
{
|
||||||
_cloak.OnPlayerExit -= OnPlayerExit;
|
_cloak.OnPlayerEnter -= OnPlayerEnter;
|
||||||
}
|
_cloak.OnPlayerExit -= OnPlayerExit;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
private void SetUpList()
|
|
||||||
{
|
private void SetUpList()
|
||||||
_renderers = _root.GetComponentsInChildren<Renderer>().ToList();
|
{
|
||||||
_tessellatedRenderers = _root.GetComponentsInChildren<TessellatedRenderer>().ToList();
|
_renderers = _root.GetComponentsInChildren<Renderer>().ToList();
|
||||||
}
|
_tessellatedRenderers = _root.GetComponentsInChildren<TessellatedRenderer>().ToList();
|
||||||
|
_tessSphereToggles = _root.GetComponentsInChildren<CloakedTessSphereSectorToggle>().ToList();
|
||||||
public void OnPlayerEnter()
|
}
|
||||||
{
|
|
||||||
SetUpList();
|
public void OnPlayerEnter()
|
||||||
|
{
|
||||||
foreach (var renderer in _renderers)
|
SetUpList();
|
||||||
{
|
|
||||||
renderer.forceRenderingOff = false;
|
foreach (var renderer in _renderers)
|
||||||
}
|
{
|
||||||
|
renderer.forceRenderingOff = false;
|
||||||
foreach (var tessellatedRenderer in _tessellatedRenderers)
|
}
|
||||||
{
|
|
||||||
tessellatedRenderer.enabled = false;
|
foreach (var tessellatedRenderer in _tessellatedRenderers)
|
||||||
}
|
{
|
||||||
|
tessellatedRenderer.enabled = true;
|
||||||
isPlayerInside = true;
|
}
|
||||||
GlobalMessenger.FireEvent("PlayerEnterCloakField");
|
|
||||||
}
|
foreach (var tessSphereSectorToggle in _tessSphereToggles)
|
||||||
|
{
|
||||||
public void OnPlayerExit()
|
tessSphereSectorToggle.OnEnterCloakField();
|
||||||
{
|
}
|
||||||
SetUpList();
|
|
||||||
|
isPlayerInside = true;
|
||||||
foreach (var renderer in _renderers)
|
GlobalMessenger.FireEvent("PlayerEnterCloakField");
|
||||||
{
|
}
|
||||||
renderer.forceRenderingOff = true;
|
|
||||||
}
|
public void OnPlayerExit()
|
||||||
|
{
|
||||||
foreach (var tessellatedRenderer in _tessellatedRenderers)
|
SetUpList();
|
||||||
{
|
|
||||||
tessellatedRenderer.enabled = true;
|
foreach (var renderer in _renderers)
|
||||||
}
|
{
|
||||||
|
renderer.forceRenderingOff = true;
|
||||||
isPlayerInside = false;
|
}
|
||||||
GlobalMessenger.FireEvent("PlayerExitCloakField");
|
|
||||||
}
|
foreach (var tessellatedRenderer in _tessellatedRenderers)
|
||||||
|
{
|
||||||
public void OnProbeEnter()
|
tessellatedRenderer.enabled = false;
|
||||||
{
|
}
|
||||||
isProbeInside = true;
|
|
||||||
GlobalMessenger.FireEvent("ProbeEnterCloakField");
|
foreach (var tessSphereSectorToggle in _tessSphereToggles)
|
||||||
}
|
{
|
||||||
|
tessSphereSectorToggle.OnExitCloakField();
|
||||||
public void OnProbeExit()
|
}
|
||||||
{
|
|
||||||
isProbeInside = false;
|
isPlayerInside = false;
|
||||||
GlobalMessenger.FireEvent("ProbeExitCloakField");
|
GlobalMessenger.FireEvent("PlayerExitCloakField");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnShipEnter()
|
public void OnProbeEnter()
|
||||||
{
|
{
|
||||||
isShipInside = true;
|
isProbeInside = true;
|
||||||
GlobalMessenger.FireEvent("ShipEnterCloakField");
|
GlobalMessenger.FireEvent("ProbeEnterCloakField");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnShipExit()
|
public void OnProbeExit()
|
||||||
{
|
{
|
||||||
isShipInside = false;
|
isProbeInside = false;
|
||||||
GlobalMessenger.FireEvent("ShipExitCloakField");
|
GlobalMessenger.FireEvent("ProbeExitCloakField");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void EnableCloak()
|
public void OnShipEnter()
|
||||||
{
|
{
|
||||||
SunLightController.RegisterSunOverrider(_cloak, 900);
|
isShipInside = true;
|
||||||
_cloak._cloakSphereRenderer.SetActivation(true);
|
GlobalMessenger.FireEvent("ShipEnterCloakField");
|
||||||
Shader.EnableKeyword("_CLOAKINGFIELDENABLED");
|
}
|
||||||
_cloak._cloakVisualsEnabled = true;
|
|
||||||
}
|
public void OnShipExit()
|
||||||
|
{
|
||||||
public void DisableCloak()
|
isShipInside = false;
|
||||||
{
|
GlobalMessenger.FireEvent("ShipExitCloakField");
|
||||||
SunLightController.UnregisterSunOverrider(_cloak);
|
}
|
||||||
_cloak._cloakSphereRenderer.SetActivation(false);
|
|
||||||
Shader.DisableKeyword("_CLOAKINGFIELDENABLED");
|
public void EnableCloak()
|
||||||
_cloak._cloakVisualsEnabled = false;
|
{
|
||||||
}
|
SunLightController.RegisterSunOverrider(_cloak, 900);
|
||||||
|
_cloak._cloakSphereRenderer.SetActivation(true);
|
||||||
public void SetReferenceFrameVolumeActive(bool active) => _cloak._referenceFrameVolume?.gameObject.SetActive(active);
|
Shader.EnableKeyword("_CLOAKINGFIELDENABLED");
|
||||||
public void EnableReferenceFrameVolume() => SetReferenceFrameVolumeActive(true);
|
_cloak._cloakVisualsEnabled = true;
|
||||||
public void DisableReferenceFrameVolume() => SetReferenceFrameVolumeActive(false);
|
}
|
||||||
|
|
||||||
public void TurnOnMusic() => _cloak._hasTriggeredMusic = false;
|
public void DisableCloak()
|
||||||
public void TurnOffMusic() => _cloak._hasTriggeredMusic = true;
|
{
|
||||||
}
|
SunLightController.UnregisterSunOverrider(_cloak);
|
||||||
}
|
_cloak._cloakSphereRenderer.SetActivation(false);
|
||||||
|
Shader.DisableKeyword("_CLOAKINGFIELDENABLED");
|
||||||
|
_cloak._cloakVisualsEnabled = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetReferenceFrameVolumeActive(bool active) => _cloak._referenceFrameVolume?.gameObject.SetActive(active);
|
||||||
|
public void EnableReferenceFrameVolume() => SetReferenceFrameVolumeActive(true);
|
||||||
|
public void DisableReferenceFrameVolume() => SetReferenceFrameVolumeActive(false);
|
||||||
|
|
||||||
|
public void TurnOnMusic() => _cloak._hasTriggeredMusic = false;
|
||||||
|
public void TurnOffMusic() => _cloak._hasTriggeredMusic = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
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