Add interference volume

This commit is contained in:
Noah Pilarski 2022-08-31 15:58:41 -04:00
parent a1e39303e4
commit 26c78e59d3
5 changed files with 74 additions and 1 deletions

View File

@ -57,6 +57,13 @@ namespace NewHorizons.Builder.Volumes
VolumeBuilder.Make<MapRestrictionVolume>(go, sector, mapRestrictionVolume); VolumeBuilder.Make<MapRestrictionVolume>(go, sector, mapRestrictionVolume);
} }
} }
if (config.Volumes.interferenceVolumes != null)
{
foreach (var interferenceVolume in config.Volumes.interferenceVolumes)
{
VolumeBuilder.Make<Components.InterferenceVolume>(go, sector, interferenceVolume);
}
}
} }
} }
} }

View File

@ -0,0 +1,37 @@
using NewHorizons.Handlers;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
namespace NewHorizons.Components
{
public class InterferenceVolume : BaseVolume
{
public override void OnTriggerVolumeEntry(GameObject hitObj)
{
if (hitObj.CompareTag("PlayerDetector"))
{
InterferenceHandler.OnPlayerEnterInterferenceVolume();
}
else if (hitObj.CompareTag("ProbeDetector"))
{
InterferenceHandler.OnProbeEnterInterferenceVolume();
}
}
public override void OnTriggerVolumeExit(GameObject hitObj)
{
if (hitObj.CompareTag("PlayerDetector"))
{
InterferenceHandler.OnPlayerExitInterferenceVolume();
}
else if (hitObj.CompareTag("ProbeDetector"))
{
InterferenceHandler.OnProbeExitInterferenceVolume();
}
}
}
}

View File

@ -24,6 +24,11 @@ namespace NewHorizons.External.Modules
/// </summary> /// </summary>
public HazardVolumeInfo[] hazardVolumes; public HazardVolumeInfo[] hazardVolumes;
/// <summary>
/// Add interference volumes to this planet
/// </summary>
public VolumeInfo[] interferenceVolumes;
/// <summary> /// <summary>
/// Add map restriction volumes to this planet /// Add map restriction volumes to this planet
/// </summary> /// </summary>

View File

@ -0,0 +1,23 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace NewHorizons.Handlers
{
public static class InterferenceHandler
{
public static bool _playerInterference;
public static bool _probeInterference;
public static bool PlayerHasInterference() => _playerInterference;
public static bool ProbeHasInterference() => _probeInterference;
public static void OnPlayerEnterInterferenceVolume() => _playerInterference = true;
public static void OnPlayerExitInterferenceVolume() => _playerInterference = false;
public static void OnProbeEnterInterferenceVolume() => _probeInterference = true;
public static void OnProbeExitInterferenceVolume() => _probeInterference = false;
}
}

View File

@ -1,4 +1,5 @@
using HarmonyLib; using HarmonyLib;
using NewHorizons.Handlers;
namespace NewHorizons.Patches namespace NewHorizons.Patches
{ {
@ -57,7 +58,7 @@ namespace NewHorizons.Patches
[HarmonyPatch(typeof(ProbeCamera), nameof(ProbeCamera.HasInterference))] [HarmonyPatch(typeof(ProbeCamera), nameof(ProbeCamera.HasInterference))]
public static void ProbeCamera_HasInterference(ProbeCamera __instance, ref bool __result) public static void ProbeCamera_HasInterference(ProbeCamera __instance, ref bool __result)
{ {
__result = __result || Components.CloakSectorController.isPlayerInside != Components.CloakSectorController.isProbeInside; __result = __result || (__instance._id != ProbeCamera.ID.PreLaunch && (Components.CloakSectorController.isPlayerInside != Components.CloakSectorController.isProbeInside || InterferenceHandler.PlayerHasInterference() != InterferenceHandler.ProbeHasInterference()));
} }
} }
} }