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