DeltaVR/Assets/_PROJECT/Components/Mole/WhackAMoleMachine.cs
2023-05-08 15:56:10 +03:00

91 lines
2.3 KiB
C#

using System.Collections;
using System.Collections.Generic;
using FishNet.Object;
using TMPro;
using UnityEngine;
namespace _PROJECT.Components.Mole
{
public class WhackAMoleMachine : NetworkBehaviour
{
public int score;
public TMP_Text scoreText;
public TMP_Text timerText;
public float moleDistance = 0.5f;
public float moleAppearTime = 1.5f;
public float moleDisappearTime = 0.5f;
public float gameLength = 60f;
public List<Mole> moles;
private bool _gameStarted;
public void SendStartGameRPC()
{
StartGameRPC();
}
[ServerRpc(RequireOwnership = false)]
private void StartGameRPC()
{
if (!IsServer) return;
if (_gameStarted) return;
_gameStarted = true;
score = 0;
SetScoreRPC(score);
SetTimerRPC(gameLength);
StartCoroutine(RunTimer());
StartCoroutine(RiseMoles());
}
IEnumerator RiseMoles()
{
float minDelay = 0.5f;
float maxDelay = 2f;
float delay;
for (float timer = 0f; timer < gameLength; timer += delay)
{
int randomIndex = Random.Range(0, moles.Count);
Mole mole = moles[randomIndex];
mole.Rise(moleDistance, moleAppearTime, moleDisappearTime, this);
delay = Random.Range(minDelay, maxDelay);
yield return new WaitForSeconds(delay);
}
}
IEnumerator RunTimer()
{
for (float timer = gameLength; timer >= 0; timer -= Time.deltaTime)
{
SetTimerRPC(Mathf.FloorToInt(timer));
yield return null;
}
GameOver();
}
public void MoleHit()
{
if (!IsServer) return;
score++;
SetScoreRPC(score);
}
[ObserversRpc]
public void SetScoreRPC(int score)
{
scoreText.text = "Score: " + score;
}
[ObserversRpc]
public void SetTimerRPC(float time)
{
timerText.text = "Time: " + time;
}
public void GameOver()
{
SetTimerRPC(0);
}
}
}