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