mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-02-21 00:39:53 +00:00
mask zone trigger
This commit is contained in:
parent
e62330e337
commit
b5a4f09958
88
QSB/EyeOfTheUniverse/MaskSync/MaskManager.cs
Normal file
88
QSB/EyeOfTheUniverse/MaskSync/MaskManager.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -17,5 +17,7 @@
|
||||
EnterVesselCage = 12,
|
||||
ExitVesselCage = 13,
|
||||
EnterCosmicFog = 14,
|
||||
EnterMaskZone = 15,
|
||||
ExitMaskZone = 16,
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user