using UnityEngine; namespace XRMultiplayer.MiniGames { /// /// Represents a slingshot mini-game. /// [RequireComponent(typeof(TargetManager))] public class MiniGame_Slingshot : MiniGameBase { [SerializeField] SlingshotVisualUpdater[] m_Slingshots; [SerializeField] float m_PreGameHeight = 0.65f; [SerializeField] float m_StartGameHeight = 0.0f; /// /// The target manager. /// TargetManager m_TargetManager; /// /// The current player score. /// int m_CurrentPlayerScore = 0; /// public override void Start() { base.Start(); TryGetComponent(out m_TargetManager); SetSlingshotHeights(m_PreGameHeight); } /// public override void SetupGame() { base.SetupGame(); SetSlingshotHeights(m_PreGameHeight); } /// public override void StartGame() { base.StartGame(); m_CurrentPlayerScore = 0; m_TargetManager.ActivateTargets(); SetSlingshotHeights(m_StartGameHeight); } /// public override void FinishGame(bool submitScore = true) { base.FinishGame(submitScore); m_TargetManager.DeactivateTargets(); m_MiniGameManager.FinishGame(); SetSlingshotHeights(m_PreGameHeight); } /// public override void UpdateGame(float deltaTime) { base.UpdateGame(deltaTime); } void SetSlingshotHeights(float height) { foreach (var slingshot in m_Slingshots) { slingshot.ResetSlingshot(height); } } /// /// Called when the local player hits a target. /// /// public void LocalPlayerHitTarget(int targetValue) { if (m_MiniGameManager.currentNetworkedGameState == MiniGameManager.GameState.InGame) { m_CurrentPlayerScore += targetValue; m_MiniGameManager.SubmitScoreServerRpc(m_CurrentPlayerScore, XRINetworkPlayer.LocalPlayer.OwnerClientId); } } } }