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; } } } }
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(); }