Пример #1
0
    void Update()
    {
        float height = transform.position.z;

        //si alcanzamos un punto debemos cambiar de target al otro punto
        float distance = (currentTarget - kineticsAgent.transform.position).magnitude;

        if (distance <= 1f) //intercambiamos targets
        {
            Vector3 swap = currentTarget;
            currentTarget = otherTarget;
            otherTarget   = swap;
        }

        //ajustamos el tamanno del pokemon de acuerdo a la altura
        //float targetSize = Math.Abs(height)*(0.4f);
        float targetSize = (float)Math.Log(Math.Abs(height));

        if (targetSize < minSize)
        {
            targetSize = minSize;
        }

        float caught = 1f;

        if (transform.localScale.x == 0)//si ya lo atraparon no queremos seguir cambiando su size
        {
            caught = 0f;
        }
        transform.localScale = new Vector3(targetSize * caught, targetSize * caught, 1f * caught);

        //hacemos seek al punto actuall
        steeringAgent.UpdateSteering(seek.getSteering2(currentTarget, 1));
    }
Пример #2
0
    void Update()
    {
        //un pokemon es atrapado cuando su tamanno se vuelve 0
        float caught = pokemons[currentPokemon].transform.localScale.x;

        //SI EL POKEMON QUE SEGUIAMOS FUE ATRAPADO
        if (caught == 0f)
        {
            currentPokemon++;//pasamos al siguiente
            //si ya no hay pokemones
            if (currentPokemon == amountPokemon)
            {
                //dejamos de movernos
                kineticsAgent.velocity = Vector3.zero;
                steeringAgent.linear   = Vector3.zero;
                //apagamos este componente
                enabled = false;
                return;
            }
            UpdatePath();//actualizamos al nuevo camino a seguir
        }


        currentPosition = kineticsAgent.transform.position;//posicion actual del trainer


        //OJO: ese 5f se consiguio tanteando
        //SI ESTAMOS MUY CERCA DEL TRIANGULO QUE SEGUIMOS
        if (Vector3.Distance(currentPosition, currentPath[indexPath]) < 5f)
        {
            indexPath++;                            //nos movemos al siguiente triangulo
            int n = currentPath.Length;
            if (indexPath >= n)                     //si nos pasamos del largo del path
            {
                indexPath = n - 1;                  //nos quedamos en el ultimo
            }
            currentTarget = currentPath[indexPath]; //siguiente triangulo a seguir
        }

        //SI ALCANZAMOS DONDE ESTABA EL POKEMON
        if (Vector3.Distance(currentPosition, pokemonPosition) < 3f)
        {
            //si el pokemon se movio hay que actualizar el camino
            if (pokemonPosition != pokemons[currentPokemon].transform.position)
            {
                UpdatePath();
            }
            else  //si no estamos dentro del triangulo del pokemon asi que lo seguimos
            {
                currentTarget = pokemonPosition;
            }
        }

        //Perseguimos al pokemon
        // con seek
        steeringAgent.UpdateSteering(seek.getSteering2(currentTarget, seek_or_flee));
    }
Пример #3
0
    void Update()
    {
        //si alcanzamos un punto debemos cambiar de target al otro punto
        float distance = (currentTarget - kineticsAgent.transform.position).magnitude;

        if (distance <= 1f) //intercambiamos targets
        {
            Vector3 swap = currentTarget;
            currentTarget = otherTarget;
            otherTarget   = swap;
        }


        //hacemos seek al punto actuall
        steeringAgent.UpdateSteering(seek.getSteering2(currentTarget, 1));
    }
Пример #4
0
    //en este caso la accion es actualizar la acelaracion del usuario
    public override void DoAction()
    {
        Vector3 agent  = agentKin.transform.position;
        Vector3 target = currentTargetPoint;

        if (underground)
        {
            target.z = agent.z;//esta linea hace que sigamos los puntos a la misma altura
        }

        float modifier = 1f;//este numero sera util para que el seek no se pase mucho de los puntos
        int   n        = path.Length;

        //ACTUALIZAR PUNTO
        if (Vector3.Distance(target, agent) < 4f)
        {
            currentIndexPoint++;
            oldTargetPoint = target;
            if (currentIndexPoint == n)                   //si nos pasamos del largo del path
            {
                currentIndexPoint = n - 1;                //nos quedamos en el ultimo
            }
            currentTargetPoint = path[currentIndexPoint]; //siguiente triangulo a seguir
        }

        //ACELERAR MUCHO SI ESTAMOS CAMBIANDO DE PUNTO
        if (Vector3.Distance(oldTargetPoint, agent) < 5f) //si estamos muy cerca del punto anterior
        {
            modifier = 5f;                                //aceleraremos mas para cambiar de direccion al siguiente punto bien
        }

        //SI ESTAMOS EN EL ULTIMO PUNTO NO MODIFICAR ACELERACION
        if (currentIndexPoint == n)
        {
            modifier = 1f;
        }



        //seguimos el punto actual
        steeringAgent.UpdateSteering(seek.getSteering2(target, 1));
        steeringAgent.linear *= modifier;//ajustamos la aceleracion
    }