Skip to content

Commit

Permalink
[VirtualInput] Added tests for VirtualCameraAngleInput
Browse files Browse the repository at this point in the history
  • Loading branch information
ScribbleTAS committed Feb 22, 2024
1 parent 8dde420 commit 7006c51
Show file tree
Hide file tree
Showing 3 changed files with 112 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ public void playback_injectAtStartSection(float partialTicks, long nanoTime, Cal
}
}

@Redirect(method = "updateCameraAndRender", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/EntityPlayerSP;turn(FF)V"))
@Redirect(method = "updateCameraAndRender", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/entity/EntityPlayerSP;turn(FF)V"))
public void playback_stopVanilla(EntityPlayerSP player, float deltaYaw, float deltaPitch){
if(TASmodClient.tickratechanger.ticksPerSecond == 0){
player.turn(deltaYaw, deltaPitch);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -633,15 +633,15 @@ public Float getCurrentYaw() {
* @return A triple of pitch, yaw and roll, as left, middle and right respectively
*/
public Triple<Float, Float, Float> getInterpolatedState(float partialTick, float pitch, float yaw, boolean enable) {
if (!enable) {
if (!enable) { // If interpolation is not enabled, return the values of nextCameraAngle
return Triple.of(nextCameraAngle.getPitch() == null ? pitch : nextCameraAngle.getPitch(), nextCameraAngle.getYaw() == null ? pitch : nextCameraAngle.getYaw() + 180, 0f);
}

float interpolatedPitch = 0f;
float interpolatedYaw = 0f;

if (cameraAngleInterpolationStates.size() == 1) { // If no interpolation data was specified, interpolate over 2 values
interpolatedPitch = (float) MathHelper.clampedLerp(currentCameraAngle.getPitch(), cameraAngleInterpolationStates.get(0).getPitch(), partialTick);
interpolatedPitch = (float) MathHelper.clampedLerp(cameraAngleInterpolationStates.get(0).getPitch(), currentCameraAngle.getPitch(), partialTick);
interpolatedYaw = (float) MathHelper.clampedLerp(currentCameraAngle.getYaw(), cameraAngleInterpolationStates.get(0).getYaw() + 180, partialTick);
} else {

Expand Down
113 changes: 109 additions & 4 deletions src/test/java/tasmod/virtual/VirtualInputTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;

import org.apache.commons.lang3.tuple.Triple;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;

import com.minecrafttas.tasmod.virtual.VirtualCameraAngle;
Expand Down Expand Up @@ -134,7 +136,7 @@ void testKeyboardAddPresses() {

// Read out values from the subtick
assertEquals(VirtualKey.S.getKeycode(), virtual.KEYBOARD.getEventKeyboardKey());
assertEquals(true, virtual.KEYBOARD.getEventKeyboardState());
assertTrue(virtual.KEYBOARD.getEventKeyboardState());
assertEquals('s', virtual.KEYBOARD.getEventKeyboardCharacter());

// Check if subtick list is empty
Expand Down Expand Up @@ -241,10 +243,113 @@ void testMouseRemovePresses() {
}

/**
* Test camera angle
* Test camera angle on tick
*/
@Test
void testCameraAngles() {

void testCurrentCameraAngles() {
VirtualInput virtual = new VirtualInput(LOGGER);

virtual.CAMERA_ANGLE.setCamera(0f, 0f);
virtual.CAMERA_ANGLE.updateNextCameraAngle(10f, 20f);
virtual.CAMERA_ANGLE.updateNextCameraAngle(20f, 30f);

virtual.CAMERA_ANGLE.nextCameraTick();

assertEquals(30f, virtual.CAMERA_ANGLE.getCurrentPitch());
assertEquals(50f, virtual.CAMERA_ANGLE.getCurrentYaw());
}

/**
* Test interpolation but with no playback running. Returns the valuies of nextCameraAngle
*/
@Test
void testInterpolationDisabled(){
VirtualInput virtual = new VirtualInput(LOGGER);

virtual.CAMERA_ANGLE.setCamera(0f, 0f);
virtual.CAMERA_ANGLE.updateNextCameraAngle(10f, 20f);
virtual.CAMERA_ANGLE.updateNextCameraAngle(20f, 30f);

Triple<Float, Float, Float> expected = Triple.of(30f, 50f+180f, 0f);
Triple<Float, Float, Float> actual = virtual.CAMERA_ANGLE.getInterpolatedState(0f, 1f, 2f, false);

assertEquals(expected, actual);
}

/**
* Test interpolation but with playback running.
*/
@Test
void testInterpolationEnabled(){
VirtualInput virtual = new VirtualInput(LOGGER);

virtual.CAMERA_ANGLE.setCamera(0f, 0f);
virtual.CAMERA_ANGLE.updateNextCameraAngle(0f, 0f);
virtual.CAMERA_ANGLE.updateNextCameraAngle(10f, 10f);
virtual.CAMERA_ANGLE.updateNextCameraAngle(10f, 10f);
virtual.CAMERA_ANGLE.updateNextCameraAngle(10f, 10f);
virtual.CAMERA_ANGLE.updateNextCameraAngle(10f, 10f);
virtual.CAMERA_ANGLE.updateNextCameraAngle(10f, 10f);
virtual.CAMERA_ANGLE.updateNextCameraAngle(10f, 10f);
virtual.CAMERA_ANGLE.updateNextCameraAngle(10f, 10f);
virtual.CAMERA_ANGLE.updateNextCameraAngle(10f, 10f);
virtual.CAMERA_ANGLE.updateNextCameraAngle(10f, 10f);

virtual.CAMERA_ANGLE.nextCameraTick();

Triple<Float, Float, Float> expected = Triple.of(0f, 0f, 0f);
Triple<Float, Float, Float> actual = virtual.CAMERA_ANGLE.getInterpolatedState(0f, 0f, 0f, true);
assertEquals(expected, actual);

expected = Triple.of(10f, 10f, 0f);
actual = virtual.CAMERA_ANGLE.getInterpolatedState(0.1f, 0f, 0f, true);
assertEquals(expected, actual);

expected = Triple.of(10f, 10f, 0f);
actual = virtual.CAMERA_ANGLE.getInterpolatedState(0.199f, 0f, 0f, true);
assertEquals(expected, actual);

expected = Triple.of(20f, 20f, 0f);
actual = virtual.CAMERA_ANGLE.getInterpolatedState(0.2f, 0f, 0f, true);
assertEquals(expected, actual);

expected = Triple.of(30f, 30f, 0f);
actual = virtual.CAMERA_ANGLE.getInterpolatedState(0.3f, 0f, 0f, true);
assertEquals(expected, actual);

expected = Triple.of(40f, 40f, 0f);
actual = virtual.CAMERA_ANGLE.getInterpolatedState(0.4f, 0f, 0f, true);
assertEquals(expected, actual);

expected = Triple.of(50f, 50f, 0f);
actual = virtual.CAMERA_ANGLE.getInterpolatedState(0.5f, 0f, 0f, true);
assertEquals(expected, actual);

expected = Triple.of(60f, 60f, 0f);
actual = virtual.CAMERA_ANGLE.getInterpolatedState(0.6f, 0f, 0f, true);
assertEquals(expected, actual);
}

/**
* Test interpolation but with playback running, but there are only 2 values
*/
@Test
@Disabled
void testInterpolationEnabledLegacy(){
VirtualInput virtual = new VirtualInput(LOGGER);

virtual.CAMERA_ANGLE.setCamera(0f, 0f);

virtual.CAMERA_ANGLE.updateNextCameraAngle(10f, 10f);

virtual.CAMERA_ANGLE.nextCameraTick();

Triple<Float, Float, Float> expected = Triple.of(0f, 0f, 0f);
Triple<Float, Float, Float> actual = virtual.CAMERA_ANGLE.getInterpolatedState(0f, 0f, 0f, true);
assertEquals(expected, actual);

expected = Triple.of(10f, 10f, 0f);
actual = virtual.CAMERA_ANGLE.getInterpolatedState(0.3f, 0f, 0f, true);
assertEquals(expected, actual);
}
}

0 comments on commit 7006c51

Please sign in to comment.