Made Camera Paths take the shortest way between two head rotation values (instead of spinning unnecessarily often)
This commit is contained in:
@@ -170,40 +170,42 @@ public class GuiReplayOverlay extends Gui {
|
|||||||
this.drawModalRectWithCustomSizedTexture(ppButtonX, ppButtonY, x, y, 20, 20, 64, 64);
|
this.drawModalRectWithCustomSizedTexture(ppButtonX, ppButtonY, x, y, 20, 20, 64, 64);
|
||||||
|
|
||||||
//When hurrying, no Timeline jumping etc. is possible
|
//When hurrying, no Timeline jumping etc. is possible
|
||||||
if(Mouse.isButtonDown(0) && FMLClientHandler.instance().isGUIOpen(GuiMouseInput.class) && !ReplayMod.replaySender.isHurrying()) { //clicking the Button
|
if(Mouse.isButtonDown(0) && FMLClientHandler.instance().isGUIOpen(GuiMouseInput.class)) { //clicking the Button
|
||||||
speedSlider.mousePressed(mc, mouseX, mouseY);
|
if(!ReplayMod.replaySender.isHurrying()) {
|
||||||
if(!mouseDown) {
|
speedSlider.mousePressed(mc, mouseX, mouseY);
|
||||||
mouseDown = true;
|
if(!mouseDown) {
|
||||||
if(hover) {
|
mouseDown = true;
|
||||||
boolean paused = !ReplayMod.replaySender.paused();
|
if(hover) {
|
||||||
if(paused) {
|
boolean paused = !ReplayMod.replaySender.paused();
|
||||||
ReplayMod.replaySender.setReplaySpeed(0);
|
if(paused) {
|
||||||
} else {
|
ReplayMod.replaySender.setReplaySpeed(0);
|
||||||
ReplayMod.replaySender.setReplaySpeed(speedSlider.getSliderValue());
|
} else {
|
||||||
|
ReplayMod.replaySender.setReplaySpeed(speedSlider.getSliderValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if(mouseX >= exportButtonX && mouseX <= exportButtonX + 20 && mouseY >= exportButtonY && exportButtonY <= exportButtonY + 20) {
|
||||||
|
ReplayHandler.startPath(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if(mouseX >= exportButtonX && mouseX <= exportButtonX + 20 && mouseY >= exportButtonY && exportButtonY <= exportButtonY + 20) {
|
if(mouseX >= timelineX + 4 && mouseX <= width - 18 && mouseY >= 11 && mouseY <= 29) {
|
||||||
ReplayHandler.startPath(true);
|
double tot = (width - 18) - (timelineX + 4);
|
||||||
}
|
double perc = (mouseX - (timelineX + 4)) / tot;
|
||||||
|
double time = perc * (double) ReplayMod.replaySender.replayLength();
|
||||||
|
|
||||||
if(mouseX >= timelineX + 4 && mouseX <= width - 18 && mouseY >= 11 && mouseY <= 29) {
|
if(time < ReplayMod.replaySender.currentTimeStamp()) {
|
||||||
double tot = (width - 18) - (timelineX + 4);
|
mc.displayGuiScreen(null);
|
||||||
double perc = (mouseX - (timelineX + 4)) / tot;
|
}
|
||||||
double time = perc * (double) ReplayMod.replaySender.replayLength();
|
|
||||||
|
|
||||||
if(time < ReplayMod.replaySender.currentTimeStamp()) {
|
CameraEntity cam = ReplayHandler.getCameraEntity();
|
||||||
mc.displayGuiScreen(null);
|
if(cam != null) {
|
||||||
|
ReplayHandler.setLastPosition(new Position(cam.posX, cam.posY, cam.posZ, cam.rotationPitch, cam.rotationYaw));
|
||||||
|
} else {
|
||||||
|
ReplayHandler.setLastPosition(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
if((int) time != ReplayMod.replaySender.getDesiredTimestamp())
|
||||||
|
ReplayMod.replaySender.jumpToTime((int) time);
|
||||||
}
|
}
|
||||||
|
|
||||||
CameraEntity cam = ReplayHandler.getCameraEntity();
|
|
||||||
if(cam != null) {
|
|
||||||
ReplayHandler.setLastPosition(new Position(cam.posX, cam.posY, cam.posZ, cam.rotationPitch, cam.rotationYaw));
|
|
||||||
} else {
|
|
||||||
ReplayHandler.setLastPosition(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
if((int) time != ReplayMod.replaySender.getDesiredTimestamp())
|
|
||||||
ReplayMod.replaySender.jumpToTime((int) time);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -658,7 +660,7 @@ public class GuiReplayOverlay extends Gui {
|
|||||||
private void addPlaceKeyframe() {
|
private void addPlaceKeyframe() {
|
||||||
Entity cam = mc.getRenderViewEntity();
|
Entity cam = mc.getRenderViewEntity();
|
||||||
if(cam == null) return;
|
if(cam == null) return;
|
||||||
ReplayHandler.addKeyframe(new PositionKeyframe(ReplayHandler.getRealTimelineCursor(), new Position(cam.posX, cam.posY, cam.posZ, cam.rotationPitch, cam.rotationYaw, ReplayHandler.getCameraTilt())));
|
ReplayHandler.addKeyframe(new PositionKeyframe(ReplayHandler.getRealTimelineCursor(), new Position(cam.posX, cam.posY, cam.posZ, cam.rotationPitch, cam.rotationYaw % 360, ReplayHandler.getCameraTilt())));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addTimeKeyframe() {
|
private void addTimeKeyframe() {
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import org.apache.commons.lang3.builder.HashCodeBuilder;
|
|||||||
|
|
||||||
public class PositionKeyframe extends Keyframe {
|
public class PositionKeyframe extends Keyframe {
|
||||||
|
|
||||||
private final Position position;
|
private Position position;
|
||||||
|
|
||||||
public PositionKeyframe(int realTime, Position position) {
|
public PositionKeyframe(int realTime, Position position) {
|
||||||
super(realTime);
|
super(realTime);
|
||||||
@@ -15,6 +15,8 @@ public class PositionKeyframe extends Keyframe {
|
|||||||
return position;
|
return position;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setPosition(Position position) { this.position = position; }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(Object o2) {
|
public boolean equals(Object o2) {
|
||||||
if(o2 == null) return false;
|
if(o2 == null) return false;
|
||||||
|
|||||||
@@ -123,6 +123,30 @@ public class ReplayHandler {
|
|||||||
public static void addKeyframe(Keyframe keyframe) {
|
public static void addKeyframe(Keyframe keyframe) {
|
||||||
keyframes.add(keyframe);
|
keyframes.add(keyframe);
|
||||||
selectKeyframe(keyframe);
|
selectKeyframe(keyframe);
|
||||||
|
|
||||||
|
|
||||||
|
if(keyframe instanceof PositionKeyframe) {
|
||||||
|
Float a = null;
|
||||||
|
Float b;
|
||||||
|
|
||||||
|
for(Keyframe kf : keyframes) {
|
||||||
|
if(!(kf instanceof PositionKeyframe)) continue;
|
||||||
|
PositionKeyframe pkf = (PositionKeyframe)kf;
|
||||||
|
Position pos = pkf.getPosition();
|
||||||
|
b = pos.getYaw() % 360;
|
||||||
|
System.out.println(a+" "+b);
|
||||||
|
if(a != null) {
|
||||||
|
float diff = b-a;
|
||||||
|
if(Math.abs(diff) > 180) {
|
||||||
|
b = a - (360 - diff) % 360;
|
||||||
|
System.out.println(b);
|
||||||
|
pos.setYaw(b);
|
||||||
|
pkf.setPosition(pos);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
a = b;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void removeKeyframe(Keyframe keyframe) {
|
public static void removeKeyframe(Keyframe keyframe) {
|
||||||
|
|||||||
Reference in New Issue
Block a user