示例#1
0
        public static bool Shuffle_ChangeQuantumState(
            QuantumShuffleObject __instance,
            ref List <int> ____indexList,
            ref Vector3[] ____localPositions,
            ref Transform[] ____shuffledObjects,
            ref bool __result)
        {
            var shuffleWorldObject = QSBWorldSync.GetWorldFromUnity <QSBQuantumShuffleObject, QuantumShuffleObject>(__instance);

            if (shuffleWorldObject.ControllingPlayer != QSBPlayerManager.LocalPlayerId)
            {
                return(false);
            }

            ____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]];
            }
            QSBEventManager.FireEvent(
                EventNames.QSBQuantumShuffle,
                shuffleWorldObject.ObjectId,
                ____indexList.ToArray());
            __result = true;
            return(false);
        }
        public static bool QuantumShuffleObject_ChangeQuantumState(
            QuantumShuffleObject __instance,
            ref bool __result)
        {
            QSBQuantumShuffleObject shuffleWorldObject = default;

            if (QSBWorldSync.AllObjectsReady)
            {
                shuffleWorldObject = __instance.GetWorldObject <QSBQuantumShuffleObject>();
                if (shuffleWorldObject.ControllingPlayer != QSBPlayerManager.LocalPlayerId)
                {
                    return(false);
                }
            }

            __instance._indexList.Clear();
            __instance._indexList = Enumerable.Range(0, __instance._localPositions.Length).ToList();
            for (var i = 0; i < __instance._indexList.Count; ++i)
            {
                var random = Random.Range(i, __instance._indexList.Count);
                var temp   = __instance._indexList[i];
                __instance._indexList[i]      = __instance._indexList[random];
                __instance._indexList[random] = temp;
            }

            for (var j = 0; j < __instance._shuffledObjects.Length; j++)
            {
                __instance._shuffledObjects[j].localPosition = __instance._localPositions[__instance._indexList[j]];
            }

            if (QSBWorldSync.AllObjectsReady)
            {
                shuffleWorldObject.SendMessage(new QuantumShuffleMessage(__instance._indexList.ToArray()));
                __result = true;
            }

            return(false);
        }