mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-02-19 03:39:50 +00:00
move Start stuff to Init method of worldobject, since Start doesnt end up running
This commit is contained in:
parent
7f28ee6553
commit
079762c44d
@ -3,9 +3,9 @@ using QSB.Player;
|
|||||||
|
|
||||||
namespace QSB.EchoesOfTheEye.LightSensorSync.Messages;
|
namespace QSB.EchoesOfTheEye.LightSensorSync.Messages;
|
||||||
|
|
||||||
internal class SetPlayerIlluminatedMessage : QSBMessage<(uint playerId, bool illuminated)>
|
internal class PlayerSetIlluminatedMessage : QSBMessage<(uint playerId, bool illuminated)>
|
||||||
{
|
{
|
||||||
public SetPlayerIlluminatedMessage(uint playerId, bool illuminated) : base((playerId, illuminated)) { }
|
public PlayerSetIlluminatedMessage(uint playerId, bool illuminated) : base((playerId, illuminated)) { }
|
||||||
public override void OnReceiveLocal() => OnReceiveRemote();
|
public override void OnReceiveLocal() => OnReceiveRemote();
|
||||||
|
|
||||||
public override void OnReceiveRemote() =>
|
public override void OnReceiveRemote() =>
|
@ -6,7 +6,6 @@ using QSB.Patches;
|
|||||||
using QSB.WorldSync;
|
using QSB.WorldSync;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using UnityEngine;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* For those who come here,
|
* For those who come here,
|
||||||
@ -20,74 +19,6 @@ internal class LightSensorPatches : QSBPatch
|
|||||||
{
|
{
|
||||||
public override QSBPatchTypes Type => QSBPatchTypes.OnClientConnect;
|
public override QSBPatchTypes Type => QSBPatchTypes.OnClientConnect;
|
||||||
|
|
||||||
[HarmonyPrefix]
|
|
||||||
[HarmonyPatch(nameof(SingleLightSensor.Start))]
|
|
||||||
private static bool Start(SingleLightSensor __instance)
|
|
||||||
{
|
|
||||||
if (!QSBWorldSync.AllObjectsReady)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
var isPlayerLightSensor = LightSensorManager.IsPlayerLightSensor(__instance);
|
|
||||||
var qsbPlayerLightSensor = isPlayerLightSensor ? __instance.GetComponent<QSBPlayerLightSensor>() : null;
|
|
||||||
var qsbLightSensor = isPlayerLightSensor ? null : __instance.GetWorldObject<QSBLightSensor>();
|
|
||||||
|
|
||||||
if (__instance._lightDetector != null)
|
|
||||||
{
|
|
||||||
__instance._lightSources = new List<ILightSource>();
|
|
||||||
__instance._lightSourceMask = LightSourceType.VOLUME_ONLY;
|
|
||||||
if (__instance._detectFlashlight)
|
|
||||||
{
|
|
||||||
__instance._lightSourceMask |= LightSourceType.FLASHLIGHT;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (__instance._detectProbe)
|
|
||||||
{
|
|
||||||
__instance._lightSourceMask |= LightSourceType.PROBE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (__instance._detectDreamLanterns)
|
|
||||||
{
|
|
||||||
__instance._lightSourceMask |= LightSourceType.DREAM_LANTERN;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (__instance._detectSimpleLanterns)
|
|
||||||
{
|
|
||||||
__instance._lightSourceMask |= LightSourceType.SIMPLE_LANTERN;
|
|
||||||
}
|
|
||||||
|
|
||||||
__instance._lightDetector.OnLightVolumeEnter += __instance.OnLightSourceEnter;
|
|
||||||
__instance._lightDetector.OnLightVolumeExit += __instance.OnLightSourceExit;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Debug.LogError("LightSensor has no LightSourceDetector", __instance);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (__instance._sector != null)
|
|
||||||
{
|
|
||||||
__instance.enabled = false;
|
|
||||||
__instance._lightDetector.GetShape().enabled = false;
|
|
||||||
if (__instance._startIlluminated)
|
|
||||||
{
|
|
||||||
if (isPlayerLightSensor)
|
|
||||||
{
|
|
||||||
qsbPlayerLightSensor._locallyIlluminated = true;
|
|
||||||
new SetPlayerIlluminatedMessage(qsbPlayerLightSensor.PlayerId, true).Send();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
qsbLightSensor._locallyIlluminated = true;
|
|
||||||
qsbLightSensor.OnDetectLocalLight?.Invoke();
|
|
||||||
qsbLightSensor.SendMessage(new SetIlluminatedMessage(true));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
[HarmonyPrefix]
|
[HarmonyPrefix]
|
||||||
[HarmonyPatch(nameof(SingleLightSensor.OnSectorOccupantsUpdated))]
|
[HarmonyPatch(nameof(SingleLightSensor.OnSectorOccupantsUpdated))]
|
||||||
private static bool OnSectorOccupantsUpdated(SingleLightSensor __instance)
|
private static bool OnSectorOccupantsUpdated(SingleLightSensor __instance)
|
||||||
@ -122,7 +53,7 @@ internal class LightSensorPatches : QSBPatch
|
|||||||
if (qsbPlayerLightSensor._locallyIlluminated)
|
if (qsbPlayerLightSensor._locallyIlluminated)
|
||||||
{
|
{
|
||||||
qsbPlayerLightSensor._locallyIlluminated = false;
|
qsbPlayerLightSensor._locallyIlluminated = false;
|
||||||
new SetPlayerIlluminatedMessage(qsbPlayerLightSensor.PlayerId, false).Send();
|
new PlayerSetIlluminatedMessage(qsbPlayerLightSensor.PlayerId, false).Send();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -190,12 +121,12 @@ internal class LightSensorPatches : QSBPatch
|
|||||||
if (!locallyIlluminated && qsbPlayerLightSensor._locallyIlluminated)
|
if (!locallyIlluminated && qsbPlayerLightSensor._locallyIlluminated)
|
||||||
{
|
{
|
||||||
qsbPlayerLightSensor._locallyIlluminated = true;
|
qsbPlayerLightSensor._locallyIlluminated = true;
|
||||||
new SetPlayerIlluminatedMessage(qsbPlayerLightSensor.PlayerId, true).Send();
|
new PlayerSetIlluminatedMessage(qsbPlayerLightSensor.PlayerId, true).Send();
|
||||||
}
|
}
|
||||||
else if (locallyIlluminated && !qsbPlayerLightSensor._locallyIlluminated)
|
else if (locallyIlluminated && !qsbPlayerLightSensor._locallyIlluminated)
|
||||||
{
|
{
|
||||||
qsbPlayerLightSensor._locallyIlluminated = false;
|
qsbPlayerLightSensor._locallyIlluminated = false;
|
||||||
new SetPlayerIlluminatedMessage(qsbPlayerLightSensor.PlayerId, false).Send();
|
new PlayerSetIlluminatedMessage(qsbPlayerLightSensor.PlayerId, false).Send();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -35,6 +35,15 @@ public class QSBPlayerLightSensor : MonoBehaviour
|
|||||||
|
|
||||||
RequestInitialStatesMessage.SendInitialState += SendInitialState;
|
RequestInitialStatesMessage.SendInitialState += SendInitialState;
|
||||||
QSBPlayerManager.OnRemovePlayer += OnPlayerLeave;
|
QSBPlayerManager.OnRemovePlayer += OnPlayerLeave;
|
||||||
|
|
||||||
|
if (_lightSensor._sector != null)
|
||||||
|
{
|
||||||
|
if (_lightSensor._startIlluminated)
|
||||||
|
{
|
||||||
|
_locallyIlluminated = true;
|
||||||
|
new PlayerSetIlluminatedMessage(PlayerId, true).Send();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnDestroy()
|
private void OnDestroy()
|
||||||
|
@ -38,11 +38,15 @@ internal class QSBLightSensor : WorldObject<SingleLightSensor>
|
|||||||
public override async UniTask Init(CancellationToken ct)
|
public override async UniTask Init(CancellationToken ct)
|
||||||
{
|
{
|
||||||
QSBPlayerManager.OnRemovePlayer += OnPlayerLeave;
|
QSBPlayerManager.OnRemovePlayer += OnPlayerLeave;
|
||||||
_locallyIlluminated = AttachedObject._startIlluminated;
|
|
||||||
|
|
||||||
if (_locallyIlluminated)
|
if (AttachedObject._sector != null)
|
||||||
{
|
{
|
||||||
_illuminatedBy.Add(QSBPlayerManager.LocalPlayerId);
|
if (AttachedObject._startIlluminated)
|
||||||
|
{
|
||||||
|
_locallyIlluminated = true;
|
||||||
|
OnDetectLocalLight?.Invoke();
|
||||||
|
this.SendMessage(new SetIlluminatedMessage(true));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user