91 lines
2.3 KiB
C#
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);
|
|
}
|
|
}
|
|
} |