mirror of
https://github.com/Outer-Wilds-New-Horizons/new-horizons.git
synced 2025-12-11 20:15:44 +01:00
Disappear bramble dimension when not inside
This commit is contained in:
parent
49c912aadf
commit
36ef82a855
@ -1,5 +1,6 @@
|
||||
using HarmonyLib;
|
||||
using NewHorizons.Builder.Props;
|
||||
using NewHorizons.Components;
|
||||
using NewHorizons.Components.Orbital;
|
||||
using NewHorizons.Handlers;
|
||||
using NewHorizons.Utility;
|
||||
@ -177,6 +178,10 @@ namespace NewHorizons.Builder.Body
|
||||
cloak._sectors = new Sector[] { sector };
|
||||
cloak.GetComponent<Renderer>().enabled = true;
|
||||
|
||||
// Cull stuff
|
||||
var cullController = go.AddComponent<BrambleSectorController>();
|
||||
cullController.SetSector(sector);
|
||||
|
||||
// finalize
|
||||
atmo.SetActive(true);
|
||||
volumes.SetActive(true);
|
||||
|
||||
105
NewHorizons/Components/BrambleSectorController.cs
Normal file
105
NewHorizons/Components/BrambleSectorController.cs
Normal file
@ -0,0 +1,105 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
|
||||
namespace NewHorizons.Components
|
||||
{
|
||||
public class BrambleSectorController : MonoBehaviour, ISectorGroup
|
||||
{
|
||||
private Sector _sector;
|
||||
|
||||
private List<Renderer> _renderers = null;
|
||||
private List<TessellatedRenderer> _tessellatedRenderers = null;
|
||||
private List<Collider> _colliders = null;
|
||||
private List<Light> _lights = null;
|
||||
|
||||
public static bool isPlayerInside = false;
|
||||
public static bool isProbeInside = false;
|
||||
public static bool isShipInside = false;
|
||||
|
||||
private bool _renderersShown = false;
|
||||
|
||||
public Sector GetSector() => _sector;
|
||||
|
||||
public void SetSector(Sector sector)
|
||||
{
|
||||
if (_sector != null) _sector.OnSectorOccupantsUpdated -= OnSectorOccupantsUpdated;
|
||||
|
||||
_sector = sector;
|
||||
_sector.OnSectorOccupantsUpdated += OnSectorOccupantsUpdated;
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
if (_sector != null) _sector.OnSectorOccupantsUpdated -= OnSectorOccupantsUpdated;
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
_renderers = gameObject.GetComponentsInChildren<Renderer>().ToList();
|
||||
_tessellatedRenderers = gameObject.GetComponentsInChildren<TessellatedRenderer>().ToList();
|
||||
_colliders = gameObject.GetComponentsInChildren<Collider>().ToList();
|
||||
_lights = gameObject.GetComponentsInChildren<Light>().ToList();
|
||||
|
||||
DisableRenderers();
|
||||
}
|
||||
|
||||
private void OnSectorOccupantsUpdated()
|
||||
{
|
||||
if (_sector.ContainsAnyOccupants(DynamicOccupant.Player | DynamicOccupant.Probe))
|
||||
{
|
||||
if (!_renderersShown) EnableRenderers();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (_renderersShown) DisableRenderers();
|
||||
}
|
||||
}
|
||||
|
||||
private void EnableRenderers()
|
||||
{
|
||||
foreach (var renderer in _renderers)
|
||||
{
|
||||
renderer.forceRenderingOff = false;
|
||||
}
|
||||
|
||||
foreach (var tessellatedRenderer in _tessellatedRenderers)
|
||||
{
|
||||
tessellatedRenderer.enabled = true;
|
||||
}
|
||||
|
||||
foreach (var collider in _colliders)
|
||||
{
|
||||
collider.enabled = true;
|
||||
}
|
||||
|
||||
foreach (var light in _lights)
|
||||
{
|
||||
light.enabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
private void DisableRenderers()
|
||||
{
|
||||
foreach (var renderer in _renderers)
|
||||
{
|
||||
renderer.forceRenderingOff = true;
|
||||
}
|
||||
|
||||
foreach (var tessellatedRenderer in _tessellatedRenderers)
|
||||
{
|
||||
tessellatedRenderer.enabled = false;
|
||||
}
|
||||
|
||||
foreach (var collider in _colliders)
|
||||
{
|
||||
collider.enabled = false;
|
||||
}
|
||||
|
||||
foreach (var light in _lights)
|
||||
{
|
||||
light.enabled = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user