void ControllerUpdate() { float min = float.MaxValue; Destroible nearp = null; foreach (Player p in _Game.players) { if (p != null) { if (p.Alive && p.OwnerID != -1) { float dist = Vector3.Distance(p.transform.position, this.transform.position); if (min > dist) { nearp = p; } min = Math.Min(dist, min); } } } if (nearp != null && nearp.OwnerID != -1 && selected != nearp.OwnerID) { RPCSetController(nearp.OwnerID); } }
private void Bite(Destroible ipl) { move = false; tiltTm = 0; if (zombieBite > 1) { zombieBite = 0; PlayRandSound(screamSounds); ipl.RPCSetLifeLocal(ipl.Life - (Math.Min(_Game.mapSettings.zombieDamage, _Game.stage + 1) * (zombieType == ZombieType.Life ? 3 : 1)), -1); } }
private Destroible Nearest() { if (nearest == null || _TimerA.TimeElapsed(100)) { nearest = _Game.towers.Cast <Destroible>() //.Where(a => a != null && a.Alive && a.OwnerID == selected && Vector3.Distance(a.pos, pos) < 50) .Union(players.Cast <Destroible>()) .Where(a => a != null && a.Alive && a.OwnerID == selected) .OrderBy(a => Vector3.Distance(a.pos, pos)) .FirstOrDefault(); } return(nearest); }
private Vector3?GetNextPathFindPoint(Destroible ipl) { if (_Loader.disablePathFinding) { return(null); } if (seekPathtm < 0) { seeker.StartPath(this.transform.position, ipl.transform.position); seekPathtm = UnityEngine.Random.Range(3f, 6); } return(FindNextPoint(pathPoints)); }
private Vector3?GetRay(Destroible ipl) { var r = new Ray(pos, ipl.pos - pos); RaycastHit h; if (!Physics.Raycast(r, out h, Vector3.Distance(ipl.pos, pos), 1 << LayerMask.NameToLayer("Level"))) { return(ipl.pos - pos); } else { return(null); } }
private Vector3?FindNextPoint(IList <Vector3> points) { if (points == null || points.Count == 0) { return(null); } Vector3 nearest = new Vector3(float.MaxValue, float.MaxValue, float.MaxValue); bool found = false; int ni = 0; for (int i = 0; i < points.Count; i++) { //if (i != 0) //Debug.DrawLine(points[i - 1], points[i]); Vector3 newp = points[i] - pos; if (newp.magnitude < nearest.magnitude) { nearest = newp; ni = i; if (nearest.magnitude < 6) { found = true; } } } if (found) { while (true) { ni++; if (ni >= points.Count) { break; } if (Vector3.Distance(points[ni], pos) > 3) { return(points[ni] - pos); } } } return(null); }
public override void ResetSpawn() { //selected = 0; ResetSpawnTm(); MapTag[] loc = _Game.spawns.Where(a => a.SpawnType == SpawnType.ZombieSpawnLocation).ToArray(); MapTag[] spawns = _Game.spawns.Where(a => a.SpawnType == SpawnType.zombie).ToArray(); Destroible pl = players.Where(a => a != null && a.Alive).OrderBy(a => Vector3.Distance(a.pos, pos)).FirstOrDefault(); if (pl == null) { pos = spawns.First().transform.position; } else { var located = spawns.Where(a => loc.Any(b => b.collider.bounds.Contains(pl.pos) && b.collider.bounds.Contains(a.transform.position))).Random(); var ordered = spawns.OrderBy(a => Vector3.Distance(a.transform.position, pl.pos)); pos = (located != null ? located : ordered.First()).transform.position + new Vector3(0, 1, 0); } rot = Quaternion.identity; rigidbody.velocity = Vector3.zero; }
Vector3?zToPl(Destroible ipl) { return(ipl.transform.position - pos); }
private Vector3? GetNextPathFindPoint(Destroible ipl) { if (_Loader.disablePathFinding) return null; if (seekPathtm < 0) { seeker.StartPath(this.transform.position, ipl.transform.position); seekPathtm = UnityEngine.Random.Range(3f, 6); } return FindNextPoint(pathPoints); }
private Vector3? FindNextPoint(IList<Vector3> points) { if (points == null || points.Count == 0) return null; Vector3 nearest = new Vector3(float.MaxValue, float.MaxValue, float.MaxValue); bool found = false; int ni = 0; for (int i = 0; i < points.Count; i++) { //if (i != 0) //Debug.DrawLine(points[i - 1], points[i]); Vector3 newp = points[i] - pos; if (newp.magnitude < nearest.magnitude) { nearest = newp; ni = i; if (nearest.magnitude < 6) found = true; } } if (found) while(true) { ni++; if (ni >= points.Count) break; if (Vector3.Distance(points[ni], pos) > 3) return points[ni] - pos; } return null; }
private Destroible Nearest() { if (nearest == null || _TimerA.TimeElapsed(100)) nearest = _Game.towers.Cast<Destroible>() //.Where(a => a != null && a.Alive && a.OwnerID == selected && Vector3.Distance(a.pos, pos) < 50) .Union(players.Cast<Destroible>()) .Where(a => a != null && a.Alive && a.OwnerID == selected) .OrderBy(a => Vector3.Distance(a.pos, pos)) .FirstOrDefault(); return nearest; }
private Vector3? GetRay(Destroible ipl) { var r = new Ray(pos, ipl.pos - pos); RaycastHit h; if (!Physics.Raycast(r, out h, Vector3.Distance(ipl.pos, pos), 1 << LayerMask.NameToLayer("Level"))) return ipl.pos - pos; else return null; }
Vector3? zToPl(Destroible ipl) { return ipl.transform.position - pos; }