123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using Mirror;
- public class zombieManager : NetworkBehaviour
- {
- public float radius;
- public bool drawGizmos;
- public int maxZombiesAtOnce;
- public GameObject[] zombiesToSpawn;
- public List<GameObject> currentZombies;
- void Start()
- {
-
- }
- float t = 0;
- void Update()
- {
- if (!isServer) { return; }
- //waiting for zombie refresh rate
- if (t < 5f)
- {
- t += Time.deltaTime;
- return;
- }
- foreach(netPlayer player in FindObjectsOfType<netPlayer>())
- {
- zombieForPlayer(player);
- }
-
- }
- void zombieForPlayer(netPlayer player)
- {
- if (player.currentZombies.Count < maxZombiesAtOnce)
- {
- Vector3 hit;
- if (RandomPoint(player.transform.position, radius, out hit))
- {
- Debug.Log($"Distance to new point is {Vector3.Distance(player.transform.position, hit)}");
- // bool notTooClose = (Vector3.Distance(netPlayerStats.localPlayer.transform.position, hit) >= 10);
- // Vector3 screenPoint = Camera.main.WorldToScreenPoint(hit);
- // bool playerCanSee = (screenPoint.x > 0 && screenPoint.x < Screen.width && screenPoint.y > 0 &&
- // screenPoint.y < Screen.height);
- GameObject newZombie = Instantiate(zombiesToSpawn[Random.Range(0, zombiesToSpawn.Length - 1)], hit, Quaternion.identity);
- player.currentZombies.Add(newZombie);
- currentZombies.Add(newZombie);
- newZombie.GetComponent<zombieBehaviour>().m_zombieArea = this;
- newZombie.GetComponent<zombieBehaviour>().player = player.transform;
- NetworkServer.Spawn(newZombie);
-
- t = 0;
-
- }
- }
- }
- public Transform giveMePlayer()
- {
-
- netPlayer[] players = FindObjectsOfType<netPlayer>();
- if (players.Length <= 0)
- {
- return null;
- }
- return players[Random.Range(0, players.Length-1)].transform;
- }
- bool RandomPoint(Vector3 center, float range, out Vector3 result)
- {
- for (int i = 0; i < 30; i++)
- {
- Vector3 randomPoint = center + Random.insideUnitSphere * range;
- UnityEngine.AI.NavMeshHit hit;
- if (UnityEngine.AI.NavMesh.SamplePosition(randomPoint, out hit, 1.0f, UnityEngine.AI.NavMesh.AllAreas))
- {
- result = hit.position;
- return true;
- }
- }
- result = Vector3.zero;
- return false;
- }
- void OnDrawGizmos()
- {
- if (drawGizmos)
- {
- Gizmos.color = Color.green;
- Gizmos.DrawWireSphere(transform.position, radius);
- }
- }
- }
|