mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-02-20 15:41:01 +00:00
quantum shuffle
This commit is contained in:
parent
53974485c9
commit
baa61807f8
@ -40,6 +40,7 @@
|
||||
public static string QSBRevealFact = "QSBRevealFact";
|
||||
public static string QSBSocketStateChange = "QSBSocketStateChange";
|
||||
public static string QSBMultiStateChange = "QSBMultiStateChange";
|
||||
public static string QSBQuantumShuffle = "QSBQuantumShuffle";
|
||||
public static string QSBIdentifyFrequency = "QSBIdentifyFrequency";
|
||||
public static string QSBIdentifySignal = "QSBIdentifySignal";
|
||||
public static string QSBTextTranslated = "QSBTextTranslated";
|
||||
|
@ -28,6 +28,7 @@
|
||||
RevealFact,
|
||||
SocketStateChange,
|
||||
MultiStateChange,
|
||||
QuantumShuffle,
|
||||
IdentifyFrequency,
|
||||
IdentifySignal,
|
||||
TextTranslated
|
||||
|
@ -51,6 +51,7 @@ namespace QSB.Events
|
||||
new SocketStateChangeEvent(),
|
||||
new MultiStateChangeEvent(),
|
||||
new SetAsTranslatedEvent(),
|
||||
new QuantumShuffleEvent(),
|
||||
// Conversation/dialogue/exploration
|
||||
new ConversationEvent(),
|
||||
new ConversationStartEndEvent(),
|
||||
|
@ -190,12 +190,15 @@
|
||||
<Compile Include="Patches\QSBPatch.cs" />
|
||||
<Compile Include="Patches\QSBPatchTypes.cs" />
|
||||
<Compile Include="QSBSceneManager.cs" />
|
||||
<Compile Include="QuantumSync\Events\QuantumShuffleEvent.cs" />
|
||||
<Compile Include="QuantumSync\Events\QuantumShuffleMessage.cs" />
|
||||
<Compile Include="QuantumSync\Patches\ClientQuantumStateChangePatches.cs" />
|
||||
<Compile Include="QuantumSync\Events\MultiStateChangeEvent.cs" />
|
||||
<Compile Include="QuantumSync\Events\MultiStateChangeMessage.cs" />
|
||||
<Compile Include="QuantumSync\Events\SocketStateChangeEvent.cs" />
|
||||
<Compile Include="QuantumSync\Events\SocketStateChangeMessage.cs" />
|
||||
<Compile Include="QuantumSync\WorldObjects\QSBMultiStateQuantumObject.cs" />
|
||||
<Compile Include="QuantumSync\WorldObjects\QSBQuantumShuffleObject.cs" />
|
||||
<Compile Include="QuantumSync\WorldObjects\QSBSocketedQuantumObject.cs" />
|
||||
<Compile Include="QuantumSync\WorldObjects\QSBQuantumSocket.cs" />
|
||||
<Compile Include="QuantumSync\QuantumManager.cs" />
|
||||
|
40
QSB/QuantumSync/Events/QuantumShuffleEvent.cs
Normal file
40
QSB/QuantumSync/Events/QuantumShuffleEvent.cs
Normal file
@ -0,0 +1,40 @@
|
||||
using OWML.Utils;
|
||||
using QSB.Events;
|
||||
using QSB.QuantumSync.WorldObjects;
|
||||
using QSB.WorldSync;
|
||||
using UnityEngine;
|
||||
|
||||
namespace QSB.QuantumSync.Events
|
||||
{
|
||||
public class QuantumShuffleEvent : QSBEvent<QuantumShuffleMessage>
|
||||
{
|
||||
public override QSB.Events.EventType Type => QSB.Events.EventType.QuantumShuffle;
|
||||
|
||||
public override void SetupListener() => GlobalMessenger<int, int[]>.AddListener(EventNames.QSBQuantumShuffle, Handler);
|
||||
public override void CloseListener() => GlobalMessenger<int, int[]>.RemoveListener(EventNames.QSBQuantumShuffle, Handler);
|
||||
|
||||
private void Handler(int objid, int[] indexArray) => SendEvent(CreateMessage(objid, indexArray));
|
||||
|
||||
private QuantumShuffleMessage CreateMessage(int objid, int[] indexArray) => new QuantumShuffleMessage
|
||||
{
|
||||
AboutId = LocalPlayerId,
|
||||
ObjectId = objid,
|
||||
IndexArray = indexArray
|
||||
};
|
||||
|
||||
public override void OnReceiveRemote(bool server, QuantumShuffleMessage message)
|
||||
{
|
||||
if (!QSBCore.HasWokenUp)
|
||||
{
|
||||
return;
|
||||
}
|
||||
var obj = QSBWorldSync.GetWorldObject<QSBQuantumShuffleObject>(message.ObjectId).AttachedObject;
|
||||
var shuffledObjects = obj.GetValue<Transform[]>("_shuffledObjects");
|
||||
var localPositions = obj.GetValue<Vector3[]>("_localPositions");
|
||||
for (var i = 0; i < shuffledObjects.Length; i++)
|
||||
{
|
||||
shuffledObjects[i].localPosition = localPositions[message.IndexArray[i]];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
25
QSB/QuantumSync/Events/QuantumShuffleMessage.cs
Normal file
25
QSB/QuantumSync/Events/QuantumShuffleMessage.cs
Normal file
@ -0,0 +1,25 @@
|
||||
using QSB.WorldSync.Events;
|
||||
using QuantumUNET.Transport;
|
||||
using System;
|
||||
using System.Linq;
|
||||
|
||||
namespace QSB.QuantumSync.Events
|
||||
{
|
||||
public class QuantumShuffleMessage : WorldObjectMessage
|
||||
{
|
||||
public int[] IndexArray { get; set; }
|
||||
|
||||
public override void Deserialize(QNetworkReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
IndexArray = Array.ConvertAll(reader.ReadBytesAndSize(), Convert.ToInt32);
|
||||
}
|
||||
|
||||
public override void Serialize(QNetworkWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
var temp = IndexArray.Select(x => (byte)x).ToArray();
|
||||
writer.WriteBytesAndSize(temp, temp.Length);
|
||||
}
|
||||
}
|
||||
}
|
@ -10,6 +10,7 @@ namespace QSB.QuantumSync.Patches
|
||||
{
|
||||
QSBCore.Helper.HarmonyHelper.AddPrefix<SocketedQuantumObject>("ChangeQuantumState", typeof(ClientQuantumStateChangePatches), nameof(ReturnFalsePatch));
|
||||
QSBCore.Helper.HarmonyHelper.AddPrefix<MultiStateQuantumObject>("ChangeQuantumState", typeof(ClientQuantumStateChangePatches), nameof(ReturnFalsePatch));
|
||||
QSBCore.Helper.HarmonyHelper.AddPrefix<QuantumShuffleObject>("ChangeQuantumState", typeof(ClientQuantumStateChangePatches), nameof(ReturnFalsePatch));
|
||||
}
|
||||
|
||||
public static bool ReturnFalsePatch() => false;
|
||||
|
@ -3,6 +3,7 @@ using QSB.Patches;
|
||||
using QSB.QuantumSync.WorldObjects;
|
||||
using QSB.WorldSync;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
|
||||
@ -16,6 +17,7 @@ namespace QSB.QuantumSync.Patches
|
||||
{
|
||||
QSBCore.Helper.HarmonyHelper.AddPostfix<SocketedQuantumObject>("MoveToSocket", typeof(ServerQuantumStateChangePatches), nameof(Socketed_MoveToSocket));
|
||||
QSBCore.Helper.HarmonyHelper.AddPostfix<QuantumState>("SetVisible", typeof(ServerQuantumStateChangePatches), nameof(QuantumState_SetVisible));
|
||||
QSBCore.Helper.HarmonyHelper.AddPrefix<QuantumShuffleObject>("ChangeQuantumState", typeof(ServerQuantumStateChangePatches), nameof(Shuffle_ChangeQuantumState));
|
||||
}
|
||||
|
||||
public static void Socketed_MoveToSocket(SocketedQuantumObject __instance, QuantumSocket socket)
|
||||
@ -23,7 +25,8 @@ namespace QSB.QuantumSync.Patches
|
||||
var objId = QuantumManager.Instance.GetId(__instance);
|
||||
var socketId = QuantumManager.Instance.GetId(socket);
|
||||
GlobalMessenger<int, int, Quaternion>
|
||||
.FireEvent(EventNames.QSBSocketStateChange,
|
||||
.FireEvent(
|
||||
EventNames.QSBSocketStateChange,
|
||||
objId,
|
||||
socketId,
|
||||
__instance.transform.localRotation);
|
||||
@ -34,9 +37,39 @@ namespace QSB.QuantumSync.Patches
|
||||
var allMultiStates = QSBWorldSync.GetWorldObjects<QSBMultiStateQuantumObject>();
|
||||
var owner = allMultiStates.First(x => x.QuantumStates.Contains(__instance));
|
||||
GlobalMessenger<int, int>
|
||||
.FireEvent(EventNames.QSBMultiStateChange,
|
||||
.FireEvent(
|
||||
EventNames.QSBMultiStateChange,
|
||||
QuantumManager.Instance.GetId(owner.AttachedObject),
|
||||
Array.IndexOf(owner.QuantumStates, __instance));
|
||||
}
|
||||
|
||||
public static bool Shuffle_ChangeQuantumState(
|
||||
QuantumShuffleObject __instance,
|
||||
ref List<int> ____indexList,
|
||||
ref Vector3[] ____localPositions,
|
||||
ref Transform[] ____shuffledObjects,
|
||||
ref bool __result)
|
||||
{
|
||||
____indexList.Clear();
|
||||
____indexList = Enumerable.Range(0, ____localPositions.Length).ToList();
|
||||
for (var i = 0; i < ____indexList.Count; ++i)
|
||||
{
|
||||
var random = UnityEngine.Random.Range(i, ____indexList.Count);
|
||||
var temp = ____indexList[i];
|
||||
____indexList[i] = ____indexList[random];
|
||||
____indexList[random] = temp;
|
||||
}
|
||||
for (var j = 0; j < ____shuffledObjects.Length; j++)
|
||||
{
|
||||
____shuffledObjects[j].localPosition = ____localPositions[____indexList[j]];
|
||||
}
|
||||
GlobalMessenger<int, int[]>
|
||||
.FireEvent(
|
||||
EventNames.QSBQuantumShuffle,
|
||||
QuantumManager.Instance.GetId(__instance),
|
||||
____indexList.ToArray());
|
||||
__result = true;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
@ -12,6 +12,7 @@ namespace QSB.QuantumSync
|
||||
private List<SocketedQuantumObject> _socketedQuantumObjects;
|
||||
private List<MultiStateQuantumObject> _multiStateQuantumObjects;
|
||||
private List<QuantumSocket> _quantumSockets;
|
||||
private List<QuantumShuffleObject> _quantumShuffleObjects;
|
||||
|
||||
public void Awake()
|
||||
{
|
||||
@ -26,10 +27,12 @@ namespace QSB.QuantumSync
|
||||
_socketedQuantumObjects = QSBWorldSync.Init<QSBSocketedQuantumObject, SocketedQuantumObject>();
|
||||
_multiStateQuantumObjects = QSBWorldSync.Init<QSBMultiStateQuantumObject, MultiStateQuantumObject>();
|
||||
_quantumSockets = QSBWorldSync.Init<QSBQuantumSocket, QuantumSocket>();
|
||||
_quantumShuffleObjects = QSBWorldSync.Init<QSBQuantumShuffleObject, QuantumShuffleObject>();
|
||||
}
|
||||
|
||||
public int GetId(SocketedQuantumObject obj) => _socketedQuantumObjects.IndexOf(obj);
|
||||
public int GetId(MultiStateQuantumObject obj) => _multiStateQuantumObjects.IndexOf(obj);
|
||||
public int GetId(QuantumSocket obj) => _quantumSockets.IndexOf(obj);
|
||||
public int GetId(QuantumShuffleObject obj) => _quantumShuffleObjects.IndexOf(obj);
|
||||
}
|
||||
}
|
13
QSB/QuantumSync/WorldObjects/QSBQuantumShuffleObject.cs
Normal file
13
QSB/QuantumSync/WorldObjects/QSBQuantumShuffleObject.cs
Normal file
@ -0,0 +1,13 @@
|
||||
using QSB.WorldSync;
|
||||
|
||||
namespace QSB.QuantumSync.WorldObjects
|
||||
{
|
||||
internal class QSBQuantumShuffleObject : WorldObject<QuantumShuffleObject>
|
||||
{
|
||||
public override void Init(QuantumShuffleObject shuffleObject, int id)
|
||||
{
|
||||
ObjectId = id;
|
||||
AttachedObject = shuffleObject;
|
||||
}
|
||||
}
|
||||
}
|
@ -30,4 +30,4 @@ namespace QSB.TranslationSync.WorldObjects
|
||||
.Select(ring => ring.GetEntryID());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user