IEnumerator StatusUpdateStillPositions(int inShotCount, bool inPlayerInControl, bool inPushoutable, bool inSkippable, int inStatus, bool[] inPocketed, Vector3[] inPositions, bool inFirstTime) { while (cueController == null) { yield return(null); } yield return(new WaitForEndOfFrame()); bool ControlReallyChanged = ServerController.serverController.playerInControl != inPlayerInControl; ServerController.serverController.playerInControl = inPlayerInControl; if (ControlReallyChanged && !inFirstTime) { float transfer_volume = Mathf.Clamp01(1.0f); if (ServerController.serverController.playerInControl) { GameManager_script.Instance().PlaySound((int)MusicClip.Good_Transfer, false, transfer_volume); // getting control always cheers } else { GameManager_script.Instance().PlaySound((int)MusicClip.Bad_Transfer, false, transfer_volume); // losing control always sad } } CueControllerUpdater.current_control_status = inStatus; cueController.pushoutAllowed = inPushoutable; cueController.skipAllowed = inSkippable; cueController.stillBallPositions = inPositions; cueController.stillBallPocketed = inPocketed; StartCoroutine(UpdateStillPositions(inShotCount)); cueController.ConditionalEnableForceSlider(); // update force slider control // activate hand cursor if (CueControllerUpdater.current_control_status == CueControllerUpdater.CUE_BALL_MOVABLE_ON_TABLE && inPlayerInControl && !inFirstTime) { cueController.ActivateHandCursor(); } // increment balls missed (when we transfer control over to player while it being on table) if (CueControllerUpdater.current_control_status == CueControllerUpdater.CUE_BALL_FIXED_ON_TABLE && inPlayerInControl && !inSkippable) { GameManager_script.IncrementShotsMissed(cueController.TrackingShotAsPlayerOne, cueController.TrackingShotAsPlayerTwo); } // show breakz pushout if (inFirstTime) { cueController.ShowHelpfulTooltipPopup("", "YourBreak", true, false); if (cueController.BotInControl() || cueController.NetworkSlaveInControl() || cueController.NetworkBotInControl()) // set for rematch breaks { GameManager_script.Instance().rematchYouAreThePrevBreaker = false; } else { GameManager_script.Instance().rematchYouAreThePrevBreaker = true; } } }