mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-02-20 15:41:01 +00:00
stuff
This commit is contained in:
parent
1b8878a1cf
commit
ad5757e48c
@ -160,6 +160,7 @@
|
||||
<Compile Include="QuantumSync\Events\QuantumAuthorityMessage.cs" />
|
||||
<Compile Include="QuantumSync\Events\QuantumShuffleEvent.cs" />
|
||||
<Compile Include="QuantumSync\Events\QuantumShuffleMessage.cs" />
|
||||
<Compile Include="QuantumSync\IQSBQuantumObject.cs" />
|
||||
<Compile Include="QuantumSync\Patches\ClientQuantumPatches.cs" />
|
||||
<Compile Include="QuantumSync\Events\MultiStateChangeEvent.cs" />
|
||||
<Compile Include="QuantumSync\Events\MultiStateChangeMessage.cs" />
|
||||
|
@ -1,4 +1,7 @@
|
||||
using QSB.Events;
|
||||
using QSB.Utility;
|
||||
using QSB.WorldSync;
|
||||
using System.Linq;
|
||||
|
||||
namespace QSB.QuantumSync.Events
|
||||
{
|
||||
@ -20,12 +23,18 @@ namespace QSB.QuantumSync.Events
|
||||
|
||||
public override void OnReceiveLocal(bool server, QuantumAuthorityMessage message)
|
||||
{
|
||||
|
||||
DebugLog.DebugWrite($"Local set {message.ObjectId} to owner {message.AuthorityOwner}");
|
||||
var objects = QSBWorldSync.GetWorldObjects<IQSBQuantumObject>();
|
||||
var obj = objects.First(x => (x as IWorldObject).ObjectId == message.ObjectId);
|
||||
obj.ControllingPlayer = message.AuthorityOwner;
|
||||
}
|
||||
|
||||
public override void OnReceiveRemote(bool server, QuantumAuthorityMessage message)
|
||||
{
|
||||
|
||||
var objects = QSBWorldSync.GetWorldObjects<IQSBQuantumObject>();
|
||||
var obj = objects.First(x => (x as IWorldObject).ObjectId == message.ObjectId);
|
||||
obj.ControllingPlayer = message.AuthorityOwner;
|
||||
DebugLog.DebugWrite($"Set {message.ObjectId} to owner {message.AuthorityOwner}");
|
||||
}
|
||||
}
|
||||
}
|
7
QSB/QuantumSync/IQSBQuantumObject.cs
Normal file
7
QSB/QuantumSync/IQSBQuantumObject.cs
Normal file
@ -0,0 +1,7 @@
|
||||
namespace QSB.QuantumSync
|
||||
{
|
||||
public interface IQSBQuantumObject
|
||||
{
|
||||
uint ControllingPlayer { get; set; }
|
||||
}
|
||||
}
|
@ -18,7 +18,7 @@ namespace QSB.QuantumSync.WorldObjects
|
||||
{
|
||||
DebugBoxText = DebugBoxManager.CreateBox(AttachedObject.transform, 0, AttachedObject.GetValue<int>("_stateIndex").ToString()).GetComponent<Text>();
|
||||
}
|
||||
base.Init(quantumObject, id);
|
||||
base.Init(attachedObject, id);
|
||||
}
|
||||
|
||||
public void ChangeState(int stateIndex)
|
||||
|
@ -6,29 +6,27 @@ using UnityEngine;
|
||||
|
||||
namespace QSB.QuantumSync.WorldObjects
|
||||
{
|
||||
internal abstract class QSBQuantumObject<T> : WorldObject<T> where T : UnityEngine.Object
|
||||
internal abstract class QSBQuantumObject<T> : WorldObject<T>, IQSBQuantumObject where T : UnityEngine.Object
|
||||
{
|
||||
private const uint NoControllerValue = uint.MaxValue;
|
||||
|
||||
public uint ControllingPlayer = NoControllerValue;
|
||||
public uint ControllingPlayer { get; set; }
|
||||
|
||||
public override void Init(T attachedObject, int id)
|
||||
{
|
||||
var tracker = (AttachedObject as GameObject).AddComponent<OnEnableDisableTracker>();
|
||||
var tracker = (AttachedObject as Component).gameObject.AddComponent<OnEnableDisableTracker>();
|
||||
tracker.OnEnableEvent += OnEnable;
|
||||
tracker.OnDisableEvent += OnDisable;
|
||||
DebugLog.DebugWrite($"Finish setup of {attachedObject.name}");
|
||||
ControllingPlayer = 0;
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
if (ControllingPlayer != uint.MaxValue && !QSBCore.IsServer)
|
||||
if (ControllingPlayer != 0 && !QSBCore.IsServer)
|
||||
{
|
||||
// controlled by another player, dont care that we activate it (unless we're the server!)
|
||||
return;
|
||||
}
|
||||
// no one is controlling this object right now (or we're the server, and we want to take ownership), request authority
|
||||
GlobalMessenger<uint>.FireEvent(EventNames.QSBQuantumAuthority, QSBPlayerManager.LocalPlayerId);
|
||||
GlobalMessenger<int, uint>.FireEvent(EventNames.QSBQuantumAuthority, ObjectId, QSBPlayerManager.LocalPlayerId);
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
@ -39,7 +37,7 @@ namespace QSB.QuantumSync.WorldObjects
|
||||
return;
|
||||
}
|
||||
// send event to other players that we're releasing authority
|
||||
GlobalMessenger<uint>.FireEvent(EventNames.QSBQuantumAuthority, NoControllerValue);
|
||||
GlobalMessenger<int, uint>.FireEvent(EventNames.QSBQuantumAuthority, ObjectId, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,16 +1,15 @@
|
||||
using OWML.Utils;
|
||||
using QSB.WorldSync;
|
||||
using UnityEngine;
|
||||
|
||||
namespace QSB.QuantumSync.WorldObjects
|
||||
{
|
||||
internal class QSBQuantumShuffleObject : WorldObject<QuantumShuffleObject>
|
||||
internal class QSBQuantumShuffleObject : QSBQuantumObject<QuantumShuffleObject>
|
||||
{
|
||||
public override void Init(QuantumShuffleObject shuffleObject, int id)
|
||||
{
|
||||
ObjectId = id;
|
||||
AttachedObject = shuffleObject;
|
||||
base.Init(quantumObject, id);
|
||||
base.Init(shuffleObject, id);
|
||||
}
|
||||
|
||||
public void ShuffleObjects(int[] indexArray)
|
||||
|
Loading…
x
Reference in New Issue
Block a user