mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-02-04 12:39:52 +00:00
Merge pull request #224 from misternebula/condition-syncing
Condition syncing + rc/dc rewrite + playerid assignment rewrite
This commit is contained in:
commit
eb9a6ced96
@ -9,8 +9,8 @@ namespace QSB.Animation
|
|||||||
|
|
||||||
public static void Init()
|
public static void Init()
|
||||||
{
|
{
|
||||||
QSB.Helper.Events.Subscribe<PlayerAnimController>(OWML.Common.Events.BeforeStart);
|
QSBCore.Helper.Events.Subscribe<PlayerAnimController>(OWML.Common.Events.BeforeStart);
|
||||||
QSB.Helper.Events.Event += OnEvent;
|
QSBCore.Helper.Events.Event += OnEvent;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void OnEvent(MonoBehaviour behaviour, OWML.Common.Events ev)
|
private static void OnEvent(MonoBehaviour behaviour, OWML.Common.Events ev)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
using OWML.Common;
|
using OWML.Common;
|
||||||
using OWML.ModHelper.Events;
|
using OWML.ModHelper.Events;
|
||||||
using QSB.EventsCore;
|
using QSB.Events;
|
||||||
using QSB.Player;
|
using QSB.Player;
|
||||||
using QSB.Utility;
|
using QSB.Utility;
|
||||||
using QuantumUNET.Components;
|
using QuantumUNET.Components;
|
||||||
@ -29,26 +29,21 @@ namespace QSB.Animation
|
|||||||
private RuntimeAnimatorController _riebeckController;
|
private RuntimeAnimatorController _riebeckController;
|
||||||
|
|
||||||
public AnimatorMirror Mirror { get; private set; }
|
public AnimatorMirror Mirror { get; private set; }
|
||||||
public AnimationType CurrentType;
|
public AnimationType CurrentType { get; set; }
|
||||||
|
|
||||||
public Animator Animator
|
protected void Awake()
|
||||||
{
|
|
||||||
get { return _bodyAnim; }
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Awake()
|
|
||||||
{
|
{
|
||||||
_anim = gameObject.AddComponent<Animator>();
|
_anim = gameObject.AddComponent<Animator>();
|
||||||
_netAnim = gameObject.AddComponent<QSBNetworkAnimator>();
|
_netAnim = gameObject.AddComponent<QSBNetworkAnimator>();
|
||||||
_netAnim.enabled = false;
|
_netAnim.enabled = false;
|
||||||
_netAnim.animator = _anim;
|
_netAnim.animator = _anim;
|
||||||
|
|
||||||
QSBSceneManager.OnUniverseSceneLoaded += (OWScene scene) => LoadControllers();
|
QSBSceneManager.OnUniverseSceneLoaded += OnUniverseSceneLoaded;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnDestroy()
|
protected override void OnDestroy()
|
||||||
{
|
{
|
||||||
_netAnim.enabled = false;
|
base.OnDestroy();
|
||||||
if (_playerController == null)
|
if (_playerController == null)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
@ -57,12 +52,14 @@ namespace QSB.Animation
|
|||||||
_playerController.OnBecomeGrounded -= OnBecomeGrounded;
|
_playerController.OnBecomeGrounded -= OnBecomeGrounded;
|
||||||
_playerController.OnBecomeUngrounded -= OnBecomeUngrounded;
|
_playerController.OnBecomeUngrounded -= OnBecomeUngrounded;
|
||||||
|
|
||||||
QSBSceneManager.OnUniverseSceneLoaded -= (OWScene scene) => LoadControllers();
|
QSBSceneManager.OnUniverseSceneLoaded -= OnUniverseSceneLoaded;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void OnUniverseSceneLoaded(OWScene obj) => LoadControllers();
|
||||||
|
|
||||||
private void LoadControllers()
|
private void LoadControllers()
|
||||||
{
|
{
|
||||||
var bundle = QSB.InstrumentAssetBundle;
|
var bundle = QSBCore.InstrumentAssetBundle;
|
||||||
_chertController = bundle.LoadAsset("assets/Chert/Traveller_Chert.controller") as RuntimeAnimatorController;
|
_chertController = bundle.LoadAsset("assets/Chert/Traveller_Chert.controller") as RuntimeAnimatorController;
|
||||||
_riebeckController = bundle.LoadAsset("assets/Riebeck/Traveller_Riebeck.controller") as RuntimeAnimatorController;
|
_riebeckController = bundle.LoadAsset("assets/Riebeck/Traveller_Riebeck.controller") as RuntimeAnimatorController;
|
||||||
}
|
}
|
||||||
@ -85,8 +82,6 @@ namespace QSB.Animation
|
|||||||
Mirror.Init(_anim, _bodyAnim);
|
Mirror.Init(_anim, _bodyAnim);
|
||||||
}
|
}
|
||||||
|
|
||||||
QSBPlayerManager.PlayerSyncObjects.Add(this);
|
|
||||||
|
|
||||||
for (var i = 0; i < _anim.parameterCount; i++)
|
for (var i = 0; i < _anim.parameterCount; i++)
|
||||||
{
|
{
|
||||||
_netAnim.SetParameterAutoSend(i, true);
|
_netAnim.SetParameterAutoSend(i, true);
|
||||||
@ -135,7 +130,7 @@ namespace QSB.Animation
|
|||||||
InitCrouchSync();
|
InitCrouchSync();
|
||||||
|
|
||||||
var ikSync = body.gameObject.AddComponent<PlayerHeadRotationSync>();
|
var ikSync = body.gameObject.AddComponent<PlayerHeadRotationSync>();
|
||||||
QSB.Helper.Events.Unity.RunWhen(() => Player.Camera != null, () => ikSync.Init(Player.Camera.transform));
|
QSBCore.Helper.Events.Unity.RunWhen(() => Player.Camera != null, () => ikSync.Init(Player.Camera.transform));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void InitCrouchSync()
|
private void InitCrouchSync()
|
||||||
|
@ -2,12 +2,12 @@
|
|||||||
{
|
{
|
||||||
public enum AnimationType
|
public enum AnimationType
|
||||||
{
|
{
|
||||||
Chert,
|
Chert = 0,
|
||||||
Esker,
|
Esker = 1,
|
||||||
Feldspar,
|
Feldspar = 2,
|
||||||
Gabbro,
|
Gabbro = 3,
|
||||||
PlayerSuited,
|
PlayerSuited = 4,
|
||||||
PlayerUnsuited,
|
PlayerUnsuited = 5,
|
||||||
Riebeck
|
Riebeck = 6
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,5 +1,4 @@
|
|||||||
using OWML.Common;
|
using OWML.Common;
|
||||||
using QSB.Player;
|
|
||||||
using QSB.Utility;
|
using QSB.Utility;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
@ -36,12 +35,7 @@ namespace QSB.Animation
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private PlayerInfo GetPlayer()
|
public void Update()
|
||||||
{
|
|
||||||
return QSBPlayerManager.GetSyncObjects<AnimationSync>().First(x => x.Mirror == this).Player;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Update()
|
|
||||||
{
|
{
|
||||||
if (_to == null || _from == null)
|
if (_to == null || _from == null)
|
||||||
{
|
{
|
||||||
|
@ -27,7 +27,7 @@ namespace QSB.Animation
|
|||||||
_bodyAnim = bodyAnim;
|
_bodyAnim = bodyAnim;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Update()
|
public void Update()
|
||||||
{
|
{
|
||||||
if (IsLocalPlayer)
|
if (IsLocalPlayer)
|
||||||
{
|
{
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
using QSB.EventsCore;
|
using QSB.Events;
|
||||||
using QSB.Instruments;
|
using QSB.Instruments;
|
||||||
using QSB.MessagesCore;
|
using QSB.Messaging;
|
||||||
using QSB.Player;
|
using QSB.Player;
|
||||||
|
|
||||||
namespace QSB.Animation.Events
|
namespace QSB.Animation.Events
|
||||||
@ -10,7 +10,6 @@ namespace QSB.Animation.Events
|
|||||||
public override EventType Type => EventType.PlayInstrument;
|
public override EventType Type => EventType.PlayInstrument;
|
||||||
|
|
||||||
public override void SetupListener() => GlobalMessenger<uint, AnimationType>.AddListener(EventNames.QSBChangeAnimType, Handler);
|
public override void SetupListener() => GlobalMessenger<uint, AnimationType>.AddListener(EventNames.QSBChangeAnimType, Handler);
|
||||||
|
|
||||||
public override void CloseListener() => GlobalMessenger<uint, AnimationType>.RemoveListener(EventNames.QSBChangeAnimType, Handler);
|
public override void CloseListener() => GlobalMessenger<uint, AnimationType>.RemoveListener(EventNames.QSBChangeAnimType, Handler);
|
||||||
|
|
||||||
private void Handler(uint player, AnimationType type) => SendEvent(CreateMessage(player, type));
|
private void Handler(uint player, AnimationType type) => SendEvent(CreateMessage(player, type));
|
||||||
@ -21,7 +20,7 @@ namespace QSB.Animation.Events
|
|||||||
Value = type
|
Value = type
|
||||||
};
|
};
|
||||||
|
|
||||||
public override void OnReceiveRemote(EnumMessage<AnimationType> message)
|
public override void OnReceiveRemote(bool server, EnumMessage<AnimationType> message)
|
||||||
{
|
{
|
||||||
QSBPlayerManager.GetPlayer(message.AboutId).AnimationSync.SetAnimationType(message.Value);
|
QSBPlayerManager.GetPlayer(message.AboutId).AnimationSync.SetAnimationType(message.Value);
|
||||||
QSBPlayerManager.GetSyncObject<InstrumentsManager>(message.AboutId).CheckInstrumentProps(message.Value);
|
QSBPlayerManager.GetSyncObject<InstrumentsManager>(message.AboutId).CheckInstrumentProps(message.Value);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
using QSB.EventsCore;
|
using QSB.Events;
|
||||||
using QSB.MessagesCore;
|
using QSB.Messaging;
|
||||||
using QSB.Player;
|
using QSB.Player;
|
||||||
|
|
||||||
namespace QSB.Animation.Events
|
namespace QSB.Animation.Events
|
||||||
@ -9,7 +9,6 @@ namespace QSB.Animation.Events
|
|||||||
public override EventType Type => EventType.AnimTrigger;
|
public override EventType Type => EventType.AnimTrigger;
|
||||||
|
|
||||||
public override void SetupListener() => GlobalMessenger<float>.AddListener(EventNames.QSBCrouch, Handler);
|
public override void SetupListener() => GlobalMessenger<float>.AddListener(EventNames.QSBCrouch, Handler);
|
||||||
|
|
||||||
public override void CloseListener() => GlobalMessenger<float>.RemoveListener(EventNames.QSBCrouch, Handler);
|
public override void CloseListener() => GlobalMessenger<float>.RemoveListener(EventNames.QSBCrouch, Handler);
|
||||||
|
|
||||||
private void Handler(float value) => SendEvent(CreateMessage(value));
|
private void Handler(float value) => SendEvent(CreateMessage(value));
|
||||||
@ -20,14 +19,10 @@ namespace QSB.Animation.Events
|
|||||||
Value = value
|
Value = value
|
||||||
};
|
};
|
||||||
|
|
||||||
public override void OnReceiveRemote(FloatMessage message)
|
public override void OnReceiveRemote(bool server, FloatMessage message)
|
||||||
{
|
{
|
||||||
var animationSync = QSBPlayerManager.GetSyncObject<AnimationSync>(message.AboutId);
|
var animationSync = QSBPlayerManager.GetSyncObject<AnimationSync>(message.AboutId);
|
||||||
if (animationSync == null)
|
animationSync?.HandleCrouch(message.Value);
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
animationSync.HandleCrouch(message.Value);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,8 +1,8 @@
|
|||||||
using QSB.EventsCore;
|
using QSB.Events;
|
||||||
using QSB.Messaging;
|
using QSB.Messaging;
|
||||||
using QSB.Player;
|
using QSB.Player;
|
||||||
|
|
||||||
namespace QSB.Animation
|
namespace QSB.Animation.Events
|
||||||
{
|
{
|
||||||
public class PlayerSuitEvent : QSBEvent<ToggleMessage>
|
public class PlayerSuitEvent : QSBEvent<ToggleMessage>
|
||||||
{
|
{
|
||||||
@ -21,7 +21,6 @@ namespace QSB.Animation
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void HandleSuitUp() => SendEvent(CreateMessage(true));
|
private void HandleSuitUp() => SendEvent(CreateMessage(true));
|
||||||
|
|
||||||
private void HandleSuitDown() => SendEvent(CreateMessage(false));
|
private void HandleSuitDown() => SendEvent(CreateMessage(false));
|
||||||
|
|
||||||
private ToggleMessage CreateMessage(bool value) => new ToggleMessage
|
private ToggleMessage CreateMessage(bool value) => new ToggleMessage
|
||||||
@ -30,12 +29,12 @@ namespace QSB.Animation
|
|||||||
ToggleValue = value
|
ToggleValue = value
|
||||||
};
|
};
|
||||||
|
|
||||||
public override void OnReceiveRemote(ToggleMessage message)
|
public override void OnReceiveRemote(bool server, ToggleMessage message)
|
||||||
{
|
{
|
||||||
var player = QSBPlayerManager.GetPlayer(message.AboutId);
|
var player = QSBPlayerManager.GetPlayer(message.AboutId);
|
||||||
player?.UpdateState(State.Suit, message.ToggleValue);
|
player?.UpdateState(State.Suit, message.ToggleValue);
|
||||||
|
|
||||||
if (!QSB.HasWokenUp)
|
if (!QSBCore.HasWokenUp)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -45,7 +44,7 @@ namespace QSB.Animation
|
|||||||
animator.SetAnimationType(type);
|
animator.SetAnimationType(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnReceiveLocal(ToggleMessage message)
|
public override void OnReceiveLocal(bool server, ToggleMessage message)
|
||||||
{
|
{
|
||||||
QSBPlayerManager.LocalPlayer.UpdateState(State.Suit, message.ToggleValue);
|
QSBPlayerManager.LocalPlayer.UpdateState(State.Suit, message.ToggleValue);
|
||||||
var animator = QSBPlayerManager.LocalPlayer.AnimationSync;
|
var animator = QSBPlayerManager.LocalPlayer.AnimationSync;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
using OWML.Common;
|
using OWML.Common;
|
||||||
using OWML.ModHelper.Events;
|
using OWML.ModHelper.Events;
|
||||||
using QSB.EventsCore;
|
using QSB.Events;
|
||||||
using QSB.Player;
|
using QSB.Player;
|
||||||
using QSB.Utility;
|
using QSB.Utility;
|
||||||
using QSB.WorldSync;
|
using QSB.WorldSync;
|
||||||
@ -15,43 +15,38 @@ namespace QSB.ConversationSync
|
|||||||
{
|
{
|
||||||
public static ConversationManager Instance { get; private set; }
|
public static ConversationManager Instance { get; private set; }
|
||||||
public AssetBundle ConversationAssetBundle { get; private set; }
|
public AssetBundle ConversationAssetBundle { get; private set; }
|
||||||
private GameObject BoxPrefab;
|
public Dictionary<CharacterDialogueTree, GameObject> BoxMappings { get; } = new Dictionary<CharacterDialogueTree, GameObject>();
|
||||||
public Dictionary<CharacterDialogueTree, GameObject> BoxMappings = new Dictionary<CharacterDialogueTree, GameObject>();
|
|
||||||
|
|
||||||
private void Start()
|
private GameObject _boxPrefab;
|
||||||
|
|
||||||
|
public void Start()
|
||||||
{
|
{
|
||||||
Instance = this;
|
Instance = this;
|
||||||
|
|
||||||
ConversationAssetBundle = QSB.Helper.Assets.LoadBundle("assets/conversation");
|
ConversationAssetBundle = QSBCore.Helper.Assets.LoadBundle("assets/conversation");
|
||||||
|
|
||||||
BoxPrefab = ConversationAssetBundle.LoadAsset<GameObject>("assets/dialoguebubble.prefab");
|
_boxPrefab = ConversationAssetBundle.LoadAsset<GameObject>("assets/dialoguebubble.prefab");
|
||||||
// TODO : make dynamic so it can be different sizes!
|
// TODO : make dynamic so it can be different sizes!
|
||||||
var font = (Font)Resources.Load(@"fonts\english - latin\spacemono-bold");
|
var font = (Font)Resources.Load(@"fonts\english - latin\spacemono-bold");
|
||||||
if (font == null)
|
if (font == null)
|
||||||
{
|
{
|
||||||
DebugLog.ToConsole("Error - Font is null!", MessageType.Error);
|
DebugLog.ToConsole("Error - Font is null!", MessageType.Error);
|
||||||
}
|
}
|
||||||
BoxPrefab.GetComponent<Text>().font = font;
|
_boxPrefab.GetComponent<Text>().font = font;
|
||||||
BoxPrefab.GetComponent<Text>().color = Color.white;
|
_boxPrefab.GetComponent<Text>().color = Color.white;
|
||||||
}
|
}
|
||||||
|
|
||||||
public uint GetPlayerTalkingToTree(CharacterDialogueTree tree)
|
public uint GetPlayerTalkingToTree(CharacterDialogueTree tree)
|
||||||
{
|
{
|
||||||
var treeIndex = WorldRegistry.OldDialogueTrees.IndexOf(tree);
|
var treeIndex = QSBWorldSync.OldDialogueTrees.IndexOf(tree);
|
||||||
if (!QSBPlayerManager.PlayerList.Any(x => x.CurrentDialogueID == treeIndex))
|
return QSBPlayerManager.PlayerList.All(x => x.CurrentDialogueID != treeIndex)
|
||||||
{
|
? uint.MaxValue
|
||||||
// No player talking to tree
|
: QSBPlayerManager.PlayerList.First(x => x.CurrentDialogueID == treeIndex).PlayerId;
|
||||||
return uint.MaxValue;
|
|
||||||
}
|
|
||||||
// .First() should be fine here as only one player should be talking to a character.
|
|
||||||
return QSBPlayerManager.PlayerList.First(x => x.CurrentDialogueID == treeIndex).PlayerId;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendPlayerOption(string text)
|
public void SendPlayerOption(string text) =>
|
||||||
{
|
|
||||||
GlobalMessenger<uint, string, ConversationType>
|
GlobalMessenger<uint, string, ConversationType>
|
||||||
.FireEvent(EventNames.QSBConversation, QSBPlayerManager.LocalPlayerId, text, ConversationType.Player);
|
.FireEvent(EventNames.QSBConversation, QSBPlayerManager.LocalPlayerId, text, ConversationType.Player);
|
||||||
}
|
|
||||||
|
|
||||||
public void SendCharacterDialogue(int id, string text)
|
public void SendCharacterDialogue(int id, string text)
|
||||||
{
|
{
|
||||||
@ -64,17 +59,13 @@ namespace QSB.ConversationSync
|
|||||||
.FireEvent(EventNames.QSBConversation, (uint)id, text, ConversationType.Character);
|
.FireEvent(EventNames.QSBConversation, (uint)id, text, ConversationType.Character);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void CloseBoxPlayer()
|
public void CloseBoxPlayer() =>
|
||||||
{
|
|
||||||
GlobalMessenger<uint, string, ConversationType>
|
GlobalMessenger<uint, string, ConversationType>
|
||||||
.FireEvent(EventNames.QSBConversation, QSBPlayerManager.LocalPlayerId, "", ConversationType.ClosePlayer);
|
.FireEvent(EventNames.QSBConversation, QSBPlayerManager.LocalPlayerId, "", ConversationType.ClosePlayer);
|
||||||
}
|
|
||||||
|
|
||||||
public void CloseBoxCharacter(int id)
|
public void CloseBoxCharacter(int id) =>
|
||||||
{
|
|
||||||
GlobalMessenger<uint, string, ConversationType>
|
GlobalMessenger<uint, string, ConversationType>
|
||||||
.FireEvent(EventNames.QSBConversation, (uint)id, "", ConversationType.CloseCharacter);
|
.FireEvent(EventNames.QSBConversation, (uint)id, "", ConversationType.CloseCharacter);
|
||||||
}
|
|
||||||
|
|
||||||
public void SendConvState(int charId, bool state)
|
public void SendConvState(int charId, bool state)
|
||||||
{
|
{
|
||||||
@ -109,14 +100,14 @@ namespace QSB.ConversationSync
|
|||||||
|
|
||||||
public void DisplayCharacterConversationBox(int index, string text)
|
public void DisplayCharacterConversationBox(int index, string text)
|
||||||
{
|
{
|
||||||
if (WorldRegistry.OldDialogueTrees.ElementAtOrDefault(index) == null)
|
if (QSBWorldSync.OldDialogueTrees.ElementAtOrDefault(index) == null)
|
||||||
{
|
{
|
||||||
DebugLog.ToConsole($"Error - Tried to display character conversation box for id {index}! (Doesn't exist!)", MessageType.Error);
|
DebugLog.ToConsole($"Error - Tried to display character conversation box for id {index}! (Doesn't exist!)", MessageType.Error);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove old box if it exists
|
// Remove old box if it exists
|
||||||
var oldDialogueTree = WorldRegistry.OldDialogueTrees[index];
|
var oldDialogueTree = QSBWorldSync.OldDialogueTrees[index];
|
||||||
if (BoxMappings.ContainsKey(oldDialogueTree))
|
if (BoxMappings.ContainsKey(oldDialogueTree))
|
||||||
{
|
{
|
||||||
Destroy(BoxMappings[oldDialogueTree]);
|
Destroy(BoxMappings[oldDialogueTree]);
|
||||||
@ -128,7 +119,7 @@ namespace QSB.ConversationSync
|
|||||||
|
|
||||||
private GameObject CreateBox(Transform parent, float vertOffset, string text)
|
private GameObject CreateBox(Transform parent, float vertOffset, string text)
|
||||||
{
|
{
|
||||||
var newBox = Instantiate(BoxPrefab);
|
var newBox = Instantiate(_boxPrefab);
|
||||||
newBox.SetActive(false);
|
newBox.SetActive(false);
|
||||||
newBox.transform.parent = parent;
|
newBox.transform.parent = parent;
|
||||||
newBox.transform.localPosition = new Vector3(0, vertOffset, 0);
|
newBox.transform.localPosition = new Vector3(0, vertOffset, 0);
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
using OWML.Common;
|
using OWML.Common;
|
||||||
|
using QSB.Patches;
|
||||||
using QSB.Player;
|
using QSB.Player;
|
||||||
using QSB.Utility;
|
using QSB.Utility;
|
||||||
using QSB.WorldSync;
|
using QSB.WorldSync;
|
||||||
@ -13,7 +14,7 @@ namespace QSB.ConversationSync
|
|||||||
|
|
||||||
public static void StartConversation(CharacterDialogueTree __instance)
|
public static void StartConversation(CharacterDialogueTree __instance)
|
||||||
{
|
{
|
||||||
var index = WorldRegistry.OldDialogueTrees.FindIndex(x => x == __instance);
|
var index = QSBWorldSync.OldDialogueTrees.FindIndex(x => x == __instance);
|
||||||
if (index == -1)
|
if (index == -1)
|
||||||
{
|
{
|
||||||
DebugLog.ToConsole($"Warning - Index for tree {__instance.name} was -1.", MessageType.Warning);
|
DebugLog.ToConsole($"Warning - Index for tree {__instance.name} was -1.", MessageType.Warning);
|
||||||
@ -58,7 +59,7 @@ namespace QSB.ConversationSync
|
|||||||
{
|
{
|
||||||
var key = ____name + ____listPagesToDisplay[____currentPage];
|
var key = ____name + ____listPagesToDisplay[____currentPage];
|
||||||
// Sending key so translation can be done on client side - should make different language-d clients compatible
|
// Sending key so translation can be done on client side - should make different language-d clients compatible
|
||||||
QSB.Helper.Events.Unity.RunWhen(() => QSBPlayerManager.LocalPlayer.CurrentDialogueID != -1,
|
QSBCore.Helper.Events.Unity.RunWhen(() => QSBPlayerManager.LocalPlayer.CurrentDialogueID != -1,
|
||||||
() => ConversationManager.Instance.SendCharacterDialogue(QSBPlayerManager.LocalPlayer.CurrentDialogueID, key));
|
() => ConversationManager.Instance.SendCharacterDialogue(QSBPlayerManager.LocalPlayer.CurrentDialogueID, key));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -73,17 +74,12 @@ namespace QSB.ConversationSync
|
|||||||
CharacterDialogueTree ____dialogueTree)
|
CharacterDialogueTree ____dialogueTree)
|
||||||
{
|
{
|
||||||
var playerId = ConversationManager.Instance.GetPlayerTalkingToTree(____dialogueTree);
|
var playerId = ConversationManager.Instance.GetPlayerTalkingToTree(____dialogueTree);
|
||||||
Vector3 position;
|
var position = playerId == uint.MaxValue
|
||||||
if (playerId == uint.MaxValue)
|
? Locator.GetActiveCamera().transform.position
|
||||||
{
|
: QSBPlayerManager.GetPlayer(playerId).Camera.transform.position;
|
||||||
// TODO : Find closest player and track to that camera.
|
var b = ___headTrackingWeight * Mathf.Min(1, !___lookOnlyWhenTalking
|
||||||
position = Locator.GetActiveCamera().transform.position;
|
? !____playerInHeadZone ? 0 : 1
|
||||||
}
|
: !____inConversation || !____playerInHeadZone ? 0 : 1);
|
||||||
else
|
|
||||||
{
|
|
||||||
position = QSBPlayerManager.GetPlayer(playerId).Camera.transform.position;
|
|
||||||
}
|
|
||||||
float b = ___headTrackingWeight * Mathf.Min(1, (!___lookOnlyWhenTalking) ? ((!____playerInHeadZone) ? 0 : 1) : ((!____inConversation || !____playerInHeadZone) ? 0 : 1));
|
|
||||||
____currentLookWeight = Mathf.Lerp(____currentLookWeight, b, Time.deltaTime * 2f);
|
____currentLookWeight = Mathf.Lerp(____currentLookWeight, b, Time.deltaTime * 2f);
|
||||||
____currentLookTarget = ___lookSpring.Update(____currentLookTarget, position, Time.deltaTime);
|
____currentLookTarget = ___lookSpring.Update(____currentLookTarget, position, Time.deltaTime);
|
||||||
____animator.SetLookAtPosition(____currentLookTarget);
|
____animator.SetLookAtPosition(____currentLookTarget);
|
||||||
@ -94,21 +90,17 @@ namespace QSB.ConversationSync
|
|||||||
public static bool OnZoneExit(CharacterDialogueTree ____dialogueTree)
|
public static bool OnZoneExit(CharacterDialogueTree ____dialogueTree)
|
||||||
{
|
{
|
||||||
var playerId = ConversationManager.Instance.GetPlayerTalkingToTree(____dialogueTree);
|
var playerId = ConversationManager.Instance.GetPlayerTalkingToTree(____dialogueTree);
|
||||||
if (playerId == uint.MaxValue)
|
return playerId == uint.MaxValue;
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void DoPatches()
|
public override void DoPatches()
|
||||||
{
|
{
|
||||||
QSB.Helper.HarmonyHelper.AddPostfix<DialogueNode>("GetNextPage", typeof(ConversationPatches), nameof(GetNextPage));
|
QSBCore.Helper.HarmonyHelper.AddPostfix<DialogueNode>("GetNextPage", typeof(ConversationPatches), nameof(GetNextPage));
|
||||||
QSB.Helper.HarmonyHelper.AddPrefix<CharacterDialogueTree>("InputDialogueOption", typeof(ConversationPatches), nameof(InputDialogueOption));
|
QSBCore.Helper.HarmonyHelper.AddPrefix<CharacterDialogueTree>("InputDialogueOption", typeof(ConversationPatches), nameof(InputDialogueOption));
|
||||||
QSB.Helper.HarmonyHelper.AddPostfix<CharacterDialogueTree>("StartConversation", typeof(ConversationPatches), nameof(StartConversation));
|
QSBCore.Helper.HarmonyHelper.AddPostfix<CharacterDialogueTree>("StartConversation", typeof(ConversationPatches), nameof(StartConversation));
|
||||||
QSB.Helper.HarmonyHelper.AddPrefix<CharacterDialogueTree>("EndConversation", typeof(ConversationPatches), nameof(EndConversation));
|
QSBCore.Helper.HarmonyHelper.AddPrefix<CharacterDialogueTree>("EndConversation", typeof(ConversationPatches), nameof(EndConversation));
|
||||||
QSB.Helper.HarmonyHelper.AddPrefix<CharacterAnimController>("OnAnimatorIK", typeof(ConversationPatches), nameof(OnAnimatorIK));
|
QSBCore.Helper.HarmonyHelper.AddPrefix<CharacterAnimController>("OnAnimatorIK", typeof(ConversationPatches), nameof(OnAnimatorIK));
|
||||||
QSB.Helper.HarmonyHelper.AddPrefix<CharacterAnimController>("OnZoneExit", typeof(ConversationPatches), nameof(OnZoneExit));
|
QSBCore.Helper.HarmonyHelper.AddPrefix<CharacterAnimController>("OnZoneExit", typeof(ConversationPatches), nameof(OnZoneExit));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -2,9 +2,9 @@
|
|||||||
{
|
{
|
||||||
public enum ConversationType
|
public enum ConversationType
|
||||||
{
|
{
|
||||||
Character,
|
Character = 0,
|
||||||
Player,
|
Player = 1,
|
||||||
CloseCharacter,
|
CloseCharacter = 2,
|
||||||
ClosePlayer
|
ClosePlayer = 3
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,4 +1,4 @@
|
|||||||
using QSB.EventsCore;
|
using QSB.Events;
|
||||||
using QSB.Player;
|
using QSB.Player;
|
||||||
using QSB.WorldSync;
|
using QSB.WorldSync;
|
||||||
|
|
||||||
@ -9,7 +9,6 @@ namespace QSB.ConversationSync.Events
|
|||||||
public override EventType Type => EventType.Conversation;
|
public override EventType Type => EventType.Conversation;
|
||||||
|
|
||||||
public override void SetupListener() => GlobalMessenger<uint, string, ConversationType>.AddListener(EventNames.QSBConversation, Handler);
|
public override void SetupListener() => GlobalMessenger<uint, string, ConversationType>.AddListener(EventNames.QSBConversation, Handler);
|
||||||
|
|
||||||
public override void CloseListener() => GlobalMessenger<uint, string, ConversationType>.RemoveListener(EventNames.QSBConversation, Handler);
|
public override void CloseListener() => GlobalMessenger<uint, string, ConversationType>.RemoveListener(EventNames.QSBConversation, Handler);
|
||||||
|
|
||||||
private void Handler(uint id, string message, ConversationType type) => SendEvent(CreateMessage(id, message, type));
|
private void Handler(uint id, string message, ConversationType type) => SendEvent(CreateMessage(id, message, type));
|
||||||
@ -22,7 +21,7 @@ namespace QSB.ConversationSync.Events
|
|||||||
Message = message
|
Message = message
|
||||||
};
|
};
|
||||||
|
|
||||||
public override void OnReceiveRemote(ConversationMessage message)
|
public override void OnReceiveRemote(bool server, ConversationMessage message)
|
||||||
{
|
{
|
||||||
switch (message.Type)
|
switch (message.Type)
|
||||||
{
|
{
|
||||||
@ -40,7 +39,7 @@ namespace QSB.ConversationSync.Events
|
|||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
var tree = WorldRegistry.OldDialogueTrees[message.ObjectId];
|
var tree = QSBWorldSync.OldDialogueTrees[message.ObjectId];
|
||||||
UnityEngine.Object.Destroy(ConversationManager.Instance.BoxMappings[tree]);
|
UnityEngine.Object.Destroy(ConversationManager.Instance.BoxMappings[tree]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
using OWML.Common;
|
using OWML.Common;
|
||||||
using OWML.ModHelper.Events;
|
using OWML.ModHelper.Events;
|
||||||
using QSB.EventsCore;
|
using QSB.Events;
|
||||||
using QSB.Player;
|
using QSB.Player;
|
||||||
using QSB.Utility;
|
using QSB.Utility;
|
||||||
using QSB.WorldSync;
|
using QSB.WorldSync;
|
||||||
@ -11,10 +11,9 @@ namespace QSB.ConversationSync.Events
|
|||||||
{
|
{
|
||||||
public class ConversationStartEndEvent : QSBEvent<ConversationStartEndMessage>
|
public class ConversationStartEndEvent : QSBEvent<ConversationStartEndMessage>
|
||||||
{
|
{
|
||||||
public override EventsCore.EventType Type => EventsCore.EventType.ConversationStartEnd;
|
public override QSB.Events.EventType Type => QSB.Events.EventType.ConversationStartEnd;
|
||||||
|
|
||||||
public override void SetupListener() => GlobalMessenger<int, uint, bool>.AddListener(EventNames.QSBConversationStartEnd, Handler);
|
public override void SetupListener() => GlobalMessenger<int, uint, bool>.AddListener(EventNames.QSBConversationStartEnd, Handler);
|
||||||
|
|
||||||
public override void CloseListener() => GlobalMessenger<int, uint, bool>.RemoveListener(EventNames.QSBConversationStartEnd, Handler);
|
public override void CloseListener() => GlobalMessenger<int, uint, bool>.RemoveListener(EventNames.QSBConversationStartEnd, Handler);
|
||||||
|
|
||||||
private void Handler(int charId, uint playerId, bool state) => SendEvent(CreateMessage(charId, playerId, state));
|
private void Handler(int charId, uint playerId, bool state) => SendEvent(CreateMessage(charId, playerId, state));
|
||||||
@ -27,43 +26,44 @@ namespace QSB.ConversationSync.Events
|
|||||||
State = state
|
State = state
|
||||||
};
|
};
|
||||||
|
|
||||||
public override void OnReceiveRemote(ConversationStartEndMessage message)
|
public override void OnReceiveRemote(bool server, ConversationStartEndMessage message)
|
||||||
{
|
{
|
||||||
if (message.CharacterId == -1)
|
if (message.CharacterId == -1)
|
||||||
{
|
{
|
||||||
DebugLog.ToConsole("Warning - Received conv. start/end event with char id -1.", MessageType.Warning);
|
DebugLog.ToConsole("Warning - Received conv. start/end event with char id -1.", MessageType.Warning);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var dialogueTree = WorldRegistry.OldDialogueTrees[message.CharacterId];
|
var dialogueTree = QSBWorldSync.OldDialogueTrees[message.CharacterId];
|
||||||
var animController = Resources.FindObjectsOfTypeAll<CharacterAnimController>().FirstOrDefault(x => x.GetValue<CharacterDialogueTree>("_dialogueTree") == dialogueTree);
|
var animController = Resources.FindObjectsOfTypeAll<CharacterAnimController>().FirstOrDefault(x => x.GetValue<CharacterDialogueTree>("_dialogueTree") == dialogueTree);
|
||||||
|
|
||||||
// Make character face player and talk
|
// Make character face player and talk
|
||||||
if (animController != default(CharacterAnimController))
|
if (animController == default(CharacterAnimController))
|
||||||
{
|
{
|
||||||
if (message.State)
|
return;
|
||||||
|
}
|
||||||
|
if (message.State)
|
||||||
|
{
|
||||||
|
// Start talking
|
||||||
|
QSBPlayerManager.GetPlayer(message.PlayerId).CurrentDialogueID = message.CharacterId;
|
||||||
|
animController.SetValue("_inConversation", true);
|
||||||
|
animController.SetValue("_playerInHeadZone", true);
|
||||||
|
if (animController.GetValue<bool>("_hasTalkAnimation"))
|
||||||
{
|
{
|
||||||
// Start talking
|
animController.GetValue<Animator>("_animator").SetTrigger("Talking");
|
||||||
QSBPlayerManager.GetPlayer(message.PlayerId).CurrentDialogueID = message.CharacterId;
|
|
||||||
animController.SetValue("_inConversation", true);
|
|
||||||
animController.SetValue("_playerInHeadZone", true);
|
|
||||||
if (animController.GetValue<bool>("_hasTalkAnimation"))
|
|
||||||
{
|
|
||||||
animController.GetValue<Animator>("_animator").SetTrigger("Talking");
|
|
||||||
}
|
|
||||||
dialogueTree.GetComponent<InteractVolume>().DisableInteraction();
|
|
||||||
}
|
}
|
||||||
else
|
dialogueTree.GetComponent<InteractVolume>().DisableInteraction();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Stop talking
|
||||||
|
QSBPlayerManager.GetPlayer(message.PlayerId).CurrentDialogueID = -1;
|
||||||
|
animController.SetValue("_inConversation", false);
|
||||||
|
animController.SetValue("_playerInHeadZone", false);
|
||||||
|
if (animController.GetValue<bool>("_hasTalkAnimation"))
|
||||||
{
|
{
|
||||||
// Stop talking
|
animController.GetValue<Animator>("_animator").SetTrigger("Idle");
|
||||||
QSBPlayerManager.GetPlayer(message.PlayerId).CurrentDialogueID = -1;
|
|
||||||
animController.SetValue("_inConversation", false);
|
|
||||||
animController.SetValue("_playerInHeadZone", false);
|
|
||||||
if (animController.GetValue<bool>("_hasTalkAnimation"))
|
|
||||||
{
|
|
||||||
animController.GetValue<Animator>("_animator").SetTrigger("Idle");
|
|
||||||
}
|
|
||||||
dialogueTree.GetComponent<InteractVolume>().EnableInteraction();
|
|
||||||
}
|
}
|
||||||
|
dialogueTree.GetComponent<InteractVolume>().EnableInteraction();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
using QSB.EventsCore;
|
using QSB.Events;
|
||||||
|
using QSB.Patches;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
|
||||||
namespace QSB.DeathSync
|
namespace QSB.DeathSync
|
||||||
@ -26,8 +27,8 @@ namespace QSB.DeathSync
|
|||||||
|
|
||||||
public override void DoPatches()
|
public override void DoPatches()
|
||||||
{
|
{
|
||||||
QSB.Helper.HarmonyHelper.AddPrefix<DeathManager>("KillPlayer", typeof(DeathPatches), nameof(PreFinishDeathSequence));
|
QSBCore.Helper.HarmonyHelper.AddPrefix<DeathManager>("KillPlayer", typeof(DeathPatches), nameof(PreFinishDeathSequence));
|
||||||
QSB.Helper.HarmonyHelper.AddPostfix<DeathManager>("KillPlayer", typeof(DeathPatches), nameof(BroadcastDeath));
|
QSBCore.Helper.HarmonyHelper.AddPostfix<DeathManager>("KillPlayer", typeof(DeathPatches), nameof(BroadcastDeath));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,5 +1,5 @@
|
|||||||
using QSB.EventsCore;
|
using QSB.Events;
|
||||||
using QSB.MessagesCore;
|
using QSB.Messaging;
|
||||||
using QSB.Player;
|
using QSB.Player;
|
||||||
using QSB.Utility;
|
using QSB.Utility;
|
||||||
|
|
||||||
@ -10,7 +10,6 @@ namespace QSB.DeathSync.Events
|
|||||||
public override EventType Type => EventType.PlayerDeath;
|
public override EventType Type => EventType.PlayerDeath;
|
||||||
|
|
||||||
public override void SetupListener() => GlobalMessenger<DeathType>.AddListener(EventNames.QSBPlayerDeath, Handler);
|
public override void SetupListener() => GlobalMessenger<DeathType>.AddListener(EventNames.QSBPlayerDeath, Handler);
|
||||||
|
|
||||||
public override void CloseListener() => GlobalMessenger<DeathType>.RemoveListener(EventNames.QSBPlayerDeath, Handler);
|
public override void CloseListener() => GlobalMessenger<DeathType>.RemoveListener(EventNames.QSBPlayerDeath, Handler);
|
||||||
|
|
||||||
private void Handler(DeathType type) => SendEvent(CreateMessage(type));
|
private void Handler(DeathType type) => SendEvent(CreateMessage(type));
|
||||||
@ -21,13 +20,11 @@ namespace QSB.DeathSync.Events
|
|||||||
Value = type
|
Value = type
|
||||||
};
|
};
|
||||||
|
|
||||||
public override void OnReceiveRemote(EnumMessage<DeathType> message)
|
public override void OnReceiveRemote(bool server, EnumMessage<DeathType> message)
|
||||||
{
|
{
|
||||||
var playerName = QSBPlayerManager.GetPlayer(message.AboutId).Name;
|
var playerName = QSBPlayerManager.GetPlayer(message.AboutId).Name;
|
||||||
var deathMessage = Necronomicon.GetPhrase(message.Value);
|
var deathMessage = Necronomicon.GetPhrase(message.Value);
|
||||||
DebugLog.ToAll(string.Format(deathMessage, playerName));
|
DebugLog.ToAll(string.Format(deathMessage, playerName));
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnReceiveLocal(EnumMessage<DeathType> message) => OnReceiveRemote(message);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -95,9 +95,7 @@ namespace QSB.DeathSync
|
|||||||
} }
|
} }
|
||||||
};
|
};
|
||||||
|
|
||||||
public static string GetPhrase(DeathType deathType)
|
public static string GetPhrase(DeathType deathType) =>
|
||||||
{
|
DeathDictionary[deathType].OrderBy(x => Guid.NewGuid()).First();
|
||||||
return DeathDictionary[deathType].OrderBy(x => Guid.NewGuid()).First();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -8,15 +8,15 @@ namespace QSB.DeathSync
|
|||||||
{
|
{
|
||||||
public class PreventShipDestruction : MonoBehaviour
|
public class PreventShipDestruction : MonoBehaviour
|
||||||
{
|
{
|
||||||
private void Awake()
|
public void Awake()
|
||||||
{
|
{
|
||||||
QSB.Helper.HarmonyHelper.Transpile<ShipDetachableLeg>("Detach", typeof(Patch), nameof(Patch.ReturnNull));
|
QSBCore.Helper.HarmonyHelper.Transpile<ShipDetachableLeg>("Detach", typeof(Patch), nameof(Patch.ReturnNull));
|
||||||
QSB.Helper.HarmonyHelper.Transpile<ShipDetachableModule>("Detach", typeof(Patch), nameof(Patch.ReturnNull));
|
QSBCore.Helper.HarmonyHelper.Transpile<ShipDetachableModule>("Detach", typeof(Patch), nameof(Patch.ReturnNull));
|
||||||
|
|
||||||
QSB.Helper.HarmonyHelper.EmptyMethod<ShipEjectionSystem>("OnPressInteract");
|
QSBCore.Helper.HarmonyHelper.EmptyMethod<ShipEjectionSystem>("OnPressInteract");
|
||||||
|
|
||||||
QSB.Helper.Events.Subscribe<ShipDamageController>(OWML.Common.Events.AfterAwake);
|
QSBCore.Helper.Events.Subscribe<ShipDamageController>(OWML.Common.Events.AfterAwake);
|
||||||
QSB.Helper.Events.Event += OnEvent;
|
QSBCore.Helper.Events.Event += OnEvent;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnEvent(MonoBehaviour behaviour, OWML.Common.Events ev)
|
private void OnEvent(MonoBehaviour behaviour, OWML.Common.Events ev)
|
||||||
|
@ -1,15 +1,12 @@
|
|||||||
using OWML.Common;
|
using OWML.Common;
|
||||||
using OWML.ModHelper.Events;
|
using OWML.ModHelper.Events;
|
||||||
using QSB.EventsCore;
|
using QSB.Events;
|
||||||
using QSB.Utility;
|
using QSB.Utility;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
namespace QSB.DeathSync
|
namespace QSB.DeathSync
|
||||||
{
|
{
|
||||||
/// <summary>
|
|
||||||
/// Client-only-side component for managing respawning after death.
|
|
||||||
/// </summary>
|
|
||||||
public class RespawnOnDeath : MonoBehaviour
|
public class RespawnOnDeath : MonoBehaviour
|
||||||
{
|
{
|
||||||
public static RespawnOnDeath Instance;
|
public static RespawnOnDeath Instance;
|
||||||
@ -31,12 +28,12 @@ namespace QSB.DeathSync
|
|||||||
private ShipCockpitController _cockpitController;
|
private ShipCockpitController _cockpitController;
|
||||||
private PlayerSpacesuit _spaceSuit;
|
private PlayerSpacesuit _spaceSuit;
|
||||||
|
|
||||||
private void Awake()
|
public void Awake()
|
||||||
{
|
{
|
||||||
Instance = this;
|
Instance = this;
|
||||||
|
|
||||||
QSB.Helper.Events.Subscribe<PlayerResources>(OWML.Common.Events.AfterStart);
|
QSBCore.Helper.Events.Subscribe<PlayerResources>(OWML.Common.Events.AfterStart);
|
||||||
QSB.Helper.Events.Event += OnEvent;
|
QSBCore.Helper.Events.Event += OnEvent;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnEvent(MonoBehaviour behaviour, OWML.Common.Events ev)
|
private void OnEvent(MonoBehaviour behaviour, OWML.Common.Events ev)
|
||||||
@ -129,11 +126,9 @@ namespace QSB.DeathSync
|
|||||||
_spaceSuit.RemoveSuit(true);
|
_spaceSuit.RemoveSuit(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private SpawnPoint GetSpawnPoint(bool isShip = false)
|
private SpawnPoint GetSpawnPoint(bool isShip = false) =>
|
||||||
{
|
_playerSpawner
|
||||||
return _playerSpawner
|
|
||||||
.GetValue<SpawnPoint[]>("_spawnList")
|
.GetValue<SpawnPoint[]>("_spawnList")
|
||||||
.FirstOrDefault(spawnPoint => spawnPoint.GetSpawnLocation() == SpawnLocation.TimberHearth && spawnPoint.IsShipSpawn() == isShip);
|
.FirstOrDefault(spawnPoint => spawnPoint.GetSpawnLocation() == SpawnLocation.TimberHearth && spawnPoint.IsShipSpawn() == isShip);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
39
QSB/DialogueConditionSync/Events/DialogueConditionEvent.cs
Normal file
39
QSB/DialogueConditionSync/Events/DialogueConditionEvent.cs
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
using QSB.Events;
|
||||||
|
using QSB.WorldSync;
|
||||||
|
|
||||||
|
namespace QSB.DialogueConditionSync.Events
|
||||||
|
{
|
||||||
|
public class DialogueConditionEvent : QSBEvent<DialogueConditionMessage>
|
||||||
|
{
|
||||||
|
public override EventType Type => EventType.DialogueCondition;
|
||||||
|
|
||||||
|
public override void SetupListener() => GlobalMessenger<string, bool>.AddListener(EventNames.DialogueCondition, Handler);
|
||||||
|
public override void CloseListener() => GlobalMessenger<string, bool>.RemoveListener(EventNames.DialogueCondition, Handler);
|
||||||
|
|
||||||
|
private void Handler(string name, bool state) => SendEvent(CreateMessage(name, state));
|
||||||
|
|
||||||
|
private DialogueConditionMessage CreateMessage(string name, bool state) => new DialogueConditionMessage
|
||||||
|
{
|
||||||
|
AboutId = LocalPlayerId,
|
||||||
|
ConditionName = name,
|
||||||
|
ConditionState = state
|
||||||
|
};
|
||||||
|
|
||||||
|
public override void OnReceiveLocal(bool server, DialogueConditionMessage message)
|
||||||
|
{
|
||||||
|
if (server)
|
||||||
|
{
|
||||||
|
QSBWorldSync.SetDialogueCondition(message.ConditionName, message.ConditionState);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnReceiveRemote(bool server, DialogueConditionMessage message)
|
||||||
|
{
|
||||||
|
if (server)
|
||||||
|
{
|
||||||
|
QSBWorldSync.SetDialogueCondition(message.ConditionName, message.ConditionState);
|
||||||
|
}
|
||||||
|
DialogueConditionManager.SharedInstance.SetConditionState(message.ConditionName, message.ConditionState);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
25
QSB/DialogueConditionSync/Events/DialogueConditionMessage.cs
Normal file
25
QSB/DialogueConditionSync/Events/DialogueConditionMessage.cs
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
using QSB.Messaging;
|
||||||
|
using QuantumUNET;
|
||||||
|
|
||||||
|
namespace QSB.DialogueConditionSync.Events
|
||||||
|
{
|
||||||
|
public class DialogueConditionMessage : PlayerMessage
|
||||||
|
{
|
||||||
|
public string ConditionName { get; set; }
|
||||||
|
public bool ConditionState { get; set; }
|
||||||
|
|
||||||
|
public override void Deserialize(QSBNetworkReader reader)
|
||||||
|
{
|
||||||
|
base.Deserialize(reader);
|
||||||
|
ConditionName = reader.ReadString();
|
||||||
|
ConditionState = reader.ReadBoolean();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Serialize(QSBNetworkWriter writer)
|
||||||
|
{
|
||||||
|
base.Serialize(writer);
|
||||||
|
writer.Write(ConditionName);
|
||||||
|
writer.Write(ConditionState);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -11,25 +11,22 @@ namespace QSB.ElevatorSync
|
|||||||
|
|
||||||
private List<Elevator> _elevators;
|
private List<Elevator> _elevators;
|
||||||
|
|
||||||
private void Awake()
|
public void Awake()
|
||||||
{
|
{
|
||||||
Instance = this;
|
Instance = this;
|
||||||
QSBSceneManager.OnSceneLoaded += OnSceneLoaded;
|
QSBSceneManager.OnSceneLoaded += OnSceneLoaded;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnDestroy()
|
public void OnDestroy() => QSBSceneManager.OnSceneLoaded -= OnSceneLoaded;
|
||||||
{
|
|
||||||
QSBSceneManager.OnSceneLoaded -= OnSceneLoaded;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnSceneLoaded(OWScene scene, bool isInUniverse)
|
private void OnSceneLoaded(OWScene scene, bool isInUniverse)
|
||||||
{
|
{
|
||||||
_elevators = Resources.FindObjectsOfTypeAll<Elevator>().ToList();
|
_elevators = Resources.FindObjectsOfTypeAll<Elevator>().ToList();
|
||||||
for (var id = 0; id < _elevators.Count; id++)
|
for (var id = 0; id < _elevators.Count; id++)
|
||||||
{
|
{
|
||||||
var qsbElevator = WorldRegistry.GetObject<QSBElevator>(id) ?? new QSBElevator();
|
var qsbElevator = QSBWorldSync.GetWorldObject<QSBElevator>(id) ?? new QSBElevator();
|
||||||
qsbElevator.Init(_elevators[id], id);
|
qsbElevator.Init(_elevators[id], id);
|
||||||
WorldRegistry.AddObject(qsbElevator);
|
QSBWorldSync.AddWorldObject(qsbElevator);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
using OWML.ModHelper.Events;
|
using OWML.ModHelper.Events;
|
||||||
using QSB.EventsCore;
|
using QSB.Events;
|
||||||
|
using QSB.Patches;
|
||||||
|
|
||||||
namespace QSB.ElevatorSync
|
namespace QSB.ElevatorSync
|
||||||
{
|
{
|
||||||
@ -16,7 +17,7 @@ namespace QSB.ElevatorSync
|
|||||||
|
|
||||||
public override void DoPatches()
|
public override void DoPatches()
|
||||||
{
|
{
|
||||||
QSB.Helper.HarmonyHelper.AddPostfix<Elevator>("StartLift", typeof(ElevatorPatches), nameof(StartLift));
|
QSBCore.Helper.HarmonyHelper.AddPostfix<Elevator>("StartLift", typeof(ElevatorPatches), nameof(StartLift));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,4 +1,4 @@
|
|||||||
using QSB.EventsCore;
|
using QSB.Events;
|
||||||
using QSB.WorldSync;
|
using QSB.WorldSync;
|
||||||
using QSB.WorldSync.Events;
|
using QSB.WorldSync.Events;
|
||||||
|
|
||||||
@ -9,7 +9,6 @@ namespace QSB.ElevatorSync.Events
|
|||||||
public override EventType Type => EventType.Elevator;
|
public override EventType Type => EventType.Elevator;
|
||||||
|
|
||||||
public override void SetupListener() => GlobalMessenger<int, bool>.AddListener(EventNames.QSBStartLift, Handler);
|
public override void SetupListener() => GlobalMessenger<int, bool>.AddListener(EventNames.QSBStartLift, Handler);
|
||||||
|
|
||||||
public override void CloseListener() => GlobalMessenger<int, bool>.RemoveListener(EventNames.QSBStartLift, Handler);
|
public override void CloseListener() => GlobalMessenger<int, bool>.RemoveListener(EventNames.QSBStartLift, Handler);
|
||||||
|
|
||||||
private void Handler(int id, bool isGoingUp) => SendEvent(CreateMessage(id, isGoingUp));
|
private void Handler(int id, bool isGoingUp) => SendEvent(CreateMessage(id, isGoingUp));
|
||||||
@ -20,9 +19,9 @@ namespace QSB.ElevatorSync.Events
|
|||||||
ObjectId = id
|
ObjectId = id
|
||||||
};
|
};
|
||||||
|
|
||||||
public override void OnReceiveRemote(BoolWorldObjectMessage message)
|
public override void OnReceiveRemote(bool server, BoolWorldObjectMessage message)
|
||||||
{
|
{
|
||||||
var elevator = WorldRegistry.GetObject<QSBElevator>(message.ObjectId);
|
var elevator = QSBWorldSync.GetWorldObject<QSBElevator>(message.ObjectId);
|
||||||
elevator?.RemoteCall(message.State);
|
elevator?.RemoteCall(message.State);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,7 @@ namespace QSB.ElevatorSync
|
|||||||
{
|
{
|
||||||
_elevator = elevator;
|
_elevator = elevator;
|
||||||
ObjectId = id;
|
ObjectId = id;
|
||||||
QSB.Helper.Events.Unity.RunWhen(() => _elevator.GetValue<SingleInteractionVolume>("_interactVolume") != null, InitValues);
|
QSBCore.Helper.Events.Unity.RunWhen(() => _elevator.GetValue<SingleInteractionVolume>("_interactVolume") != null, InitValues);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void InitValues()
|
private void InitValues()
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
namespace QSB.EventsCore
|
namespace QSB.Events
|
||||||
{
|
{
|
||||||
public static class EventNames
|
public static class EventNames
|
||||||
{
|
{
|
||||||
@ -17,16 +17,14 @@
|
|||||||
public static string ExitShip = "ExitShip";
|
public static string ExitShip = "ExitShip";
|
||||||
public static string RestartTimeLoop = "RestartTimeLoop";
|
public static string RestartTimeLoop = "RestartTimeLoop";
|
||||||
public static string WakeUp = "WakeUp";
|
public static string WakeUp = "WakeUp";
|
||||||
|
public static string DialogueCondition = "DialogueConditionChanged";
|
||||||
|
|
||||||
public static string QSBPlayerDeath = "QSBPlayerDeath";
|
public static string QSBPlayerDeath = "QSBPlayerDeath";
|
||||||
public static string QSBPlayerJoin = "QSBPlayerJoin";
|
public static string QSBPlayerJoin = "QSBPlayerJoin";
|
||||||
public static string QSBPlayerLeave = "QSBPlayerLeave";
|
|
||||||
public static string QSBPlayerReady = "QSBPlayerReady";
|
public static string QSBPlayerReady = "QSBPlayerReady";
|
||||||
public static string QSBSectorChange = "QSBSectorChange";
|
public static string QSBSectorChange = "QSBSectorChange";
|
||||||
public static string QSBPlayerStatesRequest = "QSBPlayerStatesRequest";
|
public static string QSBPlayerStatesRequest = "QSBPlayerStatesRequest";
|
||||||
public static string QSBServerTime = "QSBServerTime";
|
public static string QSBServerTime = "QSBServerTime";
|
||||||
public static string QSBOnProbeAnchor = "QSBOnProbeAnchor";
|
|
||||||
public static string QSBOnProbeWarp = "QSBOnProbeWarp";
|
|
||||||
public static string QSBStartLift = "QSBStartLift";
|
public static string QSBStartLift = "QSBStartLift";
|
||||||
public static string QSBGeyserState = "QSBGeyserState";
|
public static string QSBGeyserState = "QSBGeyserState";
|
||||||
public static string QSBCrouch = "QSBAnimTrigger";
|
public static string QSBCrouch = "QSBAnimTrigger";
|
@ -1,4 +1,4 @@
|
|||||||
namespace QSB.EventsCore
|
namespace QSB.Events
|
||||||
{
|
{
|
||||||
public enum EventType
|
public enum EventType
|
||||||
{
|
{
|
||||||
@ -13,7 +13,6 @@
|
|||||||
ProbeLauncherActiveChange,
|
ProbeLauncherActiveChange,
|
||||||
SuitActiveChange,
|
SuitActiveChange,
|
||||||
PlayerJoin,
|
PlayerJoin,
|
||||||
PlayerLeave,
|
|
||||||
PlayerDeath,
|
PlayerDeath,
|
||||||
PlayerSectorChange,
|
PlayerSectorChange,
|
||||||
PlayerReady,
|
PlayerReady,
|
||||||
@ -24,6 +23,7 @@
|
|||||||
OrbUser,
|
OrbUser,
|
||||||
Conversation,
|
Conversation,
|
||||||
ConversationStartEnd,
|
ConversationStartEnd,
|
||||||
PlayInstrument
|
PlayInstrument,
|
||||||
|
DialogueCondition
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,9 +1,8 @@
|
|||||||
namespace QSB.EventsCore
|
namespace QSB.Events
|
||||||
{
|
{
|
||||||
public interface IQSBEvent
|
public interface IQSBEvent
|
||||||
{
|
{
|
||||||
void SetupListener();
|
void SetupListener();
|
||||||
|
|
||||||
void CloseListener();
|
void CloseListener();
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -3,42 +3,32 @@ using QSB.Player;
|
|||||||
using QSB.TransformSync;
|
using QSB.TransformSync;
|
||||||
using QuantumUNET;
|
using QuantumUNET;
|
||||||
|
|
||||||
namespace QSB.EventsCore
|
namespace QSB.Events
|
||||||
{
|
{
|
||||||
public abstract class QSBEvent<T> : IQSBEvent where T : PlayerMessage, new()
|
public abstract class QSBEvent<T> : IQSBEvent where T : PlayerMessage, new()
|
||||||
{
|
{
|
||||||
public abstract EventType Type { get; }
|
public abstract EventType Type { get; }
|
||||||
public uint LocalPlayerId => QSBPlayerManager.LocalPlayerId;
|
public uint LocalPlayerId => QSBPlayerManager.LocalPlayerId;
|
||||||
|
|
||||||
private readonly MessageHandler<T> _eventHandler;
|
private readonly MessageHandler<T> _eventHandler;
|
||||||
|
|
||||||
protected QSBEvent()
|
protected QSBEvent()
|
||||||
{
|
{
|
||||||
_eventHandler = new MessageHandler<T>(Type);
|
_eventHandler = new MessageHandler<T>(Type);
|
||||||
_eventHandler.OnClientReceiveMessage += OnClientReceive;
|
_eventHandler.OnClientReceiveMessage += message => OnReceive(false, message);
|
||||||
_eventHandler.OnServerReceiveMessage += OnServerReceive;
|
_eventHandler.OnServerReceiveMessage += message => OnReceive(true, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract void SetupListener();
|
public abstract void SetupListener();
|
||||||
|
|
||||||
public abstract void CloseListener();
|
public abstract void CloseListener();
|
||||||
|
|
||||||
public virtual void OnReceiveRemote(T message)
|
public virtual void OnReceiveRemote(bool server, T message) { }
|
||||||
{
|
public virtual void OnReceiveLocal(bool server, T message) { }
|
||||||
}
|
|
||||||
|
|
||||||
public virtual void OnReceiveLocal(T message)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public virtual void OnServerReceive(T message)
|
|
||||||
{
|
|
||||||
_eventHandler.SendToAll(message);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SendEvent(T message)
|
public void SendEvent(T message)
|
||||||
{
|
{
|
||||||
message.FromId = QSBPlayerManager.LocalPlayerId;
|
message.FromId = QSBPlayerManager.LocalPlayerId;
|
||||||
QSB.Helper.Events.Unity.RunWhen(() => PlayerTransformSync.LocalInstance != null, () => Send(message));
|
QSBCore.Helper.Events.Unity.RunWhen(() => PlayerTransformSync.LocalInstance != null, () => Send(message));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Send(T message)
|
private void Send(T message)
|
||||||
@ -53,16 +43,22 @@ namespace QSB.EventsCore
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnClientReceive(T message)
|
private void OnReceive(bool isServer, T message)
|
||||||
{
|
{
|
||||||
|
if (isServer
|
||||||
|
&& !message.OnlySendToServer
|
||||||
|
&& message.FromId != QSBPlayerManager.LocalPlayerId)
|
||||||
|
{
|
||||||
|
_eventHandler.SendToAll(message);
|
||||||
|
}
|
||||||
if (message.FromId == QSBPlayerManager.LocalPlayerId ||
|
if (message.FromId == QSBPlayerManager.LocalPlayerId ||
|
||||||
QSBPlayerManager.IsBelongingToLocalPlayer(message.AboutId))
|
QSBPlayerManager.IsBelongingToLocalPlayer(message.AboutId))
|
||||||
{
|
{
|
||||||
OnReceiveLocal(message);
|
OnReceiveLocal(isServer, message);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
OnReceiveRemote(message);
|
OnReceiveRemote(isServer, message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,8 +1,8 @@
|
|||||||
using OWML.Common;
|
using OWML.Common;
|
||||||
using QSB.Animation;
|
|
||||||
using QSB.Animation.Events;
|
using QSB.Animation.Events;
|
||||||
using QSB.ConversationSync.Events;
|
using QSB.ConversationSync.Events;
|
||||||
using QSB.DeathSync.Events;
|
using QSB.DeathSync.Events;
|
||||||
|
using QSB.DialogueConditionSync.Events;
|
||||||
using QSB.ElevatorSync.Events;
|
using QSB.ElevatorSync.Events;
|
||||||
using QSB.GeyserSync.Events;
|
using QSB.GeyserSync.Events;
|
||||||
using QSB.OrbSync.Events;
|
using QSB.OrbSync.Events;
|
||||||
@ -12,7 +12,7 @@ using QSB.Tools.Events;
|
|||||||
using QSB.Utility;
|
using QSB.Utility;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace QSB.EventsCore
|
namespace QSB.Events
|
||||||
{
|
{
|
||||||
public static class QSBEventManager
|
public static class QSBEventManager
|
||||||
{
|
{
|
||||||
@ -33,7 +33,6 @@ namespace QSB.EventsCore
|
|||||||
new PlayerProbeLauncherEvent(),
|
new PlayerProbeLauncherEvent(),
|
||||||
new PlayerProbeEvent(),
|
new PlayerProbeEvent(),
|
||||||
new PlayerSectorEvent(),
|
new PlayerSectorEvent(),
|
||||||
new PlayerLeaveEvent(),
|
|
||||||
new PlayerDeathEvent(),
|
new PlayerDeathEvent(),
|
||||||
new PlayerStatesRequestEvent(),
|
new PlayerStatesRequestEvent(),
|
||||||
new ElevatorEvent(),
|
new ElevatorEvent(),
|
||||||
@ -45,7 +44,8 @@ namespace QSB.EventsCore
|
|||||||
new ConversationEvent(),
|
new ConversationEvent(),
|
||||||
new ConversationStartEndEvent(),
|
new ConversationStartEndEvent(),
|
||||||
new ChangeAnimTypeEvent(),
|
new ChangeAnimTypeEvent(),
|
||||||
new ServerSendPlayerStatesEvent()
|
new ServerSendPlayerStatesEvent(),
|
||||||
|
new DialogueConditionEvent()
|
||||||
};
|
};
|
||||||
|
|
||||||
_eventList.ForEach(ev => ev.SetupListener());
|
_eventList.ForEach(ev => ev.SetupListener());
|
||||||
@ -58,9 +58,7 @@ namespace QSB.EventsCore
|
|||||||
public static void Reset()
|
public static void Reset()
|
||||||
{
|
{
|
||||||
Ready = false;
|
Ready = false;
|
||||||
|
|
||||||
_eventList.ForEach(ev => ev.CloseListener());
|
_eventList.ForEach(ev => ev.CloseListener());
|
||||||
|
|
||||||
_eventList = new List<IQSBEvent>();
|
_eventList = new List<IQSBEvent>();
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,4 +1,4 @@
|
|||||||
using QSB.EventsCore;
|
using QSB.Events;
|
||||||
using QSB.WorldSync;
|
using QSB.WorldSync;
|
||||||
using QSB.WorldSync.Events;
|
using QSB.WorldSync.Events;
|
||||||
|
|
||||||
@ -8,15 +8,8 @@ namespace QSB.GeyserSync.Events
|
|||||||
{
|
{
|
||||||
public override EventType Type => EventType.Geyser;
|
public override EventType Type => EventType.Geyser;
|
||||||
|
|
||||||
public override void SetupListener()
|
public override void SetupListener() => GlobalMessenger<int, bool>.AddListener(EventNames.QSBGeyserState, Handler);
|
||||||
{
|
public override void CloseListener() => GlobalMessenger<int, bool>.RemoveListener(EventNames.QSBGeyserState, Handler);
|
||||||
GlobalMessenger<int, bool>.AddListener(EventNames.QSBGeyserState, Handler);
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void CloseListener()
|
|
||||||
{
|
|
||||||
GlobalMessenger<int, bool>.RemoveListener(EventNames.QSBGeyserState, Handler);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Handler(int id, bool state) => SendEvent(CreateMessage(id, state));
|
private void Handler(int id, bool state) => SendEvent(CreateMessage(id, state));
|
||||||
|
|
||||||
@ -27,9 +20,9 @@ namespace QSB.GeyserSync.Events
|
|||||||
State = state
|
State = state
|
||||||
};
|
};
|
||||||
|
|
||||||
public override void OnReceiveRemote(BoolWorldObjectMessage message)
|
public override void OnReceiveRemote(bool server, BoolWorldObjectMessage message)
|
||||||
{
|
{
|
||||||
var geyser = WorldRegistry.GetObject<QSBGeyser>(message.ObjectId);
|
var geyser = QSBWorldSync.GetWorldObject<QSBGeyser>(message.ObjectId);
|
||||||
geyser?.SetState(message.State);
|
geyser?.SetState(message.State);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,16 +6,13 @@ namespace QSB.GeyserSync
|
|||||||
{
|
{
|
||||||
public class GeyserManager : MonoBehaviour
|
public class GeyserManager : MonoBehaviour
|
||||||
{
|
{
|
||||||
public static GeyserManager Instance { get; private set; }
|
public void Awake()
|
||||||
|
|
||||||
private void Awake()
|
|
||||||
{
|
{
|
||||||
Instance = this;
|
|
||||||
QSBSceneManager.OnSceneLoaded += OnSceneLoaded;
|
QSBSceneManager.OnSceneLoaded += OnSceneLoaded;
|
||||||
QSBPatchManager.OnPatchType += OnPatchType;
|
QSBPatchManager.OnPatchType += OnPatchType;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnDestroy()
|
public void OnDestroy()
|
||||||
{
|
{
|
||||||
QSBSceneManager.OnSceneLoaded -= OnSceneLoaded;
|
QSBSceneManager.OnSceneLoaded -= OnSceneLoaded;
|
||||||
QSBPatchManager.OnPatchType -= OnPatchType;
|
QSBPatchManager.OnPatchType -= OnPatchType;
|
||||||
@ -26,9 +23,9 @@ namespace QSB.GeyserSync
|
|||||||
var geyserControllers = Resources.FindObjectsOfTypeAll<GeyserController>();
|
var geyserControllers = Resources.FindObjectsOfTypeAll<GeyserController>();
|
||||||
for (var id = 0; id < geyserControllers.Length; id++)
|
for (var id = 0; id < geyserControllers.Length; id++)
|
||||||
{
|
{
|
||||||
var qsbGeyser = WorldRegistry.GetObject<QSBGeyser>(id) ?? new QSBGeyser();
|
var qsbGeyser = QSBWorldSync.GetWorldObject<QSBGeyser>(id) ?? new QSBGeyser();
|
||||||
qsbGeyser.Init(geyserControllers[id], id);
|
qsbGeyser.Init(geyserControllers[id], id);
|
||||||
WorldRegistry.AddObject(qsbGeyser);
|
QSBWorldSync.AddWorldObject(qsbGeyser);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -38,7 +35,7 @@ namespace QSB.GeyserSync
|
|||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
QSB.Helper.HarmonyHelper.EmptyMethod<GeyserController>("Update");
|
QSBCore.Helper.HarmonyHelper.EmptyMethod<GeyserController>("Update");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,4 +1,4 @@
|
|||||||
using QSB.EventsCore;
|
using QSB.Events;
|
||||||
using QSB.WorldSync;
|
using QSB.WorldSync;
|
||||||
using QuantumUNET;
|
using QuantumUNET;
|
||||||
|
|
||||||
@ -30,11 +30,9 @@ namespace QSB.GeyserSync
|
|||||||
if (state)
|
if (state)
|
||||||
{
|
{
|
||||||
_geyserController?.ActivateGeyser();
|
_geyserController?.ActivateGeyser();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
else
|
_geyserController?.DeactivateGeyser();
|
||||||
{
|
|
||||||
_geyserController?.DeactivateGeyser();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
using OWML.Common;
|
using OWML.Common;
|
||||||
using QSB.Animation;
|
using QSB.Animation;
|
||||||
using QSB.EventsCore;
|
using QSB.Events;
|
||||||
using QSB.Instruments.QSBCamera;
|
using QSB.Instruments.QSBCamera;
|
||||||
using QSB.Player;
|
using QSB.Player;
|
||||||
using QSB.Utility;
|
using QSB.Utility;
|
||||||
@ -10,54 +10,56 @@ namespace QSB.Instruments
|
|||||||
{
|
{
|
||||||
public class InstrumentsManager : PlayerSyncObject
|
public class InstrumentsManager : PlayerSyncObject
|
||||||
{
|
{
|
||||||
private Transform rootObj;
|
private Transform _rootObj;
|
||||||
private AnimationType _savedType;
|
private AnimationType _savedType;
|
||||||
private GameObject ChertDrum;
|
private GameObject _chertDrum;
|
||||||
|
|
||||||
public void InitLocal(Transform root)
|
public void InitLocal(Transform root)
|
||||||
{
|
{
|
||||||
rootObj = root;
|
_rootObj = root;
|
||||||
gameObject.AddComponent<CameraManager>();
|
gameObject.AddComponent<CameraManager>();
|
||||||
|
|
||||||
QSBInputManager.ChertTaunt += () => StartInstrument(AnimationType.Chert);
|
QSBInputManager.ChertTaunt += OnChertTaunt;
|
||||||
QSBInputManager.EskerTaunt += () => StartInstrument(AnimationType.Esker);
|
QSBInputManager.EskerTaunt += OnEskerTaunt;
|
||||||
QSBInputManager.FeldsparTaunt += () => StartInstrument(AnimationType.Feldspar);
|
QSBInputManager.FeldsparTaunt += OnFeldsparTaunt;
|
||||||
QSBInputManager.GabbroTaunt += () => StartInstrument(AnimationType.Gabbro);
|
QSBInputManager.GabbroTaunt += OnGabbroTaunt;
|
||||||
QSBInputManager.RiebeckTaunt += () => StartInstrument(AnimationType.Riebeck);
|
QSBInputManager.RiebeckTaunt += OnRiebeckTaunt;
|
||||||
QSBInputManager.ExitTaunt += () => ReturnToPlayer();
|
QSBInputManager.ExitTaunt += ReturnToPlayer;
|
||||||
|
|
||||||
QSB.Helper.Events.Unity.RunWhen(() => Locator.GetPlayerBody() != null, SetupInstruments);
|
QSBCore.Helper.Events.Unity.RunWhen(() => Locator.GetPlayerBody() != null, SetupInstruments);
|
||||||
|
|
||||||
QSBPlayerManager.PlayerSyncObjects.Add(this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void InitRemote(Transform root)
|
public void InitRemote(Transform root)
|
||||||
{
|
{
|
||||||
rootObj = root;
|
_rootObj = root;
|
||||||
QSB.Helper.Events.Unity.RunWhen(() => Locator.GetPlayerBody() != null, SetupInstruments);
|
QSBCore.Helper.Events.Unity.RunWhen(() => Locator.GetPlayerBody() != null, SetupInstruments);
|
||||||
|
|
||||||
QSBPlayerManager.PlayerSyncObjects.Add(this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnDestroy()
|
protected override void OnDestroy()
|
||||||
{
|
{
|
||||||
|
base.OnDestroy();
|
||||||
if (!IsLocalPlayer)
|
if (!IsLocalPlayer)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
DebugLog.DebugWrite($"OnDestroy {PlayerId}");
|
QSBInputManager.ChertTaunt -= OnChertTaunt;
|
||||||
QSBInputManager.ChertTaunt -= () => StartInstrument(AnimationType.Chert);
|
QSBInputManager.EskerTaunt -= OnEskerTaunt;
|
||||||
QSBInputManager.EskerTaunt -= () => StartInstrument(AnimationType.Esker);
|
QSBInputManager.FeldsparTaunt -= OnFeldsparTaunt;
|
||||||
QSBInputManager.FeldsparTaunt -= () => StartInstrument(AnimationType.Feldspar);
|
QSBInputManager.GabbroTaunt -= OnGabbroTaunt;
|
||||||
QSBInputManager.GabbroTaunt -= () => StartInstrument(AnimationType.Gabbro);
|
QSBInputManager.RiebeckTaunt -= OnRiebeckTaunt;
|
||||||
QSBInputManager.RiebeckTaunt -= () => StartInstrument(AnimationType.Riebeck);
|
QSBInputManager.ExitTaunt -= ReturnToPlayer;
|
||||||
QSBInputManager.ExitTaunt -= () => ReturnToPlayer();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void OnChertTaunt() => StartInstrument(AnimationType.Chert);
|
||||||
|
private void OnEskerTaunt() => StartInstrument(AnimationType.Esker);
|
||||||
|
private void OnFeldsparTaunt() => StartInstrument(AnimationType.Feldspar);
|
||||||
|
private void OnGabbroTaunt() => StartInstrument(AnimationType.Gabbro);
|
||||||
|
private void OnRiebeckTaunt() => StartInstrument(AnimationType.Riebeck);
|
||||||
|
|
||||||
private void SetupInstruments()
|
private void SetupInstruments()
|
||||||
{
|
{
|
||||||
var bundle = QSB.InstrumentAssetBundle;
|
var bundle = QSBCore.InstrumentAssetBundle;
|
||||||
ChertDrum = MakeChertDrum(bundle);
|
_chertDrum = MakeChertDrum(bundle);
|
||||||
}
|
}
|
||||||
|
|
||||||
private GameObject MakeChertDrum(AssetBundle bundle)
|
private GameObject MakeChertDrum(AssetBundle bundle)
|
||||||
@ -76,8 +78,8 @@ namespace QSB.Instruments
|
|||||||
// TODO : fix for instrument release
|
// TODO : fix for instrument release
|
||||||
mr.sharedMaterial = null;
|
mr.sharedMaterial = null;
|
||||||
}
|
}
|
||||||
drum.transform.parent = rootObj;
|
drum.transform.parent = _rootObj;
|
||||||
drum.transform.rotation = rootObj.rotation;
|
drum.transform.rotation = _rootObj.rotation;
|
||||||
drum.transform.localPosition = Vector3.zero;
|
drum.transform.localPosition = Vector3.zero;
|
||||||
drum.transform.localScale = new Vector3(16.0f, 16.5f, 16.0f);
|
drum.transform.localScale = new Vector3(16.0f, 16.5f, 16.0f);
|
||||||
drum.SetActive(false);
|
drum.SetActive(false);
|
||||||
@ -124,12 +126,11 @@ namespace QSB.Instruments
|
|||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case AnimationType.Chert:
|
case AnimationType.Chert:
|
||||||
ChertDrum.SetActive(true);
|
_chertDrum?.SetActive(true);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case AnimationType.PlayerSuited:
|
case AnimationType.PlayerSuited:
|
||||||
case AnimationType.PlayerUnsuited:
|
case AnimationType.PlayerUnsuited:
|
||||||
ChertDrum.SetActive(false);
|
_chertDrum?.SetActive(false);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,8 @@ namespace QSB.Instruments.QSBCamera
|
|||||||
{
|
{
|
||||||
internal class CameraController : MonoBehaviour
|
internal class CameraController : MonoBehaviour
|
||||||
{
|
{
|
||||||
|
public GameObject CameraObject { get; set; }
|
||||||
|
|
||||||
private float _degreesX;
|
private float _degreesX;
|
||||||
private float _degreesY;
|
private float _degreesY;
|
||||||
private Quaternion _rotationX;
|
private Quaternion _rotationX;
|
||||||
@ -15,9 +17,7 @@ namespace QSB.Instruments.QSBCamera
|
|||||||
// Maximum distance for camera clipping
|
// Maximum distance for camera clipping
|
||||||
private const float RayLength = 5f;
|
private const float RayLength = 5f;
|
||||||
|
|
||||||
public GameObject CameraObject;
|
public void FixedUpdate()
|
||||||
|
|
||||||
private void FixedUpdate()
|
|
||||||
{
|
{
|
||||||
if (CameraManager.Instance.Mode != CameraMode.ThirdPerson)
|
if (CameraManager.Instance.Mode != CameraMode.ThirdPerson)
|
||||||
{
|
{
|
||||||
@ -41,27 +41,19 @@ namespace QSB.Instruments.QSBCamera
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Raycast didn't hit collider, get target from camera direction
|
// Raycast didn't hit collider, get target from camera direction
|
||||||
localTargetPoint = localDirection * RayLength * PercentToMove;
|
localTargetPoint = RayLength * PercentToMove * localDirection;
|
||||||
}
|
}
|
||||||
var targetDistance = Vector3.Distance(origin, transform.TransformPoint(localTargetPoint));
|
var targetDistance = Vector3.Distance(origin, transform.TransformPoint(localTargetPoint));
|
||||||
var currentDistance = Vector3.Distance(origin, CameraObject.transform.position);
|
var currentDistance = Vector3.Distance(origin, CameraObject.transform.position);
|
||||||
Vector3 movement;
|
var movement = targetDistance < currentDistance
|
||||||
if (targetDistance < currentDistance)
|
? localTargetPoint
|
||||||
{
|
: Vector3.MoveTowards(CameraObject.transform.localPosition, localTargetPoint, Time.fixedDeltaTime * 2f);
|
||||||
// Snap to target to avoid clipping
|
|
||||||
movement = localTargetPoint;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Move camera out slowly
|
|
||||||
movement = Vector3.MoveTowards(CameraObject.transform.localPosition, localTargetPoint, Time.fixedDeltaTime * 2f);
|
|
||||||
}
|
|
||||||
CameraObject.transform.localPosition = movement;
|
CameraObject.transform.localPosition = movement;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateInput()
|
private void UpdateInput()
|
||||||
{
|
{
|
||||||
var input = OWInput.GetValue(InputLibrary.look, false, InputMode.All);
|
var input = OWInput.GetValue(InputLibrary.look, false);
|
||||||
_degreesX += input.x * 180f * Time.fixedDeltaTime;
|
_degreesX += input.x * 180f * Time.fixedDeltaTime;
|
||||||
_degreesY += input.y * 180f * Time.fixedDeltaTime;
|
_degreesY += input.y * 180f * Time.fixedDeltaTime;
|
||||||
}
|
}
|
||||||
|
@ -8,13 +8,16 @@ namespace QSB.Instruments.QSBCamera
|
|||||||
public class CameraManager : MonoBehaviour
|
public class CameraManager : MonoBehaviour
|
||||||
{
|
{
|
||||||
public static CameraManager Instance;
|
public static CameraManager Instance;
|
||||||
private GameObject CameraBase;
|
|
||||||
private GameObject CameraObj;
|
|
||||||
private Camera Camera;
|
|
||||||
private OWCamera OWCamera;
|
|
||||||
public bool IsSetUp { get; private set; }
|
public bool IsSetUp { get; private set; }
|
||||||
public CameraMode Mode { get; private set; }
|
public CameraMode Mode { get; private set; }
|
||||||
|
|
||||||
|
private GameObject _cameraBase;
|
||||||
|
private GameObject _cameraObj;
|
||||||
|
private Camera _camera;
|
||||||
|
private OWCamera _owCamera;
|
||||||
|
|
||||||
public void Start()
|
public void Start()
|
||||||
{
|
{
|
||||||
Instance = this;
|
Instance = this;
|
||||||
@ -23,38 +26,38 @@ namespace QSB.Instruments.QSBCamera
|
|||||||
|
|
||||||
private void SetupCamera()
|
private void SetupCamera()
|
||||||
{
|
{
|
||||||
CameraBase = new GameObject();
|
_cameraBase = new GameObject();
|
||||||
CameraBase.SetActive(false);
|
_cameraBase.SetActive(false);
|
||||||
CameraBase.AddComponent<Transform>();
|
_cameraBase.AddComponent<Transform>();
|
||||||
CameraBase.transform.parent = Locator.GetPlayerTransform();
|
_cameraBase.transform.parent = Locator.GetPlayerTransform();
|
||||||
CameraBase.transform.localPosition = Vector3.zero;
|
_cameraBase.transform.localPosition = Vector3.zero;
|
||||||
CameraBase.transform.localRotation = Quaternion.Euler(0, 0, 0);
|
_cameraBase.transform.localRotation = Quaternion.Euler(0, 0, 0);
|
||||||
|
|
||||||
CameraObj = new GameObject();
|
_cameraObj = new GameObject();
|
||||||
CameraObj.transform.parent = CameraBase.transform;
|
_cameraObj.transform.parent = _cameraBase.transform;
|
||||||
CameraObj.transform.localPosition = new Vector3(0, 0, -5f);
|
_cameraObj.transform.localPosition = new Vector3(0, 0, -5f);
|
||||||
CameraObj.transform.localRotation = Quaternion.Euler(0, 0, 0);
|
_cameraObj.transform.localRotation = Quaternion.Euler(0, 0, 0);
|
||||||
Camera = CameraObj.AddComponent<Camera>();
|
_camera = _cameraObj.AddComponent<Camera>();
|
||||||
Camera.cullingMask = Locator.GetPlayerCamera().mainCamera.cullingMask & ~(1 << 27) | (1 << 22);
|
_camera.cullingMask = Locator.GetPlayerCamera().mainCamera.cullingMask & ~(1 << 27) | (1 << 22);
|
||||||
Camera.clearFlags = CameraClearFlags.Color;
|
_camera.clearFlags = CameraClearFlags.Color;
|
||||||
Camera.backgroundColor = Color.black;
|
_camera.backgroundColor = Color.black;
|
||||||
Camera.fieldOfView = 90f;
|
_camera.fieldOfView = 90f;
|
||||||
Camera.nearClipPlane = 0.1f;
|
_camera.nearClipPlane = 0.1f;
|
||||||
Camera.farClipPlane = 40000f;
|
_camera.farClipPlane = 40000f;
|
||||||
Camera.depth = 0f;
|
_camera.depth = 0f;
|
||||||
Camera.enabled = false;
|
_camera.enabled = false;
|
||||||
OWCamera = CameraObj.AddComponent<OWCamera>();
|
_owCamera = _cameraObj.AddComponent<OWCamera>();
|
||||||
OWCamera.renderSkybox = true;
|
_owCamera.renderSkybox = true;
|
||||||
|
|
||||||
CameraBase.AddComponent<CameraController>().CameraObject = CameraObj;
|
_cameraBase.AddComponent<CameraController>().CameraObject = _cameraObj;
|
||||||
|
|
||||||
var screenGrab = CameraObj.AddComponent<FlashbackScreenGrabImageEffect>();
|
var screenGrab = _cameraObj.AddComponent<FlashbackScreenGrabImageEffect>();
|
||||||
screenGrab._downsampleShader = Locator.GetPlayerCamera().gameObject.GetComponent<FlashbackScreenGrabImageEffect>()._downsampleShader;
|
screenGrab._downsampleShader = Locator.GetPlayerCamera().gameObject.GetComponent<FlashbackScreenGrabImageEffect>()._downsampleShader;
|
||||||
|
|
||||||
var fogImage = CameraObj.AddComponent<PlanetaryFogImageEffect>();
|
var fogImage = _cameraObj.AddComponent<PlanetaryFogImageEffect>();
|
||||||
fogImage.fogShader = Locator.GetPlayerCamera().gameObject.GetComponent<PlanetaryFogImageEffect>().fogShader;
|
fogImage.fogShader = Locator.GetPlayerCamera().gameObject.GetComponent<PlanetaryFogImageEffect>().fogShader;
|
||||||
|
|
||||||
CameraBase.SetActive(true);
|
_cameraBase.SetActive(true);
|
||||||
|
|
||||||
IsSetUp = true;
|
IsSetUp = true;
|
||||||
}
|
}
|
||||||
@ -79,14 +82,14 @@ namespace QSB.Instruments.QSBCamera
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
OWInput.ChangeInputMode(InputMode.None);
|
OWInput.ChangeInputMode(InputMode.None);
|
||||||
GlobalMessenger<OWCamera>.FireEvent("SwitchActiveCamera", OWCamera);
|
GlobalMessenger<OWCamera>.FireEvent("SwitchActiveCamera", _owCamera);
|
||||||
Locator.GetPlayerCamera().mainCamera.enabled = false;
|
Locator.GetPlayerCamera().mainCamera.enabled = false;
|
||||||
if (CameraObj.GetComponent<PostProcessingBehaviour>() == null)
|
if (_cameraObj.GetComponent<PostProcessingBehaviour>() == null)
|
||||||
{
|
{
|
||||||
var postProcessing = CameraObj.AddComponent<PostProcessingBehaviour>();
|
var postProcessing = _cameraObj.AddComponent<PostProcessingBehaviour>();
|
||||||
postProcessing.profile = Locator.GetPlayerCamera().gameObject.GetComponent<PostProcessingBehaviour>().profile;
|
postProcessing.profile = Locator.GetPlayerCamera().gameObject.GetComponent<PostProcessingBehaviour>().profile;
|
||||||
}
|
}
|
||||||
Camera.enabled = true;
|
_camera.enabled = true;
|
||||||
Mode = CameraMode.ThirdPerson;
|
Mode = CameraMode.ThirdPerson;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -107,7 +110,7 @@ namespace QSB.Instruments.QSBCamera
|
|||||||
OWInput.ChangeInputMode(InputMode.Character);
|
OWInput.ChangeInputMode(InputMode.Character);
|
||||||
GlobalMessenger<OWCamera>.FireEvent("SwitchActiveCamera", Locator.GetPlayerCamera());
|
GlobalMessenger<OWCamera>.FireEvent("SwitchActiveCamera", Locator.GetPlayerCamera());
|
||||||
Locator.GetActiveCamera().mainCamera.enabled = true;
|
Locator.GetActiveCamera().mainCamera.enabled = true;
|
||||||
Camera.enabled = false;
|
_camera.enabled = false;
|
||||||
Mode = CameraMode.FirstPerson;
|
Mode = CameraMode.FirstPerson;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
{
|
{
|
||||||
public enum CameraMode
|
public enum CameraMode
|
||||||
{
|
{
|
||||||
FirstPerson,
|
FirstPerson = 0,
|
||||||
ThirdPerson
|
ThirdPerson = 1
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,7 +1,6 @@
|
|||||||
using QSB.Messaging;
|
using QuantumUNET;
|
||||||
using QuantumUNET;
|
|
||||||
|
|
||||||
namespace QSB.MessagesCore
|
namespace QSB.Messaging
|
||||||
{
|
{
|
||||||
public class EnumMessage<T> : PlayerMessage
|
public class EnumMessage<T> : PlayerMessage
|
||||||
{
|
{
|
@ -1,7 +1,6 @@
|
|||||||
using QSB.Messaging;
|
using QuantumUNET;
|
||||||
using QuantumUNET;
|
|
||||||
|
|
||||||
namespace QSB.MessagesCore
|
namespace QSB.Messaging
|
||||||
{
|
{
|
||||||
public class FloatMessage : PlayerMessage
|
public class FloatMessage : PlayerMessage
|
||||||
{
|
{
|
@ -1,26 +1,22 @@
|
|||||||
using OWML.Common;
|
using QSB.Events;
|
||||||
using QSB.EventsCore;
|
|
||||||
using QSB.Utility;
|
|
||||||
using QuantumUNET;
|
using QuantumUNET;
|
||||||
|
using QuantumUNET.Components;
|
||||||
using QuantumUNET.Messages;
|
using QuantumUNET.Messages;
|
||||||
using System;
|
using System;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using UnityEngine.Networking;
|
|
||||||
|
|
||||||
namespace QSB.Messaging
|
namespace QSB.Messaging
|
||||||
{
|
{
|
||||||
// Extend this to create new message handlers.
|
|
||||||
public class MessageHandler<T> where T : QSBMessageBase, new()
|
public class MessageHandler<T> where T : QSBMessageBase, new()
|
||||||
{
|
{
|
||||||
public event Action<T> OnClientReceiveMessage;
|
public event Action<T> OnClientReceiveMessage;
|
||||||
|
|
||||||
public event Action<T> OnServerReceiveMessage;
|
public event Action<T> OnServerReceiveMessage;
|
||||||
|
|
||||||
private readonly EventType _eventType;
|
private readonly short _eventType;
|
||||||
|
|
||||||
public MessageHandler(EventType eventType)
|
public MessageHandler(EventType eventType)
|
||||||
{
|
{
|
||||||
_eventType = eventType + MsgType.Highest + 1;
|
_eventType = (short)(eventType + QSBMsgType.Highest + 1);
|
||||||
if (QSBNetworkManager.Instance.IsReady)
|
if (QSBNetworkManager.Instance.IsReady)
|
||||||
{
|
{
|
||||||
Init();
|
Init();
|
||||||
@ -33,14 +29,13 @@ namespace QSB.Messaging
|
|||||||
|
|
||||||
private void Init()
|
private void Init()
|
||||||
{
|
{
|
||||||
var eventName = Enum.GetName(typeof(EventType), _eventType - 1 - MsgType.Highest).ToUpper();
|
if (QSBNetworkServer.handlers.Keys.Contains(_eventType))
|
||||||
if (QSBNetworkServer.handlers.Keys.Contains((short)_eventType))
|
|
||||||
{
|
{
|
||||||
DebugLog.ToConsole($"Warning - NetworkServer already contains a handler for EventType {_eventType}", MessageType.Warning);
|
QSBNetworkServer.handlers.Remove(_eventType);
|
||||||
QSBNetworkServer.handlers.Remove((short)_eventType);
|
QSBNetworkManagerUNET.singleton.client.handlers.Remove(_eventType);
|
||||||
}
|
}
|
||||||
QSBNetworkServer.RegisterHandler((short)_eventType, OnServerReceiveMessageHandler);
|
QSBNetworkServer.RegisterHandler(_eventType, OnServerReceiveMessageHandler);
|
||||||
QSBNetworkManager.singleton.client.RegisterHandler((short)_eventType, OnClientReceiveMessageHandler);
|
QSBNetworkManagerUNET.singleton.client.RegisterHandler(_eventType, OnClientReceiveMessageHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendToAll(T message)
|
public void SendToAll(T message)
|
||||||
@ -49,7 +44,7 @@ namespace QSB.Messaging
|
|||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
QSBNetworkServer.SendToAll((short)_eventType, message);
|
QSBNetworkServer.SendToAll(_eventType, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendToServer(T message)
|
public void SendToServer(T message)
|
||||||
@ -58,7 +53,7 @@ namespace QSB.Messaging
|
|||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
QSBNetworkManager.singleton.client.Send((short)_eventType, message);
|
QSBNetworkManagerUNET.singleton.client.Send(_eventType, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnClientReceiveMessageHandler(QSBNetworkMessage netMsg)
|
private void OnClientReceiveMessageHandler(QSBNetworkMessage netMsg)
|
@ -7,17 +7,20 @@ namespace QSB.Messaging
|
|||||||
{
|
{
|
||||||
public uint FromId { get; set; }
|
public uint FromId { get; set; }
|
||||||
public uint AboutId { get; set; }
|
public uint AboutId { get; set; }
|
||||||
|
public bool OnlySendToServer { get; set; }
|
||||||
|
|
||||||
public override void Deserialize(QSBNetworkReader reader)
|
public override void Deserialize(QSBNetworkReader reader)
|
||||||
{
|
{
|
||||||
FromId = reader.ReadUInt32();
|
FromId = reader.ReadUInt32();
|
||||||
AboutId = reader.ReadUInt32();
|
AboutId = reader.ReadUInt32();
|
||||||
|
OnlySendToServer = reader.ReadBoolean();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Serialize(QSBNetworkWriter writer)
|
public override void Serialize(QSBNetworkWriter writer)
|
||||||
{
|
{
|
||||||
writer.Write(FromId);
|
writer.Write(FromId);
|
||||||
writer.Write(AboutId);
|
writer.Write(AboutId);
|
||||||
|
writer.Write(OnlySendToServer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,4 +1,4 @@
|
|||||||
using QSB.EventsCore;
|
using QSB.Events;
|
||||||
using QSB.WorldSync;
|
using QSB.WorldSync;
|
||||||
|
|
||||||
namespace QSB.OrbSync.Events
|
namespace QSB.OrbSync.Events
|
||||||
@ -8,7 +8,6 @@ namespace QSB.OrbSync.Events
|
|||||||
public override EventType Type => EventType.OrbSlot;
|
public override EventType Type => EventType.OrbSlot;
|
||||||
|
|
||||||
public override void SetupListener() => GlobalMessenger<int, int, bool>.AddListener(EventNames.QSBOrbSlot, Handler);
|
public override void SetupListener() => GlobalMessenger<int, int, bool>.AddListener(EventNames.QSBOrbSlot, Handler);
|
||||||
|
|
||||||
public override void CloseListener() => GlobalMessenger<int, int, bool>.RemoveListener(EventNames.QSBOrbSlot, Handler);
|
public override void CloseListener() => GlobalMessenger<int, int, bool>.RemoveListener(EventNames.QSBOrbSlot, Handler);
|
||||||
|
|
||||||
private void Handler(int slotId, int orbId, bool slotState) => SendEvent(CreateMessage(slotId, orbId, slotState));
|
private void Handler(int slotId, int orbId, bool slotState) => SendEvent(CreateMessage(slotId, orbId, slotState));
|
||||||
@ -21,9 +20,9 @@ namespace QSB.OrbSync.Events
|
|||||||
SlotState = slotState
|
SlotState = slotState
|
||||||
};
|
};
|
||||||
|
|
||||||
public override void OnReceiveRemote(OrbSlotMessage message)
|
public override void OnReceiveRemote(bool server, OrbSlotMessage message)
|
||||||
{
|
{
|
||||||
var orbSlot = WorldRegistry.GetObject<QSBOrbSlot>(message.SlotId);
|
var orbSlot = QSBWorldSync.GetWorldObject<QSBOrbSlot>(message.SlotId);
|
||||||
orbSlot?.SetState(message.SlotState, message.OrbId);
|
orbSlot?.SetState(message.SlotState, message.OrbId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
using OWML.Common;
|
using OWML.Common;
|
||||||
using QSB.EventsCore;
|
using QSB.Events;
|
||||||
using QSB.Utility;
|
using QSB.Utility;
|
||||||
using QSB.WorldSync;
|
using QSB.WorldSync;
|
||||||
using QSB.WorldSync.Events;
|
using QSB.WorldSync.Events;
|
||||||
@ -14,7 +14,6 @@ namespace QSB.OrbSync.Events
|
|||||||
public override EventType Type => EventType.OrbUser;
|
public override EventType Type => EventType.OrbUser;
|
||||||
|
|
||||||
public override void SetupListener() => GlobalMessenger<int>.AddListener(EventNames.QSBOrbUser, Handler);
|
public override void SetupListener() => GlobalMessenger<int>.AddListener(EventNames.QSBOrbUser, Handler);
|
||||||
|
|
||||||
public override void CloseListener() => GlobalMessenger<int>.RemoveListener(EventNames.QSBOrbUser, Handler);
|
public override void CloseListener() => GlobalMessenger<int>.RemoveListener(EventNames.QSBOrbUser, Handler);
|
||||||
|
|
||||||
private void Handler(int id) => SendEvent(CreateMessage(id));
|
private void Handler(int id) => SendEvent(CreateMessage(id));
|
||||||
@ -25,10 +24,22 @@ namespace QSB.OrbSync.Events
|
|||||||
ObjectId = id
|
ObjectId = id
|
||||||
};
|
};
|
||||||
|
|
||||||
public override void OnServerReceive(WorldObjectMessage message)
|
public override void OnReceiveRemote(bool server, WorldObjectMessage message)
|
||||||
|
{
|
||||||
|
if (server)
|
||||||
|
{
|
||||||
|
HandleServer(message);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
HandleClient(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void HandleServer(WorldObjectMessage message)
|
||||||
{
|
{
|
||||||
var fromPlayer = QSBNetworkServer.connections.First(x => x.GetPlayer().PlayerId == message.FromId);
|
var fromPlayer = QSBNetworkServer.connections.First(x => x.GetPlayer().PlayerId == message.FromId);
|
||||||
if (WorldRegistry.OrbSyncList.Count == 0)
|
if (QSBWorldSync.OrbSyncList.Count == 0)
|
||||||
{
|
{
|
||||||
DebugLog.ToConsole($"Error - OrbSyncList is empty. (ID {message.ObjectId})", MessageType.Error);
|
DebugLog.ToConsole($"Error - OrbSyncList is empty. (ID {message.ObjectId})", MessageType.Error);
|
||||||
return;
|
return;
|
||||||
@ -37,14 +48,14 @@ namespace QSB.OrbSync.Events
|
|||||||
{
|
{
|
||||||
DebugLog.DebugWrite("Error - FromPlayer is null!", MessageType.Error);
|
DebugLog.DebugWrite("Error - FromPlayer is null!", MessageType.Error);
|
||||||
}
|
}
|
||||||
var orb = WorldRegistry.OrbSyncList
|
var orbSync = QSBWorldSync.OrbSyncList
|
||||||
.First(x => x.AttachedOrb == WorldRegistry.OldOrbList[message.ObjectId]);
|
.First(x => x.AttachedOrb == QSBWorldSync.OldOrbList[message.ObjectId]);
|
||||||
if (orb == null)
|
if (orbSync == null)
|
||||||
{
|
{
|
||||||
DebugLog.ToConsole($"Error - No orb found for user event. (ID {message.ObjectId})", MessageType.Error);
|
DebugLog.ToConsole($"Error - No orb found for user event. (ID {message.ObjectId})", MessageType.Error);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var orbIdentity = orb.GetComponent<QSBNetworkIdentity>();
|
var orbIdentity = orbSync.GetComponent<QSBNetworkIdentity>();
|
||||||
if (orbIdentity == null)
|
if (orbIdentity == null)
|
||||||
{
|
{
|
||||||
DebugLog.ToConsole($"Error - Orb identity is null. (ID {message.ObjectId})", MessageType.Error);
|
DebugLog.ToConsole($"Error - Orb identity is null. (ID {message.ObjectId})", MessageType.Error);
|
||||||
@ -55,27 +66,21 @@ namespace QSB.OrbSync.Events
|
|||||||
orbIdentity.RemoveClientAuthority(orbIdentity.ClientAuthorityOwner);
|
orbIdentity.RemoveClientAuthority(orbIdentity.ClientAuthorityOwner);
|
||||||
}
|
}
|
||||||
orbIdentity.AssignClientAuthority(fromPlayer);
|
orbIdentity.AssignClientAuthority(fromPlayer);
|
||||||
orb.enabled = true;
|
orbSync.enabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnReceiveRemote(WorldObjectMessage message)
|
private static void HandleClient(WorldObjectMessage message)
|
||||||
{
|
{
|
||||||
if (WorldRegistry.OrbSyncList.Count < message.ObjectId)
|
if (QSBWorldSync.OrbSyncList.Count < message.ObjectId)
|
||||||
{
|
{
|
||||||
DebugLog.DebugWrite($"Error - Orb id {message.ObjectId} out of range of orb sync list {WorldRegistry.OrbSyncList.Count}.", MessageType.Error);
|
DebugLog.DebugWrite(
|
||||||
|
$"Error - Orb id {message.ObjectId} out of range of orb sync list {QSBWorldSync.OrbSyncList.Count}.",
|
||||||
|
MessageType.Error);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var orb = WorldRegistry.OrbSyncList
|
var orb = QSBWorldSync.OrbSyncList
|
||||||
.First(x => x.AttachedOrb == WorldRegistry.OldOrbList[message.ObjectId]);
|
.First(x => x.AttachedOrb == QSBWorldSync.OldOrbList[message.ObjectId]);
|
||||||
orb.enabled = true;
|
orb.enabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnReceiveLocal(WorldObjectMessage message)
|
|
||||||
{
|
|
||||||
if (QSBNetworkServer.active)
|
|
||||||
{
|
|
||||||
OnServerReceive(message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -18,12 +18,11 @@ namespace QSB.OrbSync
|
|||||||
|
|
||||||
private void BuildOrbSlots()
|
private void BuildOrbSlots()
|
||||||
{
|
{
|
||||||
DebugLog.DebugWrite("Building QSBOrbSlots...", MessageType.Info);
|
QSBWorldSync.RemoveWorldObjects<QSBOrbSlot>();
|
||||||
WorldRegistry.RemoveObjects<QSBOrbSlot>();
|
|
||||||
var orbSlots = Resources.FindObjectsOfTypeAll<NomaiInterfaceSlot>();
|
var orbSlots = Resources.FindObjectsOfTypeAll<NomaiInterfaceSlot>();
|
||||||
for (var id = 0; id < orbSlots.Length; id++)
|
for (var id = 0; id < orbSlots.Length; id++)
|
||||||
{
|
{
|
||||||
var qsbOrbSlot = WorldRegistry.GetObject<QSBOrbSlot>(id) ?? new QSBOrbSlot();
|
var qsbOrbSlot = QSBWorldSync.GetWorldObject<QSBOrbSlot>(id) ?? new QSBOrbSlot();
|
||||||
qsbOrbSlot.Init(orbSlots[id], id);
|
qsbOrbSlot.Init(orbSlots[id], id);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -32,29 +31,18 @@ namespace QSB.OrbSync
|
|||||||
|
|
||||||
public void BuildOrbs()
|
public void BuildOrbs()
|
||||||
{
|
{
|
||||||
DebugLog.DebugWrite("Building orb syncs...", MessageType.Info);
|
QSBWorldSync.OldOrbList.Clear();
|
||||||
WorldRegistry.OldOrbList.Clear();
|
QSBWorldSync.OldOrbList = Resources.FindObjectsOfTypeAll<NomaiInterfaceOrb>().ToList();
|
||||||
WorldRegistry.OldOrbList = Resources.FindObjectsOfTypeAll<NomaiInterfaceOrb>().ToList();
|
|
||||||
if (QSBNetworkServer.active)
|
if (QSBNetworkServer.active)
|
||||||
{
|
{
|
||||||
DebugLog.DebugWrite("- Is server, instantiating orb prefabs.");
|
QSBWorldSync.OrbSyncList.ForEach(x => QSBNetworkServer.Destroy(x.gameObject));
|
||||||
WorldRegistry.OrbSyncList.ForEach(x => QSBNetworkServer.Destroy(x.gameObject));
|
QSBWorldSync.OrbSyncList.Clear();
|
||||||
WorldRegistry.OrbSyncList.Clear();
|
QSBWorldSync.OldOrbList.ForEach(x => QSBNetworkServer.Spawn(Instantiate(QSBNetworkManager.Instance.OrbPrefab)));
|
||||||
WorldRegistry.OldOrbList.ForEach(x => QSBNetworkServer.Spawn(Instantiate(QSBNetworkManager.Instance.OrbPrefab)));
|
|
||||||
}
|
}
|
||||||
DebugLog.DebugWrite($"Finished orb build with {WorldRegistry.OldOrbList.Count} orbs.", MessageType.Success);
|
DebugLog.DebugWrite($"Finished orb build with {QSBWorldSync.OldOrbList.Count} orbs.", MessageType.Success);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void QueueBuildSlots()
|
public void QueueBuildSlots() => QSBCore.Helper.Events.Unity.RunWhen(() => QSBCore.HasWokenUp, BuildOrbSlots);
|
||||||
{
|
public void QueueBuildOrbs() => QSBCore.Helper.Events.Unity.RunWhen(() => QSBNetworkServer.active, BuildOrbs);
|
||||||
DebugLog.DebugWrite("Queueing build of QSBOrbSlots...", MessageType.Info);
|
|
||||||
QSB.Helper.Events.Unity.RunWhen(() => QSB.HasWokenUp, BuildOrbSlots);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void QueueBuildOrbs()
|
|
||||||
{
|
|
||||||
DebugLog.DebugWrite("Queueing build of NetworkOrbs...", MessageType.Info);
|
|
||||||
QSB.Helper.Events.Unity.RunWhen(() => QSBNetworkServer.active, BuildOrbs);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,4 +1,5 @@
|
|||||||
using QSB.EventsCore;
|
using QSB.Events;
|
||||||
|
using QSB.Patches;
|
||||||
using QSB.WorldSync;
|
using QSB.WorldSync;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
@ -12,7 +13,7 @@ namespace QSB.OrbSync
|
|||||||
{
|
{
|
||||||
if (__result)
|
if (__result)
|
||||||
{
|
{
|
||||||
GlobalMessenger<int>.FireEvent(EventNames.QSBOrbUser, WorldRegistry.OldOrbList.FindIndex(x => x == __instance));
|
GlobalMessenger<int>.FireEvent(EventNames.QSBOrbUser, QSBWorldSync.OldOrbList.FindIndex(x => x == __instance));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -31,8 +32,8 @@ namespace QSB.OrbSync
|
|||||||
____occupyingOrb = orb;
|
____occupyingOrb = orb;
|
||||||
if (Time.timeSinceLevelLoad > 1f)
|
if (Time.timeSinceLevelLoad > 1f)
|
||||||
{
|
{
|
||||||
WorldRegistry.HandleSlotStateChange(__instance, orb, true);
|
QSBWorldSync.HandleSlotStateChange(__instance, orb, true);
|
||||||
WorldRegistry.RaiseEvent(__instance, "OnSlotActivated");
|
QSBWorldSync.RaiseEvent(__instance, "OnSlotActivated");
|
||||||
}
|
}
|
||||||
__result = true;
|
__result = true;
|
||||||
return false;
|
return false;
|
||||||
@ -44,9 +45,9 @@ namespace QSB.OrbSync
|
|||||||
}
|
}
|
||||||
if (orbDistance > triggerRadius)
|
if (orbDistance > triggerRadius)
|
||||||
{
|
{
|
||||||
WorldRegistry.HandleSlotStateChange(__instance, orb, false);
|
QSBWorldSync.HandleSlotStateChange(__instance, orb, false);
|
||||||
____occupyingOrb = null;
|
____occupyingOrb = null;
|
||||||
WorldRegistry.RaiseEvent(__instance, "OnSlotDeactivated");
|
QSBWorldSync.RaiseEvent(__instance, "OnSlotDeactivated");
|
||||||
__result = false;
|
__result = false;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -56,8 +57,8 @@ namespace QSB.OrbSync
|
|||||||
|
|
||||||
public override void DoPatches()
|
public override void DoPatches()
|
||||||
{
|
{
|
||||||
QSB.Helper.HarmonyHelper.AddPostfix<NomaiInterfaceOrb>("StartDragFromPosition", typeof(OrbPatches), nameof(StartDragCallEvent));
|
QSBCore.Helper.HarmonyHelper.AddPostfix<NomaiInterfaceOrb>("StartDragFromPosition", typeof(OrbPatches), nameof(StartDragCallEvent));
|
||||||
QSB.Helper.HarmonyHelper.AddPrefix<NomaiInterfaceSlot>("CheckOrbCollision", typeof(OrbPatches), nameof(CheckOrbCollision));
|
QSBCore.Helper.HarmonyHelper.AddPrefix<NomaiInterfaceSlot>("CheckOrbCollision", typeof(OrbPatches), nameof(CheckOrbCollision));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,5 +1,5 @@
|
|||||||
using OWML.ModHelper.Events;
|
using OWML.ModHelper.Events;
|
||||||
using QSB.EventsCore;
|
using QSB.Events;
|
||||||
using QSB.WorldSync;
|
using QSB.WorldSync;
|
||||||
|
|
||||||
namespace QSB.OrbSync
|
namespace QSB.OrbSync
|
||||||
@ -16,12 +16,12 @@ namespace QSB.OrbSync
|
|||||||
ObjectId = id;
|
ObjectId = id;
|
||||||
InterfaceSlot = slot;
|
InterfaceSlot = slot;
|
||||||
_initialized = true;
|
_initialized = true;
|
||||||
WorldRegistry.AddObject(this);
|
QSBWorldSync.AddWorldObject(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void HandleEvent(bool state, int orbId)
|
public void HandleEvent(bool state, int orbId)
|
||||||
{
|
{
|
||||||
if (QSB.HasWokenUp)
|
if (QSBCore.HasWokenUp)
|
||||||
{
|
{
|
||||||
GlobalMessenger<int, int, bool>.FireEvent(EventNames.QSBOrbSlot, ObjectId, orbId, state);
|
GlobalMessenger<int, int, bool>.FireEvent(EventNames.QSBOrbSlot, ObjectId, orbId, state);
|
||||||
}
|
}
|
||||||
@ -33,10 +33,10 @@ namespace QSB.OrbSync
|
|||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var occOrb = state ? WorldRegistry.OldOrbList[orbId] : null;
|
var occOrb = state ? QSBWorldSync.OldOrbList[orbId] : null;
|
||||||
InterfaceSlot.SetValue("_occupyingOrb", occOrb);
|
InterfaceSlot.SetValue("_occupyingOrb", occOrb);
|
||||||
var ev = state ? "OnSlotActivated" : "OnSlotDeactivated";
|
var ev = state ? "OnSlotActivated" : "OnSlotDeactivated";
|
||||||
WorldRegistry.RaiseEvent(InterfaceSlot, ev);
|
QSBWorldSync.RaiseEvent(InterfaceSlot, ev);
|
||||||
Activated = state;
|
Activated = state;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,8 @@
|
|||||||
namespace QSB
|
namespace QSB.Patches
|
||||||
{
|
{
|
||||||
public abstract class QSBPatch
|
public abstract class QSBPatch
|
||||||
{
|
{
|
||||||
public abstract QSBPatchTypes Type { get; }
|
public abstract QSBPatchTypes Type { get; }
|
||||||
|
|
||||||
public abstract void DoPatches();
|
public abstract void DoPatches();
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -4,7 +4,6 @@ using QSB.DeathSync;
|
|||||||
using QSB.ElevatorSync;
|
using QSB.ElevatorSync;
|
||||||
using QSB.OrbSync;
|
using QSB.OrbSync;
|
||||||
using QSB.TimeSync;
|
using QSB.TimeSync;
|
||||||
using QSB.Tools;
|
|
||||||
using QSB.Utility;
|
using QSB.Utility;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
@ -16,10 +15,10 @@ namespace QSB.Patches
|
|||||||
|
|
||||||
public static class QSBPatchManager
|
public static class QSBPatchManager
|
||||||
{
|
{
|
||||||
public static List<QSBPatch> _patchList = new List<QSBPatch>();
|
|
||||||
|
|
||||||
public static event PatchEvent OnPatchType;
|
public static event PatchEvent OnPatchType;
|
||||||
|
|
||||||
|
private static List<QSBPatch> _patchList = new List<QSBPatch>();
|
||||||
|
|
||||||
public static void Init()
|
public static void Init()
|
||||||
{
|
{
|
||||||
_patchList = new List<QSBPatch>
|
_patchList = new List<QSBPatch>
|
||||||
@ -28,8 +27,7 @@ namespace QSB.Patches
|
|||||||
new DeathPatches(),
|
new DeathPatches(),
|
||||||
new ElevatorPatches(),
|
new ElevatorPatches(),
|
||||||
new OrbPatches(),
|
new OrbPatches(),
|
||||||
new WakeUpPatches(),
|
new WakeUpPatches()
|
||||||
new ProbePatches()
|
|
||||||
};
|
};
|
||||||
|
|
||||||
DebugLog.DebugWrite("Patch Manager ready.", MessageType.Success);
|
DebugLog.DebugWrite("Patch Manager ready.", MessageType.Success);
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
namespace QSB
|
namespace QSB.Patches
|
||||||
{
|
{
|
||||||
public enum QSBPatchTypes
|
public enum QSBPatchTypes
|
||||||
{
|
{
|
||||||
OnModStart,
|
OnModStart = 0,
|
||||||
OnClientConnect,
|
OnClientConnect = 1,
|
||||||
OnNonServerClientConnect
|
OnNonServerClientConnect = 2
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,5 +1,5 @@
|
|||||||
using OWML.Common;
|
using OWML.Common;
|
||||||
using QSB.EventsCore;
|
using QSB.Events;
|
||||||
using QSB.Utility;
|
using QSB.Utility;
|
||||||
|
|
||||||
namespace QSB.Player.Events
|
namespace QSB.Player.Events
|
||||||
@ -9,7 +9,6 @@ namespace QSB.Player.Events
|
|||||||
public override EventType Type => EventType.PlayerJoin;
|
public override EventType Type => EventType.PlayerJoin;
|
||||||
|
|
||||||
public override void SetupListener() => GlobalMessenger<string>.AddListener(EventNames.QSBPlayerJoin, Handler);
|
public override void SetupListener() => GlobalMessenger<string>.AddListener(EventNames.QSBPlayerJoin, Handler);
|
||||||
|
|
||||||
public override void CloseListener() => GlobalMessenger<string>.RemoveListener(EventNames.QSBPlayerJoin, Handler);
|
public override void CloseListener() => GlobalMessenger<string>.RemoveListener(EventNames.QSBPlayerJoin, Handler);
|
||||||
|
|
||||||
private void Handler(string name) => SendEvent(CreateMessage(name));
|
private void Handler(string name) => SendEvent(CreateMessage(name));
|
||||||
@ -20,7 +19,7 @@ namespace QSB.Player.Events
|
|||||||
PlayerName = name
|
PlayerName = name
|
||||||
};
|
};
|
||||||
|
|
||||||
public override void OnReceiveRemote(PlayerJoinMessage message)
|
public override void OnReceiveRemote(bool server, PlayerJoinMessage message)
|
||||||
{
|
{
|
||||||
var player = QSBPlayerManager.GetPlayer(message.AboutId);
|
var player = QSBPlayerManager.GetPlayer(message.AboutId);
|
||||||
player.Name = message.PlayerName;
|
player.Name = message.PlayerName;
|
||||||
@ -28,7 +27,7 @@ namespace QSB.Player.Events
|
|||||||
DebugLog.DebugWrite($"{player.Name} joined as id {player.PlayerId}", MessageType.Info);
|
DebugLog.DebugWrite($"{player.Name} joined as id {player.PlayerId}", MessageType.Info);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnReceiveLocal(PlayerJoinMessage message)
|
public override void OnReceiveLocal(bool server, PlayerJoinMessage message)
|
||||||
{
|
{
|
||||||
var player = QSBPlayerManager.GetPlayer(QSBPlayerManager.LocalPlayerId);
|
var player = QSBPlayerManager.GetPlayer(QSBPlayerManager.LocalPlayerId);
|
||||||
player.Name = message.PlayerName;
|
player.Name = message.PlayerName;
|
||||||
|
@ -1,33 +0,0 @@
|
|||||||
using OWML.Common;
|
|
||||||
using QSB.EventsCore;
|
|
||||||
using QSB.Utility;
|
|
||||||
using System.Linq;
|
|
||||||
|
|
||||||
namespace QSB.Player.Events
|
|
||||||
{
|
|
||||||
public class PlayerLeaveEvent : QSBEvent<PlayerLeaveMessage>
|
|
||||||
{
|
|
||||||
public override EventType Type => EventType.PlayerLeave;
|
|
||||||
|
|
||||||
public override void SetupListener() => GlobalMessenger<uint, uint[]>.AddListener(EventNames.QSBPlayerLeave, Handler);
|
|
||||||
|
|
||||||
public override void CloseListener() => GlobalMessenger<uint, uint[]>.RemoveListener(EventNames.QSBPlayerLeave, Handler);
|
|
||||||
|
|
||||||
private void Handler(uint playerId, uint[] netIds) => SendEvent(CreateMessage(playerId, netIds));
|
|
||||||
|
|
||||||
private PlayerLeaveMessage CreateMessage(uint playerId, uint[] netIds) => new PlayerLeaveMessage
|
|
||||||
{
|
|
||||||
AboutId = playerId,
|
|
||||||
NetIds = netIds
|
|
||||||
};
|
|
||||||
|
|
||||||
public override void OnReceiveRemote(PlayerLeaveMessage message)
|
|
||||||
{
|
|
||||||
var playerName = QSBPlayerManager.GetPlayer(message.AboutId).Name;
|
|
||||||
DebugLog.ToAll($"{playerName} disconnected.", MessageType.Info);
|
|
||||||
QSBPlayerManager.GetPlayer(message.AboutId).HudMarker?.Remove();
|
|
||||||
QSBPlayerManager.RemovePlayer(message.AboutId);
|
|
||||||
message.NetIds.ToList().ForEach(netId => QSBNetworkManager.Instance.CleanupNetworkBehaviour(netId));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,24 +0,0 @@
|
|||||||
using QSB.Messaging;
|
|
||||||
using QuantumUNET;
|
|
||||||
using System;
|
|
||||||
using System.Linq;
|
|
||||||
|
|
||||||
namespace QSB.Player.Events
|
|
||||||
{
|
|
||||||
public class PlayerLeaveMessage : PlayerMessage
|
|
||||||
{
|
|
||||||
public uint[] NetIds { get; set; }
|
|
||||||
|
|
||||||
public override void Deserialize(QSBNetworkReader reader)
|
|
||||||
{
|
|
||||||
base.Deserialize(reader);
|
|
||||||
NetIds = reader.ReadString().Split(',').Select(x => Convert.ToUInt32(x)).ToArray();
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void Serialize(QSBNetworkWriter writer)
|
|
||||||
{
|
|
||||||
base.Serialize(writer);
|
|
||||||
writer.Write(string.Join(",", NetIds.Select(x => x.ToString()).ToArray()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,5 +1,5 @@
|
|||||||
using OWML.Common;
|
using OWML.Common;
|
||||||
using QSB.EventsCore;
|
using QSB.Events;
|
||||||
using QSB.Messaging;
|
using QSB.Messaging;
|
||||||
using QSB.SectorSync;
|
using QSB.SectorSync;
|
||||||
using QSB.Utility;
|
using QSB.Utility;
|
||||||
@ -12,7 +12,6 @@ namespace QSB.Player.Events
|
|||||||
public override EventType Type => EventType.PlayerReady;
|
public override EventType Type => EventType.PlayerReady;
|
||||||
|
|
||||||
public override void SetupListener() => GlobalMessenger<bool>.AddListener(EventNames.QSBPlayerReady, Handler);
|
public override void SetupListener() => GlobalMessenger<bool>.AddListener(EventNames.QSBPlayerReady, Handler);
|
||||||
|
|
||||||
public override void CloseListener() => GlobalMessenger<bool>.RemoveListener(EventNames.QSBPlayerReady, Handler);
|
public override void CloseListener() => GlobalMessenger<bool>.RemoveListener(EventNames.QSBPlayerReady, Handler);
|
||||||
|
|
||||||
private void Handler(bool ready) => SendEvent(CreateMessage(ready));
|
private void Handler(bool ready) => SendEvent(CreateMessage(ready));
|
||||||
@ -23,23 +22,33 @@ namespace QSB.Player.Events
|
|||||||
ToggleValue = ready
|
ToggleValue = ready
|
||||||
};
|
};
|
||||||
|
|
||||||
public override void OnServerReceive(ToggleMessage message)
|
public override void OnReceiveRemote(bool server, ToggleMessage message)
|
||||||
{
|
{
|
||||||
DebugLog.DebugWrite($"[S] Get ready event from {message.FromId}", MessageType.Success);
|
if (server)
|
||||||
if (message.FromId == QSBPlayerManager.LocalPlayerId)
|
|
||||||
{
|
{
|
||||||
return;
|
HandleServer(message);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
HandleClient(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void HandleServer(ToggleMessage message)
|
||||||
|
{
|
||||||
|
DebugLog.DebugWrite($"Get ready event from {message.FromId}", MessageType.Success);
|
||||||
QSBPlayerManager.GetPlayer(message.AboutId).IsReady = message.ToggleValue;
|
QSBPlayerManager.GetPlayer(message.AboutId).IsReady = message.ToggleValue;
|
||||||
GlobalMessenger.FireEvent(EventNames.QSBServerSendPlayerStates);
|
GlobalMessenger.FireEvent(EventNames.QSBServerSendPlayerStates);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnReceiveRemote(ToggleMessage message)
|
private void HandleClient(ToggleMessage message)
|
||||||
{
|
{
|
||||||
DebugLog.DebugWrite($"Get ready event from {message.FromId}", MessageType.Success);
|
DebugLog.DebugWrite($"Get ready event from {message.FromId}", MessageType.Success);
|
||||||
if (!QSBPlayerManager.PlayerExists(message.FromId))
|
if (!QSBPlayerManager.PlayerExists(message.FromId))
|
||||||
{
|
{
|
||||||
DebugLog.ToConsole("Error - Got ready event for non-existent player! Did we not send a PlayerStatesRequestEvent? Or was it not handled?", MessageType.Error);
|
DebugLog.ToConsole(
|
||||||
|
"Error - Got ready event for non-existent player! Did we not send a PlayerStatesRequestEvent? Or was it not handled?",
|
||||||
|
MessageType.Error);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
foreach (var item in QSBPlayerManager.GetSyncObjects<TransformSync.TransformSync>()
|
foreach (var item in QSBPlayerManager.GetSyncObjects<TransformSync.TransformSync>()
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
using OWML.Common;
|
using OWML.Common;
|
||||||
using QSB.EventsCore;
|
using QSB.Events;
|
||||||
using QSB.SectorSync;
|
using QSB.SectorSync;
|
||||||
using QSB.Utility;
|
using QSB.Utility;
|
||||||
using QSB.WorldSync;
|
using QSB.WorldSync;
|
||||||
@ -11,15 +11,8 @@ namespace QSB.Player.Events
|
|||||||
{
|
{
|
||||||
public override EventType Type => EventType.PlayerSectorChange;
|
public override EventType Type => EventType.PlayerSectorChange;
|
||||||
|
|
||||||
public override void SetupListener()
|
public override void SetupListener() => GlobalMessenger<uint, QSBSector>.AddListener(EventNames.QSBSectorChange, Handler);
|
||||||
{
|
public override void CloseListener() => GlobalMessenger<uint, QSBSector>.RemoveListener(EventNames.QSBSectorChange, Handler);
|
||||||
GlobalMessenger<uint, QSBSector>.AddListener(EventNames.QSBSectorChange, Handler);
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void CloseListener()
|
|
||||||
{
|
|
||||||
GlobalMessenger<uint, QSBSector>.RemoveListener(EventNames.QSBSectorChange, Handler);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Handler(uint netId, QSBSector sector) => SendEvent(CreateMessage(netId, sector));
|
private void Handler(uint netId, QSBSector sector) => SendEvent(CreateMessage(netId, sector));
|
||||||
|
|
||||||
@ -29,23 +22,23 @@ namespace QSB.Player.Events
|
|||||||
ObjectId = sector.ObjectId
|
ObjectId = sector.ObjectId
|
||||||
};
|
};
|
||||||
|
|
||||||
public override void OnReceiveRemote(WorldObjectMessage message)
|
public override void OnReceiveRemote(bool server, WorldObjectMessage message)
|
||||||
{
|
{
|
||||||
if (!QSBSceneManager.IsInUniverse)
|
if (!QSBSceneManager.IsInUniverse)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var sector = WorldRegistry.GetObject<QSBSector>(message.ObjectId);
|
var sector = QSBWorldSync.GetWorldObject<QSBSector>(message.ObjectId);
|
||||||
|
|
||||||
if (sector == null)
|
if (sector == null)
|
||||||
{
|
{
|
||||||
DebugLog.ToConsole($"Sector with order id {message.ObjectId} not found!", MessageType.Warning);
|
DebugLog.ToConsole($"Sector with index id {message.ObjectId} not found!", MessageType.Warning);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var transformSync = QSBPlayerManager.GetSyncObject<TransformSync.TransformSync>(message.AboutId);
|
var transformSync = QSBPlayerManager.GetSyncObject<TransformSync.TransformSync>(message.AboutId);
|
||||||
|
|
||||||
QSB.Helper.Events.Unity.RunWhen(() => transformSync?.SyncedTransform != null,
|
QSBCore.Helper.Events.Unity.RunWhen(() => transformSync?.SyncedTransform != null,
|
||||||
() => transformSync?.SetReferenceSector(sector));
|
() => transformSync?.SetReferenceSector(sector));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,8 +8,7 @@ namespace QSB.Player.Events
|
|||||||
public string PlayerName { get; set; }
|
public string PlayerName { get; set; }
|
||||||
public bool PlayerReady { get; set; }
|
public bool PlayerReady { get; set; }
|
||||||
public State PlayerState { get; set; }
|
public State PlayerState { get; set; }
|
||||||
public Sector.Name SectorID { get; set; }
|
|
||||||
public string SectorName { get; set; }
|
|
||||||
|
|
||||||
public override void Deserialize(QSBNetworkReader reader)
|
public override void Deserialize(QSBNetworkReader reader)
|
||||||
{
|
{
|
||||||
@ -17,8 +16,6 @@ namespace QSB.Player.Events
|
|||||||
PlayerName = reader.ReadString();
|
PlayerName = reader.ReadString();
|
||||||
PlayerReady = reader.ReadBoolean();
|
PlayerReady = reader.ReadBoolean();
|
||||||
PlayerState = (State)reader.ReadInt32();
|
PlayerState = (State)reader.ReadInt32();
|
||||||
SectorID = (Sector.Name)reader.ReadInt32();
|
|
||||||
SectorName = reader.ReadString();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Serialize(QSBNetworkWriter writer)
|
public override void Serialize(QSBNetworkWriter writer)
|
||||||
@ -27,8 +24,6 @@ namespace QSB.Player.Events
|
|||||||
writer.Write(PlayerName);
|
writer.Write(PlayerName);
|
||||||
writer.Write(PlayerReady);
|
writer.Write(PlayerReady);
|
||||||
writer.Write((int)PlayerState);
|
writer.Write((int)PlayerState);
|
||||||
writer.Write((int)SectorID);
|
|
||||||
writer.Write(SectorName);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,7 +1,8 @@
|
|||||||
using QSB.EventsCore;
|
using QSB.Events;
|
||||||
using QSB.Messaging;
|
using QSB.Messaging;
|
||||||
using QSB.SectorSync;
|
using QSB.SectorSync;
|
||||||
using QSB.Utility;
|
using QSB.Utility;
|
||||||
|
using QSB.WorldSync;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
|
||||||
namespace QSB.Player.Events
|
namespace QSB.Player.Events
|
||||||
@ -11,25 +12,30 @@ namespace QSB.Player.Events
|
|||||||
public override EventType Type => EventType.PlayerStatesRequest;
|
public override EventType Type => EventType.PlayerStatesRequest;
|
||||||
|
|
||||||
public override void SetupListener() => GlobalMessenger.AddListener(EventNames.QSBPlayerStatesRequest, Handler);
|
public override void SetupListener() => GlobalMessenger.AddListener(EventNames.QSBPlayerStatesRequest, Handler);
|
||||||
|
|
||||||
public override void CloseListener() => GlobalMessenger.RemoveListener(EventNames.QSBPlayerStatesRequest, Handler);
|
public override void CloseListener() => GlobalMessenger.RemoveListener(EventNames.QSBPlayerStatesRequest, Handler);
|
||||||
|
|
||||||
private void Handler() => SendEvent(CreateMessage());
|
private void Handler() => SendEvent(CreateMessage());
|
||||||
|
|
||||||
private PlayerMessage CreateMessage() => new PlayerMessage
|
private PlayerMessage CreateMessage() => new PlayerMessage
|
||||||
{
|
{
|
||||||
AboutId = LocalPlayerId
|
AboutId = LocalPlayerId,
|
||||||
|
OnlySendToServer = true
|
||||||
};
|
};
|
||||||
|
|
||||||
public override void OnServerReceive(PlayerMessage message)
|
public override void OnReceiveRemote(bool server, PlayerMessage message)
|
||||||
{
|
{
|
||||||
DebugLog.DebugWrite($"[S] Get state request from {message.FromId}");
|
DebugLog.DebugWrite($"Get state request from {message.FromId}");
|
||||||
GlobalMessenger.FireEvent(EventNames.QSBServerSendPlayerStates);
|
GlobalMessenger.FireEvent(EventNames.QSBServerSendPlayerStates);
|
||||||
foreach (var item in QSBPlayerManager.GetSyncObjects<TransformSync.TransformSync>()
|
foreach (var item in QSBPlayerManager.GetSyncObjects<TransformSync.TransformSync>()
|
||||||
.Where(x => x != null && x.IsReady && x.ReferenceSector != null))
|
.Where(x => x != null && x.IsReady && x.ReferenceSector != null))
|
||||||
{
|
{
|
||||||
GlobalMessenger<uint, QSBSector>.FireEvent(EventNames.QSBSectorChange, item.NetId.Value, item.ReferenceSector);
|
GlobalMessenger<uint, QSBSector>.FireEvent(EventNames.QSBSectorChange, item.NetId.Value, item.ReferenceSector);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach (var condition in QSBWorldSync.DialogueConditions)
|
||||||
|
{
|
||||||
|
GlobalMessenger<string, bool>.FireEvent(EventNames.DialogueCondition, condition.Key, condition.Value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,5 +1,5 @@
|
|||||||
using OWML.Common;
|
using OWML.Common;
|
||||||
using QSB.EventsCore;
|
using QSB.Events;
|
||||||
using QSB.Utility;
|
using QSB.Utility;
|
||||||
|
|
||||||
namespace QSB.Player.Events
|
namespace QSB.Player.Events
|
||||||
@ -9,7 +9,6 @@ namespace QSB.Player.Events
|
|||||||
public override EventType Type => EventType.PlayerState;
|
public override EventType Type => EventType.PlayerState;
|
||||||
|
|
||||||
public override void SetupListener() => GlobalMessenger.AddListener(EventNames.QSBServerSendPlayerStates, Handler);
|
public override void SetupListener() => GlobalMessenger.AddListener(EventNames.QSBServerSendPlayerStates, Handler);
|
||||||
|
|
||||||
public override void CloseListener() => GlobalMessenger.RemoveListener(EventNames.QSBServerSendPlayerStates, Handler);
|
public override void CloseListener() => GlobalMessenger.RemoveListener(EventNames.QSBServerSendPlayerStates, Handler);
|
||||||
|
|
||||||
private void Handler()
|
private void Handler()
|
||||||
@ -29,10 +28,10 @@ namespace QSB.Player.Events
|
|||||||
PlayerState = player.State
|
PlayerState = player.State
|
||||||
};
|
};
|
||||||
|
|
||||||
public override void OnReceiveRemote(PlayerStateMessage message)
|
public override void OnReceiveRemote(bool server, PlayerStateMessage message)
|
||||||
{
|
{
|
||||||
DebugLog.DebugWrite($"Received playerstate of player ID {message.AboutId}", MessageType.Info);
|
DebugLog.DebugWrite($"Received playerstate of player ID {message.AboutId}", MessageType.Info);
|
||||||
QSB.Helper.Events.Unity.RunWhen(
|
QSBCore.Helper.Events.Unity.RunWhen(
|
||||||
() => QSBPlayerManager.GetSyncObject<TransformSync.TransformSync>(message.AboutId) != null,
|
() => QSBPlayerManager.GetSyncObject<TransformSync.TransformSync>(message.AboutId) != null,
|
||||||
() => QSBPlayerManager.HandleFullStateMessage(message));
|
() => QSBPlayerManager.HandleFullStateMessage(message));
|
||||||
}
|
}
|
||||||
|
@ -16,12 +16,10 @@ namespace QSB.Player
|
|||||||
|
|
||||||
// Body Objects
|
// Body Objects
|
||||||
public GameObject Camera { get; set; }
|
public GameObject Camera { get; set; }
|
||||||
|
|
||||||
public GameObject Body { get; set; }
|
public GameObject Body { get; set; }
|
||||||
|
|
||||||
// Tools
|
// Tools
|
||||||
public GameObject ProbeBody { get; set; }
|
public GameObject ProbeBody { get; set; }
|
||||||
|
|
||||||
public QSBProbe Probe { get; set; }
|
public QSBProbe Probe { get; set; }
|
||||||
public QSBFlashlight FlashLight => Camera?.GetComponentInChildren<QSBFlashlight>();
|
public QSBFlashlight FlashLight => Camera?.GetComponentInChildren<QSBFlashlight>();
|
||||||
public QSBTool Signalscope => GetToolByType(ToolType.Signalscope);
|
public QSBTool Signalscope => GetToolByType(ToolType.Signalscope);
|
||||||
@ -30,12 +28,10 @@ namespace QSB.Player
|
|||||||
|
|
||||||
// Conversation
|
// Conversation
|
||||||
public int CurrentDialogueID { get; set; }
|
public int CurrentDialogueID { get; set; }
|
||||||
|
|
||||||
public GameObject CurrentDialogueBox { get; set; }
|
public GameObject CurrentDialogueBox { get; set; }
|
||||||
|
|
||||||
// Animation
|
// Animation
|
||||||
public AnimationSync AnimationSync => QSBPlayerManager.GetSyncObject<AnimationSync>(PlayerId);
|
public AnimationSync AnimationSync => QSBPlayerManager.GetSyncObject<AnimationSync>(PlayerId);
|
||||||
|
|
||||||
public bool PlayingInstrument => AnimationSync.CurrentType != AnimationType.PlayerSuited
|
public bool PlayingInstrument => AnimationSync.CurrentType != AnimationType.PlayerSuited
|
||||||
&& AnimationSync.CurrentType != AnimationType.PlayerUnsuited;
|
&& AnimationSync.CurrentType != AnimationType.PlayerUnsuited;
|
||||||
|
|
||||||
@ -69,14 +65,12 @@ namespace QSB.Player
|
|||||||
Translator?.ChangeEquipState(FlagsHelper.IsSet(State, State.Translator));
|
Translator?.ChangeEquipState(FlagsHelper.IsSet(State, State.Translator));
|
||||||
ProbeLauncher?.ChangeEquipState(FlagsHelper.IsSet(State, State.ProbeLauncher));
|
ProbeLauncher?.ChangeEquipState(FlagsHelper.IsSet(State, State.ProbeLauncher));
|
||||||
Signalscope?.ChangeEquipState(FlagsHelper.IsSet(State, State.Signalscope));
|
Signalscope?.ChangeEquipState(FlagsHelper.IsSet(State, State.Signalscope));
|
||||||
QSB.Helper.Events.Unity.RunWhen(() => QSBPlayerManager.GetSyncObject<AnimationSync>(PlayerId) != null,
|
QSBCore.Helper.Events.Unity.RunWhen(() => QSBPlayerManager.GetSyncObject<AnimationSync>(PlayerId) != null,
|
||||||
() => QSBPlayerManager.GetSyncObject<AnimationSync>(PlayerId).SetSuitState(FlagsHelper.IsSet(State, State.Suit)));
|
() => QSBPlayerManager.GetSyncObject<AnimationSync>(PlayerId).SetSuitState(FlagsHelper.IsSet(State, State.Suit)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool GetState(State state)
|
public bool GetState(State state)
|
||||||
{
|
=> FlagsHelper.IsSet(State, state);
|
||||||
return FlagsHelper.IsSet(State, state);
|
|
||||||
}
|
|
||||||
|
|
||||||
private QSBTool GetToolByType(ToolType type)
|
private QSBTool GetToolByType(ToolType type)
|
||||||
{
|
{
|
||||||
|
@ -1,13 +1,14 @@
|
|||||||
using QuantumUNET;
|
using QuantumUNET;
|
||||||
using QuantumUNET.Components;
|
|
||||||
|
|
||||||
namespace QSB.Player
|
namespace QSB.Player
|
||||||
{
|
{
|
||||||
public abstract class PlayerSyncObject : QSBNetworkBehaviour
|
public abstract class PlayerSyncObject : QSBNetworkBehaviour
|
||||||
{
|
{
|
||||||
public uint AttachedNetId => GetComponent<QSBNetworkIdentity>()?.NetId.Value ?? uint.MaxValue;
|
public uint AttachedNetId => NetIdentity?.NetId.Value ?? uint.MaxValue;
|
||||||
public uint PlayerId => this.GetPlayerOfObject();
|
public uint PlayerId => NetIdentity.RootIdentity?.NetId.Value ?? NetIdentity.NetId.Value;
|
||||||
public uint PreviousPlayerId { get; set; }
|
|
||||||
public PlayerInfo Player => QSBPlayerManager.GetPlayer(PlayerId);
|
public PlayerInfo Player => QSBPlayerManager.GetPlayer(PlayerId);
|
||||||
|
|
||||||
|
protected virtual void Start() => QSBPlayerManager.AddSyncObject(this);
|
||||||
|
protected virtual void OnDestroy() => QSBPlayerManager.AddSyncObject(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -2,7 +2,6 @@
|
|||||||
using QSB.Player.Events;
|
using QSB.Player.Events;
|
||||||
using QSB.TransformSync;
|
using QSB.TransformSync;
|
||||||
using QSB.Utility;
|
using QSB.Utility;
|
||||||
using QuantumUNET.Components;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
|
||||||
@ -10,11 +9,11 @@ namespace QSB.Player
|
|||||||
{
|
{
|
||||||
public static class QSBPlayerManager
|
public static class QSBPlayerManager
|
||||||
{
|
{
|
||||||
public static uint LocalPlayerId => PlayerTransformSync.LocalInstance.GetComponent<QSBNetworkIdentity>()?.NetId.Value ?? uint.MaxValue;
|
public static uint LocalPlayerId => PlayerTransformSync.LocalInstance.NetIdentity?.NetId.Value ?? uint.MaxValue;
|
||||||
public static PlayerInfo LocalPlayer => GetPlayer(LocalPlayerId);
|
public static PlayerInfo LocalPlayer => GetPlayer(LocalPlayerId);
|
||||||
public static List<PlayerInfo> PlayerList { get; } = new List<PlayerInfo>();
|
public static List<PlayerInfo> PlayerList { get; } = new List<PlayerInfo>();
|
||||||
|
|
||||||
public static List<PlayerSyncObject> PlayerSyncObjects { get; } = new List<PlayerSyncObject>();
|
private static readonly List<PlayerSyncObject> PlayerSyncObjects = new List<PlayerSyncObject>();
|
||||||
|
|
||||||
public static PlayerInfo GetPlayer(uint id)
|
public static PlayerInfo GetPlayer(uint id)
|
||||||
{
|
{
|
||||||
@ -27,7 +26,7 @@ namespace QSB.Player
|
|||||||
{
|
{
|
||||||
return player;
|
return player;
|
||||||
}
|
}
|
||||||
DebugLog.DebugWrite($"Creating player id {id}", MessageType.Info);
|
DebugLog.DebugWrite($"Create Player : id<{id}>", MessageType.Info);
|
||||||
player = new PlayerInfo(id);
|
player = new PlayerInfo(id);
|
||||||
PlayerList.Add(player);
|
PlayerList.Add(player);
|
||||||
return player;
|
return player;
|
||||||
@ -35,20 +34,18 @@ namespace QSB.Player
|
|||||||
|
|
||||||
public static void RemovePlayer(uint id)
|
public static void RemovePlayer(uint id)
|
||||||
{
|
{
|
||||||
DebugLog.DebugWrite($"Removing player {GetPlayer(id).Name} id {id}", MessageType.Info);
|
DebugLog.DebugWrite($"Remove Player : id<{id}>", MessageType.Info);
|
||||||
PlayerList.Remove(GetPlayer(id));
|
PlayerList.Remove(GetPlayer(id));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void RemoveAllPlayers()
|
public static void RemoveAllPlayers()
|
||||||
{
|
{
|
||||||
DebugLog.DebugWrite($"Removing all players.", MessageType.Info);
|
DebugLog.DebugWrite($"Remove All Players", MessageType.Info);
|
||||||
PlayerList.Clear();
|
PlayerList.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool PlayerExists(uint id)
|
public static bool PlayerExists(uint id) =>
|
||||||
{
|
id != uint.MaxValue && PlayerList.Any(x => x.PlayerId == id);
|
||||||
return id != uint.MaxValue && PlayerList.Any(x => x.PlayerId == id);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void HandleFullStateMessage(PlayerStateMessage message)
|
public static void HandleFullStateMessage(PlayerStateMessage message)
|
||||||
{
|
{
|
||||||
@ -62,14 +59,22 @@ namespace QSB.Player
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IEnumerable<T> GetSyncObjects<T>() where T : PlayerSyncObject
|
public static IEnumerable<T> GetSyncObjects<T>() where T : PlayerSyncObject =>
|
||||||
|
PlayerSyncObjects.OfType<T>().Where(x => x != null);
|
||||||
|
|
||||||
|
public static T GetSyncObject<T>(uint id) where T : PlayerSyncObject =>
|
||||||
|
GetSyncObjects<T>().FirstOrDefault(x => x != null && x.AttachedNetId == id);
|
||||||
|
|
||||||
|
public static void AddSyncObject(PlayerSyncObject obj)
|
||||||
{
|
{
|
||||||
return PlayerSyncObjects.OfType<T>().Where(x => x != null);
|
DebugLog.DebugWrite($"SyncObject Add : type<{obj.GetType().Name}>, netid<{obj.NetId}>");
|
||||||
|
PlayerSyncObjects.Add(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static T GetSyncObject<T>(uint id) where T : PlayerSyncObject
|
public static void RemoveSyncObject(PlayerSyncObject obj)
|
||||||
{
|
{
|
||||||
return GetSyncObjects<T>().FirstOrDefault(x => x != null && x.AttachedNetId == id);
|
DebugLog.DebugWrite($"SyncObject Remove : type<{obj.GetType().Name}>, netid<{obj.NetId}>");
|
||||||
|
PlayerSyncObjects.Remove(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool IsBelongingToLocalPlayer(uint id)
|
public static bool IsBelongingToLocalPlayer(uint id)
|
||||||
@ -77,73 +82,5 @@ namespace QSB.Player
|
|||||||
return id == LocalPlayerId ||
|
return id == LocalPlayerId ||
|
||||||
PlayerSyncObjects.Any(x => x != null && x.AttachedNetId == id && x.IsLocalPlayer);
|
PlayerSyncObjects.Any(x => x != null && x.AttachedNetId == id && x.IsLocalPlayer);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static uint GetPlayerOfObject(this PlayerSyncObject syncObject)
|
|
||||||
{
|
|
||||||
if (PlayerList.Count == 0)
|
|
||||||
{
|
|
||||||
DebugLog.ToConsole($"Error - No players exist to find owner of object. (Attached NetID : {syncObject.AttachedNetId})", MessageType.Error);
|
|
||||||
syncObject.PreviousPlayerId = uint.MaxValue;
|
|
||||||
return uint.MaxValue;
|
|
||||||
}
|
|
||||||
// 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 playerid above it, only below or equal to it.
|
|
||||||
var lowerBound = playerIds.Where(x => x <= syncObject.AttachedNetId).ToList().Max();
|
|
||||||
if (playerIds.Min() > syncObject.AttachedNetId)
|
|
||||||
{
|
|
||||||
DebugLog.ToConsole($"Warning - Minimum playerid is greater than syncobject's netid. (Attached NetID : {syncObject.AttachedNetId})", MessageType.Warning);
|
|
||||||
syncObject.PreviousPlayerId = uint.MaxValue;
|
|
||||||
return uint.MaxValue;
|
|
||||||
}
|
|
||||||
// If the player list count is not the same as the count of the same type syncobject (eg. 3 players and 4 PlayerTransformSyncs)
|
|
||||||
// and the highest ID below the syncobject's id is the same as the highest player id.
|
|
||||||
if (PlayerList.Count != PlayerSyncObjects.Count(x => x.GetType() == syncObject.GetType()) && lowerBound == playerIds.Max())
|
|
||||||
{
|
|
||||||
// If the previous player id was not the error value, return it. To smooth over discrepancies between player list and object list.
|
|
||||||
if (syncObject.PreviousPlayerId != uint.MaxValue)
|
|
||||||
{
|
|
||||||
return syncObject.PreviousPlayerId;
|
|
||||||
}
|
|
||||||
// If the syncobject is a PlayerTransformSync, make a player.
|
|
||||||
if (syncObject.GetType() == typeof(PlayerTransformSync) && syncObject.AttachedNetId != 0U)
|
|
||||||
{
|
|
||||||
return GetPlayer(syncObject.AttachedNetId).PlayerId;
|
|
||||||
}
|
|
||||||
DebugLog.ToConsole($"Warning - Unequal player:syncobject count. ({PlayerList.Count}:{PlayerSyncObjects.Count(x => x.GetType() == syncObject.GetType())}) (Attached NetID : {syncObject.AttachedNetId})", MessageType.Warning);
|
|
||||||
syncObject.PreviousPlayerId = uint.MaxValue;
|
|
||||||
return uint.MaxValue;
|
|
||||||
}
|
|
||||||
if (syncObject.PreviousPlayerId == uint.MaxValue)
|
|
||||||
{
|
|
||||||
DebugLog.ToConsole($"Warning - Syncobject previously had uint.MaxValue as it's playerid. (Attached NetID : {syncObject.AttachedNetId})", MessageType.Warning);
|
|
||||||
}
|
|
||||||
syncObject.PreviousPlayerId = lowerBound;
|
|
||||||
return lowerBound;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<uint> GetPlayerNetIds(PlayerInfo player)
|
|
||||||
{
|
|
||||||
if (PlayerSyncObjects.Count == 0)
|
|
||||||
{
|
|
||||||
return default;
|
|
||||||
}
|
|
||||||
int count = 0;
|
|
||||||
int totalCount = PlayerSyncObjects.Count;
|
|
||||||
PlayerSyncObjects.RemoveAll(x => x == null);
|
|
||||||
PlayerSyncObjects.RemoveAll(x => x.GetComponent<QSBNetworkIdentity>() == null);
|
|
||||||
if (PlayerSyncObjects.Count != totalCount)
|
|
||||||
{
|
|
||||||
DebugLog.ToConsole($"Warning - Removed {totalCount - PlayerSyncObjects.Count} items from PlayerSyncObjects.", MessageType.Warning);
|
|
||||||
}
|
|
||||||
foreach (var item in PlayerSyncObjects.DistinctBy(x => x.AttachedNetId))
|
|
||||||
{
|
|
||||||
if (item.PlayerId == player.PlayerId)
|
|
||||||
{
|
|
||||||
count++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return Enumerable.Range((int)player.PlayerId, count).Select(x => (uint)x).ToList();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -12,6 +12,5 @@ namespace QSB.Player
|
|||||||
Signalscope = 8,
|
Signalscope = 8,
|
||||||
Translator = 16,
|
Translator = 16,
|
||||||
ProbeActive = 32
|
ProbeActive = 32
|
||||||
//Increment these in binary to add more states
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,15 +1,16 @@
|
|||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using System.Resources;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
// General Information about an assembly is controlled through the following
|
// General Information about an assembly is controlled through the following
|
||||||
// set of attributes. Change these attribute values to modify the information
|
// set of attributes. Change these attribute values to modify the information
|
||||||
// associated with an assembly.
|
// associated with an assembly.
|
||||||
[assembly: AssemblyTitle("FriendsInSpace")]
|
[assembly: AssemblyTitle("Quantum Space Buddies")]
|
||||||
[assembly: AssemblyDescription("")]
|
[assembly: AssemblyDescription("Multiplayer mod for Outer Wilds")]
|
||||||
[assembly: AssemblyConfiguration("")]
|
[assembly: AssemblyConfiguration("")]
|
||||||
[assembly: AssemblyCompany("")]
|
[assembly: AssemblyCompany("Henry Pointer, Aleksander Waage, Ricardo Lopes")]
|
||||||
[assembly: AssemblyProduct("FriendsInSpace")]
|
[assembly: AssemblyProduct("Quantum Space Buddies")]
|
||||||
[assembly: AssemblyCopyright("Copyright © 2020")]
|
[assembly: AssemblyCopyright("Copyright © Henry Pointer, Aleksander Waage, Ricardo Lopes 2020-2021")]
|
||||||
[assembly: AssemblyTrademark("")]
|
[assembly: AssemblyTrademark("")]
|
||||||
[assembly: AssemblyCulture("")]
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
@ -32,4 +33,5 @@ using System.Runtime.InteropServices;
|
|||||||
// by using the '*' as shown below:
|
// by using the '*' as shown below:
|
||||||
// [assembly: AssemblyVersion("1.0.*")]
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
[assembly: AssemblyVersion("1.0.0.0")]
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||||
|
[assembly: NeutralResourcesLanguage("en-GB")]
|
||||||
|
@ -128,6 +128,8 @@
|
|||||||
<Compile Include="Animation\AnimFloatParam.cs" />
|
<Compile Include="Animation\AnimFloatParam.cs" />
|
||||||
<Compile Include="Animation\CrouchSync.cs" />
|
<Compile Include="Animation\CrouchSync.cs" />
|
||||||
<Compile Include="Animation\PlayerHeadRotationSync.cs" />
|
<Compile Include="Animation\PlayerHeadRotationSync.cs" />
|
||||||
|
<Compile Include="DialogueConditionSync\Events\DialogueConditionEvent.cs" />
|
||||||
|
<Compile Include="DialogueConditionSync\Events\DialogueConditionMessage.cs" />
|
||||||
<Compile Include="ConversationSync\Events\ConversationEvent.cs" />
|
<Compile Include="ConversationSync\Events\ConversationEvent.cs" />
|
||||||
<Compile Include="ConversationSync\Events\ConversationMessage.cs" />
|
<Compile Include="ConversationSync\Events\ConversationMessage.cs" />
|
||||||
<Compile Include="ConversationSync\ConversationPatches.cs" />
|
<Compile Include="ConversationSync\ConversationPatches.cs" />
|
||||||
@ -140,16 +142,16 @@
|
|||||||
<Compile Include="ElevatorSync\Events\ElevatorEvent.cs" />
|
<Compile Include="ElevatorSync\Events\ElevatorEvent.cs" />
|
||||||
<Compile Include="ElevatorSync\ElevatorManager.cs" />
|
<Compile Include="ElevatorSync\ElevatorManager.cs" />
|
||||||
<Compile Include="ElevatorSync\ElevatorPatches.cs" />
|
<Compile Include="ElevatorSync\ElevatorPatches.cs" />
|
||||||
<Compile Include="EventsCore\EventNames.cs" />
|
<Compile Include="Events\EventNames.cs" />
|
||||||
<Compile Include="DeathSync\Events\PlayerDeathEvent.cs" />
|
<Compile Include="DeathSync\Events\PlayerDeathEvent.cs" />
|
||||||
<Compile Include="EventsCore\IQSBEvent.cs" />
|
<Compile Include="Events\IQSBEvent.cs" />
|
||||||
<Compile Include="Animation\Events\ChangeAnimTypeEvent.cs" />
|
<Compile Include="Animation\Events\ChangeAnimTypeEvent.cs" />
|
||||||
<Compile Include="Instruments\QSBCamera\CameraController.cs" />
|
<Compile Include="Instruments\QSBCamera\CameraController.cs" />
|
||||||
<Compile Include="Instruments\QSBCamera\CameraManager.cs" />
|
<Compile Include="Instruments\QSBCamera\CameraManager.cs" />
|
||||||
<Compile Include="Instruments\QSBCamera\CameraMode.cs" />
|
<Compile Include="Instruments\QSBCamera\CameraMode.cs" />
|
||||||
<Compile Include="Instruments\InstrumentsManager.cs" />
|
<Compile Include="Instruments\InstrumentsManager.cs" />
|
||||||
<Compile Include="MessagesCore\EnumMessage.cs" />
|
<Compile Include="Messaging\EnumMessage.cs" />
|
||||||
<Compile Include="MessagesCore\FloatMessage.cs" />
|
<Compile Include="Messaging\FloatMessage.cs" />
|
||||||
<Compile Include="OrbSync\Events\OrbSlotMessage.cs" />
|
<Compile Include="OrbSync\Events\OrbSlotMessage.cs" />
|
||||||
<Compile Include="OrbSync\OrbManager.cs" />
|
<Compile Include="OrbSync\OrbManager.cs" />
|
||||||
<Compile Include="OrbSync\Events\OrbSlotEvent.cs" />
|
<Compile Include="OrbSync\Events\OrbSlotEvent.cs" />
|
||||||
@ -169,7 +171,6 @@
|
|||||||
<Compile Include="TimeSync\WakeUpPatches.cs" />
|
<Compile Include="TimeSync\WakeUpPatches.cs" />
|
||||||
<Compile Include="Tools\Events\PlayerFlashlightEvent.cs" />
|
<Compile Include="Tools\Events\PlayerFlashlightEvent.cs" />
|
||||||
<Compile Include="Player\Events\PlayerJoinEvent.cs" />
|
<Compile Include="Player\Events\PlayerJoinEvent.cs" />
|
||||||
<Compile Include="Player\Events\PlayerLeaveEvent.cs" />
|
|
||||||
<Compile Include="Tools\Events\PlayerProbeEvent.cs" />
|
<Compile Include="Tools\Events\PlayerProbeEvent.cs" />
|
||||||
<Compile Include="Player\Events\PlayerReadyEvent.cs" />
|
<Compile Include="Player\Events\PlayerReadyEvent.cs" />
|
||||||
<Compile Include="TransformSync\NomaiOrbTransformSync.cs" />
|
<Compile Include="TransformSync\NomaiOrbTransformSync.cs" />
|
||||||
@ -180,13 +181,12 @@
|
|||||||
<Compile Include="GeyserSync\Events\GeyserEvent.cs" />
|
<Compile Include="GeyserSync\Events\GeyserEvent.cs" />
|
||||||
<Compile Include="GeyserSync\GeyserManager.cs" />
|
<Compile Include="GeyserSync\GeyserManager.cs" />
|
||||||
<Compile Include="GeyserSync\QSBGeyser.cs" />
|
<Compile Include="GeyserSync\QSBGeyser.cs" />
|
||||||
<Compile Include="Player\Events\PlayerLeaveMessage.cs" />
|
|
||||||
<Compile Include="Tools\Events\PlayerProbeLauncherEvent.cs" />
|
<Compile Include="Tools\Events\PlayerProbeLauncherEvent.cs" />
|
||||||
<Compile Include="Tools\Events\PlayerSignalscopeEvent.cs" />
|
<Compile Include="Tools\Events\PlayerSignalscopeEvent.cs" />
|
||||||
<Compile Include="Tools\Events\PlayerTranslatorEvent.cs" />
|
<Compile Include="Tools\Events\PlayerTranslatorEvent.cs" />
|
||||||
<Compile Include="EventsCore\QSBEvent.cs" />
|
<Compile Include="Events\QSBEvent.cs" />
|
||||||
<Compile Include="Player\Events\PlayerJoinMessage.cs" />
|
<Compile Include="Player\Events\PlayerJoinMessage.cs" />
|
||||||
<Compile Include="MessagesCore\ToggleMessage.cs" />
|
<Compile Include="Messaging\ToggleMessage.cs" />
|
||||||
<Compile Include="SectorSync\QSBSector.cs" />
|
<Compile Include="SectorSync\QSBSector.cs" />
|
||||||
<Compile Include="SectorSync\QSBSectorManager.cs" />
|
<Compile Include="SectorSync\QSBSectorManager.cs" />
|
||||||
<Compile Include="TransformSync\TransformSync.cs" />
|
<Compile Include="TransformSync\TransformSync.cs" />
|
||||||
@ -201,13 +201,13 @@
|
|||||||
<Compile Include="Tools\ToolType.cs" />
|
<Compile Include="Tools\ToolType.cs" />
|
||||||
<Compile Include="TransformSync\PlayerProbeSync.cs" />
|
<Compile Include="TransformSync\PlayerProbeSync.cs" />
|
||||||
<Compile Include="Utility\DebugActions.cs" />
|
<Compile Include="Utility\DebugActions.cs" />
|
||||||
<Compile Include="EventsCore\QSBEventManager.cs" />
|
<Compile Include="Events\QSBEventManager.cs" />
|
||||||
<Compile Include="Player\Events\PlayerStateMessage.cs" />
|
<Compile Include="Player\Events\PlayerStateMessage.cs" />
|
||||||
<Compile Include="DeathSync\Necronomicon.cs" />
|
<Compile Include="DeathSync\Necronomicon.cs" />
|
||||||
<Compile Include="Utility\DebugLog.cs" />
|
<Compile Include="Utility\DebugLog.cs" />
|
||||||
<Compile Include="MessagesCore\PlayerMessage.cs" />
|
<Compile Include="Messaging\PlayerMessage.cs" />
|
||||||
<Compile Include="MessagesCore\MessageHandler.cs" />
|
<Compile Include="Messaging\MessageHandler.cs" />
|
||||||
<Compile Include="EventsCore\EventType.cs" />
|
<Compile Include="Events\EventType.cs" />
|
||||||
<Compile Include="Player\PlayerInfo.cs" />
|
<Compile Include="Player\PlayerInfo.cs" />
|
||||||
<Compile Include="Player\State.cs" />
|
<Compile Include="Player\State.cs" />
|
||||||
<Compile Include="DeathSync\PreventShipDestruction.cs" />
|
<Compile Include="DeathSync\PreventShipDestruction.cs" />
|
||||||
@ -217,7 +217,6 @@
|
|||||||
<Compile Include="Utility\FlagsHelper.cs" />
|
<Compile Include="Utility\FlagsHelper.cs" />
|
||||||
<Compile Include="Player\PlayerHUDMarker.cs" />
|
<Compile Include="Player\PlayerHUDMarker.cs" />
|
||||||
<Compile Include="Tools\PlayerToolsManager.cs" />
|
<Compile Include="Tools\PlayerToolsManager.cs" />
|
||||||
<Compile Include="Tools\ProbePatches.cs" />
|
|
||||||
<Compile Include="Utility\QuaternionHelper.cs" />
|
<Compile Include="Utility\QuaternionHelper.cs" />
|
||||||
<Compile Include="TimeSync\PreserveTimeScale.cs" />
|
<Compile Include="TimeSync\PreserveTimeScale.cs" />
|
||||||
<Compile Include="TransformSync\ShipTransformSync.cs" />
|
<Compile Include="TransformSync\ShipTransformSync.cs" />
|
||||||
@ -225,10 +224,10 @@
|
|||||||
<Compile Include="TimeSync\Events\ServerTimeMessage.cs" />
|
<Compile Include="TimeSync\Events\ServerTimeMessage.cs" />
|
||||||
<Compile Include="TimeSync\WakeUpSync.cs" />
|
<Compile Include="TimeSync\WakeUpSync.cs" />
|
||||||
<Compile Include="QSBNetworkManager.cs" />
|
<Compile Include="QSBNetworkManager.cs" />
|
||||||
<Compile Include="QSB.cs" />
|
<Compile Include="QSBCore.cs" />
|
||||||
<Compile Include="TransformSync\PlayerTransformSync.cs" />
|
<Compile Include="TransformSync\PlayerTransformSync.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
<Compile Include="WorldSync\WorldRegistry.cs" />
|
<Compile Include="WorldSync\QSBWorldSync.cs" />
|
||||||
<Compile Include="WorldSync\WorldObject.cs" />
|
<Compile Include="WorldSync\WorldObject.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
@ -9,13 +9,14 @@ using QSB.Patches;
|
|||||||
using QSB.SectorSync;
|
using QSB.SectorSync;
|
||||||
using QSB.TimeSync;
|
using QSB.TimeSync;
|
||||||
using QSB.Utility;
|
using QSB.Utility;
|
||||||
|
using QuantumUNET;
|
||||||
using QuantumUNET.Components;
|
using QuantumUNET.Components;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using UnityEngine.Networking;
|
using UnityEngine.Networking;
|
||||||
|
|
||||||
namespace QSB
|
namespace QSB
|
||||||
{
|
{
|
||||||
public class QSB : ModBehaviour
|
public class QSBCore : ModBehaviour
|
||||||
{
|
{
|
||||||
public static IModBehaviour ModBehaviour { get; private set; }
|
public static IModBehaviour ModBehaviour { get; private set; }
|
||||||
public static IModHelper Helper { get; private set; }
|
public static IModHelper Helper { get; private set; }
|
||||||
@ -25,8 +26,9 @@ namespace QSB
|
|||||||
public static AssetBundle NetworkAssetBundle { get; private set; }
|
public static AssetBundle NetworkAssetBundle { get; private set; }
|
||||||
public static AssetBundle InstrumentAssetBundle { get; private set; }
|
public static AssetBundle InstrumentAssetBundle { get; private set; }
|
||||||
public static bool HasWokenUp { get; set; }
|
public static bool HasWokenUp { get; set; }
|
||||||
|
public static bool IsServer => QSBNetworkServer.active;
|
||||||
|
|
||||||
private void Awake()
|
public void Awake()
|
||||||
{
|
{
|
||||||
Application.runInBackground = true;
|
Application.runInBackground = true;
|
||||||
|
|
||||||
@ -39,7 +41,7 @@ namespace QSB
|
|||||||
LogFilter.currentLogLevel = LogFilter.Debug;
|
LogFilter.currentLogLevel = LogFilter.Debug;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Start()
|
public void Start()
|
||||||
{
|
{
|
||||||
Helper = ModHelper;
|
Helper = ModHelper;
|
||||||
DebugLog.ToConsole($"* Start of QSB version {Helper.Manifest.Version} - authored by {Helper.Manifest.Author}", MessageType.Info);
|
DebugLog.ToConsole($"* Start of QSB version {Helper.Manifest.Version} - authored by {Helper.Manifest.Author}", MessageType.Info);
|
||||||
@ -66,10 +68,8 @@ namespace QSB
|
|||||||
Helper.HarmonyHelper.EmptyMethod(typeof(OWTime).GetMethod("Pause"));
|
Helper.HarmonyHelper.EmptyMethod(typeof(OWTime).GetMethod("Pause"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Update()
|
public void Update() =>
|
||||||
{
|
|
||||||
QSBNetworkIdentity.UNetStaticUpdate();
|
QSBNetworkIdentity.UNetStaticUpdate();
|
||||||
}
|
|
||||||
|
|
||||||
public override void Configure(IModConfig config)
|
public override void Configure(IModConfig config)
|
||||||
{
|
{
|
@ -7,15 +7,10 @@ namespace QSB
|
|||||||
public class QSBInputManager : MonoBehaviour
|
public class QSBInputManager : MonoBehaviour
|
||||||
{
|
{
|
||||||
public static event InputEvent ChertTaunt;
|
public static event InputEvent ChertTaunt;
|
||||||
|
|
||||||
public static event InputEvent EskerTaunt;
|
public static event InputEvent EskerTaunt;
|
||||||
|
|
||||||
public static event InputEvent RiebeckTaunt;
|
public static event InputEvent RiebeckTaunt;
|
||||||
|
|
||||||
public static event InputEvent GabbroTaunt;
|
public static event InputEvent GabbroTaunt;
|
||||||
|
|
||||||
public static event InputEvent FeldsparTaunt;
|
public static event InputEvent FeldsparTaunt;
|
||||||
|
|
||||||
public static event InputEvent ExitTaunt;
|
public static event InputEvent ExitTaunt;
|
||||||
|
|
||||||
// TODO : finish instruments - disabled for 0.7.0 release
|
// TODO : finish instruments - disabled for 0.7.0 release
|
||||||
|
@ -36,11 +36,11 @@ namespace QSB
|
|||||||
"Jinha"
|
"Jinha"
|
||||||
};
|
};
|
||||||
|
|
||||||
private void Awake()
|
public void Awake()
|
||||||
{
|
{
|
||||||
PlayerName = GetPlayerName();
|
PlayerName = GetPlayerName();
|
||||||
CanEditName = true;
|
CanEditName = true;
|
||||||
QSB.Helper.HarmonyHelper.EmptyMethod<NetworkManagerHUD>("Update");
|
QSBCore.Helper.HarmonyHelper.EmptyMethod<NetworkManagerHUD>("Update");
|
||||||
}
|
}
|
||||||
|
|
||||||
private string GetPlayerName()
|
private string GetPlayerName()
|
||||||
@ -54,7 +54,7 @@ namespace QSB
|
|||||||
: _defaultNames.OrderBy(x => Guid.NewGuid()).First();
|
: _defaultNames.OrderBy(x => Guid.NewGuid()).First();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnGUI()
|
public void OnGUI()
|
||||||
{
|
{
|
||||||
GUI.Label(new Rect(10, 10, 200f, 20f), "Name:");
|
GUI.Label(new Rect(10, 10, 200f, 20f), "Name:");
|
||||||
if (CanEditName)
|
if (CanEditName)
|
||||||
|
@ -3,7 +3,7 @@ using OWML.ModHelper.Events;
|
|||||||
using QSB.Animation;
|
using QSB.Animation;
|
||||||
using QSB.DeathSync;
|
using QSB.DeathSync;
|
||||||
using QSB.ElevatorSync;
|
using QSB.ElevatorSync;
|
||||||
using QSB.EventsCore;
|
using QSB.Events;
|
||||||
using QSB.GeyserSync;
|
using QSB.GeyserSync;
|
||||||
using QSB.Instruments;
|
using QSB.Instruments;
|
||||||
using QSB.OrbSync;
|
using QSB.OrbSync;
|
||||||
@ -25,93 +25,68 @@ namespace QSB
|
|||||||
{
|
{
|
||||||
public class QSBNetworkManager : QSBNetworkManagerUNET
|
public class QSBNetworkManager : QSBNetworkManagerUNET
|
||||||
{
|
{
|
||||||
private const int MaxConnections = 128;
|
|
||||||
private const int MaxBufferedPackets = 64;
|
|
||||||
|
|
||||||
public static QSBNetworkManager Instance { get; private set; }
|
public static QSBNetworkManager Instance { get; private set; }
|
||||||
|
|
||||||
public event Action OnNetworkManagerReady;
|
public event Action OnNetworkManagerReady;
|
||||||
|
|
||||||
public bool IsReady { get; private set; }
|
public bool IsReady { get; private set; }
|
||||||
|
public GameObject OrbPrefab { get; set; }
|
||||||
|
|
||||||
|
private const int MaxConnections = 128;
|
||||||
|
private const int MaxBufferedPackets = 64;
|
||||||
|
|
||||||
private QSBNetworkLobby _lobby;
|
private QSBNetworkLobby _lobby;
|
||||||
private AssetBundle _assetBundle;
|
private AssetBundle _assetBundle;
|
||||||
private GameObject _shipPrefab;
|
private GameObject _shipPrefab;
|
||||||
private GameObject _cameraPrefab;
|
private GameObject _cameraPrefab;
|
||||||
private GameObject _probePrefab;
|
private GameObject _probePrefab;
|
||||||
public GameObject OrbPrefab;
|
|
||||||
|
|
||||||
private void Awake()
|
public void Awake()
|
||||||
{
|
{
|
||||||
Instance = this;
|
Instance = this;
|
||||||
|
|
||||||
_lobby = gameObject.AddComponent<QSBNetworkLobby>();
|
_lobby = gameObject.AddComponent<QSBNetworkLobby>();
|
||||||
_assetBundle = QSB.NetworkAssetBundle;
|
_assetBundle = QSBCore.NetworkAssetBundle;
|
||||||
|
|
||||||
playerPrefab = _assetBundle.LoadAsset<GameObject>("assets/networkplayer.prefab");
|
playerPrefab = _assetBundle.LoadAsset<GameObject>("assets/networkplayer.prefab");
|
||||||
var ident = playerPrefab.AddComponent<QSBNetworkIdentity>();
|
SetupNetworkId(playerPrefab);
|
||||||
ident.LocalPlayerAuthority = true;
|
|
||||||
ident.SetValue("m_AssetId", playerPrefab.GetComponent<NetworkIdentity>().assetId);
|
|
||||||
ident.SetValue("m_SceneId", playerPrefab.GetComponent<NetworkIdentity>().sceneId);
|
|
||||||
Destroy(playerPrefab.GetComponent<NetworkTransform>());
|
Destroy(playerPrefab.GetComponent<NetworkTransform>());
|
||||||
Destroy(playerPrefab.GetComponent<NetworkIdentity>());
|
Destroy(playerPrefab.GetComponent<NetworkIdentity>());
|
||||||
var transform = playerPrefab.AddComponent<QSBNetworkTransform>();
|
SetupNetworkTransform(playerPrefab);
|
||||||
transform.SendInterval = 0.1f;
|
|
||||||
transform.SyncRotationAxis = QSBNetworkTransform.AxisSyncMode.AxisXYZ;
|
|
||||||
playerPrefab.AddComponent<PlayerTransformSync>();
|
playerPrefab.AddComponent<PlayerTransformSync>();
|
||||||
playerPrefab.AddComponent<AnimationSync>();
|
playerPrefab.AddComponent<AnimationSync>();
|
||||||
playerPrefab.AddComponent<WakeUpSync>();
|
playerPrefab.AddComponent<WakeUpSync>();
|
||||||
playerPrefab.AddComponent<InstrumentsManager>();
|
playerPrefab.AddComponent<InstrumentsManager>();
|
||||||
|
|
||||||
_shipPrefab = _assetBundle.LoadAsset<GameObject>("assets/networkship.prefab");
|
_shipPrefab = _assetBundle.LoadAsset<GameObject>("assets/networkship.prefab");
|
||||||
ident = _shipPrefab.AddComponent<QSBNetworkIdentity>();
|
SetupNetworkId(_shipPrefab);
|
||||||
ident.LocalPlayerAuthority = true;
|
|
||||||
ident.SetValue("m_AssetId", _shipPrefab.GetComponent<NetworkIdentity>().assetId);
|
|
||||||
ident.SetValue("m_SceneId", _shipPrefab.GetComponent<NetworkIdentity>().sceneId);
|
|
||||||
Destroy(_shipPrefab.GetComponent<NetworkTransform>());
|
Destroy(_shipPrefab.GetComponent<NetworkTransform>());
|
||||||
Destroy(_shipPrefab.GetComponent<NetworkIdentity>());
|
Destroy(_shipPrefab.GetComponent<NetworkIdentity>());
|
||||||
transform = _shipPrefab.AddComponent<QSBNetworkTransform>();
|
SetupNetworkTransform(_shipPrefab);
|
||||||
transform.SendInterval = 0.1f;
|
|
||||||
transform.SyncRotationAxis = QSBNetworkTransform.AxisSyncMode.AxisXYZ;
|
|
||||||
_shipPrefab.AddComponent<ShipTransformSync>();
|
_shipPrefab.AddComponent<ShipTransformSync>();
|
||||||
spawnPrefabs.Add(_shipPrefab);
|
spawnPrefabs.Add(_shipPrefab);
|
||||||
|
|
||||||
_cameraPrefab = _assetBundle.LoadAsset<GameObject>("assets/networkcameraroot.prefab");
|
_cameraPrefab = _assetBundle.LoadAsset<GameObject>("assets/networkcameraroot.prefab");
|
||||||
ident = _cameraPrefab.AddComponent<QSBNetworkIdentity>();
|
SetupNetworkId(_cameraPrefab);
|
||||||
ident.LocalPlayerAuthority = true;
|
|
||||||
ident.SetValue("m_AssetId", _cameraPrefab.GetComponent<NetworkIdentity>().assetId);
|
|
||||||
ident.SetValue("m_SceneId", _cameraPrefab.GetComponent<NetworkIdentity>().sceneId);
|
|
||||||
Destroy(_cameraPrefab.GetComponent<NetworkTransform>());
|
Destroy(_cameraPrefab.GetComponent<NetworkTransform>());
|
||||||
Destroy(_cameraPrefab.GetComponent<NetworkIdentity>());
|
Destroy(_cameraPrefab.GetComponent<NetworkIdentity>());
|
||||||
transform = _cameraPrefab.AddComponent<QSBNetworkTransform>();
|
SetupNetworkTransform(_cameraPrefab);
|
||||||
transform.SendInterval = 0.1f;
|
|
||||||
transform.SyncRotationAxis = QSBNetworkTransform.AxisSyncMode.AxisXYZ;
|
|
||||||
_cameraPrefab.AddComponent<PlayerCameraSync>();
|
_cameraPrefab.AddComponent<PlayerCameraSync>();
|
||||||
spawnPrefabs.Add(_cameraPrefab);
|
spawnPrefabs.Add(_cameraPrefab);
|
||||||
|
|
||||||
_probePrefab = _assetBundle.LoadAsset<GameObject>("assets/networkprobe.prefab");
|
_probePrefab = _assetBundle.LoadAsset<GameObject>("assets/networkprobe.prefab");
|
||||||
ident = _probePrefab.AddComponent<QSBNetworkIdentity>();
|
SetupNetworkId(_probePrefab);
|
||||||
ident.LocalPlayerAuthority = true;
|
|
||||||
ident.SetValue("m_AssetId", _probePrefab.GetComponent<NetworkIdentity>().assetId);
|
|
||||||
ident.SetValue("m_SceneId", _probePrefab.GetComponent<NetworkIdentity>().sceneId);
|
|
||||||
Destroy(_probePrefab.GetComponent<NetworkTransform>());
|
Destroy(_probePrefab.GetComponent<NetworkTransform>());
|
||||||
Destroy(_probePrefab.GetComponent<NetworkIdentity>());
|
Destroy(_probePrefab.GetComponent<NetworkIdentity>());
|
||||||
transform = _probePrefab.AddComponent<QSBNetworkTransform>();
|
SetupNetworkTransform(_probePrefab);
|
||||||
transform.SendInterval = 0.1f;
|
|
||||||
transform.SyncRotationAxis = QSBNetworkTransform.AxisSyncMode.AxisXYZ;
|
|
||||||
_probePrefab.AddComponent<PlayerProbeSync>();
|
_probePrefab.AddComponent<PlayerProbeSync>();
|
||||||
spawnPrefabs.Add(_probePrefab);
|
spawnPrefabs.Add(_probePrefab);
|
||||||
|
|
||||||
OrbPrefab = _assetBundle.LoadAsset<GameObject>("assets/networkorb.prefab");
|
OrbPrefab = _assetBundle.LoadAsset<GameObject>("assets/networkorb.prefab");
|
||||||
ident = OrbPrefab.AddComponent<QSBNetworkIdentity>();
|
SetupNetworkId(OrbPrefab);
|
||||||
ident.LocalPlayerAuthority = true;
|
|
||||||
ident.SetValue("m_AssetId", OrbPrefab.GetComponent<NetworkIdentity>().assetId);
|
|
||||||
ident.SetValue("m_SceneId", OrbPrefab.GetComponent<NetworkIdentity>().sceneId);
|
|
||||||
Destroy(OrbPrefab.GetComponent<NetworkTransform>());
|
Destroy(OrbPrefab.GetComponent<NetworkTransform>());
|
||||||
Destroy(OrbPrefab.GetComponent<NetworkIdentity>());
|
Destroy(OrbPrefab.GetComponent<NetworkIdentity>());
|
||||||
transform = OrbPrefab.AddComponent<QSBNetworkTransform>();
|
SetupNetworkTransform(OrbPrefab);
|
||||||
transform.SendInterval = 0.1f;
|
|
||||||
transform.SyncRotationAxis = QSBNetworkTransform.AxisSyncMode.AxisXYZ;
|
|
||||||
OrbPrefab.AddComponent<NomaiOrbTransformSync>();
|
OrbPrefab.AddComponent<NomaiOrbTransformSync>();
|
||||||
spawnPrefabs.Add(OrbPrefab);
|
spawnPrefabs.Add(OrbPrefab);
|
||||||
|
|
||||||
@ -119,22 +94,36 @@ namespace QSB
|
|||||||
QSBSceneManager.OnUniverseSceneLoaded += OnSceneLoaded;
|
QSBSceneManager.OnUniverseSceneLoaded += OnSceneLoaded;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnDestroy()
|
private void SetupNetworkId(GameObject go)
|
||||||
=> QSBSceneManager.OnUniverseSceneLoaded -= OnSceneLoaded;
|
{
|
||||||
|
var ident = go.AddComponent<QSBNetworkIdentity>();
|
||||||
|
ident.LocalPlayerAuthority = true;
|
||||||
|
ident.SetValue("m_AssetId", playerPrefab.GetComponent<NetworkIdentity>().assetId);
|
||||||
|
ident.SetValue("m_SceneId", playerPrefab.GetComponent<NetworkIdentity>().sceneId);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetupNetworkTransform(GameObject go)
|
||||||
|
{
|
||||||
|
var trans = go.AddComponent<QSBNetworkTransform>();
|
||||||
|
trans.SendInterval = 0.1f;
|
||||||
|
trans.SyncRotationAxis = QSBNetworkTransform.AxisSyncMode.AxisXYZ;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnDestroy() =>
|
||||||
|
QSBSceneManager.OnUniverseSceneLoaded -= OnSceneLoaded;
|
||||||
|
|
||||||
private void OnSceneLoaded(OWScene scene)
|
private void OnSceneLoaded(OWScene scene)
|
||||||
{
|
{
|
||||||
DebugLog.DebugWrite("scene loaded");
|
|
||||||
OrbManager.Instance.BuildOrbs();
|
OrbManager.Instance.BuildOrbs();
|
||||||
OrbManager.Instance.QueueBuildSlots();
|
OrbManager.Instance.QueueBuildSlots();
|
||||||
WorldRegistry.OldDialogueTrees.Clear();
|
QSBWorldSync.OldDialogueTrees.Clear();
|
||||||
WorldRegistry.OldDialogueTrees = Resources.FindObjectsOfTypeAll<CharacterDialogueTree>().ToList();
|
QSBWorldSync.OldDialogueTrees = Resources.FindObjectsOfTypeAll<CharacterDialogueTree>().ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ConfigureNetworkManager()
|
private void ConfigureNetworkManager()
|
||||||
{
|
{
|
||||||
networkAddress = QSB.DefaultServerIP;
|
networkAddress = QSBCore.DefaultServerIP;
|
||||||
networkPort = QSB.Port;
|
networkPort = QSBCore.Port;
|
||||||
maxConnections = MaxConnections;
|
maxConnections = MaxConnections;
|
||||||
customConfig = true;
|
customConfig = true;
|
||||||
connectionConfig.AddChannel(QosType.Reliable);
|
connectionConfig.AddChannel(QosType.Reliable);
|
||||||
@ -149,19 +138,19 @@ namespace QSB
|
|||||||
public override void OnStartServer()
|
public override void OnStartServer()
|
||||||
{
|
{
|
||||||
DebugLog.DebugWrite("OnStartServer", MessageType.Info);
|
DebugLog.DebugWrite("OnStartServer", MessageType.Info);
|
||||||
if (WorldRegistry.OrbSyncList.Count == 0 && QSBSceneManager.IsInUniverse)
|
if (QSBWorldSync.OrbSyncList.Count == 0 && QSBSceneManager.IsInUniverse)
|
||||||
{
|
{
|
||||||
OrbManager.Instance.QueueBuildOrbs();
|
OrbManager.Instance.QueueBuildOrbs();
|
||||||
}
|
}
|
||||||
if (WorldRegistry.OldDialogueTrees.Count == 0 && QSBSceneManager.IsInUniverse)
|
if (QSBWorldSync.OldDialogueTrees.Count == 0 && QSBSceneManager.IsInUniverse)
|
||||||
{
|
{
|
||||||
WorldRegistry.OldDialogueTrees = Resources.FindObjectsOfTypeAll<CharacterDialogueTree>().ToList();
|
QSBWorldSync.OldDialogueTrees = Resources.FindObjectsOfTypeAll<CharacterDialogueTree>().ToList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnServerAddPlayer(QSBNetworkConnection connection, short playerControllerId) // Called on the server when a client joins
|
public override void OnServerAddPlayer(QSBNetworkConnection connection, short playerControllerId) // Called on the server when a client joins
|
||||||
{
|
{
|
||||||
DebugLog.DebugWrite("OnServerAddPlayer", MessageType.Info);
|
DebugLog.DebugWrite($"OnServerAddPlayer {playerControllerId}", MessageType.Info);
|
||||||
base.OnServerAddPlayer(connection, playerControllerId);
|
base.OnServerAddPlayer(connection, playerControllerId);
|
||||||
|
|
||||||
QSBNetworkServer.SpawnWithClientAuthority(Instantiate(_shipPrefab), connection);
|
QSBNetworkServer.SpawnWithClientAuthority(Instantiate(_shipPrefab), connection);
|
||||||
@ -174,6 +163,8 @@ namespace QSB
|
|||||||
DebugLog.DebugWrite("OnClientConnect", MessageType.Info);
|
DebugLog.DebugWrite("OnClientConnect", MessageType.Info);
|
||||||
base.OnClientConnect(connection);
|
base.OnClientConnect(connection);
|
||||||
|
|
||||||
|
QSBEventManager.Init();
|
||||||
|
|
||||||
gameObject.AddComponent<SectorSync.SectorSync>();
|
gameObject.AddComponent<SectorSync.SectorSync>();
|
||||||
gameObject.AddComponent<RespawnOnDeath>();
|
gameObject.AddComponent<RespawnOnDeath>();
|
||||||
gameObject.AddComponent<PreventShipDestruction>();
|
gameObject.AddComponent<PreventShipDestruction>();
|
||||||
@ -196,13 +187,14 @@ namespace QSB
|
|||||||
OnNetworkManagerReady?.Invoke();
|
OnNetworkManagerReady?.Invoke();
|
||||||
IsReady = true;
|
IsReady = true;
|
||||||
|
|
||||||
QSB.Helper.Events.Unity.RunWhen(() => PlayerTransformSync.LocalInstance != null, QSBEventManager.Init);
|
QSBCore.Helper.Events.Unity.RunWhen(() => QSBEventManager.Ready && PlayerTransformSync.LocalInstance != null,
|
||||||
|
|
||||||
QSB.Helper.Events.Unity.RunWhen(() => QSBEventManager.Ready,
|
|
||||||
() => GlobalMessenger<string>.FireEvent(EventNames.QSBPlayerJoin, _lobby.PlayerName));
|
() => GlobalMessenger<string>.FireEvent(EventNames.QSBPlayerJoin, _lobby.PlayerName));
|
||||||
|
|
||||||
QSB.Helper.Events.Unity.RunWhen(() => QSBEventManager.Ready,
|
if (!QSBCore.IsServer)
|
||||||
|
{
|
||||||
|
QSBCore.Helper.Events.Unity.RunWhen(() => QSBEventManager.Ready && PlayerTransformSync.LocalInstance != null,
|
||||||
() => GlobalMessenger.FireEvent(EventNames.QSBPlayerStatesRequest));
|
() => GlobalMessenger.FireEvent(EventNames.QSBPlayerStatesRequest));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnStopClient() // Called on the client when closing connection
|
public override void OnStopClient() // Called on the client when closing connection
|
||||||
@ -215,30 +207,24 @@ namespace QSB
|
|||||||
QSBEventManager.Reset();
|
QSBEventManager.Reset();
|
||||||
QSBPlayerManager.PlayerList.ForEach(player => player.HudMarker?.Remove());
|
QSBPlayerManager.PlayerList.ForEach(player => player.HudMarker?.Remove());
|
||||||
|
|
||||||
foreach (var player in QSBPlayerManager.PlayerList)
|
|
||||||
{
|
|
||||||
QSBPlayerManager.GetPlayerNetIds(player).ForEach(CleanupNetworkBehaviour);
|
|
||||||
}
|
|
||||||
QSBPlayerManager.RemoveAllPlayers();
|
QSBPlayerManager.RemoveAllPlayers();
|
||||||
|
|
||||||
WorldRegistry.RemoveObjects<QSBOrbSlot>();
|
QSBWorldSync.RemoveWorldObjects<QSBOrbSlot>();
|
||||||
WorldRegistry.RemoveObjects<QSBElevator>();
|
QSBWorldSync.RemoveWorldObjects<QSBElevator>();
|
||||||
WorldRegistry.RemoveObjects<QSBGeyser>();
|
QSBWorldSync.RemoveWorldObjects<QSBGeyser>();
|
||||||
WorldRegistry.RemoveObjects<QSBSector>();
|
QSBWorldSync.RemoveWorldObjects<QSBSector>();
|
||||||
WorldRegistry.OrbSyncList.Clear();
|
QSBWorldSync.OrbSyncList.Clear();
|
||||||
WorldRegistry.OldDialogueTrees.Clear();
|
QSBWorldSync.OldDialogueTrees.Clear();
|
||||||
|
|
||||||
_lobby.CanEditName = true;
|
_lobby.CanEditName = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnServerDisconnect(QSBNetworkConnection connection) // Called on the server when any client disconnects
|
public override void OnServerDisconnect(QSBNetworkConnection connection) // Called on the server when any client disconnects
|
||||||
{
|
{
|
||||||
|
base.OnServerDisconnect(connection);
|
||||||
DebugLog.DebugWrite("OnServerDisconnect", MessageType.Info);
|
DebugLog.DebugWrite("OnServerDisconnect", MessageType.Info);
|
||||||
var player = connection.GetPlayer();
|
|
||||||
var netIds = connection.ClientOwnedObjects.Select(x => x.Value).ToArray();
|
|
||||||
GlobalMessenger<uint, uint[]>.FireEvent(EventNames.QSBPlayerLeave, player.PlayerId, netIds);
|
|
||||||
|
|
||||||
foreach (var item in WorldRegistry.OrbSyncList)
|
foreach (var item in QSBWorldSync.OrbSyncList)
|
||||||
{
|
{
|
||||||
var identity = item.GetComponent<QSBNetworkIdentity>();
|
var identity = item.GetComponent<QSBNetworkIdentity>();
|
||||||
if (identity.ClientAuthorityOwner == connection)
|
if (identity.ClientAuthorityOwner == connection)
|
||||||
@ -246,9 +232,6 @@ namespace QSB
|
|||||||
identity.RemoveClientAuthority(connection);
|
identity.RemoveClientAuthority(connection);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
player.HudMarker?.Remove();
|
|
||||||
CleanupConnection(connection);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnStopServer()
|
public override void OnStopServer()
|
||||||
@ -258,63 +241,15 @@ namespace QSB
|
|||||||
Destroy(GetComponent<RespawnOnDeath>());
|
Destroy(GetComponent<RespawnOnDeath>());
|
||||||
Destroy(GetComponent<PreventShipDestruction>());
|
Destroy(GetComponent<PreventShipDestruction>());
|
||||||
QSBEventManager.Reset();
|
QSBEventManager.Reset();
|
||||||
DebugLog.ToConsole("[S] Server stopped!", MessageType.Info);
|
DebugLog.ToConsole("Server stopped!", MessageType.Info);
|
||||||
QSBPlayerManager.PlayerList.ForEach(player => player.HudMarker?.Remove());
|
QSBPlayerManager.PlayerList.ForEach(player => player.HudMarker?.Remove());
|
||||||
QSBNetworkServer.connections.ToList().ForEach(CleanupConnection);
|
|
||||||
|
|
||||||
WorldRegistry.RemoveObjects<QSBOrbSlot>();
|
QSBWorldSync.RemoveWorldObjects<QSBOrbSlot>();
|
||||||
WorldRegistry.RemoveObjects<QSBElevator>();
|
QSBWorldSync.RemoveWorldObjects<QSBElevator>();
|
||||||
WorldRegistry.RemoveObjects<QSBGeyser>();
|
QSBWorldSync.RemoveWorldObjects<QSBGeyser>();
|
||||||
WorldRegistry.RemoveObjects<QSBSector>();
|
QSBWorldSync.RemoveWorldObjects<QSBSector>();
|
||||||
|
|
||||||
base.OnStopServer();
|
base.OnStopServer();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CleanupConnection(QSBNetworkConnection connection)
|
|
||||||
{
|
|
||||||
var player = connection.GetPlayer();
|
|
||||||
DebugLog.ToConsole($"{player.Name} disconnected.", MessageType.Info);
|
|
||||||
QSBPlayerManager.RemovePlayer(player.PlayerId);
|
|
||||||
|
|
||||||
var netIds = connection.ClientOwnedObjects?.Select(x => x.Value).ToList();
|
|
||||||
netIds.ForEach(CleanupNetworkBehaviour);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void CleanupNetworkBehaviour(uint netId)
|
|
||||||
{
|
|
||||||
DebugLog.DebugWrite($"Cleaning up netId {netId}");
|
|
||||||
// Multiple networkbehaviours can use the same networkidentity (same netId), so get all of them
|
|
||||||
var networkBehaviours = FindObjectsOfType<QSBNetworkBehaviour>()
|
|
||||||
.Where(x => x != null && x.NetId.Value == netId);
|
|
||||||
foreach (var networkBehaviour in networkBehaviours)
|
|
||||||
{
|
|
||||||
var transformSync = networkBehaviour.GetComponent<TransformSync.TransformSync>();
|
|
||||||
|
|
||||||
if (transformSync != null)
|
|
||||||
{
|
|
||||||
DebugLog.DebugWrite($" * Removing TransformSync from syncobjects");
|
|
||||||
QSBPlayerManager.PlayerSyncObjects.Remove(transformSync);
|
|
||||||
if (transformSync.SyncedTransform != null && netId != QSBPlayerManager.LocalPlayerId && !networkBehaviour.HasAuthority)
|
|
||||||
{
|
|
||||||
DebugLog.DebugWrite($" * Destroying {transformSync.SyncedTransform.gameObject.name}");
|
|
||||||
Destroy(transformSync.SyncedTransform.gameObject);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var animationSync = networkBehaviour.GetComponent<AnimationSync>();
|
|
||||||
|
|
||||||
if (animationSync != null)
|
|
||||||
{
|
|
||||||
DebugLog.DebugWrite($" * Removing AnimationSync from syncobjects");
|
|
||||||
QSBPlayerManager.PlayerSyncObjects.Remove(animationSync);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!networkBehaviour.HasAuthority)
|
|
||||||
{
|
|
||||||
DebugLog.DebugWrite($" * Destroying {networkBehaviour.gameObject.name}");
|
|
||||||
Destroy(networkBehaviour.gameObject);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -31,7 +31,7 @@ namespace QSB
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static bool InUniverse(OWScene scene)
|
private static bool InUniverse(OWScene scene) =>
|
||||||
=> scene == OWScene.SolarSystem || scene == OWScene.EyeOfTheUniverse;
|
scene == OWScene.SolarSystem || scene == OWScene.EyeOfTheUniverse;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -17,14 +17,14 @@ namespace QSB.SectorSync
|
|||||||
Sector.Name.Ship
|
Sector.Name.Ship
|
||||||
};
|
};
|
||||||
|
|
||||||
private void Awake()
|
public void Awake()
|
||||||
{
|
{
|
||||||
Instance = this;
|
Instance = this;
|
||||||
QSBSceneManager.OnUniverseSceneLoaded += (OWScene scene) => RebuildSectors();
|
QSBSceneManager.OnUniverseSceneLoaded += (OWScene scene) => RebuildSectors();
|
||||||
DebugLog.DebugWrite("Sector Manager ready.", MessageType.Success);
|
DebugLog.DebugWrite("Sector Manager ready.", MessageType.Success);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnDestroy()
|
public void OnDestroy()
|
||||||
{
|
{
|
||||||
QSBSceneManager.OnUniverseSceneLoaded -= (OWScene scene) => RebuildSectors();
|
QSBSceneManager.OnUniverseSceneLoaded -= (OWScene scene) => RebuildSectors();
|
||||||
}
|
}
|
||||||
@ -32,20 +32,20 @@ namespace QSB.SectorSync
|
|||||||
public void RebuildSectors()
|
public void RebuildSectors()
|
||||||
{
|
{
|
||||||
DebugLog.DebugWrite("Rebuilding sectors...", MessageType.Warning);
|
DebugLog.DebugWrite("Rebuilding sectors...", MessageType.Warning);
|
||||||
WorldRegistry.RemoveObjects<QSBSector>();
|
QSBWorldSync.RemoveWorldObjects<QSBSector>();
|
||||||
var sectors = Resources.FindObjectsOfTypeAll<Sector>().ToList();
|
var sectors = Resources.FindObjectsOfTypeAll<Sector>().ToList();
|
||||||
for (var id = 0; id < sectors.Count; id++)
|
for (var id = 0; id < sectors.Count; id++)
|
||||||
{
|
{
|
||||||
var qsbSector = WorldRegistry.GetObject<QSBSector>(id) ?? new QSBSector();
|
var qsbSector = QSBWorldSync.GetWorldObject<QSBSector>(id) ?? new QSBSector();
|
||||||
qsbSector.Init(sectors[id], id);
|
qsbSector.Init(sectors[id], id);
|
||||||
WorldRegistry.AddObject(qsbSector);
|
QSBWorldSync.AddWorldObject(qsbSector);
|
||||||
}
|
}
|
||||||
IsReady = WorldRegistry.GetObjects<QSBSector>().Any();
|
IsReady = QSBWorldSync.GetWorldObjects<QSBSector>().Any();
|
||||||
}
|
}
|
||||||
|
|
||||||
public QSBSector GetClosestSector(Transform trans)
|
public QSBSector GetClosestSector(Transform trans) // trans rights \o/
|
||||||
{
|
{
|
||||||
return WorldRegistry.GetObjects<QSBSector>()
|
return QSBWorldSync.GetWorldObjects<QSBSector>()
|
||||||
.Where(sector => sector.Sector != null && !_sectorBlacklist.Contains(sector.Type))
|
.Where(sector => sector.Sector != null && !_sectorBlacklist.Contains(sector.Type))
|
||||||
.OrderBy(sector => Vector3.Distance(sector.Position, trans.position))
|
.OrderBy(sector => Vector3.Distance(sector.Position, trans.position))
|
||||||
.First();
|
.First();
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
using QSB.EventsCore;
|
using QSB.Events;
|
||||||
using QSB.Player;
|
using QSB.Player;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
@ -21,7 +21,8 @@ namespace QSB.SectorSync
|
|||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
QSBPlayerManager.GetSyncObjects<TransformSync.TransformSync>().Where(x => x.HasAuthority).ToList().ForEach(CheckTransformSyncSector);
|
QSBPlayerManager.GetSyncObjects<TransformSync.TransformSync>()
|
||||||
|
.Where(x => x.HasAuthority).ToList().ForEach(CheckTransformSyncSector);
|
||||||
_checkTimer = 0;
|
_checkTimer = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -41,9 +42,7 @@ namespace QSB.SectorSync
|
|||||||
SendSector(transformSync.NetId.Value, closestSector);
|
SendSector(transformSync.NetId.Value, closestSector);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SendSector(uint id, QSBSector sector)
|
private void SendSector(uint id, QSBSector sector) =>
|
||||||
{
|
|
||||||
GlobalMessenger<uint, QSBSector>.FireEvent(EventNames.QSBSectorChange, id, sector);
|
GlobalMessenger<uint, QSBSector>.FireEvent(EventNames.QSBSectorChange, id, sector);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,4 +1,4 @@
|
|||||||
using QSB.EventsCore;
|
using QSB.Events;
|
||||||
|
|
||||||
namespace QSB.TimeSync.Events
|
namespace QSB.TimeSync.Events
|
||||||
{
|
{
|
||||||
@ -7,7 +7,6 @@ namespace QSB.TimeSync.Events
|
|||||||
public override EventType Type => EventType.ServerTime;
|
public override EventType Type => EventType.ServerTime;
|
||||||
|
|
||||||
public override void SetupListener() => GlobalMessenger<float, int>.AddListener(EventNames.QSBServerTime, Handler);
|
public override void SetupListener() => GlobalMessenger<float, int>.AddListener(EventNames.QSBServerTime, Handler);
|
||||||
|
|
||||||
public override void CloseListener() => GlobalMessenger<float, int>.RemoveListener(EventNames.QSBServerTime, Handler);
|
public override void CloseListener() => GlobalMessenger<float, int>.RemoveListener(EventNames.QSBServerTime, Handler);
|
||||||
|
|
||||||
private void Handler(float time, int count) => SendEvent(CreateMessage(time, count));
|
private void Handler(float time, int count) => SendEvent(CreateMessage(time, count));
|
||||||
@ -19,9 +18,7 @@ namespace QSB.TimeSync.Events
|
|||||||
LoopCount = count
|
LoopCount = count
|
||||||
};
|
};
|
||||||
|
|
||||||
public override void OnReceiveRemote(ServerTimeMessage message)
|
public override void OnReceiveRemote(bool server, ServerTimeMessage message) =>
|
||||||
{
|
|
||||||
WakeUpSync.LocalInstance.OnClientReceiveMessage(message);
|
WakeUpSync.LocalInstance.OnClientReceiveMessage(message);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -5,9 +5,9 @@ namespace QSB.TimeSync
|
|||||||
{
|
{
|
||||||
public class PreserveTimeScale : QSBNetworkBehaviour
|
public class PreserveTimeScale : QSBNetworkBehaviour
|
||||||
{
|
{
|
||||||
private void Start()
|
public void Start()
|
||||||
{
|
{
|
||||||
QSB.Helper.Menus.PauseMenu.GetTitleButton("Button-EndCurrentLoop").Hide(); // Remove the meditation button
|
QSBCore.Helper.Menus.PauseMenu.GetTitleButton("Button-EndCurrentLoop").Hide(); // Remove the meditation button
|
||||||
|
|
||||||
// Allow server to sleep at campfires
|
// Allow server to sleep at campfires
|
||||||
if (IsServer)
|
if (IsServer)
|
||||||
|
@ -2,8 +2,8 @@
|
|||||||
{
|
{
|
||||||
public enum TimeSyncType
|
public enum TimeSyncType
|
||||||
{
|
{
|
||||||
None,
|
None = 0,
|
||||||
Pausing,
|
Pausing = 1,
|
||||||
Fastforwarding
|
Fastforwarding = 2
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -15,7 +15,7 @@ namespace QSB.TimeSync
|
|||||||
private bool _isSetUp;
|
private bool _isSetUp;
|
||||||
private TimeSyncType _currentType;
|
private TimeSyncType _currentType;
|
||||||
|
|
||||||
private void Awake()
|
public void Awake()
|
||||||
{
|
{
|
||||||
Instance = this;
|
Instance = this;
|
||||||
enabled = false;
|
enabled = false;
|
||||||
@ -32,7 +32,7 @@ namespace QSB.TimeSync
|
|||||||
_canvas.enabled = false;
|
_canvas.enabled = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnDestroy()
|
public void OnDestroy()
|
||||||
{
|
{
|
||||||
QSBSceneManager.OnUniverseSceneLoaded -= OnUniverseSceneLoad;
|
QSBSceneManager.OnUniverseSceneLoaded -= OnUniverseSceneLoad;
|
||||||
if (_canvas.enabled)
|
if (_canvas.enabled)
|
||||||
@ -41,9 +41,11 @@ namespace QSB.TimeSync
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Start(TimeSyncType type) => QSB.Helper.Events.Unity.RunWhen(() => Instance._isSetUp, () => Instance.StartTimeSync(type));
|
public static void Start(TimeSyncType type) =>
|
||||||
|
QSBCore.Helper.Events.Unity.RunWhen(() => Instance._isSetUp, () => Instance.StartTimeSync(type));
|
||||||
|
|
||||||
public static void Stop() => QSB.Helper.Events.Unity.RunWhen(() => Instance._isSetUp, () => Instance.EndTimeSync());
|
public static void Stop() =>
|
||||||
|
QSBCore.Helper.Events.Unity.RunWhen(() => Instance._isSetUp, () => Instance.EndTimeSync());
|
||||||
|
|
||||||
private void StartTimeSync(TimeSyncType type)
|
private void StartTimeSync(TimeSyncType type)
|
||||||
{
|
{
|
||||||
@ -75,7 +77,7 @@ namespace QSB.TimeSync
|
|||||||
switch (_currentType)
|
switch (_currentType)
|
||||||
{
|
{
|
||||||
case TimeSyncType.Fastforwarding:
|
case TimeSyncType.Fastforwarding:
|
||||||
text = $"{minutes.ToString("D2")}:{seconds.ToString("D2")}"
|
text = $"{minutes:D2}:{seconds:D2}"
|
||||||
+ Environment.NewLine
|
+ Environment.NewLine
|
||||||
+ "Fast-forwarding to match server time...";
|
+ "Fast-forwarding to match server time...";
|
||||||
break;
|
break;
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
using OWML.ModHelper.Events;
|
using OWML.ModHelper.Events;
|
||||||
|
using QSB.Patches;
|
||||||
|
|
||||||
namespace QSB.TimeSync
|
namespace QSB.TimeSync
|
||||||
{
|
{
|
||||||
@ -17,7 +18,7 @@ namespace QSB.TimeSync
|
|||||||
|
|
||||||
public override void DoPatches()
|
public override void DoPatches()
|
||||||
{
|
{
|
||||||
QSB.Helper.HarmonyHelper.AddPrefix<PlayerCameraEffectController>("OnStartOfTimeLoop", typeof(WakeUpPatches), nameof(OnStartOfTimeLoopPrefix));
|
QSBCore.Helper.HarmonyHelper.AddPrefix<PlayerCameraEffectController>("OnStartOfTimeLoop", typeof(WakeUpPatches), nameof(OnStartOfTimeLoopPrefix));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,5 +1,5 @@
|
|||||||
using QSB.DeathSync;
|
using QSB.DeathSync;
|
||||||
using QSB.EventsCore;
|
using QSB.Events;
|
||||||
using QSB.TimeSync.Events;
|
using QSB.TimeSync.Events;
|
||||||
using QuantumUNET;
|
using QuantumUNET;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
@ -32,7 +32,7 @@ namespace QSB.TimeSync
|
|||||||
LocalInstance = this;
|
LocalInstance = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Start()
|
public void Start()
|
||||||
{
|
{
|
||||||
if (!IsLocalPlayer)
|
if (!IsLocalPlayer)
|
||||||
{
|
{
|
||||||
@ -53,11 +53,11 @@ namespace QSB.TimeSync
|
|||||||
{
|
{
|
||||||
if (QSBNetworkServer.active)
|
if (QSBNetworkServer.active)
|
||||||
{
|
{
|
||||||
QSB.HasWokenUp = true;
|
QSBCore.HasWokenUp = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnDestroy()
|
public void OnDestroy()
|
||||||
{
|
{
|
||||||
QSBSceneManager.OnSceneLoaded -= OnSceneLoaded;
|
QSBSceneManager.OnSceneLoaded -= OnSceneLoaded;
|
||||||
GlobalMessenger.RemoveListener(EventNames.RestartTimeLoop, OnLoopStart);
|
GlobalMessenger.RemoveListener(EventNames.RestartTimeLoop, OnLoopStart);
|
||||||
@ -66,7 +66,7 @@ namespace QSB.TimeSync
|
|||||||
|
|
||||||
private void OnSceneLoaded(OWScene scene, bool isInUniverse)
|
private void OnSceneLoaded(OWScene scene, bool isInUniverse)
|
||||||
{
|
{
|
||||||
QSB.HasWokenUp = (scene == OWScene.EyeOfTheUniverse);
|
QSBCore.HasWokenUp = (scene == OWScene.EyeOfTheUniverse);
|
||||||
if (isInUniverse)
|
if (isInUniverse)
|
||||||
{
|
{
|
||||||
Init();
|
Init();
|
||||||
@ -164,7 +164,7 @@ namespace QSB.TimeSync
|
|||||||
EnableInput();
|
EnableInput();
|
||||||
}
|
}
|
||||||
_isFirstFastForward = false;
|
_isFirstFastForward = false;
|
||||||
QSB.HasWokenUp = true;
|
QSBCore.HasWokenUp = true;
|
||||||
Physics.SyncTransforms();
|
Physics.SyncTransforms();
|
||||||
SpinnerUI.Hide();
|
SpinnerUI.Hide();
|
||||||
TimeSyncUI.Stop();
|
TimeSyncUI.Stop();
|
||||||
@ -184,7 +184,7 @@ namespace QSB.TimeSync
|
|||||||
OWInput.ChangeInputMode(InputMode.Character);
|
OWInput.ChangeInputMode(InputMode.Character);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Update()
|
public void Update()
|
||||||
{
|
{
|
||||||
if (IsServer)
|
if (IsServer)
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
using QSB.EventsCore;
|
using QSB.Events;
|
||||||
using QSB.Messaging;
|
using QSB.Messaging;
|
||||||
using QSB.Player;
|
using QSB.Player;
|
||||||
|
|
||||||
@ -21,7 +21,6 @@ namespace QSB.Tools.Events
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void HandleTurnOn() => SendEvent(CreateMessage(true));
|
private void HandleTurnOn() => SendEvent(CreateMessage(true));
|
||||||
|
|
||||||
private void HandleTurnOff() => SendEvent(CreateMessage(false));
|
private void HandleTurnOff() => SendEvent(CreateMessage(false));
|
||||||
|
|
||||||
private ToggleMessage CreateMessage(bool value) => new ToggleMessage
|
private ToggleMessage CreateMessage(bool value) => new ToggleMessage
|
||||||
@ -30,16 +29,14 @@ namespace QSB.Tools.Events
|
|||||||
ToggleValue = value
|
ToggleValue = value
|
||||||
};
|
};
|
||||||
|
|
||||||
public override void OnReceiveRemote(ToggleMessage message)
|
public override void OnReceiveRemote(bool server, ToggleMessage message)
|
||||||
{
|
{
|
||||||
var player = QSBPlayerManager.GetPlayer(message.AboutId);
|
var player = QSBPlayerManager.GetPlayer(message.AboutId);
|
||||||
player.UpdateState(State.Flashlight, message.ToggleValue);
|
player.UpdateState(State.Flashlight, message.ToggleValue);
|
||||||
player.FlashLight?.UpdateState(message.ToggleValue);
|
player.FlashLight?.UpdateState(message.ToggleValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnReceiveLocal(ToggleMessage message)
|
public override void OnReceiveLocal(bool server, ToggleMessage message) =>
|
||||||
{
|
|
||||||
QSBPlayerManager.LocalPlayer.UpdateState(State.Flashlight, message.ToggleValue);
|
QSBPlayerManager.LocalPlayer.UpdateState(State.Flashlight, message.ToggleValue);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,4 +1,4 @@
|
|||||||
using QSB.EventsCore;
|
using QSB.Events;
|
||||||
using QSB.Messaging;
|
using QSB.Messaging;
|
||||||
using QSB.Player;
|
using QSB.Player;
|
||||||
|
|
||||||
@ -21,7 +21,6 @@ namespace QSB.Tools.Events
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void HandleLaunch(SurveyorProbe probe) => SendEvent(CreateMessage(true));
|
private void HandleLaunch(SurveyorProbe probe) => SendEvent(CreateMessage(true));
|
||||||
|
|
||||||
private void HandleRetrieve(SurveyorProbe probe) => SendEvent(CreateMessage(false));
|
private void HandleRetrieve(SurveyorProbe probe) => SendEvent(CreateMessage(false));
|
||||||
|
|
||||||
private ToggleMessage CreateMessage(bool value) => new ToggleMessage
|
private ToggleMessage CreateMessage(bool value) => new ToggleMessage
|
||||||
@ -30,16 +29,14 @@ namespace QSB.Tools.Events
|
|||||||
ToggleValue = value
|
ToggleValue = value
|
||||||
};
|
};
|
||||||
|
|
||||||
public override void OnReceiveRemote(ToggleMessage message)
|
public override void OnReceiveRemote(bool server, ToggleMessage message)
|
||||||
{
|
{
|
||||||
var player = QSBPlayerManager.GetPlayer(message.AboutId);
|
var player = QSBPlayerManager.GetPlayer(message.AboutId);
|
||||||
player.UpdateState(State.ProbeActive, message.ToggleValue);
|
player.UpdateState(State.ProbeActive, message.ToggleValue);
|
||||||
player.Probe?.SetState(message.ToggleValue);
|
player.Probe?.SetState(message.ToggleValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnReceiveLocal(ToggleMessage message)
|
public override void OnReceiveLocal(bool server, ToggleMessage message) =>
|
||||||
{
|
|
||||||
QSBPlayerManager.LocalPlayer.UpdateState(State.ProbeActive, message.ToggleValue);
|
QSBPlayerManager.LocalPlayer.UpdateState(State.ProbeActive, message.ToggleValue);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,4 +1,4 @@
|
|||||||
using QSB.EventsCore;
|
using QSB.Events;
|
||||||
using QSB.Messaging;
|
using QSB.Messaging;
|
||||||
using QSB.Player;
|
using QSB.Player;
|
||||||
|
|
||||||
@ -21,7 +21,6 @@ namespace QSB.Tools.Events
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void HandleEquip(ProbeLauncher var) => SendEvent(CreateMessage(true));
|
private void HandleEquip(ProbeLauncher var) => SendEvent(CreateMessage(true));
|
||||||
|
|
||||||
private void HandleUnequip(ProbeLauncher var) => SendEvent(CreateMessage(false));
|
private void HandleUnequip(ProbeLauncher var) => SendEvent(CreateMessage(false));
|
||||||
|
|
||||||
private ToggleMessage CreateMessage(bool value) => new ToggleMessage
|
private ToggleMessage CreateMessage(bool value) => new ToggleMessage
|
||||||
@ -30,16 +29,14 @@ namespace QSB.Tools.Events
|
|||||||
ToggleValue = value
|
ToggleValue = value
|
||||||
};
|
};
|
||||||
|
|
||||||
public override void OnReceiveRemote(ToggleMessage message)
|
public override void OnReceiveRemote(bool server, ToggleMessage message)
|
||||||
{
|
{
|
||||||
var player = QSBPlayerManager.GetPlayer(message.AboutId);
|
var player = QSBPlayerManager.GetPlayer(message.AboutId);
|
||||||
player.UpdateState(State.ProbeLauncher, message.ToggleValue);
|
player.UpdateState(State.ProbeLauncher, message.ToggleValue);
|
||||||
player.ProbeLauncher?.ChangeEquipState(message.ToggleValue);
|
player.ProbeLauncher?.ChangeEquipState(message.ToggleValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnReceiveLocal(ToggleMessage message)
|
public override void OnReceiveLocal(bool server, ToggleMessage message) =>
|
||||||
{
|
|
||||||
QSBPlayerManager.LocalPlayer.UpdateState(State.ProbeLauncher, message.ToggleValue);
|
QSBPlayerManager.LocalPlayer.UpdateState(State.ProbeLauncher, message.ToggleValue);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,4 +1,4 @@
|
|||||||
using QSB.EventsCore;
|
using QSB.Events;
|
||||||
using QSB.Messaging;
|
using QSB.Messaging;
|
||||||
using QSB.Player;
|
using QSB.Player;
|
||||||
|
|
||||||
@ -21,7 +21,6 @@ namespace QSB.Tools.Events
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void HandleEquip(Signalscope var) => SendEvent(CreateMessage(true));
|
private void HandleEquip(Signalscope var) => SendEvent(CreateMessage(true));
|
||||||
|
|
||||||
private void HandleUnequip() => SendEvent(CreateMessage(false));
|
private void HandleUnequip() => SendEvent(CreateMessage(false));
|
||||||
|
|
||||||
private ToggleMessage CreateMessage(bool value) => new ToggleMessage
|
private ToggleMessage CreateMessage(bool value) => new ToggleMessage
|
||||||
@ -30,16 +29,14 @@ namespace QSB.Tools.Events
|
|||||||
ToggleValue = value
|
ToggleValue = value
|
||||||
};
|
};
|
||||||
|
|
||||||
public override void OnReceiveRemote(ToggleMessage message)
|
public override void OnReceiveRemote(bool server, ToggleMessage message)
|
||||||
{
|
{
|
||||||
var player = QSBPlayerManager.GetPlayer(message.AboutId);
|
var player = QSBPlayerManager.GetPlayer(message.AboutId);
|
||||||
player.UpdateState(State.Signalscope, message.ToggleValue);
|
player.UpdateState(State.Signalscope, message.ToggleValue);
|
||||||
player.Signalscope?.ChangeEquipState(message.ToggleValue);
|
player.Signalscope?.ChangeEquipState(message.ToggleValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnReceiveLocal(ToggleMessage message)
|
public override void OnReceiveLocal(bool server, ToggleMessage message) =>
|
||||||
{
|
|
||||||
QSBPlayerManager.LocalPlayer.UpdateState(State.Signalscope, message.ToggleValue);
|
QSBPlayerManager.LocalPlayer.UpdateState(State.Signalscope, message.ToggleValue);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,4 +1,4 @@
|
|||||||
using QSB.EventsCore;
|
using QSB.Events;
|
||||||
using QSB.Messaging;
|
using QSB.Messaging;
|
||||||
using QSB.Player;
|
using QSB.Player;
|
||||||
|
|
||||||
@ -21,7 +21,6 @@ namespace QSB.Tools.Events
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void HandleEquip() => SendEvent(CreateMessage(true));
|
private void HandleEquip() => SendEvent(CreateMessage(true));
|
||||||
|
|
||||||
private void HandleUnequip() => SendEvent(CreateMessage(false));
|
private void HandleUnequip() => SendEvent(CreateMessage(false));
|
||||||
|
|
||||||
private ToggleMessage CreateMessage(bool value) => new ToggleMessage
|
private ToggleMessage CreateMessage(bool value) => new ToggleMessage
|
||||||
@ -30,16 +29,14 @@ namespace QSB.Tools.Events
|
|||||||
ToggleValue = value
|
ToggleValue = value
|
||||||
};
|
};
|
||||||
|
|
||||||
public override void OnReceiveRemote(ToggleMessage message)
|
public override void OnReceiveRemote(bool server, ToggleMessage message)
|
||||||
{
|
{
|
||||||
var player = QSBPlayerManager.GetPlayer(message.AboutId);
|
var player = QSBPlayerManager.GetPlayer(message.AboutId);
|
||||||
player.UpdateState(State.Translator, message.ToggleValue);
|
player.UpdateState(State.Translator, message.ToggleValue);
|
||||||
player.Translator?.ChangeEquipState(message.ToggleValue);
|
player.Translator?.ChangeEquipState(message.ToggleValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnReceiveLocal(ToggleMessage message)
|
public override void OnReceiveLocal(bool server, ToggleMessage message) =>
|
||||||
{
|
|
||||||
QSBPlayerManager.LocalPlayer.UpdateState(State.Translator, message.ToggleValue);
|
QSBPlayerManager.LocalPlayer.UpdateState(State.Translator, message.ToggleValue);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -59,7 +59,7 @@ namespace QSB.Tools
|
|||||||
hold.transform.localRotation = Quaternion.Euler(0f, 0f, 0f);
|
hold.transform.localRotation = Quaternion.Euler(0f, 0f, 0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static GameObject CreateFlashlight(Transform cameraBody)
|
private static void CreateFlashlight(Transform cameraBody)
|
||||||
{
|
{
|
||||||
var flashlightRoot = Object.Instantiate(GameObject.Find("FlashlightRoot"));
|
var flashlightRoot = Object.Instantiate(GameObject.Find("FlashlightRoot"));
|
||||||
flashlightRoot.SetActive(false);
|
flashlightRoot.SetActive(false);
|
||||||
@ -72,11 +72,9 @@ namespace QSB.Tools
|
|||||||
flashlightRoot.transform.parent = cameraBody;
|
flashlightRoot.transform.parent = cameraBody;
|
||||||
flashlightRoot.transform.localPosition = FlashlightOffset;
|
flashlightRoot.transform.localPosition = FlashlightOffset;
|
||||||
flashlightRoot.SetActive(true);
|
flashlightRoot.SetActive(true);
|
||||||
|
|
||||||
return flashlightRoot;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static GameObject CreateSignalscope(Transform cameraBody)
|
private static void CreateSignalscope(Transform cameraBody)
|
||||||
{
|
{
|
||||||
var signalscopeRoot = Object.Instantiate(GameObject.Find("Signalscope"));
|
var signalscopeRoot = Object.Instantiate(GameObject.Find("Signalscope"));
|
||||||
signalscopeRoot.SetActive(false);
|
signalscopeRoot.SetActive(false);
|
||||||
@ -101,11 +99,9 @@ namespace QSB.Tools
|
|||||||
signalscopeRoot.transform.localPosition = Vector3.zero;
|
signalscopeRoot.transform.localPosition = Vector3.zero;
|
||||||
signalscopeRoot.transform.localScale = SignalscopeScale;
|
signalscopeRoot.transform.localScale = SignalscopeScale;
|
||||||
signalscopeRoot.SetActive(true);
|
signalscopeRoot.SetActive(true);
|
||||||
|
|
||||||
return signalscopeRoot;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static GameObject CreateTranslator(Transform cameraBody)
|
private static void CreateTranslator(Transform cameraBody)
|
||||||
{
|
{
|
||||||
var original = GameObject.Find("NomaiTranslatorProp");
|
var original = GameObject.Find("NomaiTranslatorProp");
|
||||||
|
|
||||||
@ -141,12 +137,10 @@ namespace QSB.Tools
|
|||||||
translatorRoot.transform.parent = cameraBody;
|
translatorRoot.transform.parent = cameraBody;
|
||||||
translatorRoot.transform.localPosition = Vector3.zero;
|
translatorRoot.transform.localPosition = Vector3.zero;
|
||||||
translatorRoot.transform.localScale = TranslatorScale;
|
translatorRoot.transform.localScale = TranslatorScale;
|
||||||
QSB.Helper.Events.Unity.FireOnNextUpdate(() => translatorRoot.SetActive(true));
|
QSBCore.Helper.Events.Unity.FireOnNextUpdate(() => translatorRoot.SetActive(true));
|
||||||
|
|
||||||
return translatorRoot;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static GameObject CreateProbeLauncher(Transform cameraBody)
|
private static void CreateProbeLauncher(Transform cameraBody)
|
||||||
{
|
{
|
||||||
var launcherRoot = new GameObject("ProbeLauncher");
|
var launcherRoot = new GameObject("ProbeLauncher");
|
||||||
var modelOrig = GameObject.Find("PlayerCamera/ProbeLauncher/Props_HEA_ProbeLauncher");
|
var modelOrig = GameObject.Find("PlayerCamera/ProbeLauncher/Props_HEA_ProbeLauncher");
|
||||||
@ -182,13 +176,9 @@ namespace QSB.Tools
|
|||||||
launcherRoot.transform.parent = cameraBody;
|
launcherRoot.transform.parent = cameraBody;
|
||||||
launcherRoot.transform.localPosition = ProbeLauncherOffset;
|
launcherRoot.transform.localPosition = ProbeLauncherOffset;
|
||||||
launcherRoot.SetActive(true);
|
launcherRoot.SetActive(true);
|
||||||
|
|
||||||
return launcherRoot;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static MeshRenderer GetRenderer(GameObject root, string gameObjectName)
|
private static MeshRenderer GetRenderer(GameObject root, string gameObjectName) =>
|
||||||
{
|
root.GetComponentsInChildren<MeshRenderer>(true).First(x => x.name == gameObjectName);
|
||||||
return root.GetComponentsInChildren<MeshRenderer>(true).First(x => x.name == gameObjectName);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,29 +0,0 @@
|
|||||||
using QSB.EventsCore;
|
|
||||||
|
|
||||||
namespace QSB.Tools
|
|
||||||
{
|
|
||||||
public class ProbePatches : QSBPatch
|
|
||||||
{
|
|
||||||
public override QSBPatchTypes Type => QSBPatchTypes.OnModStart;
|
|
||||||
|
|
||||||
private static void ProbeAnchor()
|
|
||||||
{
|
|
||||||
GlobalMessenger.FireEvent(EventNames.QSBOnProbeAnchor);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static bool ProbeWarp(ref bool ____isRetrieving)
|
|
||||||
{
|
|
||||||
if (!____isRetrieving)
|
|
||||||
{
|
|
||||||
GlobalMessenger.FireEvent(EventNames.QSBOnProbeWarp);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void DoPatches()
|
|
||||||
{
|
|
||||||
QSB.Helper.HarmonyHelper.AddPostfix<SurveyorProbe>("OnAnchor", typeof(ProbePatches), nameof(ProbeAnchor));
|
|
||||||
QSB.Helper.HarmonyHelper.AddPrefix<SurveyorProbe>("Retrieve", typeof(ProbePatches), nameof(ProbeWarp));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -14,7 +14,7 @@ namespace QSB.Tools
|
|||||||
private Vector3 _baseForward;
|
private Vector3 _baseForward;
|
||||||
private Quaternion _baseRotation;
|
private Quaternion _baseRotation;
|
||||||
|
|
||||||
private void Start()
|
public void Start()
|
||||||
{
|
{
|
||||||
_baseForward = _basePivot.forward;
|
_baseForward = _basePivot.forward;
|
||||||
_baseRotation = _basePivot.rotation;
|
_baseRotation = _basePivot.rotation;
|
||||||
@ -78,9 +78,9 @@ namespace QSB.Tools
|
|||||||
_flashlightOn = false;
|
_flashlightOn = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void FixedUpdate()
|
public void FixedUpdate()
|
||||||
{
|
{
|
||||||
// This really isn't needed... but it makes it look that extra bit nicer.
|
// This really isn't needed... but it makes it look that extra bit nicer. ^_^
|
||||||
var lhs = Quaternion.FromToRotation(_basePivot.up, _root.up) * Quaternion.FromToRotation(_baseForward, _root.forward);
|
var lhs = Quaternion.FromToRotation(_basePivot.up, _root.up) * Quaternion.FromToRotation(_baseForward, _root.forward);
|
||||||
var b = lhs * _baseRotation;
|
var b = lhs * _baseRotation;
|
||||||
_baseRotation = Quaternion.Slerp(_baseRotation, b, 6f * Time.deltaTime);
|
_baseRotation = Quaternion.Slerp(_baseRotation, b, 6f * Time.deltaTime);
|
||||||
|
@ -9,22 +9,10 @@ namespace QSB.Tools
|
|||||||
{
|
{
|
||||||
if (state)
|
if (state)
|
||||||
{
|
{
|
||||||
Activate();
|
gameObject.SetActive(true);
|
||||||
|
gameObject.Show();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
Deactivate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Activate()
|
|
||||||
{
|
|
||||||
gameObject.SetActive(true);
|
|
||||||
gameObject.Show();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Deactivate()
|
|
||||||
{
|
|
||||||
gameObject.Hide();
|
gameObject.Hide();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -31,26 +31,17 @@ namespace QSB.Tools
|
|||||||
set => _arrivalDegrees = value;
|
set => _arrivalDegrees = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnEnable()
|
public void OnEnable() => ToolGameObject?.SetActive(true);
|
||||||
{
|
public void OnDisable() => ToolGameObject?.SetActive(false);
|
||||||
ToolGameObject?.SetActive(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnDisable()
|
|
||||||
{
|
|
||||||
ToolGameObject?.SetActive(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void ChangeEquipState(bool equipState)
|
public void ChangeEquipState(bool equipState)
|
||||||
{
|
{
|
||||||
if (equipState)
|
if (equipState)
|
||||||
{
|
{
|
||||||
EquipTool();
|
EquipTool();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
else
|
UnequipTool();
|
||||||
{
|
|
||||||
UnequipTool();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -2,8 +2,8 @@
|
|||||||
{
|
{
|
||||||
public enum ToolType
|
public enum ToolType
|
||||||
{
|
{
|
||||||
Signalscope,
|
Signalscope = 0,
|
||||||
ProbeLauncher,
|
ProbeLauncher = 1,
|
||||||
Translator
|
Translator = 2
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -9,7 +9,7 @@ namespace QSB.TransformSync
|
|||||||
public NomaiInterfaceOrb AttachedOrb { get; private set; }
|
public NomaiInterfaceOrb AttachedOrb { get; private set; }
|
||||||
public Transform OrbTransform { get; private set; }
|
public Transform OrbTransform { get; private set; }
|
||||||
|
|
||||||
private int Index => WorldRegistry.OrbSyncList.IndexOf(this);
|
private int Index => QSBWorldSync.OrbSyncList.IndexOf(this);
|
||||||
|
|
||||||
private bool _isInitialized;
|
private bool _isInitialized;
|
||||||
private bool _isReady;
|
private bool _isReady;
|
||||||
@ -18,20 +18,20 @@ namespace QSB.TransformSync
|
|||||||
public override void OnStartClient()
|
public override void OnStartClient()
|
||||||
{
|
{
|
||||||
DontDestroyOnLoad(this);
|
DontDestroyOnLoad(this);
|
||||||
WorldRegistry.OrbSyncList.Add(this);
|
QSBWorldSync.OrbSyncList.Add(this);
|
||||||
|
|
||||||
QSB.Helper.Events.Unity.RunWhen(() => QSB.HasWokenUp, () => QSB.Helper.Events.Unity.FireOnNextUpdate(OnReady));
|
QSBCore.Helper.Events.Unity.RunWhen(() => QSBCore.HasWokenUp, () => QSBCore.Helper.Events.Unity.FireOnNextUpdate(OnReady));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnReady()
|
private void OnReady()
|
||||||
{
|
{
|
||||||
AttachedOrb = WorldRegistry.OldOrbList[Index];
|
AttachedOrb = QSBWorldSync.OldOrbList[Index];
|
||||||
_isReady = true;
|
_isReady = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnDestroy()
|
public void OnDestroy()
|
||||||
{
|
{
|
||||||
WorldRegistry.OrbSyncList.Remove(this);
|
QSBWorldSync.OrbSyncList.Remove(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void Init()
|
protected void Init()
|
||||||
@ -41,7 +41,7 @@ namespace QSB.TransformSync
|
|||||||
_isInitialized = true;
|
_isInitialized = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Update()
|
public void Update()
|
||||||
{
|
{
|
||||||
if (!_isInitialized && _isReady)
|
if (!_isInitialized && _isReady)
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
using OWML.Common;
|
using QSB.Events;
|
||||||
using QSB.EventsCore;
|
|
||||||
using QSB.Player;
|
using QSB.Player;
|
||||||
using QSB.Tools;
|
using QSB.Tools;
|
||||||
using QSB.Utility;
|
using QSB.Utility;
|
||||||
@ -9,14 +8,6 @@ namespace QSB.TransformSync
|
|||||||
{
|
{
|
||||||
public class PlayerCameraSync : TransformSync
|
public class PlayerCameraSync : TransformSync
|
||||||
{
|
{
|
||||||
public static PlayerCameraSync LocalInstance { get; private set; }
|
|
||||||
|
|
||||||
public override void OnStartLocalPlayer()
|
|
||||||
{
|
|
||||||
DebugLog.DebugWrite("OnStartLocalPlayer", MessageType.Info);
|
|
||||||
LocalInstance = this;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override Transform InitLocalTransform()
|
protected override Transform InitLocalTransform()
|
||||||
{
|
{
|
||||||
var body = Locator.GetPlayerCamera().gameObject.transform;
|
var body = Locator.GetPlayerCamera().gameObject.transform;
|
||||||
|
@ -8,20 +8,10 @@ namespace QSB.TransformSync
|
|||||||
{
|
{
|
||||||
public class PlayerProbeSync : TransformSync
|
public class PlayerProbeSync : TransformSync
|
||||||
{
|
{
|
||||||
public static PlayerProbeSync LocalInstance { get; private set; }
|
|
||||||
|
|
||||||
private Transform _disabledSocket;
|
private Transform _disabledSocket;
|
||||||
|
|
||||||
public override void OnStartLocalPlayer()
|
private Transform GetProbe() =>
|
||||||
{
|
Locator.GetProbe().transform.Find("CameraPivot").Find("Geometry");
|
||||||
DebugLog.DebugWrite("OnStartLocalPlayer", MessageType.Info);
|
|
||||||
LocalInstance = this;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Transform GetProbe()
|
|
||||||
{
|
|
||||||
return Locator.GetProbe().transform.Find("CameraPivot").Find("Geometry");
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override Transform InitLocalTransform()
|
protected override Transform InitLocalTransform()
|
||||||
{
|
{
|
||||||
@ -50,16 +40,13 @@ namespace QSB.TransformSync
|
|||||||
|
|
||||||
PlayerToolsManager.CreateProbe(body, Player);
|
PlayerToolsManager.CreateProbe(body, Player);
|
||||||
|
|
||||||
QSB.Helper.Events.Unity.RunWhen(() => (Player.ProbeLauncher != null), () => SetSocket(Player.ProbeLauncher.ToolGameObject.transform));
|
QSBCore.Helper.Events.Unity.RunWhen(() => (Player.ProbeLauncher != null), () => SetSocket(Player.ProbeLauncher.ToolGameObject.transform));
|
||||||
Player.ProbeBody = body.gameObject;
|
Player.ProbeBody = body.gameObject;
|
||||||
|
|
||||||
return body;
|
return body;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetSocket(Transform socket)
|
private void SetSocket(Transform socket) => _disabledSocket = socket;
|
||||||
{
|
|
||||||
_disabledSocket = socket;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void UpdateTransform()
|
protected override void UpdateTransform()
|
||||||
{
|
{
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
using OWML.Common;
|
using QSB.Animation;
|
||||||
using QSB.Animation;
|
|
||||||
using QSB.Instruments;
|
using QSB.Instruments;
|
||||||
using QSB.Player;
|
using QSB.Player;
|
||||||
using QSB.Utility;
|
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
namespace QSB.TransformSync
|
namespace QSB.TransformSync
|
||||||
@ -11,22 +9,20 @@ namespace QSB.TransformSync
|
|||||||
{
|
{
|
||||||
public static PlayerTransformSync LocalInstance { get; private set; }
|
public static PlayerTransformSync LocalInstance { get; private set; }
|
||||||
|
|
||||||
static PlayerTransformSync()
|
static PlayerTransformSync() => AnimControllerPatch.Init();
|
||||||
{
|
|
||||||
DebugLog.DebugWrite("Constructor", MessageType.Info);
|
|
||||||
AnimControllerPatch.Init();
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void OnStartLocalPlayer()
|
public override void OnStartLocalPlayer() =>
|
||||||
{
|
|
||||||
DebugLog.DebugWrite("OnStartLocalPlayer", MessageType.Info);
|
|
||||||
LocalInstance = this;
|
LocalInstance = this;
|
||||||
|
|
||||||
|
protected override void OnDestroy()
|
||||||
|
{
|
||||||
|
base.OnDestroy();
|
||||||
|
Player.HudMarker?.Remove();
|
||||||
|
QSBPlayerManager.RemovePlayer(PlayerId);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Transform GetPlayerModel()
|
private Transform GetPlayerModel() =>
|
||||||
{
|
Locator.GetPlayerTransform().Find("Traveller_HEA_Player_v2");
|
||||||
return Locator.GetPlayerTransform().Find("Traveller_HEA_Player_v2");
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override Transform InitLocalTransform()
|
protected override Transform InitLocalTransform()
|
||||||
{
|
{
|
||||||
|
@ -1,29 +1,14 @@
|
|||||||
using OWML.Common;
|
using QSB.Player;
|
||||||
using QSB.Player;
|
|
||||||
using QSB.Utility;
|
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
namespace QSB.TransformSync
|
namespace QSB.TransformSync
|
||||||
{
|
{
|
||||||
public class ShipTransformSync : TransformSync
|
public class ShipTransformSync : TransformSync
|
||||||
{
|
{
|
||||||
public static ShipTransformSync LocalInstance { get; private set; }
|
private Transform GetShipModel() => Locator.GetShipTransform();
|
||||||
|
|
||||||
public override void OnStartLocalPlayer()
|
protected override Transform InitLocalTransform() =>
|
||||||
{
|
GetShipModel().Find("Module_Cockpit/Geo_Cockpit/Cockpit_Geometry/Cockpit_Exterior");
|
||||||
DebugLog.DebugWrite("OnStartLocalPlayer", MessageType.Info);
|
|
||||||
LocalInstance = this;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Transform GetShipModel()
|
|
||||||
{
|
|
||||||
return Locator.GetShipTransform();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override Transform InitLocalTransform()
|
|
||||||
{
|
|
||||||
return GetShipModel().Find("Module_Cockpit/Geo_Cockpit/Cockpit_Geometry/Cockpit_Exterior");
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override Transform InitRemoteTransform()
|
protected override Transform InitRemoteTransform()
|
||||||
{
|
{
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
using QSB.Player;
|
using QSB.Player;
|
||||||
using QSB.SectorSync;
|
using QSB.SectorSync;
|
||||||
using QSB.Utility;
|
using QSB.Utility;
|
||||||
|
using System.Linq;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
namespace QSB.TransformSync
|
namespace QSB.TransformSync
|
||||||
@ -11,7 +12,6 @@ namespace QSB.TransformSync
|
|||||||
public abstract bool IsReady { get; }
|
public abstract bool IsReady { get; }
|
||||||
|
|
||||||
protected abstract Transform InitLocalTransform();
|
protected abstract Transform InitLocalTransform();
|
||||||
|
|
||||||
protected abstract Transform InitRemoteTransform();
|
protected abstract Transform InitRemoteTransform();
|
||||||
|
|
||||||
public Transform SyncedTransform { get; private set; }
|
public Transform SyncedTransform { get; private set; }
|
||||||
@ -23,33 +23,38 @@ namespace QSB.TransformSync
|
|||||||
private Quaternion _rotationSmoothVelocity;
|
private Quaternion _rotationSmoothVelocity;
|
||||||
private bool _isVisible;
|
private bool _isVisible;
|
||||||
|
|
||||||
protected virtual void Awake()
|
protected override void Start()
|
||||||
{
|
{
|
||||||
DebugLog.DebugWrite($"Awake of {GetType().Name}", MessageType.Info);
|
base.Start();
|
||||||
QSBPlayerManager.PlayerSyncObjects.Add(this);
|
var lowestBound = QSBPlayerManager.GetSyncObjects<PlayerTransformSync>().Where(x => x.NetId.Value <= NetId.Value).OrderBy(x => x.NetId.Value).Last();
|
||||||
|
NetIdentity.SetRootIdentity(lowestBound.NetIdentity);
|
||||||
|
|
||||||
DontDestroyOnLoad(gameObject);
|
DontDestroyOnLoad(gameObject);
|
||||||
QSBSceneManager.OnSceneLoaded += OnSceneLoaded;
|
QSBSceneManager.OnSceneLoaded += OnSceneLoaded;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual void OnDestroy()
|
protected override void OnDestroy()
|
||||||
{
|
{
|
||||||
|
base.OnDestroy();
|
||||||
|
if (!HasAuthority && SyncedTransform != null)
|
||||||
|
{
|
||||||
|
Destroy(SyncedTransform.gameObject);
|
||||||
|
}
|
||||||
QSBSceneManager.OnSceneLoaded -= OnSceneLoaded;
|
QSBSceneManager.OnSceneLoaded -= OnSceneLoaded;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnSceneLoaded(OWScene scene, bool isInUniverse)
|
private void OnSceneLoaded(OWScene scene, bool isInUniverse) =>
|
||||||
{
|
|
||||||
_isInitialized = false;
|
_isInitialized = false;
|
||||||
}
|
|
||||||
|
|
||||||
protected void Init()
|
protected void Init()
|
||||||
{
|
{
|
||||||
DebugLog.DebugWrite($"Init of {AttachedNetId} ({Player.PlayerId}.{GetType().Name})");
|
|
||||||
SyncedTransform = HasAuthority ? InitLocalTransform() : InitRemoteTransform();
|
SyncedTransform = HasAuthority ? InitLocalTransform() : InitRemoteTransform();
|
||||||
|
SetReferenceSector(QSBSectorManager.Instance.GetClosestSector(SyncedTransform));
|
||||||
_isInitialized = true;
|
_isInitialized = true;
|
||||||
_isVisible = true;
|
_isVisible = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Update()
|
public void Update()
|
||||||
{
|
{
|
||||||
if (!_isInitialized && IsReady)
|
if (!_isInitialized && IsReady)
|
||||||
{
|
{
|
||||||
|
@ -24,9 +24,9 @@ namespace QSB.Utility
|
|||||||
bridgeVolume.AddObjectToVolume(Locator.GetPlayerCameraDetector());
|
bridgeVolume.AddObjectToVolume(Locator.GetPlayerCameraDetector());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Update()
|
public void Update()
|
||||||
{
|
{
|
||||||
if (!QSB.DebugMode)
|
if (!QSBCore.DebugMode)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -40,7 +40,7 @@ namespace QSB.Utility
|
|||||||
}
|
}
|
||||||
if (Input.GetKeyDown(KeyCode.Keypad3))
|
if (Input.GetKeyDown(KeyCode.Keypad3))
|
||||||
{
|
{
|
||||||
LoadManager.LoadSceneAsync(OWScene.EyeOfTheUniverse, true, LoadManager.FadeType.ToWhite, 1f, true);
|
LoadManager.LoadSceneAsync(OWScene.EyeOfTheUniverse, true, LoadManager.FadeType.ToWhite);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,7 @@ namespace QSB.Utility
|
|||||||
{
|
{
|
||||||
// make custom method name in owml log.
|
// make custom method name in owml log.
|
||||||
// i wrote the owml code for this so this is fine?? shut up i dont want to change owml
|
// i wrote the owml code for this so this is fine?? shut up i dont want to change owml
|
||||||
var console = (ModSocketOutput)QSB.Helper.Console;
|
var console = (ModSocketOutput)QSBCore.Helper.Console;
|
||||||
var method = console.GetType()
|
var method = console.GetType()
|
||||||
.GetMethods(System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)
|
.GetMethods(System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)
|
||||||
.Last(x => x.Name == "WriteLine");
|
.Last(x => x.Name == "WriteLine");
|
||||||
@ -37,7 +37,7 @@ namespace QSB.Utility
|
|||||||
|
|
||||||
public static void DebugWrite(string message, MessageType type = MessageType.Message)
|
public static void DebugWrite(string message, MessageType type = MessageType.Message)
|
||||||
{
|
{
|
||||||
if (QSB.DebugMode)
|
if (QSBCore.DebugMode)
|
||||||
{
|
{
|
||||||
ToConsole(message, type);
|
ToConsole(message, type);
|
||||||
}
|
}
|
||||||
|
@ -25,9 +25,7 @@ namespace QSB.Utility
|
|||||||
return copy;
|
return copy;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Transform InstantiateInactive(this Transform original)
|
public static Transform InstantiateInactive(this Transform original) =>
|
||||||
{
|
original.gameObject.InstantiateInactive().transform;
|
||||||
return original.gameObject.InstantiateInactive().transform;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,20 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
|
|
||||||
namespace QSB.Utility
|
|
||||||
{
|
|
||||||
public static class ListExtensions
|
|
||||||
{
|
|
||||||
public static IEnumerable<TSource> DistinctBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector)
|
|
||||||
{
|
|
||||||
var seenKeys = new HashSet<TKey>();
|
|
||||||
foreach (var element in source)
|
|
||||||
{
|
|
||||||
if (seenKeys.Add(keySelector(element)))
|
|
||||||
{
|
|
||||||
yield return element;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
85
QSB/WorldSync/QSBWorldSync.cs
Normal file
85
QSB/WorldSync/QSBWorldSync.cs
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
using OWML.Common;
|
||||||
|
using QSB.OrbSync;
|
||||||
|
using QSB.TransformSync;
|
||||||
|
using QSB.Utility;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
|
||||||
|
namespace QSB.WorldSync
|
||||||
|
{
|
||||||
|
public static class QSBWorldSync
|
||||||
|
{
|
||||||
|
public static List<NomaiOrbTransformSync> OrbSyncList { get; } = new List<NomaiOrbTransformSync>();
|
||||||
|
public static List<NomaiInterfaceOrb> OldOrbList { get; set; } = new List<NomaiInterfaceOrb>();
|
||||||
|
public static List<CharacterDialogueTree> OldDialogueTrees { get; set; } = new List<CharacterDialogueTree>();
|
||||||
|
public static Dictionary<string, bool> DialogueConditions { get; } = new Dictionary<string, bool>();
|
||||||
|
|
||||||
|
private static readonly List<WorldObject> WorldObjects = new List<WorldObject>();
|
||||||
|
|
||||||
|
public static void AddWorldObject(WorldObject worldObject)
|
||||||
|
{
|
||||||
|
if (WorldObjects.Contains(worldObject))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
WorldObjects.Add(worldObject);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IEnumerable<T> GetWorldObjects<T>()
|
||||||
|
{
|
||||||
|
return WorldObjects.OfType<T>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static T GetWorldObject<T>(int id) where T : WorldObject
|
||||||
|
{
|
||||||
|
return GetWorldObjects<T>().FirstOrDefault(x => x.ObjectId == id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void RemoveWorldObjects<T>() where T : WorldObject
|
||||||
|
{
|
||||||
|
WorldObjects.RemoveAll(x => x.GetType() == typeof(T));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void HandleSlotStateChange(NomaiInterfaceSlot slot, NomaiInterfaceOrb affectingOrb, bool state)
|
||||||
|
{
|
||||||
|
var slotList = GetWorldObjects<QSBOrbSlot>().ToList();
|
||||||
|
if (!slotList.Any())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var qsbSlot = slotList.First(x => x.InterfaceSlot == slot);
|
||||||
|
var orbSync = OrbSyncList.First(x => x.AttachedOrb == affectingOrb);
|
||||||
|
if (orbSync.HasAuthority)
|
||||||
|
{
|
||||||
|
qsbSlot.HandleEvent(state, OldOrbList.IndexOf(affectingOrb));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void RaiseEvent(object instance, string eventName)
|
||||||
|
{
|
||||||
|
if (!(instance.GetType()
|
||||||
|
.GetField(eventName, BindingFlags.Instance | BindingFlags.NonPublic)?
|
||||||
|
.GetValue(instance) is MulticastDelegate multiDelegate))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var delegateList = multiDelegate.GetInvocationList().ToList();
|
||||||
|
foreach (var del in delegateList)
|
||||||
|
{
|
||||||
|
del.DynamicInvoke(instance);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void SetDialogueCondition(string name, bool state)
|
||||||
|
{
|
||||||
|
if (!QSBCore.IsServer)
|
||||||
|
{
|
||||||
|
DebugLog.DebugWrite("Warning - Cannot write to condition dict when not server!", MessageType.Warning);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
DialogueConditions[name] = state;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,86 +0,0 @@
|
|||||||
using OWML.Common;
|
|
||||||
using QSB.OrbSync;
|
|
||||||
using QSB.TransformSync;
|
|
||||||
using QSB.Utility;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Reflection;
|
|
||||||
|
|
||||||
namespace QSB.WorldSync
|
|
||||||
{
|
|
||||||
public static class WorldRegistry
|
|
||||||
{
|
|
||||||
private static readonly List<WorldObject> WorldObjects = new List<WorldObject>();
|
|
||||||
public static List<NomaiOrbTransformSync> OrbSyncList = new List<NomaiOrbTransformSync>();
|
|
||||||
public static List<NomaiInterfaceOrb> OldOrbList = new List<NomaiInterfaceOrb>();
|
|
||||||
public static List<CharacterDialogueTree> OldDialogueTrees = new List<CharacterDialogueTree>();
|
|
||||||
|
|
||||||
public static void AddObject(WorldObject worldObject)
|
|
||||||
{
|
|
||||||
if (WorldObjects.Contains(worldObject))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
WorldObjects.Add(worldObject);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static IEnumerable<T> GetObjects<T>()
|
|
||||||
{
|
|
||||||
return WorldObjects.OfType<T>();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static T GetObject<T>(int id) where T : WorldObject
|
|
||||||
{
|
|
||||||
return GetObjects<T>().FirstOrDefault(x => x.ObjectId == id);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void RemoveObjects<T>() where T : WorldObject
|
|
||||||
{
|
|
||||||
WorldObjects.RemoveAll(x => x.GetType() == typeof(T));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void HandleSlotStateChange(NomaiInterfaceSlot slot, NomaiInterfaceOrb affectingOrb, bool state)
|
|
||||||
{
|
|
||||||
QSBOrbSlot qsbSlot = null;
|
|
||||||
NomaiOrbTransformSync orbSync = null;
|
|
||||||
var slotList = GetObjects<QSBOrbSlot>();
|
|
||||||
if (slotList.Count() == 0)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
try
|
|
||||||
{
|
|
||||||
qsbSlot = slotList.First(x => x.InterfaceSlot == slot);
|
|
||||||
orbSync = OrbSyncList.First(x => x.AttachedOrb == affectingOrb);
|
|
||||||
if (orbSync.HasAuthority)
|
|
||||||
{
|
|
||||||
qsbSlot.HandleEvent(state, OldOrbList.IndexOf(affectingOrb));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
DebugLog.DebugWrite("Error - Exception when handling slot state change."
|
|
||||||
+ Environment.NewLine + $"Slot name {slot.name} to {state}"
|
|
||||||
+ Environment.NewLine + $"SlotList count : {slotList?.Count()}"
|
|
||||||
+ Environment.NewLine + $"QSBOrbSlot null? : {qsbSlot == null}"
|
|
||||||
+ Environment.NewLine + $"NomaiOrbTransformSync null? : {orbSync == null}", MessageType.Error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void RaiseEvent(object instance, string eventName)
|
|
||||||
{
|
|
||||||
if (!(instance.GetType()
|
|
||||||
.GetField(eventName, BindingFlags.Instance | BindingFlags.NonPublic)?
|
|
||||||
.GetValue(instance) is MulticastDelegate multiDelegate))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var delegateList = multiDelegate.GetInvocationList().ToList();
|
|
||||||
foreach (var del in delegateList)
|
|
||||||
{
|
|
||||||
del.DynamicInvoke(instance);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -21,6 +21,8 @@ namespace QuantumUNET.Components
|
|||||||
public short PlayerControllerId { get; private set; } = -1;
|
public short PlayerControllerId { get; private set; } = -1;
|
||||||
public QSBNetworkConnection ConnectionToServer { get; private set; }
|
public QSBNetworkConnection ConnectionToServer { get; private set; }
|
||||||
public QSBNetworkConnection ConnectionToClient { get; private set; }
|
public QSBNetworkConnection ConnectionToClient { get; private set; }
|
||||||
|
public QSBNetworkIdentity RootIdentity { get; private set; }
|
||||||
|
public List<QSBNetworkIdentity> SubIdentities { get; private set; } = new List<QSBNetworkIdentity>();
|
||||||
|
|
||||||
public bool ServerOnly
|
public bool ServerOnly
|
||||||
{
|
{
|
||||||
@ -46,6 +48,22 @@ namespace QuantumUNET.Components
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SetRootIdentity(QSBNetworkIdentity newRoot)
|
||||||
|
{
|
||||||
|
if (RootIdentity != null)
|
||||||
|
{
|
||||||
|
RootIdentity.RemoveSubIdentity(this);
|
||||||
|
}
|
||||||
|
RootIdentity = newRoot;
|
||||||
|
RootIdentity.AddSubIndentity(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal void AddSubIndentity(QSBNetworkIdentity identityToAdd)
|
||||||
|
=> SubIdentities.Add(identityToAdd);
|
||||||
|
|
||||||
|
internal void RemoveSubIdentity(QSBNetworkIdentity identityToRemove)
|
||||||
|
=> SubIdentities.Remove(identityToRemove);
|
||||||
|
|
||||||
internal void SetDynamicAssetId(NetworkHash128 newAssetId)
|
internal void SetDynamicAssetId(NetworkHash128 newAssetId)
|
||||||
{
|
{
|
||||||
if (!m_AssetId.IsValid() || m_AssetId.Equals(newAssetId))
|
if (!m_AssetId.IsValid() || m_AssetId.Equals(newAssetId))
|
||||||
@ -961,11 +979,13 @@ namespace QuantumUNET.Components
|
|||||||
private bool m_LocalPlayerAuthority;
|
private bool m_LocalPlayerAuthority;
|
||||||
|
|
||||||
private bool m_IsServer;
|
private bool m_IsServer;
|
||||||
|
|
||||||
private QSBNetworkBehaviour[] m_NetworkBehaviours;
|
private QSBNetworkBehaviour[] m_NetworkBehaviours;
|
||||||
|
|
||||||
private HashSet<int> m_ObserverConnections;
|
private HashSet<int> m_ObserverConnections;
|
||||||
|
|
||||||
private List<QSBNetworkConnection> m_Observers;
|
private List<QSBNetworkConnection> m_Observers;
|
||||||
|
|
||||||
private bool m_Reset = false;
|
private bool m_Reset = false;
|
||||||
|
|
||||||
private static uint s_NextNetworkId = 1U;
|
private static uint s_NextNetworkId = 1U;
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user