Disappear bramble dimension when not inside

This commit is contained in:
Nick 2022-07-28 21:31:29 -04:00
parent 49c912aadf
commit 36ef82a855
2 changed files with 110 additions and 0 deletions

View File

@ -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);

View 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;
}
}
}
}