public void ReceiveAuthorityRequest(Message message)
    {
        if (buffer.NotSyncedAddToBuffer(IsSynced, ReceiveAuthorityRequest, message))
        {
            return;
        }

        using (DarkRiftReader reader = message.GetReader())
        {
            Main.Log($"[CLIENT] < TURNTABLE_AUTH_REQUEST");

            while (reader.Position < reader.Length)
            {
                RequestAuthority authRequest = reader.ReadSerializable <RequestAuthority>();

                TurntableController turntable = turntables.FirstOrDefault(j => j.transform.position == authRequest.Position + WorldMover.currentMove);
                if (turntable)
                {
                    NetworkTurntableSync sync = turntable.GetComponent <NetworkTurntableSync>();
                    sync.IsAnyoneInControlArea = true;
                    sync.playerAuthId          = authRequest.PlayerId;
                }
            }
        }
    }
Esempio n. 2
0
    private void Awake()
    {
        turntable          = GetComponent <TurntableController>();
        turntable.Snapped += Turntable_Snapped;
        prevRotation       = turntable.turntable.currentYRotation;
        SingletonBehaviour <CoroutineManager> .Instance.Run(DisableKeyboardInput());

        if (NetworkManager.IsHost())
        {
            authCoro = SingletonBehaviour <CoroutineManager> .Instance.Run(CheckAuthorityChange());
        }
    }
    internal void OnTurntableRotationChanged(TurntableController turntable, float value)
    {
        if (!IsSynced)
        {
            return;
        }
        //Main.Log($"[CLIENT] > TURNTABLE_ANGLE_CHANGED");
        using (DarkRiftWriter writer = DarkRiftWriter.Create())
        {
            writer.Write(new Turntable()
            {
                Position = turntable.transform.position - WorldMover.currentMove,
                Rotation = value
            });

            using (Message message = Message.Create((ushort)NetworkTags.TURNTABLE_ANGLE_CHANGED, writer))
                SingletonBehaviour <UnityClient> .Instance.SendMessage(message, SendMode.Unreliable);
        }
    }
    internal void SendReleaseAuthority(TurntableController turntable)
    {
        if (!IsSynced)
        {
            return;
        }
        Main.Log($"[CLIENT] > TURNTABLE_AUTH_RELEASE");

        using (DarkRiftWriter writer = DarkRiftWriter.Create())
        {
            writer.Write(new ReleaseAuthority()
            {
                Position = turntable.transform.position - WorldMover.currentMove
            });

            using (Message message = Message.Create((ushort)NetworkTags.TURNTABLE_AUTH_RELEASE, writer))
                SingletonBehaviour <UnityClient> .Instance.SendMessage(message, SendMode.Unreliable);
        }
    }
    public void ReceiveTurntableOnSnap(Message message)
    {
        if (buffer.NotSyncedAddToBuffer(IsSynced, ReceiveTurntableOnSnap, message))
        {
            return;
        }

        using (DarkRiftReader reader = message.GetReader())
        {
            Main.Log($"[CLIENT] < TURNTABLE_SNAP");

            while (reader.Position < reader.Length)
            {
                Turntable turntableInfo = reader.ReadSerializable <Turntable>();

                TurntableController turntable = turntables.FirstOrDefault(j => j.transform.position == turntableInfo.Position + WorldMover.currentMove);
                if (turntable)
                {
                    SingletonBehaviour <CoroutineManager> .Instance.Run(RotateTurntableTowardsByNetwork(turntable, turntableInfo.Rotation));
                }
            }
        }
    }
    private IEnumerator RotateTurntableTowardsByNetwork(TurntableController turntableController, float angle, bool moveSlow = false)
    {
        IsChangeByNetwork = true;
        if (moveSlow)
        {
            bool addToAngle = angle > turntableController.turntable.currentYRotation;
            turntableController.turntable.targetYRotation += addToAngle ? .1f : -.1f;
            turntableController.turntable.RotateToTargetRotation();
            yield return(new WaitUntil(() => turntableController.turntable.targetYRotation == turntableController.turntable.currentYRotation));

            if (Mathf.Abs(turntableController.turntable.currentYRotation - angle) > .25f)
            {
                yield return(RotateTurntableTowardsByNetwork(turntableController, angle, moveSlow));
            }
        }
        else
        {
            turntableController.turntable.targetYRotation = angle;
            turntableController.turntable.RotateToTargetRotation();
            yield return(new WaitUntil(() => Mathf.Abs(turntableController.turntable.currentYRotation - angle) < .1f));
        }
        IsChangeByNetwork = false;
    }
    private void ReceiveTurntableSync(Message message)
    {
        using (DarkRiftReader reader = message.GetReader())
        {
            Main.Log($"[CLIENT] < TURNTABLE_SYNC");

            while (reader.Position < reader.Length)
            {
                Turntable[] turntableInfos = reader.ReadSerializables <Turntable>();

                foreach (Turntable turntable in turntableInfos)
                {
                    TurntableController turntableController = turntables.FirstOrDefault(j => j.transform.position == turntable.Position + WorldMover.currentMove);
                    if (turntableController)
                    {
                        turntableController.GetComponent <NetworkTurntableSync>().playerAuthId = turntable.playerAuthId;
                        SingletonBehaviour <CoroutineManager> .Instance.Run(RotateTurntableTowardsByNetwork(turntableController, turntable.Rotation));
                    }
                }
            }
        }
        IsSynced = true;
        buffer.RunBuffer();
    }