forked from cgvr/DeltaVR
deltavr multiplayer 2.0
This commit is contained in:
91
Assets/_PROJECT/Components/Mole/WhackAMoleMachine.cs
Normal file
91
Assets/_PROJECT/Components/Mole/WhackAMoleMachine.cs
Normal file
@@ -0,0 +1,91 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user