mask zone trigger

This commit is contained in:
JohnCorby 2022-01-11 20:00:47 -08:00
parent e62330e337
commit b5a4f09958
3 changed files with 97 additions and 0 deletions

View File

@ -0,0 +1,88 @@
using QSB.Messaging;
using QSB.Player;
using QSB.Player.Messages;
using QSB.WorldSync;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
namespace QSB.EyeOfTheUniverse.MaskSync
{
internal class MaskManager : WorldObjectManager
{
public static MaskManager Instance { get; private set; }
private readonly List<PlayerInfo> _playersInZone = new();
private MaskZoneController _controller;
public override WorldObjectType WorldObjectType => WorldObjectType.Eye;
public override void Awake()
{
base.Awake();
Instance = this;
}
protected override void RebuildWorldObjects(OWScene scene)
{
_playersInZone.Clear();
if (_controller != null)
{
_controller._maskZoneTrigger.OnEntry -= OnEntry;
_controller._maskZoneTrigger.OnExit -= OnExit;
}
_controller = QSBWorldSync.GetUnityObjects<MaskZoneController>().First();
_controller._maskZoneTrigger.OnEntry -= _controller.OnEnterMaskZone;
_controller._maskZoneTrigger.OnExit -= _controller.OnExitMaskZone;
_controller._maskZoneTrigger.OnEntry += OnEntry;
_controller._maskZoneTrigger.OnExit += OnExit;
}
private static void OnEntry(GameObject hitObj)
{
if (hitObj.CompareTag("PlayerDetector"))
{
new EnterLeaveMessage(EnterLeaveType.EnterMaskZone).Send();
}
}
private static void OnExit(GameObject hitObj)
{
if (hitObj.CompareTag("PlayerDetector"))
{
new EnterLeaveMessage(EnterLeaveType.ExitMaskZone).Send();
}
}
public void Enter(PlayerInfo player)
{
if (_playersInZone.Count == 0)
{
_controller._whiteSphere.SetActive(true);
_controller._groundSignal.SetSignalActivation(false);
_controller._skySignal.SetSignalActivation(true);
_controller._skeletonTower.SetIsQuantum(_controller._hasPlayerLookedAtSky);
_controller.enabled = true;
}
_playersInZone.Add(player);
}
public void Exit(PlayerInfo player)
{
_playersInZone.Remove(player);
if (_playersInZone.Count == 0 && !_controller._shuttle.HasLaunched())
{
_controller._whiteSphere.SetActive(false);
_controller._skeletonTower.SetIsQuantum(false);
_controller._groundSignal.SetSignalActivation(true);
_controller._skySignal.SetSignalActivation(false);
_controller.enabled = false;
}
}
}
}

View File

@ -17,5 +17,7 @@
EnterVesselCage = 12,
ExitVesselCage = 13,
EnterCosmicFog = 14,
EnterMaskZone = 15,
ExitMaskZone = 16,
}
}

View File

@ -1,6 +1,7 @@
using OWML.Common;
using QSB.Animation.NPC.WorldObjects;
using QSB.EyeOfTheUniverse.CosmicInflation;
using QSB.EyeOfTheUniverse.MaskSync;
using QSB.EyeOfTheUniverse.VesselSync;
using QSB.Messaging;
using QSB.Player.TransformSync;
@ -106,6 +107,12 @@ namespace QSB.Player.Messages
case EnterLeaveType.EnterCosmicFog:
InflationManager.Instance.Enter(player);
break;
case EnterLeaveType.EnterMaskZone:
MaskManager.Instance.Enter(player);
break;
case EnterLeaveType.ExitMaskZone:
MaskManager.Instance.Exit(player);
break;
default:
DebugLog.ToConsole($"Warning - Unknown EnterLeaveType : {Value}", MessageType.Warning);
break;