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); }
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); }