This commit is contained in:
Mister_Nebula 2020-11-25 09:54:52 +00:00
parent a1674ac542
commit 6cfb546933
11 changed files with 114 additions and 34 deletions

View File

@ -41,7 +41,7 @@ namespace QSB.Animation
_netAnim.enabled = false;
_netAnim.animator = _anim;
QSBSceneManager.OnSceneLoaded += (OWScene scene, bool universe) => LoadControllers(universe);
QSBSceneManager.OnUniverseSceneLoaded += (OWScene scene) => LoadControllers();
}
private void OnDestroy()
@ -55,15 +55,11 @@ namespace QSB.Animation
_playerController.OnBecomeGrounded -= OnBecomeGrounded;
_playerController.OnBecomeUngrounded -= OnBecomeUngrounded;
QSBSceneManager.OnSceneLoaded -= (OWScene scene, bool universe) => LoadControllers(universe);
QSBSceneManager.OnUniverseSceneLoaded -= (OWScene scene) => LoadControllers();
}
private void LoadControllers(bool universe)
private void LoadControllers()
{
if (!universe)
{
return;
}
var bundle = QSB.InstrumentAssetBundle;
_chertController = bundle.LoadAsset("assets/Chert/Traveller_Chert.controller") as RuntimeAnimatorController;
_riebeckController = bundle.LoadAsset("assets/Riebeck/Traveller_Riebeck.controller") as RuntimeAnimatorController;
@ -73,7 +69,7 @@ namespace QSB.Animation
{
if (QSBSceneManager.IsInUniverse)
{
LoadControllers(true);
LoadControllers();
}
_netAnim.enabled = true;
_bodyAnim = body.GetComponent<Animator>();

View File

@ -17,6 +17,11 @@ namespace QSB.ElevatorSync
QSBSceneManager.OnSceneLoaded += OnSceneLoaded;
}
private void OnDestroy()
{
QSBSceneManager.OnSceneLoaded -= OnSceneLoaded;
}
private void OnSceneLoaded(OWScene scene, bool isInUniverse)
{
_elevators = Resources.FindObjectsOfTypeAll<Elevator>().ToList();

View File

@ -15,6 +15,12 @@ namespace QSB.GeyserSync
QSBPatchManager.OnPatchType += OnPatchType;
}
private void OnDestroy()
{
QSBSceneManager.OnSceneLoaded -= OnSceneLoaded;
QSBPatchManager.OnPatchType -= OnPatchType;
}
private void OnSceneLoaded(OWScene scene, bool isInUniverse)
{
var geyserControllers = Resources.FindObjectsOfTypeAll<GeyserController>();

View File

@ -3,7 +3,6 @@ using QSB.Player.Events;
using QSB.TransformSync;
using QSB.Utility;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using UnityEngine.Networking;
@ -21,8 +20,6 @@ namespace QSB.Player
{
if (id == uint.MaxValue || id == 0U)
{
var stacktrace = new StackTrace();
DebugLog.ToConsole($"GetPlayer() called with uint.MaxValue or 0 - returning default. Ran from {stacktrace.GetFrame(1).GetMethod().DeclaringType.Name}.{stacktrace.GetFrame(1).GetMethod().Name}.", MessageType.Warning);
return default;
}
var player = PlayerList.FirstOrDefault(x => x.PlayerId == id);
@ -91,7 +88,7 @@ namespace QSB.Player
}
// Get all Player IDs
var playerIds = PlayerList.Select(x => x.PlayerId).ToList();
// Get highest ID below the given syncobject's netid. A netid cannot belong to a netid above it, only below or equal to it.
// Get highest ID below the given syncobject's netid. A netid cannot belong to a playerid above it, only below or equal to it.
var lowerBound = playerIds.Where(x => x <= syncObject.AttachedNetId).ToList().Max();
if (playerIds.Min() > syncObject.AttachedNetId)
{

View File

@ -167,6 +167,7 @@
<Compile Include="Patches\QSBPatch.cs" />
<Compile Include="Patches\QSBPatchTypes.cs" />
<Compile Include="QSBSceneManager.cs" />
<Compile Include="TimeSync\FastForwardUI.cs" />
<Compile Include="TimeSync\WakeUpPatches.cs" />
<Compile Include="Tools\Events\PlayerFlashlightEvent.cs" />
<Compile Include="Player\Events\PlayerJoinEvent.cs" />

View File

@ -68,17 +68,19 @@ namespace QSB
spawnPrefabs.Add(OrbPrefab);
ConfigureNetworkManager();
QSBSceneManager.OnSceneLoaded += OnSceneLoaded;
QSBSceneManager.OnUniverseSceneLoaded += OnSceneLoaded;
}
private void OnSceneLoaded(OWScene scene, bool inUniverse)
private void OnDestroy()
{
if (inUniverse)
{
OrbManager.Instance.BuildOrbs();
WorldRegistry.OldDialogueTrees.Clear();
WorldRegistry.OldDialogueTrees = Resources.FindObjectsOfTypeAll<CharacterDialogueTree>().ToList();
}
QSBSceneManager.OnUniverseSceneLoaded -= OnSceneLoaded;
}
private void OnSceneLoaded(OWScene scene)
{
OrbManager.Instance.BuildOrbs();
WorldRegistry.OldDialogueTrees.Clear();
WorldRegistry.OldDialogueTrees = Resources.FindObjectsOfTypeAll<CharacterDialogueTree>().ToList();
}
private void ConfigureNetworkManager()
@ -135,7 +137,10 @@ namespace QSB
gameObject.AddComponent<RespawnOnDeath>();
gameObject.AddComponent<PreventShipDestruction>();
QSBSectorManager.Instance.RebuildSectors();
if (QSBSceneManager.IsInUniverse)
{
QSBSectorManager.Instance.RebuildSectors();
}
OrbManager.Instance.QueueBuildSlots();
if (!NetworkServer.localClientActive)

View File

@ -11,6 +11,7 @@ namespace QSB
public static bool IsInUniverse => InUniverse(CurrentScene);
public static event Action<OWScene, bool> OnSceneLoaded;
public static event Action<OWScene> OnUniverseSceneLoaded;
static QSBSceneManager()
{
@ -20,7 +21,12 @@ namespace QSB
private static void OnCompleteSceneLoad(OWScene oldScene, OWScene newScene)
{
OnSceneLoaded?.Invoke(newScene, InUniverse(newScene));
var universe = InUniverse(newScene);
OnSceneLoaded?.Invoke(newScene, universe);
if (universe)
{
OnUniverseSceneLoaded?.Invoke(newScene);
}
}
private static bool InUniverse(OWScene scene)

View File

@ -20,16 +20,16 @@ namespace QSB.SectorSync
private void Awake()
{
Instance = this;
QSBSceneManager.OnSceneLoaded += (OWScene scene, bool universe) => RebuildSectors();
QSBSceneManager.OnUniverseSceneLoaded += (OWScene scene) => RebuildSectors();
DebugLog.DebugWrite("Sector Manager ready.", MessageType.Success);
}
private void OnDestroy()
{
QSBSceneManager.OnUniverseSceneLoaded -= (OWScene scene) => RebuildSectors();
}
public void RebuildSectors()
{
if (!QSBSceneManager.IsInUniverse)
{
return;
}
DebugLog.DebugWrite("Rebuilding sectors...", MessageType.Warning);
WorldRegistry.RemoveObjects<QSBSector>();
var sectors = Resources.FindObjectsOfTypeAll<Sector>().ToList();

View File

@ -0,0 +1,63 @@
using UnityEngine;
using UnityEngine.UI;
namespace QSB.TimeSync
{
class FastForwardUI : MonoBehaviour
{
public static FastForwardUI Instance;
private Canvas _canvas;
private Text _text;
private float _sleepStartTime;
private float _sleepStartTimeUnscaled;
private Color _textColor;
private void Awake()
{
Instance = this;
enabled = false;
_canvas.enabled = false;
_textColor = _text.color;
}
private void OnDestroy()
{
if (_canvas.enabled)
{
Canvas.willRenderCanvases -= OnWillRenderCanvases;
}
}
public static void Start() => Instance.StartFastForward();
public static void Stop() => Instance.EndFastForward();
private void StartFastForward()
{
_sleepStartTime = Time.timeSinceLevelLoad;
_sleepStartTimeUnscaled = Time.unscaledTime;
enabled = true;
_canvas.enabled = true;
_text.text = "00:00";
_text.color = new Color(_textColor.r, _textColor.g, _textColor.b, 0f);
Canvas.willRenderCanvases += OnWillRenderCanvases;
}
private void EndFastForward()
{
enabled = false;
_canvas.enabled = false;
Canvas.willRenderCanvases -= OnWillRenderCanvases;
}
private void OnWillRenderCanvases()
{
var totalSeconds = Mathf.Max(Time.timeSinceLevelLoad - _sleepStartTime, 0f);
var minutes = Mathf.FloorToInt(totalSeconds / 60f);
var seconds = Mathf.FloorToInt(totalSeconds) % 60;
_text.text = $"{minutes.ToString("D2")}:{seconds.ToString("D2")}";
var alpha = Mathf.Clamp01((Time.unscaledTime - _sleepStartTimeUnscaled) / 3f);
_text.color = new Color(_textColor.r, _textColor.g, _textColor.b, alpha);
}
}
}

View File

@ -1,8 +1,6 @@
using OWML.ModHelper.Events;
using QSB.DeathSync;
using QSB.DeathSync;
using QSB.EventsCore;
using QSB.TimeSync.Events;
using QSB.Utility;
using UnityEngine;
using UnityEngine.Networking;
@ -87,7 +85,6 @@ namespace QSB.TimeSync
private void Init()
{
DebugLog.DebugWrite("WakeUpSync init - Request state!");
GlobalMessenger.FireEvent(EventNames.QSBPlayerStatesRequest);
_state = State.Loaded;
gameObject.AddComponent<PreserveTimeScale>();
@ -152,7 +149,7 @@ namespace QSB.TimeSync
}
_timeScale = MaxFastForwardSpeed;
_state = State.FastForwarding;
FindObjectOfType<SleepTimerUI>().Invoke("OnStartFastForward");
FastForwardUI.Start();
}
private void StartPausing()
@ -179,8 +176,7 @@ namespace QSB.TimeSync
QSB.HasWokenUp = true;
Physics.SyncTransforms();
SpinnerUI.Hide();
DebugLog.DebugWrite("ResetTimeScale - Request state!");
FindObjectOfType<SleepTimerUI>().Invoke("OnEndFastForward");
FastForwardUI.Stop();
GlobalMessenger.FireEvent(EventNames.QSBPlayerStatesRequest);
RespawnOnDeath.Instance.Init();
}

View File

@ -29,6 +29,11 @@ namespace QSB.TransformSync
QSBSceneManager.OnSceneLoaded += OnSceneLoaded;
}
protected virtual void OnDestroy()
{
QSBSceneManager.OnSceneLoaded -= OnSceneLoaded;
}
private void OnSceneLoaded(OWScene scene, bool isInUniverse)
{
_isInitialized = false;