using UnityEngine; using VRC.SDKBase; namespace VRCBilliardsCE.Packages.com.vrcbilliards.vrcbce.Runtime.Scripts { /// /// Carom code. /// public partial class PoolStateManager { private void InitializePocketedStateKoreanJapaneseCarom() { ballsArePocketed = new bool[NUMBER_OF_SIMULATED_BALLS]; for (int i = 0; i < ballsArePocketed.Length; i++) { switch (i) { case 0: case 2: case 3: case 9: ballsArePocketed[i] = false; continue; default: ballsArePocketed[i] = true; continue; } } } public void _ForceReset() { if (logger) { logger._Log(name, "ForceReset"); } if (Networking.IsInstanceOwner) { Networking.SetOwner(localPlayer, gameObject); _Reset(ResetReason.InstanceOwnerReset); } else if ( networkingLocalPlayerID == player1ID || networkingLocalPlayerID == player2ID || networkingLocalPlayerID == player3ID || networkingLocalPlayerID == player4ID ) { Networking.SetOwner(localPlayer, gameObject); _Reset(ResetReason.PlayerReset); } else if ( (player1ID > 0 && !VRCPlayerApi.GetPlayerById(player1ID).IsValid()) || (player2ID > 0 && !VRCPlayerApi.GetPlayerById(player2ID).IsValid()) || (player3ID > 0 && !VRCPlayerApi.GetPlayerById(player3ID).IsValid()) || (player4ID > 0 && !VRCPlayerApi.GetPlayerById(player4ID).IsValid()) ) { Networking.SetOwner(localPlayer, gameObject); _Reset(ResetReason.InvalidState); } else if (logger) { logger._Error(name, "Cannot reset table: you do not have permission"); } } public void _UnlockTable() { if (logger) { logger._Log(name, "UnlockTable"); } Networking.SetOwner(localPlayer, gameObject); isTableLocked = false; RefreshNetworkData(false); } public void _LockTable() { if (logger) { logger._Log(name, "LockTable"); } Networking.SetOwner(localPlayer, gameObject); isTableLocked = true; RefreshNetworkData(false); } public void _JoinGame(int playerNumber) { if (logger) { logger._Log(name, $"JoinGame: {playerNumber}"); } Networking.SetOwner(localPlayer, gameObject); localPlayerID = playerNumber; switch (playerNumber) { case 0: player1ID = networkingLocalPlayerID; EnableCustomBallColorSlider(true); break; case 1: player2ID = networkingLocalPlayerID; EnableCustomBallColorSlider(true); break; case 2: player3ID = networkingLocalPlayerID; EnableCustomBallColorSlider(true); break; case 3: player4ID = networkingLocalPlayerID; EnableCustomBallColorSlider(true); break; default: return; } RefreshNetworkData(false); if (slogger) { slogger.OscReportJoinedTeam(playerNumber); } } public void _LeaveGame() { if (logger) { logger._Log(name, "LeaveGame"); } Networking.SetOwner(localPlayer, gameObject); switch (localPlayerID) { case 0: player1ID = 0; break; case 1: player2ID = 0; break; case 2: player3ID = 0; break; case 3: player4ID = 0; break; default: return; } localPlayerID = -1; RefreshNetworkData(false); //akalink added, makes the color panel not able to be interacted with EnableCustomBallColorSlider(false); //end } public void _IncreaseTimer() { if (logger) { logger._Log(name, "IncreaseTimer"); } Networking.SetOwner(localPlayer, gameObject); timerSecondsPerShot += 5; RefreshNetworkData(false); if (timerSecondsPerShot >= 60) { timerSecondsPerShot = 60; } } public void _DecreaseTimer() { if (logger) { logger._Log(name, "DecreaseTimer"); } Networking.SetOwner(localPlayer, gameObject); timerSecondsPerShot -= 5; if (timerSecondsPerShot <= 0) { timerSecondsPerShot = 0; } RefreshNetworkData(false); } public void _SelectTeams() { if (logger) { logger._Log(name, "SelectTeams"); } Networking.SetOwner(localPlayer, gameObject); isTeams = true; RefreshNetworkData(false); } public void _DeselectTeams() { if (logger) { logger._Log(name, "DeselectTeams"); } Networking.SetOwner(localPlayer, gameObject); isTeams = false; RefreshNetworkData(false); } public void _EnableGuideline() { if (logger) { logger._Log(name, "EnableGuideline"); } Networking.SetOwner(localPlayer, gameObject); guideLineEnabled = true; RefreshNetworkData(false); } public void _DisableGuideline() { if (logger) { logger._Log(name, "DisableGuideline"); } Networking.SetOwner(localPlayer, gameObject); guideLineEnabled = false; RefreshNetworkData(false); } /// /// Initialize new match as the host. /// public void _StartNewGame() { if (logger) logger._Log(name, "StartNewGame"); mainSrc.enabled = true; if (!isGameInMenus) return; gameWasReset = false; gameID++; turnID = 0; _isGameBreak = true; isPlayerAllowedToPlay = true; isTeam2Turn = false; oldIsTeam2Turn = false; // Following is overrides of NewGameLocal, for game STARTER only turnIsRunning = false; isOpen = true; isGameInMenus = false; poolCues[0].tableIsActive = true; poolCues[1].tableIsActive = true; isTeam2Blue = false; isTeam2Winner = false; isFoul = false; isGameOver = false; ApplyTableColour(false); Networking.SetOwner(localPlayer, gameObject); RefreshNetworkData(false); } public void _Select8Ball() { if (logger) logger._Log(name, "Select8Ball"); Networking.SetOwner(localPlayer, gameObject); gameMode = 0u; RefreshNetworkData(false); } public void _Select9Ball() { if (logger) logger._Log(name, "Select9Ball"); Networking.SetOwner(localPlayer, gameObject); gameMode = GameMode.NineBall; RefreshNetworkData(false); } public void _Select4BallJapanese() { if (logger) logger._Log(name, "Select4BallJapanese"); Networking.SetOwner(localPlayer, gameObject); gameMode = GameMode.JapaneseCarom; RefreshNetworkData(false); } public void _SelectThreeCushionCarom() { if (logger) logger._Log(name, "SelectThreeCushionCarom"); Networking.SetOwner(localPlayer, gameObject); gameMode = GameMode.ThreeCushionCarom; RefreshNetworkData(false); } public void _Select4BallKorean() { if (logger) logger._Log(name, "Select4BallKorean"); Networking.SetOwner(localPlayer, gameObject); gameMode = GameMode.KoreanCarom; RefreshNetworkData(false); } } }