예제 #1
0
  @Override
  public void tick() {
    super.tick();

    if (getTarget() != null && isReloaded()) {
      Vector2 targetPos = getTarget().getPositionAfter(MortarShot.TIME_TO_TARGET);
      targetPos.add(Vector2.polar(getGame().getRandom(mInaccuracy), getGame().getRandom(360f)));
      Vector2 shotPos = getPosition().copy().add(Vector2.polar(SHOT_SPAWN_OFFSET, mAngle));
      mAngle = getAngleTo(targetPos);

      getGame().add(new MortarShot(this, shotPos, targetPos, getDamage(), mExplosionRadius));

      setReloaded(false);
      mRebounding = true;
    }

    if (mRebounding && mSpriteCanon.tick()) {
      mRebounding = false;
    }
  }
예제 #2
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;
  }