Make cloak work somewhat

This commit is contained in:
Nick 2022-03-20 19:10:23 -04:00
parent 675f033a11
commit 7fd523743a
3 changed files with 62 additions and 11 deletions

View File

@ -1,4 +1,5 @@
using NewHorizons.Utility;
using NewHorizons.Components;
using NewHorizons.Utility;
using System;
using System.Collections.Generic;
using System.Linq;
@ -10,22 +11,19 @@ namespace NewHorizons.Builder.Body
{
static class CloakBuilder
{
public static void Make(GameObject body, OWRigidbody rigidbody, float radius)
public static void Make(GameObject body, Sector sector, float radius)
{
var cloak = SearchUtilities.Find("RingWorld_Body/CloakingField_IP");
var newCloak = GameObject.Instantiate(cloak, body.transform);
newCloak.transform.localPosition = Vector3.zero;
newCloak.SetActive(true);
// Get all the mesh renders
var renderers = new List<Renderer>();
foreach(var renderer in body.GetComponentsInChildren<Renderer>())
{
renderers.SafeAdd(renderer);
renderer.enabled = false;
}
var cloakSectorController = newCloak.AddComponent<CloakSectorController>();
cloakSectorController.Init(newCloak.GetComponent<CloakFieldController>(), sector);
// To cloak from the start
cloakSectorController.OnPlayerExit();
}
}
}

View File

@ -0,0 +1,53 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
namespace NewHorizons.Components
{
public class CloakSectorController : MonoBehaviour
{
private CloakFieldController _cloak;
private Sector _sector;
private bool _isInitialized;
public void Init(CloakFieldController cloak, Sector sector)
{
_cloak = cloak;
_sector = sector;
_cloak.OnPlayerEnter += OnPlayerEnter;
_cloak.OnPlayerExit += OnPlayerExit;
_isInitialized = true;
}
void OnDestroy()
{
if(_isInitialized)
{
_cloak.OnPlayerEnter -= OnPlayerEnter;
_cloak.OnPlayerExit -= OnPlayerExit;
}
}
public void OnPlayerEnter()
{
foreach(Transform child in _sector.transform)
{
child.gameObject.SetActive(true);
}
}
public void OnPlayerExit()
{
foreach (Transform child in _sector.transform)
{
child.gameObject.SetActive(false);
}
}
}
}

View File

@ -353,7 +353,7 @@ namespace NewHorizons.Handlers
// Has to go last probably
if (body.Config.Base.CloakRadius != 0f)
CloakBuilder.Make(go, rb, body.Config.Base.CloakRadius);
CloakBuilder.Make(go, sector, body.Config.Base.CloakRadius);
return go;
}