Example #1
0
  public float getDistanceRemaining() {
    if (!hasWayPoint()) {
      return 0;
    }

    float dist = getDistanceTo(getWayPoint());

    for (int i = mWayPointIndex + 1; i < mPath.count(); i++) {
      Vector2 wThis = mPath.get(i);
      Vector2 wLast = mPath.get(i - 1);

      dist += wThis.copy().sub(wLast).len();
    }

    return dist;
  }
Example #2
0
  public void sendBack(float dist) {
    int index = mWayPointIndex - 1;
    Vector2 pos = getPosition().copy();

    while (index > 0) {
      Vector2 wp = mPath.get(index);
      Vector2 toWp = Vector2.fromTo(pos, wp);
      float toWpLen = toWp.len();

      if (dist > toWpLen) {
        dist -= toWpLen;
        pos = wp;
        index--;
      } else {
        pos = toWp.norm().mul(dist).add(pos);
        setPosition(pos);
        mWayPointIndex = index + 1;
        return;
      }
    }

    setPosition(mPath.get(0));
    mWayPointIndex = 1;
  }
Example #3
0
  public Vector2 getPositionAfter(float sec) {
    if (mPath == null) {
      return getPosition();
    }

    float distance = sec * getSpeed();
    int index = mWayPointIndex;
    Vector2 position = getPosition().copy();

    while (index < mPath.count()) {
      Vector2 toWaypoint = mPath.get(index).copy().sub(position);
      float toWaypointDist = toWaypoint.len();

      if (distance < toWaypointDist) {
        return position.add(toWaypoint.mul(distance / toWaypointDist));
      } else {
        distance -= toWaypointDist;
        position.set(mPath.get(index));
        index++;
      }
    }

    return position;
  }
Example #4
0
 protected boolean hasWayPoint() {
   return mPath != null && mWayPointIndex < mPath.count();
 }
Example #5
0
 protected Vector2 getWayPoint() {
   return mPath.get(mWayPointIndex);
 }
Example #6
0
  public void setPath(Path path) {
    mPath = path;

    setPosition(mPath.get(0));
    mWayPointIndex = 1;
  }