优化飞控
This commit is contained in:
parent
0b983f8b1d
commit
91067cc152
5 changed files with 110 additions and 10 deletions
|
@ -40,6 +40,10 @@ public class MobileVehicleEntity extends EnergyVehicleEntity {
|
|||
public boolean upInputDown;
|
||||
public boolean downInputDown;
|
||||
public boolean decoyInputDown;
|
||||
public boolean leftInputDownMouse;
|
||||
public boolean rightInputDownMouse;
|
||||
public boolean upInputDownMouse;
|
||||
public boolean downInputDownMouse;
|
||||
public double lastTickSpeed;
|
||||
public double lastTickVerticalSpeed;
|
||||
public int collisionCoolDown;
|
||||
|
|
|
@ -190,7 +190,7 @@ public class Tom6Entity extends MobileVehicleEntity implements GeoEntity {
|
|||
setXRot(getXRot() * 0.7f);
|
||||
setZRot(getRoll() * 0.7f);
|
||||
} else {
|
||||
setZRot(getRoll() * 0.994f);
|
||||
// setZRot(getRoll() * 0.994f);
|
||||
}
|
||||
|
||||
// if (this.forwardInputDown || this.backInputDown) {
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
package com.atsuishio.superbwarfare.event;
|
||||
|
||||
import com.atsuishio.superbwarfare.ModUtils;
|
||||
import com.atsuishio.superbwarfare.client.MouseMovementHandler;
|
||||
import com.atsuishio.superbwarfare.network.message.VehicleMovementMessage;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.player.LocalPlayer;
|
||||
import net.minecraft.util.Mth;
|
||||
|
@ -51,9 +53,48 @@ public class ClientMouseHandler {
|
|||
}
|
||||
}
|
||||
|
||||
lerpPosX = Mth.lerp(0.1,lerpPosX,0);
|
||||
lerpPosY = Mth.lerp(0.1,lerpPosY,0);
|
||||
lerpPosX = Mth.clamp(Mth.lerp(0.1,lerpPosX,0), -0.11, 0.11);
|
||||
lerpPosY = Mth.clamp(Mth.lerp(0.1,lerpPosY,0), -0.11, 0.11);
|
||||
|
||||
// player.displayClientMessage(Component.literal(new DecimalFormat("##.##").format(lerpPosX)), true);
|
||||
int typeX = 0;
|
||||
|
||||
if (lerpPosX < -0.05) {
|
||||
typeX = -1;
|
||||
} else if (lerpPosX > 0.05) {
|
||||
typeX = 1;
|
||||
}
|
||||
|
||||
int typeY = 0;
|
||||
|
||||
if (lerpPosY < -0.05) {
|
||||
typeY = 1;
|
||||
} else if (lerpPosY > 0.05) {
|
||||
typeY = -1;
|
||||
}
|
||||
|
||||
if (typeX == -1) {
|
||||
ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(7, true));
|
||||
ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(8, false));
|
||||
} else if (typeX == 1) {
|
||||
ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(7, false));
|
||||
ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(8, true));
|
||||
} else {
|
||||
ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(7, false));
|
||||
ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(8, false));
|
||||
}
|
||||
|
||||
|
||||
if (typeY == 1) {
|
||||
ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(9, true));
|
||||
ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(10, false));
|
||||
} else if (typeY == -1) {
|
||||
ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(9, false));
|
||||
ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(10, true));
|
||||
} else {
|
||||
ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(9, false));
|
||||
ModUtils.PACKET_HANDLER.sendToServer(new VehicleMovementMessage(10, false));
|
||||
}
|
||||
|
||||
// player.displayClientMessage(Component.literal(typeX + " " + typeY), true);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,10 +1,7 @@
|
|||
package com.atsuishio.superbwarfare.mixins;
|
||||
|
||||
import com.atsuishio.superbwarfare.config.client.VehicleControlConfig;
|
||||
import com.atsuishio.superbwarfare.entity.vehicle.Ah6Entity;
|
||||
import com.atsuishio.superbwarfare.entity.vehicle.ICannonEntity;
|
||||
import com.atsuishio.superbwarfare.entity.vehicle.Lav150Entity;
|
||||
import com.atsuishio.superbwarfare.entity.vehicle.Tom6Entity;
|
||||
import com.atsuishio.superbwarfare.entity.vehicle.*;
|
||||
import com.atsuishio.superbwarfare.event.ClientEventHandler;
|
||||
import com.atsuishio.superbwarfare.init.ModItems;
|
||||
import com.atsuishio.superbwarfare.init.ModMobEffects;
|
||||
|
@ -29,6 +26,9 @@ import static com.atsuishio.superbwarfare.event.ClientEventHandler.droneFovLerp;
|
|||
@Mixin(MouseHandler.class)
|
||||
public class MouseHandlerMixin {
|
||||
|
||||
private static double x;
|
||||
private static double y;
|
||||
|
||||
@ModifyVariable(method = "turnPlayer()V", at = @At(value = "STORE", opcode = Opcodes.DSTORE), ordinal = 2)
|
||||
private double sensitivity(double original) {
|
||||
Minecraft mc = Minecraft.getInstance();
|
||||
|
@ -80,12 +80,55 @@ public class MouseHandlerMixin {
|
|||
if (player == null) return i;
|
||||
|
||||
if (player.getVehicle() instanceof Ah6Entity ah6Entity && ah6Entity.getFirstPassenger() == player) {
|
||||
return VehicleControlConfig.INVERT_AIRCRAFT_CONTROL.get() ? (Mth.abs(ah6Entity.getRoll()) < 90 ? -i : i) : (Mth.abs(ah6Entity.getRoll()) < 90 ? i : -i);
|
||||
return VehicleControlConfig.INVERT_AIRCRAFT_CONTROL.get() ? -i : i;
|
||||
}
|
||||
|
||||
if (player.getVehicle() instanceof Tom6Entity tom6 && tom6.getFirstPassenger() == player) {
|
||||
return VehicleControlConfig.INVERT_AIRCRAFT_CONTROL.get() ? (Mth.abs(tom6.getRoll()) < 90 ? -i : i) : (Mth.abs(tom6.getRoll()) < 90 ? i : -i);
|
||||
return VehicleControlConfig.INVERT_AIRCRAFT_CONTROL.get() ? -i : i;
|
||||
}
|
||||
return i;
|
||||
}
|
||||
|
||||
@ModifyVariable(method = "turnPlayer()V", at = @At(value = "STORE", opcode = Opcodes.DSTORE), ordinal = 5)
|
||||
private double modifyD2(double d) {
|
||||
Minecraft mc = Minecraft.getInstance();
|
||||
Player player = mc.player;
|
||||
|
||||
if (player == null) return d;
|
||||
|
||||
if (player.getVehicle() instanceof VehicleEntity vehicle) {
|
||||
x = d;
|
||||
|
||||
double i = 0;
|
||||
|
||||
if (vehicle.getRoll() < 0) {
|
||||
i = 1;
|
||||
} else if (vehicle.getRoll() > 0) {
|
||||
i = -1;
|
||||
}
|
||||
|
||||
if (Mth.abs(vehicle.getRoll()) > 90) {
|
||||
i *= (1 - (Mth.abs(vehicle.getRoll()) - 90) / 90);
|
||||
}
|
||||
|
||||
return (1 - (Mth.abs(vehicle.getRoll()) / 90)) * d + ((Mth.abs(vehicle.getRoll()) / 90)) * y * i;
|
||||
}
|
||||
return d;
|
||||
}
|
||||
|
||||
@ModifyVariable(method = "turnPlayer()V", at = @At(value = "STORE", opcode = Opcodes.DSTORE), ordinal = 6)
|
||||
private double modifyD3(double d) {
|
||||
Minecraft mc = Minecraft.getInstance();
|
||||
Player player = mc.player;
|
||||
|
||||
if (player == null) return d;
|
||||
|
||||
if (player.getVehicle() instanceof VehicleEntity vehicle) {
|
||||
y = d;
|
||||
return (1 - (Mth.abs(vehicle.getRoll()) / 90)) * d + ((Mth.abs(vehicle.getRoll()) / 90)) * x * (vehicle.getRoll() < 0 ? -1 : 1);
|
||||
}
|
||||
|
||||
return d;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -60,6 +60,18 @@ public class VehicleMovementMessage {
|
|||
case 6:
|
||||
mobileVehicleEntity.decoyInputDown = message.clicked;
|
||||
break;
|
||||
case 7:
|
||||
mobileVehicleEntity.leftInputDownMouse = message.clicked;
|
||||
break;
|
||||
case 8:
|
||||
mobileVehicleEntity.rightInputDownMouse = message.clicked;
|
||||
break;
|
||||
case 9:
|
||||
mobileVehicleEntity.downInputDownMouse = message.clicked;
|
||||
break;
|
||||
case 10:
|
||||
mobileVehicleEntity.upInputDownMouse = message.clicked;
|
||||
break;
|
||||
}
|
||||
} else if (stack.is(ModItems.MONITOR.get()) && stack.getOrCreateTag().getBoolean("Using") && stack.getOrCreateTag().getBoolean("Linked")) {
|
||||
var drone = EntityFindUtil.findDrone(player.level(), stack.getOrCreateTag().getString("LinkedDrone"));
|
||||
|
|
Loading…
Add table
Reference in a new issue