mirror of
https://github.com/Outer-Wilds-New-Horizons/new-horizons.git
synced 2025-12-11 20:15:44 +01:00
commit
9e05f5a49e
1
.github/FUNDING.yml
vendored
1
.github/FUNDING.yml
vendored
@ -1 +1,2 @@
|
||||
patreon: xen_42
|
||||
custom: ["https://paypal.me/xen42"]
|
||||
|
||||
44
NewHorizons/Builder/Body/CloakBuilder.cs
Normal file
44
NewHorizons/Builder/Body/CloakBuilder.cs
Normal file
@ -0,0 +1,44 @@
|
||||
using NewHorizons.Components;
|
||||
using NewHorizons.Utility;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using UnityEngine;
|
||||
|
||||
namespace NewHorizons.Builder.Body
|
||||
{
|
||||
static class CloakBuilder
|
||||
{
|
||||
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.transform.name = "CloakingField";
|
||||
newCloak.transform.localScale = Vector3.one * radius;
|
||||
|
||||
GameObject.Destroy(newCloak.GetComponent<PlayerCloakEntryRedirector>());
|
||||
|
||||
var cloakFieldController = newCloak.GetComponent<CloakFieldController>();
|
||||
cloakFieldController._cloakScaleDist = radius * 2000 / 3000f;
|
||||
cloakFieldController._farCloakRadius = radius * 500 / 3000f;
|
||||
cloakFieldController._innerCloakRadius = radius * 900 / 3000f;
|
||||
cloakFieldController._nearCloakRadius = radius * 800 / 3000f;
|
||||
|
||||
cloakFieldController._referenceFrameVolume = null;
|
||||
cloakFieldController._exclusionSector = null;
|
||||
|
||||
var cloakSectorController = newCloak.AddComponent<CloakSectorController>();
|
||||
cloakSectorController.Init(newCloak.GetComponent<CloakFieldController>(), body);
|
||||
|
||||
newCloak.SetActive(true);
|
||||
cloakFieldController.enabled = true;
|
||||
|
||||
// To cloak from the start
|
||||
Main.Instance.ModHelper.Events.Unity.FireOnNextUpdate(cloakSectorController.OnPlayerExit);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -211,9 +211,14 @@ namespace NewHorizons.Builder.General
|
||||
HeavenlyBodyBuilder.Remove(ao);
|
||||
}
|
||||
|
||||
public static void RemoveDistantProxyClones()
|
||||
public static void RemoveAllProxies()
|
||||
{
|
||||
GameObject.Destroy(GameObject.FindObjectOfType<DistantProxyManager>().gameObject);
|
||||
|
||||
foreach(var name in _solarSystemBodies)
|
||||
{
|
||||
RemoveProxy(name.Replace(" ", "").Replace("'", ""));
|
||||
}
|
||||
}
|
||||
|
||||
private static void DisableBody(GameObject go, bool delete)
|
||||
@ -233,6 +238,9 @@ namespace NewHorizons.Builder.General
|
||||
|
||||
if (distantProxy != null) GameObject.Destroy(distantProxy.gameObject);
|
||||
if (distantProxyClone != null) GameObject.Destroy(distantProxyClone.gameObject);
|
||||
|
||||
if (distantProxy == null && distantProxyClone == null)
|
||||
Logger.Log($"Couldn't find proxy for {name}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -18,7 +18,7 @@ namespace NewHorizons.Builder.Updater
|
||||
public static void Update(NewHorizonsBody body, GameObject go)
|
||||
{
|
||||
var mapping = Planet.defaultMapping;
|
||||
var heavenlyBody = CommonResourcesUtilities.HeavenlyBodyFromAstroObject(AstroObjectLocator.GetAstroObject(body.Config.Name));
|
||||
var heavenlyBody = CommonResourcesUtilities.HeavenlyBodyFromAstroObject(go.GetComponent<AstroObject>());
|
||||
|
||||
Logger.Log($"Updating position of {body.Config.Name}/{heavenlyBody}");
|
||||
|
||||
|
||||
68
NewHorizons/Components/CloakSectorController.cs
Normal file
68
NewHorizons/Components/CloakSectorController.cs
Normal file
@ -0,0 +1,68 @@
|
||||
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 GameObject _root;
|
||||
|
||||
private bool _isInitialized;
|
||||
|
||||
private List<Renderer> _renderers = null;
|
||||
|
||||
public void Init(CloakFieldController cloak, GameObject root)
|
||||
{
|
||||
_cloak = cloak;
|
||||
_root = root;
|
||||
|
||||
// Lets just clear these off idc
|
||||
_cloak.OnPlayerEnter = new OWEvent();
|
||||
_cloak.OnPlayerExit = new OWEvent();
|
||||
|
||||
_cloak.OnPlayerEnter += OnPlayerEnter;
|
||||
_cloak.OnPlayerExit += OnPlayerExit;
|
||||
|
||||
_isInitialized = true;
|
||||
}
|
||||
|
||||
void OnDestroy()
|
||||
{
|
||||
if(_isInitialized)
|
||||
{
|
||||
_cloak.OnPlayerEnter -= OnPlayerEnter;
|
||||
_cloak.OnPlayerExit -= OnPlayerExit;
|
||||
}
|
||||
}
|
||||
|
||||
private void SetUpList()
|
||||
{
|
||||
_renderers = _root.GetComponentsInChildren<Renderer>().ToList();
|
||||
}
|
||||
|
||||
public void OnPlayerEnter()
|
||||
{
|
||||
SetUpList();
|
||||
|
||||
foreach (var renderer in _renderers)
|
||||
{
|
||||
renderer.forceRenderingOff = false;
|
||||
}
|
||||
}
|
||||
|
||||
public void OnPlayerExit()
|
||||
{
|
||||
SetUpList();
|
||||
|
||||
foreach (var renderer in _renderers)
|
||||
{
|
||||
renderer.forceRenderingOff = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
1
NewHorizons/External/BaseModule.cs
vendored
1
NewHorizons/External/BaseModule.cs
vendored
@ -21,6 +21,7 @@ namespace NewHorizons.External
|
||||
public bool HasReferenceFrame { get; set; } = true;
|
||||
public bool CenterOfSolarSystem { get; set; } = false;
|
||||
public bool IsSatellite { get; set; }
|
||||
public float CloakRadius { get; set; } = 0f;
|
||||
|
||||
// Old, see SingularityModule instead
|
||||
public float BlackHoleSize { get; set; }
|
||||
|
||||
@ -102,7 +102,7 @@ namespace NewHorizons.Handlers
|
||||
Logger.Log("Done loading bodies");
|
||||
|
||||
// I don't know what these do but they look really weird from a distance
|
||||
Main.Instance.ModHelper.Events.Unity.FireInNUpdates(() => PlanetDestroyer.RemoveDistantProxyClones(), 1);
|
||||
Main.Instance.ModHelper.Events.Unity.FireOnNextUpdate(PlanetDestroyer.RemoveAllProxies);
|
||||
|
||||
if (Main.Instance.CurrentStarSystem != "SolarSystem") PlanetDestroyer.RemoveSolarSystem();
|
||||
}
|
||||
@ -351,6 +351,10 @@ namespace NewHorizons.Handlers
|
||||
if (body.Config.Funnel != null)
|
||||
FunnelBuilder.Make(go, go.GetComponentInChildren<ConstantForceDetector>(), rb, body.Config.Funnel);
|
||||
|
||||
// Has to go last probably
|
||||
if (body.Config.Base.CloakRadius != 0f)
|
||||
CloakBuilder.Make(go, sector, body.Config.Base.CloakRadius);
|
||||
|
||||
return go;
|
||||
}
|
||||
|
||||
|
||||
@ -13,6 +13,11 @@ namespace NewHorizons.Utility.CommonResources
|
||||
{
|
||||
public static HeavenlyBody HeavenlyBodyFromAstroObject(AstroObject obj)
|
||||
{
|
||||
if(obj == null)
|
||||
{
|
||||
Logger.LogError("Asking for a heavenly body from astro object but it is null");
|
||||
}
|
||||
|
||||
switch (obj.GetAstroObjectName())
|
||||
{
|
||||
case AstroObject.Name.CustomString:
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
"author": "xen, Idiot, & Book",
|
||||
"name": "New Horizons",
|
||||
"uniqueName": "xen.NewHorizons",
|
||||
"version": "0.9.5",
|
||||
"version": "0.10.0",
|
||||
"owmlVersion": "2.1.0",
|
||||
"dependencies": [ "PacificEngine.OW_CommonResources" ],
|
||||
"conflicts": [ "Raicuparta.QuantumSpaceBuddies", "Vesper.OuterWildsMMO", "Vesper.AutoResume" ],
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
|
||||
|
||||
[](https://patreon.com/xen_42)
|
||||
[](https://www.paypal.com/paypalme/xen42)
|
||||

|
||||

|
||||

|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user