mirror of
https://github.com/Outer-Wilds-New-Horizons/new-horizons.git
synced 2025-12-11 20:15:44 +01:00
Make cloak work somewhat
This commit is contained in:
parent
675f033a11
commit
7fd523743a
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
53
NewHorizons/Components/CloakSectorController.cs
Normal file
53
NewHorizons/Components/CloakSectorController.cs
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user