Esempio n. 1
0
    public Vector2 GetPositionInRoute(Location startLocation)
    {
        CheckIfNeedToBeReversed(startLocation);

        Vector2 position = Vector2.zero;

        float distance     = 0;
        float distanceDone = WorldMapController.calculateRouteDistanceKM(this) - GetDistanceLeft();

        for (int i = 1; i < GetListRoute().Count; i++)
        {
            Vector2 prev         = GetListRoute()[i - 1];
            Vector2 cur          = GetListRoute()[i];
            float   prevdistance = distance;
            distance += WorldMapController.calculateDistanceLatLongKM(prev, cur);

            if (distance > distanceDone)
            {
                float tempdist     = distance - prevdistance;
                float tempdistDone = distanceDone - prevdistance;
                float tempPosition = tempdistDone / tempdist;
                position = Vector2.Lerp(prev, cur, tempPosition);
                break;
            }
        }


        return(position);
    }
Esempio n. 2
0
    public float GetRouteDistanceFromPosition(Vector2 position, Location startLocation)
    {
        CheckIfNeedToBeReversed(startLocation);

        float distance   = 0;
        bool  foundPlace = false;

        for (int i = 1; i < GetListRoute().Count; i++)
        {
            Vector2 prev = GetListRoute()[i - 1];
            Vector2 cur  = GetListRoute()[i];

            if (foundPlace)
            {
                distance += WorldMapController.calculateDistanceLatLongKM(prev, cur);
            }
            else
            {
                if ((Mathf.Approximately(prev.x, position.x) && Mathf.Approximately(prev.y, position.y)) || position == prev || Vector2.Distance(position, prev) < 0.00001f)
                {
                    distance  += WorldMapController.calculateDistanceLatLongKM(position, cur);
                    foundPlace = true;
                }
                else if (prev.x < cur.x && prev.y < cur.y)
                {
                    if (position.x > prev.x && position.x < cur.x &&
                        position.y > prev.y && position.y < cur.y)
                    {
                        distance  += WorldMapController.calculateDistanceLatLongKM(position, cur);
                        foundPlace = true;
                    }
                }
                else if (prev.x > cur.x && prev.y < cur.y)
                {
                    if (position.x < prev.x && position.x > cur.x &&
                        position.y > prev.y && position.y < cur.y)
                    {
                        distance  += WorldMapController.calculateDistanceLatLongKM(position, cur);
                        foundPlace = true;
                    }
                }
                else if (prev.x > cur.x && prev.y > cur.y)
                {
                    if (position.x < prev.x && position.x > cur.x &&
                        position.y < prev.y && position.y > cur.y)
                    {
                        distance  += WorldMapController.calculateDistanceLatLongKM(position, cur);
                        foundPlace = true;
                    }
                }
                else if (prev.x < cur.x && prev.y > cur.y)
                {
                    if (position.x > prev.x && position.x < cur.x &&
                        position.y < prev.y && position.y > cur.y)
                    {
                        distance  += WorldMapController.calculateDistanceLatLongKM(position, cur);
                        foundPlace = true;
                    }
                }
            }
        }

        return(distance);
    }