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;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@ -10,22 +11,19 @@ namespace NewHorizons.Builder.Body
{ {
static class CloakBuilder 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 cloak = SearchUtilities.Find("RingWorld_Body/CloakingField_IP");
var newCloak = GameObject.Instantiate(cloak, body.transform); var newCloak = GameObject.Instantiate(cloak, body.transform);
newCloak.transform.localPosition = Vector3.zero; newCloak.transform.localPosition = Vector3.zero;
newCloak.SetActive(true);
// Get all the mesh renders var cloakSectorController = newCloak.AddComponent<CloakSectorController>();
var renderers = new List<Renderer>(); cloakSectorController.Init(newCloak.GetComponent<CloakFieldController>(), sector);
foreach(var renderer in body.GetComponentsInChildren<Renderer>())
{
renderers.SafeAdd(renderer);
renderer.enabled = false;
}
// 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 // Has to go last probably
if (body.Config.Base.CloakRadius != 0f) if (body.Config.Base.CloakRadius != 0f)
CloakBuilder.Make(go, rb, body.Config.Base.CloakRadius); CloakBuilder.Make(go, sector, body.Config.Base.CloakRadius);
return go; return go;
} }