package net.scapeemulator.game.model.player;
import net.scapeemulator.game.model.Position;
import net.scapeemulator.game.model.mob.Direction;
import net.scapeemulator.game.util.math.ClientFrameTickConversion;
public class ForcedMovement {
private int direction;
private Position firstPosition;
private Position secondPosition;
private int midDuration;
private int duration;
private int durationTicks;
private ForcedMovement() {
}
// TODO createExact using exact positions instead of relative
public static ForcedMovement createRelative(Player player, int xOffset1, int yOffset1, int midDuration, int xOffset2, int yOffset2, int totalDuration) {
ForcedMovement fm = new ForcedMovement();
fm.firstPosition = player.getPosition().copy(xOffset1, yOffset1);
fm.secondPosition = player.getPosition().copy(xOffset2, yOffset2);
fm.midDuration = ClientFrameTickConversion.ticksToFrames(midDuration);
fm.duration = ClientFrameTickConversion.ticksToFrames(totalDuration);
fm.durationTicks = totalDuration;
return fm;
}
public void setDirection(Direction dir) {
switch (dir) {
case NORTH:
direction = 0;
break;
case SOUTH:
direction = 2;
break;
case EAST:
direction = 1;
break;
case WEST:
direction = 3;
break;
default:
throw new IllegalArgumentException("Only N/S/E/W directions allowed for force movement.");
}
}
public int getDirection() {
return direction;
}
public Position getFirstPosition() {
return firstPosition;
}
public Position getSecondPosition() {
return secondPosition;
}
public int getMidDuration() {
return midDuration;
}
public int getDuration() {
return duration;
}
public int getDurationTicks() {
return durationTicks;
}
}