Exemple #1
0
    public static IEnumerator KillEnemyCoroutine(GOAPEntity ent)
    {
        Node startingPoint = NodeList.allNodes.OrderBy(a => { return(Vector3.Distance(a.transform.position, ent.transform.position)); }).First();

        var houses = NodeList.allNodes
                     .Select(a => { return(a.GetComponent <HouseNode>()); })
                     .Where(a => a != null && a.owned && a.constructed)
                     .Select(a => a.keyId);

        EnemyWaypoint target = NodeList.allNodes
                               .Select(a => { return(a.GetComponent <EnemyWaypoint>()); })
                               .Where(a => a != null && a.gameObject.activeSelf && houses.Contains(a.keyId))
                               .OrderBy(a => { return(Vector3.Distance(a.transform.position, ent.transform.position)); })
                               .First();


        var path = Algorithms.AStar(
            startingPoint,
            a => a == target,
            a => Vector3.Distance(target.transform.position, a.transform.position),
            a =>
        {
            return(a.neighbors.Where(b => b.gameObject.activeSelf).Select(n => new Arc <Node>().SetArc(n, Vector3.Distance(n.transform.position, a.transform.position))));
        }
            );

        while (path.Count > 0)
        {
            ent.transform.forward   = new Vector3(path.Peek().transform.position.x - ent.transform.position.x, ent.transform.forward.y, path.Peek().transform.position.z - ent.transform.position.z);
            ent.transform.position += ent.transform.forward * Mathf.Min(Vector3.Distance(path.Peek().transform.position, ent.transform.position), ent.speed * Time.deltaTime);
            if (Vector3.Distance(path.Peek().transform.position, ent.transform.position) <= 2f)
            {
                path.Pop();
            }
            yield return(new WaitForEndOfFrame());
        }

        ent.Current.Keys.Add(target.keyId);
        target.gameObject.SetActive(false);

        ent.Sequence.First().Effects(ent.Current, ent.Current);
        ent.Sequence = ent.Sequence.Skip(1);
        if (ent.Sequence.Count() > 0)
        {
            ent.Sequence.First().Act(ent);
        }
    }
 protected void Spawn()
 {
     for (j = 0; j < enemies.Count; j++)
     {
         if (!enemies[j].activeInHierarchy)
         {
             enemies[j].transform.position   = transform.position;
             enemies[j].transform.localScale = transform.localScale;
             EnemyWaypoint e_scr2 = enemies[j].GetComponent <EnemyWaypoint>();
             e_scr2.health = e_scr2.health_max;
             e_scr2.SetWP(0);
             enemies[j].SetActive(true);
             break;
         }
     }
     Invoke("Spawn", time_spawn);
 }
    protected void Start()
    {
        enemies = new List <GameObject>();
        for (j = 0; j < enemy_count; j++)
        {
            enemy = (GameObject)Instantiate(enemy_pref);

            for (int i = 0; i < waypoint.Length; i++)
            {
                if (waypoint[i].activeInHierarchy)
                {
                    EnemyWaypoint e_scr = enemy.GetComponent <EnemyWaypoint>();
                    e_scr.waypoints[i] = waypoint[i];
                }
            }
            enemy.SetActive(false);
            enemies.Add(enemy);
        }
        Invoke("Spawn", time_spawn);
    }
Exemple #4
0
 // Use this for initialization
 void Start()
 {
     agent = GetComponent<NavMeshAgent>();
     //		StartCoroutine( SetNextWaypoint() );
     if ( targets.Count > 0 ) {
         currTarget = targets[ 0 ];
         agent.SetDestination(currTarget.transform.position);
     }
     else {
         rigidbody.isKinematic = true;
     }
     InvokeRepeating ("Footsteps", 0f, 0.5f);
 }
Exemple #5
0
    IEnumerator SetNextWaypoint()
    {
        agent.Stop();
        agent.ResetPath();
        rigidbody.isKinematic = true;

        if (currTarget == null) {
            currTarget = targets [Random.Range(0, targets.Count)];
        }
        else {
            currTarget = currTarget.GetTarget();
        }

        if (currTarget != null) {
            Vector3 vec = currTarget.transform.position - transform.position;
            Quaternion q = Quaternion.LookRotation( vec.normalized );
            for( float i = 0f; i < waypointWaitTime; i += Time.deltaTime ) {
                transform.rotation = Quaternion.Slerp (transform.rotation, q, Time.deltaTime);
                yield return 0;
            }
            rigidbody.isKinematic = false;
            agent.SetDestination(currTarget.transform.position);
        }
    }