コード例 #1
0
ファイル: Shared.cs プロジェクト: patel22p/dorumon
    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);
        }
    }
コード例 #2
0
 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);
     }
 }
コード例 #3
0
 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);
 }
コード例 #4
0
 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));
 }
コード例 #5
0
    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);
        }
    }
コード例 #6
0
    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);
    }
コード例 #7
0
    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;
    }
コード例 #8
0
 Vector3?zToPl(Destroible ipl)
 {
     return(ipl.transform.position - pos);
 }
コード例 #9
0
ファイル: Zombie.cs プロジェクト: ConnectDeveloper01/dorumon
 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);
     
 }
コード例 #10
0
ファイル: Zombie.cs プロジェクト: ConnectDeveloper01/dorumon
    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;
    }
コード例 #11
0
ファイル: Zombie.cs プロジェクト: ConnectDeveloper01/dorumon
 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;
 }
コード例 #12
0
ファイル: Zombie.cs プロジェクト: ConnectDeveloper01/dorumon
    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;

    }
コード例 #13
0
ファイル: Zombie.cs プロジェクト: ConnectDeveloper01/dorumon
 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);
     }
 }
コード例 #14
0
ファイル: Zombie.cs プロジェクト: ConnectDeveloper01/dorumon
 Vector3? zToPl(Destroible ipl)
 {        
     return ipl.transform.position - pos;        
 }