添加飞行载具自由视角功能
This commit is contained in:
parent
e6dd9a56fb
commit
e23b04aeba
12 changed files with 49 additions and 58 deletions
|
@ -793,4 +793,8 @@ public class Ah6Entity extends ContainerMobileEntity implements GeoEntity, IHeli
|
||||||
public ResourceLocation getVehicleIcon() {
|
public ResourceLocation getVehicleIcon() {
|
||||||
return ModUtils.loc("textures/vehicle_icon/ah_6_icon.png");
|
return ModUtils.loc("textures/vehicle_icon/ah_6_icon.png");
|
||||||
}
|
}
|
||||||
|
@Override
|
||||||
|
public boolean allowFreeCam() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,10 +50,6 @@ public class MobileVehicleEntity extends EnergyVehicleEntity {
|
||||||
public boolean upInputDown;
|
public boolean upInputDown;
|
||||||
public boolean downInputDown;
|
public boolean downInputDown;
|
||||||
public boolean decoyInputDown;
|
public boolean decoyInputDown;
|
||||||
public boolean leftInputDownMouse;
|
|
||||||
public boolean rightInputDownMouse;
|
|
||||||
public boolean upInputDownMouse;
|
|
||||||
public boolean downInputDownMouse;
|
|
||||||
public double lastTickSpeed;
|
public double lastTickSpeed;
|
||||||
public double lastTickVerticalSpeed;
|
public double lastTickVerticalSpeed;
|
||||||
public int collisionCoolDown;
|
public int collisionCoolDown;
|
||||||
|
|
|
@ -372,4 +372,9 @@ public class Tom6Entity extends MobileVehicleEntity implements GeoEntity {
|
||||||
public ResourceLocation getVehicleIcon() {
|
public ResourceLocation getVehicleIcon() {
|
||||||
return ModUtils.loc("textures/vehicle_icon/tom_6_icon.png");
|
return ModUtils.loc("textures/vehicle_icon/tom_6_icon.png");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean allowFreeCam() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -457,4 +457,8 @@ public class VehicleEntity extends Entity {
|
||||||
public ResourceLocation getVehicleIcon() {
|
public ResourceLocation getVehicleIcon() {
|
||||||
return ModUtils.loc("textures/gun_icon/default_icon.png");
|
return ModUtils.loc("textures/gun_icon/default_icon.png");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean allowFreeCam() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -154,6 +154,7 @@ public class ClientEventHandler {
|
||||||
|
|
||||||
public static CameraType lastCameraType;
|
public static CameraType lastCameraType;
|
||||||
|
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void handleWeaponTurn(RenderHandEvent event) {
|
public static void handleWeaponTurn(RenderHandEvent event) {
|
||||||
LocalPlayer player = Minecraft.getInstance().player;
|
LocalPlayer player = Minecraft.getInstance().player;
|
||||||
|
@ -178,6 +179,10 @@ public class ClientEventHandler {
|
||||||
return !mc.isWindowActive();
|
return !mc.isWindowActive();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isFreeCam(Player player) {
|
||||||
|
return player.getVehicle() instanceof VehicleEntity vehicle && vehicle.allowFreeCam() && Minecraft.getInstance().options.getCameraType() == CameraType.FIRST_PERSON && ModKeyMappings.FREE_CAMERA.isDown();
|
||||||
|
}
|
||||||
|
|
||||||
private static boolean revolverPre() {
|
private static boolean revolverPre() {
|
||||||
Player player = Minecraft.getInstance().player;
|
Player player = Minecraft.getInstance().player;
|
||||||
if (player == null) return false;
|
if (player == null) return false;
|
||||||
|
@ -846,8 +851,9 @@ public class ClientEventHandler {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (player != null && player.getVehicle() instanceof IArmedVehicleEntity iArmedVehicle && iArmedVehicle.banHand(player))
|
if (player != null && player.getVehicle() instanceof IArmedVehicleEntity iArmedVehicle && iArmedVehicle.banHand(player)) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (level != null && stack.is(ModTags.Items.GUN)) {
|
if (level != null && stack.is(ModTags.Items.GUN)) {
|
||||||
handleWeaponSway(living);
|
handleWeaponSway(living);
|
||||||
|
|
|
@ -1,17 +1,17 @@
|
||||||
package com.atsuishio.superbwarfare.event;
|
package com.atsuishio.superbwarfare.event;
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.ModUtils;
|
|
||||||
import com.atsuishio.superbwarfare.client.MouseMovementHandler;
|
import com.atsuishio.superbwarfare.client.MouseMovementHandler;
|
||||||
import com.atsuishio.superbwarfare.network.message.VehicleMovementMessage;
|
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.player.LocalPlayer;
|
import net.minecraft.client.player.LocalPlayer;
|
||||||
import net.minecraft.util.Mth;
|
import net.minecraft.util.Mth;
|
||||||
import net.minecraft.world.phys.Vec2;
|
import net.minecraft.world.phys.Vec2;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
import net.minecraftforge.api.distmarker.Dist;
|
||||||
import net.minecraftforge.event.TickEvent;
|
import net.minecraftforge.client.event.ViewportEvent;
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
import net.minecraftforge.fml.common.Mod;
|
import net.minecraftforge.fml.common.Mod;
|
||||||
|
|
||||||
|
import static com.atsuishio.superbwarfare.event.ClientEventHandler.isFreeCam;
|
||||||
|
|
||||||
@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.FORGE, value = Dist.CLIENT)
|
@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.FORGE, value = Dist.CLIENT)
|
||||||
public class ClientMouseHandler {
|
public class ClientMouseHandler {
|
||||||
public static Vec2 posO = new Vec2(0 , 0);
|
public static Vec2 posO = new Vec2(0 , 0);
|
||||||
|
@ -22,6 +22,9 @@ public class ClientMouseHandler {
|
||||||
public static double PosY = 0;
|
public static double PosY = 0;
|
||||||
public static double lerpPosY = 0;
|
public static double lerpPosY = 0;
|
||||||
|
|
||||||
|
public static double freeCameraPitch = 0;
|
||||||
|
public static double freeCameraYaw = 0;
|
||||||
|
|
||||||
private static boolean notInGame() {
|
private static boolean notInGame() {
|
||||||
Minecraft mc = Minecraft.getInstance();
|
Minecraft mc = Minecraft.getInstance();
|
||||||
if (mc.player == null) return true;
|
if (mc.player == null) return true;
|
||||||
|
@ -32,7 +35,7 @@ public class ClientMouseHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void handleClientTick(TickEvent.ClientTickEvent event) {
|
public static void handleClientTick(ViewportEvent.ComputeCameraAngles event) {
|
||||||
LocalPlayer player = Minecraft.getInstance().player;
|
LocalPlayer player = Minecraft.getInstance().player;
|
||||||
|
|
||||||
if (player == null) {
|
if (player == null) {
|
||||||
|
@ -53,48 +56,24 @@ public class ClientMouseHandler {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
lerpPosX = Mth.clamp(Mth.lerp(0.1,lerpPosX,0), -0.11, 0.11);
|
lerpPosX = Mth.clamp(Mth.lerp(event.getPartialTick(),lerpPosX,0), -1, 1);
|
||||||
lerpPosY = Mth.clamp(Mth.lerp(0.1,lerpPosY,0), -0.11, 0.11);
|
lerpPosY = Mth.clamp(Mth.lerp(event.getPartialTick(),lerpPosY,0), -1, 1);
|
||||||
|
|
||||||
int typeX = 0;
|
|
||||||
|
|
||||||
if (lerpPosX < -0.05) {
|
if (isFreeCam(player)) {
|
||||||
typeX = -1;
|
freeCameraYaw = Mth.clamp(freeCameraYaw + 4 * lerpPosX, -100 , 100);
|
||||||
} else if (lerpPosX > 0.05) {
|
freeCameraPitch = Mth.clamp(freeCameraPitch + 4 * lerpPosY, -90 , 90);
|
||||||
typeX = 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int typeY = 0;
|
float yaw = event.getYaw();
|
||||||
|
float pitch = event.getPitch();
|
||||||
|
|
||||||
if (lerpPosY < -0.05) {
|
event.setYaw((float) (yaw + freeCameraYaw));
|
||||||
typeY = 1;
|
event.setPitch((float) (pitch + freeCameraPitch));
|
||||||
} else if (lerpPosY > 0.05) {
|
|
||||||
typeY = -1;
|
if (!isFreeCam(player)) {
|
||||||
|
freeCameraYaw *= 0.8;
|
||||||
|
freeCameraPitch *= 0.8;
|
||||||
}
|
}
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,6 +54,7 @@ public class ModKeyMappings {
|
||||||
public static final KeyMapping HOLD_ZOOM = new KeyMapping("key.superbwarfare.hold_zoom", InputConstants.Type.MOUSE, GLFW.GLFW_MOUSE_BUTTON_RIGHT, "key.categories.superbwarfare");
|
public static final KeyMapping HOLD_ZOOM = new KeyMapping("key.superbwarfare.hold_zoom", InputConstants.Type.MOUSE, GLFW.GLFW_MOUSE_BUTTON_RIGHT, "key.categories.superbwarfare");
|
||||||
public static final KeyMapping SWITCH_ZOOM = new KeyMapping("key.superbwarfare.switch_zoom", GLFW.GLFW_KEY_UNKNOWN, "key.categories.superbwarfare");
|
public static final KeyMapping SWITCH_ZOOM = new KeyMapping("key.superbwarfare.switch_zoom", GLFW.GLFW_KEY_UNKNOWN, "key.categories.superbwarfare");
|
||||||
public static final KeyMapping RELEASE_DECOY = new KeyMapping("key.superbwarfare.release_decoy", GLFW.GLFW_KEY_X, "key.categories.superbwarfare");
|
public static final KeyMapping RELEASE_DECOY = new KeyMapping("key.superbwarfare.release_decoy", GLFW.GLFW_KEY_X, "key.categories.superbwarfare");
|
||||||
|
public static final KeyMapping FREE_CAMERA = new KeyMapping("key.superbwarfare.free_camera", GLFW.GLFW_KEY_C, "key.categories.superbwarfare");
|
||||||
public static final KeyMapping MELEE = new KeyMapping("key.superbwarfare.melee", GLFW.GLFW_KEY_V, "key.categories.superbwarfare");
|
public static final KeyMapping MELEE = new KeyMapping("key.superbwarfare.melee", GLFW.GLFW_KEY_V, "key.categories.superbwarfare");
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
|
@ -77,6 +78,7 @@ public class ModKeyMappings {
|
||||||
event.register(SWITCH_ZOOM);
|
event.register(SWITCH_ZOOM);
|
||||||
event.register(RELEASE_DECOY);
|
event.register(RELEASE_DECOY);
|
||||||
event.register(MELEE);
|
event.register(MELEE);
|
||||||
|
event.register(FREE_CAMERA);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Mod.EventBusSubscriber(value = Dist.CLIENT)
|
@Mod.EventBusSubscriber(value = Dist.CLIENT)
|
||||||
|
|
|
@ -19,6 +19,7 @@ import org.spongepowered.asm.mixin.injection.At;
|
||||||
import org.spongepowered.asm.mixin.injection.ModifyVariable;
|
import org.spongepowered.asm.mixin.injection.ModifyVariable;
|
||||||
|
|
||||||
import static com.atsuishio.superbwarfare.event.ClientEventHandler.droneFovLerp;
|
import static com.atsuishio.superbwarfare.event.ClientEventHandler.droneFovLerp;
|
||||||
|
import static com.atsuishio.superbwarfare.event.ClientEventHandler.isFreeCam;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author: MrCrayfish
|
* Author: MrCrayfish
|
||||||
|
@ -42,6 +43,10 @@ public class MouseHandlerMixin {
|
||||||
|
|
||||||
ItemStack stack = mc.player.getMainHandItem();
|
ItemStack stack = mc.player.getMainHandItem();
|
||||||
|
|
||||||
|
if (isFreeCam(player)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (player.getVehicle() instanceof ICannonEntity) {
|
if (player.getVehicle() instanceof ICannonEntity) {
|
||||||
return ClientEventHandler.zoomVehicle ? 0.15 : 0.3;
|
return ClientEventHandler.zoomVehicle ? 0.15 : 0.3;
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,18 +60,6 @@ public class VehicleMovementMessage {
|
||||||
case 6:
|
case 6:
|
||||||
mobileVehicleEntity.decoyInputDown = message.clicked;
|
mobileVehicleEntity.decoyInputDown = message.clicked;
|
||||||
break;
|
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")) {
|
} 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"));
|
var drone = EntityFindUtil.findDrone(player.level(), stack.getOrCreateTag().getString("LinkedDrone"));
|
||||||
|
|
|
@ -427,6 +427,7 @@
|
||||||
"key.superbwarfare.edit_grip": "Switch Grip",
|
"key.superbwarfare.edit_grip": "Switch Grip",
|
||||||
"key.superbwarfare.release_decoy": "Release Decoy",
|
"key.superbwarfare.release_decoy": "Release Decoy",
|
||||||
"key.superbwarfare.melee": "Melee",
|
"key.superbwarfare.melee": "Melee",
|
||||||
|
"key.superbwarfare.free_camera": "Vehicle Free Camera",
|
||||||
"key.superbwarfare.launch": "Launch",
|
"key.superbwarfare.launch": "Launch",
|
||||||
|
|
||||||
"effect.superbwarfare.shock": "Shock",
|
"effect.superbwarfare.shock": "Shock",
|
||||||
|
|
|
@ -425,6 +425,7 @@
|
||||||
"key.superbwarfare.edit_grip": "切换握把",
|
"key.superbwarfare.edit_grip": "切换握把",
|
||||||
"key.superbwarfare.release_decoy": "释放诱饵",
|
"key.superbwarfare.release_decoy": "释放诱饵",
|
||||||
"key.superbwarfare.melee": "枪械近战",
|
"key.superbwarfare.melee": "枪械近战",
|
||||||
|
"key.superbwarfare.free_camera": "载具自由视角",
|
||||||
"key.superbwarfare.launch": "发射",
|
"key.superbwarfare.launch": "发射",
|
||||||
|
|
||||||
"effect.superbwarfare.shock": "电击",
|
"effect.superbwarfare.shock": "电击",
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
Loading…
Add table
Reference in a new issue