Exemplo n.º 1
0
    public void RunFrom()
    {
        if (humanToRunFrom.IsDead())
        {
            RemoveHumanThatRunAwayFrom(humanToRunFrom);
            return;
        }
        else if (humanPoisoner.IsPoisoned)
        {
            StopRunnigAway();
        }

        runTo     = Vector3.zero;
        offsetOnX = transform.position.x - humanToRunFrom.transform.position.x;
        offsetOnZ = transform.position.z - humanToRunFrom.transform.position.z;

        FindEscabeWay();

        if (NavMesh.SamplePosition(runTo, out hit, navSampleDistance, 1 << NavMesh.GetAreaFromName("Walkable")))
        {
            if (_activeBorder.ChechIfInsideBorder(runTo))
            {
                agent.SetDestination(runTo);
            }
            else
            {
                if (isGoingUp)
                {
                    goingUpProbability--;

                    if (CheckIfOnTheNav(Vector3.left * navSampleDistance) && offsetOnX < zHDistance.x)
                    {
                        goingLeftProbability++;
                    }
                    if (CheckIfOnTheNav(Vector3.right * navSampleDistance) && offsetOnX > zHDistance.x)
                    {
                        goingRightProbability++;
                    }
                    if (CheckIfOnTheNav(Vector3.back * navSampleDistance) && offsetOnZ < zHDistance.z)
                    {
                        goingDownProbability++;
                    }
                }
                else if (isGoingDown)
                {
                    goingDownProbability--;

                    if (CheckIfOnTheNav(Vector3.left * navSampleDistance) && offsetOnX < zHDistance.x)
                    {
                        goingLeftProbability++;
                    }
                    if (CheckIfOnTheNav(Vector3.right * navSampleDistance) && offsetOnX > zHDistance.x)
                    {
                        goingRightProbability++;
                    }
                    if (CheckIfOnTheNav(Vector3.forward * navSampleDistance) && offsetOnZ > zHDistance.z)
                    {
                        goingUpProbability++;
                    }
                }
                else if (isGoingLeft)
                {
                    goingLeftProbability--;

                    if (CheckIfOnTheNav(Vector3.right * navSampleDistance) && offsetOnX > zHDistance.x)
                    {
                        goingRightProbability++;
                    }
                    if (CheckIfOnTheNav(Vector3.forward * navSampleDistance) && offsetOnZ > zHDistance.z)
                    {
                        goingUpProbability++;
                    }
                    if (CheckIfOnTheNav(Vector3.back * navSampleDistance) && offsetOnZ < zHDistance.z)
                    {
                        goingDownProbability++;
                    }
                }
                else if (isGoingRight)
                {
                    goingRightProbability--;

                    if (CheckIfOnTheNav(Vector3.left * navSampleDistance) && offsetOnX < zHDistance.x)
                    {
                        goingLeftProbability++;
                    }
                    if (CheckIfOnTheNav(Vector3.forward * navSampleDistance) && offsetOnZ > zHDistance.z)
                    {
                        goingUpProbability++;
                    }
                    if (CheckIfOnTheNav(Vector3.back * navSampleDistance) && offsetOnZ < zHDistance.z)
                    {
                        goingDownProbability++;
                    }
                }
            }
        }
    }