优化a10和小鸟的瞄准
This commit is contained in:
parent
6633cc7723
commit
74ead3d8b4
6 changed files with 63 additions and 54 deletions
|
@ -93,7 +93,7 @@ public class AircraftOverlay implements LayeredDraw.Layer {
|
|||
Vec3 pos = cameraPos.add(mobileVehicle.getViewVector(partialTick).scale(192));
|
||||
Vec3 lookAngle = lookVec.normalize().scale(pos.distanceTo(cameraPos) * (1 - 1.0 / zoom));
|
||||
|
||||
Vec3 posCross = cameraPos.add(aircraftEntity.shootVec(partialTick).scale(192));
|
||||
Vec3 posCross = aircraftEntity.shootPos(partialTick).add(aircraftEntity.shootVec(partialTick).scale(192));
|
||||
Vec3 lookAngle2 = lookVec.normalize().scale(posCross.distanceTo(cameraPos) * (1 - 1.0 / zoom));
|
||||
|
||||
var cPos = cameraPos.add(lookAngle);
|
||||
|
@ -221,8 +221,8 @@ public class AircraftOverlay implements LayeredDraw.Layer {
|
|||
// 准星
|
||||
if (pCross != null) {
|
||||
poseStack.pushPose();
|
||||
float x = (float) pCross.x + (zoomVehicle ? 8 * (float) (Minecraft.getInstance().options.fov().get() / 70) : 3);
|
||||
float y = (float) pCross.y + (zoomVehicle ? 25 * (float) (Minecraft.getInstance().options.fov().get() / 70) : 5);
|
||||
float x = (float) pCross.x;
|
||||
float y = (float) pCross.y + (zoomVehicle ? 15 * (float) (Minecraft.getInstance().options.fov().get() / 70) : 5);
|
||||
|
||||
if (mc.options.getCameraType() == CameraType.FIRST_PERSON && !(mobileVehicle instanceof A10Entity a10Entity && a10Entity.getWeaponIndex(0) == 3)) {
|
||||
RenderSystem.disableDepthTest();
|
||||
|
|
|
@ -6,7 +6,6 @@ import com.atsuishio.superbwarfare.client.RenderHelper;
|
|||
import com.atsuishio.superbwarfare.entity.vehicle.Ah6Entity;
|
||||
import com.atsuishio.superbwarfare.entity.vehicle.base.HelicopterEntity;
|
||||
import com.atsuishio.superbwarfare.entity.vehicle.base.MobileVehicleEntity;
|
||||
import com.atsuishio.superbwarfare.entity.vehicle.base.VehicleEntity;
|
||||
import com.atsuishio.superbwarfare.entity.vehicle.base.WeaponVehicleEntity;
|
||||
import com.atsuishio.superbwarfare.event.ClientEventHandler;
|
||||
import com.atsuishio.superbwarfare.tools.FormatTool;
|
||||
|
@ -32,8 +31,6 @@ import net.minecraft.world.phys.Vec3;
|
|||
import net.neoforged.api.distmarker.Dist;
|
||||
import net.neoforged.api.distmarker.OnlyIn;
|
||||
import org.joml.Math;
|
||||
import org.joml.Matrix4f;
|
||||
import org.joml.Vector4f;
|
||||
|
||||
import javax.annotation.ParametersAreNonnullByDefault;
|
||||
|
||||
|
@ -154,22 +151,17 @@ public class HelicopterHudOverlay implements LayeredDraw.Layer {
|
|||
|
||||
}
|
||||
|
||||
Matrix4f transform = getVehicleTransform(mobileVehicle, partialTick);
|
||||
float x0 = 0f;
|
||||
float y0 = 0.65f;
|
||||
float z0 = 0.8f;
|
||||
|
||||
Vector4f worldPosition = transformPosition(transform, x0, y0, z0);
|
||||
|
||||
float fovAdjust2 = (float) (Minecraft.getInstance().options.fov().get() / 30) - 1;
|
||||
double zoom = 0.96 * 3 + 0.06 * fovAdjust2;
|
||||
|
||||
Vec3 pos = new Vec3(worldPosition.x, worldPosition.y, worldPosition.z).add(mobileVehicle.getViewVector(partialTick).scale(192));
|
||||
Vec3 lookAngle = mobileVehicle.getViewVector(partialTick).normalize().scale(pos.distanceTo(cameraPos) * (1 - 1.0 / zoom));
|
||||
Vec3 lookVec = new Vec3(camera.getLookVector());
|
||||
Vec3 pos = iHelicopterEntity.shootPos(partialTick).add(iHelicopterEntity.shootVec(partialTick).scale(192));
|
||||
Vec3 lookAngle = lookVec.normalize().scale(pos.distanceTo(cameraPos) * (1 - 1.0 / zoom));
|
||||
|
||||
var cPos = cameraPos.add(lookAngle);
|
||||
|
||||
Vec3 p = RenderHelper.worldToScreen(new Vec3(worldPosition.x, worldPosition.y, worldPosition.z).add(mobileVehicle.getViewVector(partialTick).scale(192)), ClientEventHandler.zoomVehicle ? cPos : cameraPos);
|
||||
Vec3 p = RenderHelper.worldToScreen(iHelicopterEntity.shootPos(partialTick).add(mobileVehicle.getViewVector(partialTick).scale(192)), ClientEventHandler.zoomVehicle ? cPos : cameraPos);
|
||||
|
||||
if (p != null) {
|
||||
poseStack.pushPose();
|
||||
|
@ -225,19 +217,6 @@ public class HelicopterHudOverlay implements LayeredDraw.Layer {
|
|||
preciseBlit(guiGraphics, Mod.loc("textures/screens/helicopter/heli_driver_angle.png"), k + diffY, l + diffX, 0, 0.0F, i, j, i, j);
|
||||
}
|
||||
|
||||
public static Matrix4f getVehicleTransform(VehicleEntity vehicle, float partialTicks) {
|
||||
Matrix4f transform = new Matrix4f();
|
||||
transform.translate((float) Mth.lerp(partialTicks, vehicle.xo, vehicle.getX()), (float) Mth.lerp(partialTicks, vehicle.yo + 1.45, vehicle.getY() + 1.45), (float) Mth.lerp(partialTicks, vehicle.zo, vehicle.getZ()));
|
||||
transform.rotate(Axis.YP.rotationDegrees(-vehicle.getYRot()));
|
||||
transform.rotate(Axis.XP.rotationDegrees(vehicle.getXRot()));
|
||||
transform.rotate(Axis.ZP.rotationDegrees(vehicle.getRoll()));
|
||||
return transform;
|
||||
}
|
||||
|
||||
public static Vector4f transformPosition(Matrix4f transform, float x, float y, float z) {
|
||||
return transform.transform(new Vector4f(x, y, z, 1));
|
||||
}
|
||||
|
||||
public static double length(double x, double y, double z) {
|
||||
return Math.sqrt(x * x + y * y + z * z);
|
||||
}
|
||||
|
|
|
@ -766,7 +766,7 @@ public class A10Entity extends ContainerMobileVehicleEntity implements GeoEntity
|
|||
if (getWeaponIndex(0) == 0) {
|
||||
worldPosition = transformPosition(transform, 0.1321625f, -0.56446875f, 7.85210625f);
|
||||
} else if (getWeaponIndex(0) == 1) {
|
||||
worldPosition = transformPosition(transform, 0f, -1.76f, 1.87f);
|
||||
worldPosition = transformPosition(transform, 0f, -1.443f, 0.13f);
|
||||
} else {
|
||||
worldPosition = transformPosition(transform, 0f, -1.203125f, 0.0625f);
|
||||
}
|
||||
|
@ -783,7 +783,7 @@ public class A10Entity extends ContainerMobileVehicleEntity implements GeoEntity
|
|||
worldPosition2 = transformPosition(transform, 0, 0f, 1);
|
||||
} else {
|
||||
worldPosition = transformPosition(transform, 0, 0, 0);
|
||||
worldPosition2 = transformPosition(transform, 0.007f, -0.03f, 1);
|
||||
worldPosition2 = transformPosition(transform, 0, -0.03f, 1);
|
||||
}
|
||||
return new Vec3(worldPosition.x, worldPosition.y, worldPosition.z).vectorTo(new Vec3(worldPosition2.x, worldPosition2.y, worldPosition2.z)).normalize();
|
||||
}
|
||||
|
@ -802,7 +802,12 @@ public class A10Entity extends ContainerMobileVehicleEntity implements GeoEntity
|
|||
|
||||
boolean hasCreativeAmmo = getFirstPassenger() instanceof Player pPlayer && InventoryTool.hasCreativeAmmoBox(pPlayer);
|
||||
|
||||
|
||||
Vector4f worldPosition = transformPosition(transform, 0.1321625f, -0.56446875f, 7.85210625f);
|
||||
Vector4f worldPosition2 = transformPosition(transform, 0.1321625f + 0.01f, -0.56446875f - 0.03f, 8.85210625f);
|
||||
|
||||
Vec3 shootVec = new Vec3(worldPosition.x, worldPosition.y, worldPosition.z).vectorTo(new Vec3(worldPosition2.x, worldPosition2.y, worldPosition2.z)).normalize();
|
||||
|
||||
|
||||
if (this.entityData.get(AMMO) > 0 || hasCreativeAmmo) {
|
||||
entityData.set(FIRE_TIME, Math.min(entityData.get(FIRE_TIME) + 6, 6));
|
||||
|
@ -810,7 +815,7 @@ public class A10Entity extends ContainerMobileVehicleEntity implements GeoEntity
|
|||
var entityToSpawn = ((SmallCannonShellWeapon) getWeapon(0)).create(player);
|
||||
|
||||
entityToSpawn.setPos(worldPosition.x, worldPosition.y, worldPosition.z);
|
||||
entityToSpawn.shoot(shootVec(1).x, shootVec(1).y, shootVec(1).z, 30, 0.5f);
|
||||
entityToSpawn.shoot(shootVec.x, shootVec.y, shootVec.z, 30, 0.5f);
|
||||
level().addFreshEntity(entityToSpawn);
|
||||
|
||||
sendParticle((ServerLevel) this.level(), ParticleTypes.LARGE_SMOKE, worldPosition.x, worldPosition.y, worldPosition.z, 1, 0.2, 0.2, 0.2, 0.001, true);
|
||||
|
@ -836,23 +841,30 @@ public class A10Entity extends ContainerMobileVehicleEntity implements GeoEntity
|
|||
var heliRocketEntity = ((HeliRocketWeapon) getWeapon(0)).create(player);
|
||||
|
||||
Vector4f worldPosition;
|
||||
Vector4f worldPosition2;
|
||||
|
||||
if (fireIndex == 0) {
|
||||
worldPosition = transformPosition(transform, -3.9321875f, -1.38680625f, 0.12965f);
|
||||
worldPosition2 = transformPosition(transform, -3.9321875f + 0.01f + 0.005f, -1.38680625f - 0.03f, 1.12965f);
|
||||
fireIndex = 1;
|
||||
} else if (fireIndex == 1) {
|
||||
worldPosition = transformPosition(transform, -1.56875f, -1.443f, 0.1272f);
|
||||
worldPosition2 = transformPosition(transform, -1.56875f + 0.01f + 0.005f, -1.443f - 0.03f, 1.1272f);
|
||||
fireIndex = 2;
|
||||
} else if (fireIndex == 2) {
|
||||
worldPosition = transformPosition(transform, 1.56875f, -1.443f, 0.1272f);
|
||||
worldPosition2 = transformPosition(transform, 1.56875f + 0.01f - 0.002f, -1.443f - 0.03f, 1.1272f);
|
||||
fireIndex = 3;
|
||||
} else {
|
||||
worldPosition = transformPosition(transform, 3.9321875f, -1.38680625f, 0.12965f);
|
||||
worldPosition2 = transformPosition(transform, 3.9321875f + 0.01f - 0.002f, -1.38680625f - 0.03f, 1.12965f);
|
||||
fireIndex = 0;
|
||||
}
|
||||
|
||||
Vec3 shootVec = new Vec3(worldPosition.x, worldPosition.y, worldPosition.z).vectorTo(new Vec3(worldPosition2.x, worldPosition2.y, worldPosition2.z)).normalize();
|
||||
|
||||
heliRocketEntity.setPos(worldPosition.x, worldPosition.y, worldPosition.z);
|
||||
heliRocketEntity.shoot(shootVec(1).x, shootVec(1).y, shootVec(1).z, 8, 0.5f);
|
||||
heliRocketEntity.shoot(shootVec.x, shootVec.y, shootVec.z, 8, 0.5f);
|
||||
player.level().addFreshEntity(heliRocketEntity);
|
||||
|
||||
BlockPos pos = BlockPos.containing(new Vec3(worldPosition.x, worldPosition.y, worldPosition.z));
|
||||
|
@ -906,9 +918,9 @@ public class A10Entity extends ContainerMobileVehicleEntity implements GeoEntity
|
|||
} else if (this.getEntityData().get(LOADED_MISSILE) == 3) {
|
||||
worldPosition = transformPosition(transform, -5.28f, -1.76f, 1.87f);
|
||||
} else if (this.getEntityData().get(LOADED_MISSILE) == 2) {
|
||||
worldPosition = transformPosition(transform, 6.63f, -0.55f, 1.83f);
|
||||
worldPosition = transformPosition(transform, 6.63f, -1.55f, 1.83f);
|
||||
} else {
|
||||
worldPosition = transformPosition(transform, -6.63f, -0.55f, 1.83f);
|
||||
worldPosition = transformPosition(transform, -6.63f, -1.55f, 1.83f);
|
||||
}
|
||||
|
||||
if (locked) {
|
||||
|
|
|
@ -507,6 +507,21 @@ public class Ah6Entity extends ContainerMobileVehicleEntity implements GeoEntity
|
|||
return this.cache;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Vec3 shootPos(float tickDelta) {
|
||||
Matrix4f transform = getVehicleTransform(tickDelta);
|
||||
Vector4f worldPosition = transformPosition(transform, 0f, -0.83f, 0.8f);
|
||||
return new Vec3(worldPosition.x, worldPosition.y, worldPosition.z);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Vec3 shootVec(float tickDelta) {
|
||||
Matrix4f transform = getVehicleTransform(tickDelta);
|
||||
Vector4f worldPosition = transformPosition(transform, 0, 0, 0);
|
||||
Vector4f worldPosition2 = transformPosition(transform, 0, 0.01f, 1);
|
||||
return new Vec3(worldPosition.x, worldPosition.y, worldPosition.z).vectorTo(new Vec3(worldPosition2.x, worldPosition2.y, worldPosition2.z)).normalize();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void vehicleShoot(Player player, int type) {
|
||||
boolean hasCreativeAmmo = false;
|
||||
|
@ -524,25 +539,26 @@ public class Ah6Entity extends ContainerMobileVehicleEntity implements GeoEntity
|
|||
if (getWeaponIndex(0) == 0) {
|
||||
if (this.cannotFire) return;
|
||||
|
||||
x = 1.15f;
|
||||
y = 0.62f - 1.45f;
|
||||
z = 0.8f;
|
||||
|
||||
Vector4f worldPosition;
|
||||
Vector4f worldPosition2;
|
||||
|
||||
if (fireIndex == 0) {
|
||||
worldPosition = transformPosition(transform, -x, y, z);
|
||||
worldPosition = transformPosition(transform, 1.15f, -0.83f, 0.8f);
|
||||
worldPosition2 = transformPosition(transform, 1.15f + 0.009f - 0.002f, -0.83f + 0.012f, 1.8f);
|
||||
fireIndex = 1;
|
||||
} else {
|
||||
worldPosition = transformPosition(transform, x, y, z);
|
||||
worldPosition = transformPosition(transform, -1.15f, -0.83f, 0.8f);
|
||||
worldPosition2 = transformPosition(transform, -1.15f + 0.009f + 0.002f, -0.83f + 0.012f, 1.8f);
|
||||
fireIndex = 0;
|
||||
}
|
||||
|
||||
Vec3 shootVec = new Vec3(worldPosition.x, worldPosition.y, worldPosition.z).vectorTo(new Vec3(worldPosition2.x, worldPosition2.y, worldPosition2.z)).normalize();
|
||||
|
||||
if (this.entityData.get(AMMO) > 0 || hasCreativeAmmo) {
|
||||
var entityToSpawn = ((SmallCannonShellWeapon) getWeapon(0)).create(player);
|
||||
|
||||
entityToSpawn.setPos(worldPosition.x, worldPosition.y, worldPosition.z);
|
||||
entityToSpawn.shoot(getLookAngle().x, getLookAngle().y + 0.008, getLookAngle().z, 20, 0.15f);
|
||||
entityToSpawn.shoot(shootVec.x, shootVec.y, shootVec.z, 20, 0.15f);
|
||||
level().addFreshEntity(entityToSpawn);
|
||||
|
||||
sendParticle((ServerLevel) this.level(), ParticleTypes.LARGE_SMOKE, worldPosition.x, worldPosition.y, worldPosition.z, 1, 0, 0, 0, 0, false);
|
||||
|
@ -571,24 +587,26 @@ public class Ah6Entity extends ContainerMobileVehicleEntity implements GeoEntity
|
|||
}
|
||||
|
||||
} else if (getWeaponIndex(0) == 1 && this.getEntityData().get(LOADED_ROCKET) > 0) {
|
||||
x = 1.7f;
|
||||
y = 0.62f - 1.45f;
|
||||
z = 0.8f;
|
||||
|
||||
var heliRocketEntity = ((HeliRocketWeapon) getWeapon(0)).create(player);
|
||||
|
||||
Vector4f worldPosition;
|
||||
Vector4f worldPosition2;
|
||||
|
||||
if (fireIndex == 0) {
|
||||
worldPosition = transformPosition(transform, -x, y, z);
|
||||
worldPosition = transformPosition(transform, 1.7f, -0.83f, 0.8f);
|
||||
worldPosition2 = transformPosition(transform, 1.7f + 0.009f - 0.0025f, -0.83f + 0.012f, 1.8f);
|
||||
fireIndex = 1;
|
||||
} else {
|
||||
worldPosition = transformPosition(transform, x, y, z);
|
||||
worldPosition = transformPosition(transform, -1.7f, -0.83f, 0.8f);
|
||||
worldPosition2 = transformPosition(transform, -1.7f + 0.009f + 0.0025f, -0.83f + 0.012f, 1.8f);
|
||||
fireIndex = 0;
|
||||
}
|
||||
|
||||
Vec3 shootVec = new Vec3(worldPosition.x, worldPosition.y, worldPosition.z).vectorTo(new Vec3(worldPosition2.x, worldPosition2.y, worldPosition2.z)).normalize();
|
||||
|
||||
heliRocketEntity.setPos(worldPosition.x, worldPosition.y, worldPosition.z);
|
||||
heliRocketEntity.shoot(this.getLookAngle().x, this.getLookAngle().y + 0.008, this.getLookAngle().z, 7, 0.25f);
|
||||
heliRocketEntity.shoot(shootVec.x, shootVec.y, shootVec.z, 7, 0.25f);
|
||||
player.level().addFreshEntity(heliRocketEntity);
|
||||
|
||||
if (!player.level().isClientSide) {
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package com.atsuishio.superbwarfare.entity.vehicle.base;
|
||||
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
|
||||
public interface AirEntity extends ArmedVehicleEntity {
|
||||
|
||||
float getRotX(float tickDelta);
|
||||
|
@ -11,4 +13,9 @@ public interface AirEntity extends ArmedVehicleEntity {
|
|||
float getPower();
|
||||
|
||||
int getDecoy();
|
||||
|
||||
Vec3 shootPos(float tickDelta);
|
||||
|
||||
Vec3 shootVec(float tickDelta);
|
||||
|
||||
}
|
||||
|
|
|
@ -1,12 +1,5 @@
|
|||
package com.atsuishio.superbwarfare.entity.vehicle.base;
|
||||
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
|
||||
public interface AircraftEntity extends AirEntity {
|
||||
|
||||
Vec3 shootPos(float tickDelta);
|
||||
|
||||
Vec3 shootVec(float tickDelta);
|
||||
|
||||
Float gearRot(float tickDelta);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue