示例#1
0
    public void DoYourThing()
    {
        Nodo partida = grafoActual.darNodoContenedor(agent.transform.position);
        Nodo destino = grafoActual.darNodoContenedor(target.transform.position);

        camino = A.Ejecutar(partida, destino, grafoActual);

        for (int j = 0; j < (camino.Count - 1); j = j + 1)
        {
            Debug.DrawLine(new Vector3((float)camino[j].GetCentro.Item1, (float)camino[j].GetCentro.Item2, 0),
                           new Vector3((float)camino[j + 1].GetCentro.Item1, (float)camino[j + 1].GetCentro.Item2, 0));
        }

        foreach (Nodo n in grafoActual.GetListaNodos())
        {
            Debug.DrawLine(new Vector3((float)n.GetPrimerVertice().Item1, (float)n.GetPrimerVertice().Item2, 0),
                           new Vector3((float)n.GetSegundoVertice().Item1, (float)n.GetSegundoVertice().Item2, 0));

            Debug.DrawLine(new Vector3((float)n.GetSegundoVertice().Item1, (float)n.GetSegundoVertice().Item2, 0),
                           new Vector3((float)n.GetTercerVertice().Item1, (float)n.GetTercerVertice().Item2, 0));

            Debug.DrawLine(new Vector3((float)n.GetPrimerVertice().Item1, (float)n.GetPrimerVertice().Item2, 0),
                           new Vector3((float)n.GetTercerVertice().Item1, (float)n.GetTercerVertice().Item2, 0));
        }

        if (arrived)
        {
            if (!partida.Equals(destino))
            {
                arrived = false;
            }
            else
            {
                dac = new dArriveComp(agent, target.transform.position, maxA, maxS, targetR, slowR, timeToT);
                dac.doYourThing();
            }
        }

        if (camino.Count <= actual)
        {
            actual = 0;
        }

        if ((agent.transform.position.x - 0.3 <= camino[actual].GetCentro.Item1 && camino[actual].GetCentro.Item1 <= agent.transform.position.x + 0.3) &&
            (agent.transform.position.y - 0.3 <= camino[actual].GetCentro.Item2 && camino[actual].GetCentro.Item2 <= agent.transform.position.y + 0.3) &&
            actual != (camino.Count - 1))
        {
            actual = actual + 1;
        }

        if (camino.Count <= actual)
        {
            actual = 0;
        }

        if (partida.Equals(destino))
        {
            dac = new dArriveComp(agent, target.transform.position, maxA, maxS, targetR, slowR, timeToT);
            dac.doYourThing();
            //    dsc = new dSeekComp(agent, target.transform.position, maxA, Vector3.zero);
            //    dsc.doYourThing();
            arrived = true;
        }
        else
        {
            if (camino[actual].GetAltura() > partida.GetAltura())
            {
                agent.transform.position   += new Vector3(0, 0, 0.01f);
                agent.transform.localScale += new Vector3(Math.Abs(agent.transform.position.z) * 0.005f, Math.Abs(agent.transform.position.z) * 0.005f, 0);
            }
            else if (camino[actual].GetAltura() < partida.GetAltura())
            {
                agent.transform.position   -= new Vector3(0, 0, 0.01f);
                agent.transform.localScale -= new Vector3(Math.Abs(agent.transform.position.z) * 0.005f, Math.Abs(agent.transform.position.z) * 0.005f, 0);
            }
            else if ((camino[actual].GetAltura() == 0) && (partida.GetAltura() == 0))
            {
                agent.transform.position   = new Vector3(agent.transform.position.x, agent.transform.position.y, 0);
                agent.transform.localScale = agent.GetInitialScale();
            }

            Vector3 objetivoActual = new Vector3((float)camino[actual].GetCentro.Item1, (float)camino[actual].GetCentro.Item2, 0);

            dac = new dArriveComp(agent, objetivoActual, maxA, maxS, targetR, slowR, timeToT);
            dac.doYourThing();
        }
    }
示例#2
0
 // Start is called before the first frame update
 void Start()
 {
     dArrive = new dArriveComp(agent, target.transform.position, maxSpeed, maxAcceleration, targetRadius, slowRadius, timeToTarget);
 }