优化测距
This commit is contained in:
parent
65c5151c4b
commit
b5bf19a3e7
5 changed files with 40 additions and 10 deletions
|
@ -105,7 +105,7 @@ public class CannonHudOverlay implements LayeredDraw.Layer {
|
||||||
shootPos = cannon.driverZoomPos(deltaTracker.getRealtimeDeltaTicks());
|
shootPos = cannon.driverZoomPos(deltaTracker.getRealtimeDeltaTicks());
|
||||||
}
|
}
|
||||||
|
|
||||||
Entity lookingEntity = TraceTool.vehiclefFindLookingEntity(cannon, shootPos, 512);
|
Entity lookingEntity = TraceTool.camerafFindLookingEntity(player, cameraPos, 512, deltaTracker.getRealtimeDeltaTicks());
|
||||||
boolean lookAtEntity = false;
|
boolean lookAtEntity = false;
|
||||||
|
|
||||||
BlockHitResult result = player.level().clip(new ClipContext(shootPos, shootPos.add(player.getViewVector(1).scale(512)),
|
BlockHitResult result = player.level().clip(new ClipContext(shootPos, shootPos.add(player.getViewVector(1).scale(512)),
|
||||||
|
|
|
@ -5,13 +5,11 @@ import com.atsuishio.superbwarfare.client.RenderHelper;
|
||||||
import com.atsuishio.superbwarfare.entity.vehicle.DroneEntity;
|
import com.atsuishio.superbwarfare.entity.vehicle.DroneEntity;
|
||||||
import com.atsuishio.superbwarfare.event.ClientEventHandler;
|
import com.atsuishio.superbwarfare.event.ClientEventHandler;
|
||||||
import com.atsuishio.superbwarfare.init.ModItems;
|
import com.atsuishio.superbwarfare.init.ModItems;
|
||||||
import com.atsuishio.superbwarfare.tools.EntityFindUtil;
|
import com.atsuishio.superbwarfare.tools.*;
|
||||||
import com.atsuishio.superbwarfare.tools.FormatTool;
|
|
||||||
import com.atsuishio.superbwarfare.tools.NBTTool;
|
|
||||||
import com.atsuishio.superbwarfare.tools.SeekTool;
|
|
||||||
import com.mojang.blaze3d.platform.GlStateManager;
|
import com.mojang.blaze3d.platform.GlStateManager;
|
||||||
import com.mojang.blaze3d.systems.RenderSystem;
|
import com.mojang.blaze3d.systems.RenderSystem;
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
|
import net.minecraft.client.Camera;
|
||||||
import net.minecraft.client.DeltaTracker;
|
import net.minecraft.client.DeltaTracker;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.gui.GuiGraphics;
|
import net.minecraft.client.gui.GuiGraphics;
|
||||||
|
@ -53,6 +51,8 @@ public class DroneHudOverlay implements LayeredDraw.Layer {
|
||||||
|
|
||||||
Minecraft mc = Minecraft.getInstance();
|
Minecraft mc = Minecraft.getInstance();
|
||||||
Player player = mc.player;
|
Player player = mc.player;
|
||||||
|
Camera camera = mc.gameRenderer.getMainCamera();
|
||||||
|
Vec3 cameraPos = camera.getPosition();
|
||||||
|
|
||||||
if (player == null) return;
|
if (player == null) return;
|
||||||
|
|
||||||
|
@ -95,7 +95,7 @@ public class DroneHudOverlay implements LayeredDraw.Layer {
|
||||||
|
|
||||||
double entityRange = 0;
|
double entityRange = 0;
|
||||||
|
|
||||||
Entity lookingEntity = SeekTool.seekLivingEntity(entity, entity.level(), 512, 2);
|
Entity lookingEntity = TraceTool.camerafFindLookingEntity(player, cameraPos, 512, deltaTracker.getRealtimeDeltaTicks());
|
||||||
if (lookingEntity != null) {
|
if (lookingEntity != null) {
|
||||||
lookAtEntity = true;
|
lookAtEntity = true;
|
||||||
entityRange = entity.distanceTo(lookingEntity);
|
entityRange = entity.distanceTo(lookingEntity);
|
||||||
|
|
|
@ -14,7 +14,7 @@ import com.atsuishio.superbwarfare.init.ModItems;
|
||||||
import com.atsuishio.superbwarfare.tools.FormatTool;
|
import com.atsuishio.superbwarfare.tools.FormatTool;
|
||||||
import com.atsuishio.superbwarfare.tools.InventoryTool;
|
import com.atsuishio.superbwarfare.tools.InventoryTool;
|
||||||
import com.atsuishio.superbwarfare.tools.NBTTool;
|
import com.atsuishio.superbwarfare.tools.NBTTool;
|
||||||
import com.atsuishio.superbwarfare.tools.SeekTool;
|
import com.atsuishio.superbwarfare.tools.TraceTool;
|
||||||
import com.atsuishio.superbwarfare.tools.animation.AnimationCurves;
|
import com.atsuishio.superbwarfare.tools.animation.AnimationCurves;
|
||||||
import com.atsuishio.superbwarfare.tools.animation.AnimationTimer;
|
import com.atsuishio.superbwarfare.tools.animation.AnimationTimer;
|
||||||
import com.mojang.blaze3d.platform.GlStateManager;
|
import com.mojang.blaze3d.platform.GlStateManager;
|
||||||
|
@ -209,7 +209,7 @@ public class VehicleHudOverlay implements LayeredDraw.Layer {
|
||||||
|
|
||||||
double entityRange = 0;
|
double entityRange = 0;
|
||||||
|
|
||||||
Entity lookingEntity = SeekTool.seekLivingEntity(player, player.level(), 512, 1);
|
Entity lookingEntity = TraceTool.camerafFindLookingEntity(player, cameraPos, 512, deltaTracker.getRealtimeDeltaTicks());
|
||||||
if (lookingEntity != null) {
|
if (lookingEntity != null) {
|
||||||
lookAtEntity = true;
|
lookAtEntity = true;
|
||||||
entityRange = player.distanceTo(lookingEntity);
|
entityRange = player.distanceTo(lookingEntity);
|
||||||
|
|
|
@ -5,6 +5,7 @@ import com.atsuishio.superbwarfare.entity.vehicle.base.VehicleEntity;
|
||||||
import com.atsuishio.superbwarfare.tools.FormatTool;
|
import com.atsuishio.superbwarfare.tools.FormatTool;
|
||||||
import com.atsuishio.superbwarfare.tools.TraceTool;
|
import com.atsuishio.superbwarfare.tools.TraceTool;
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
|
import net.minecraft.client.Camera;
|
||||||
import net.minecraft.client.DeltaTracker;
|
import net.minecraft.client.DeltaTracker;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.gui.GuiGraphics;
|
import net.minecraft.client.gui.GuiGraphics;
|
||||||
|
@ -13,6 +14,7 @@ import net.minecraft.network.chat.Component;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.world.entity.Entity;
|
import net.minecraft.world.entity.Entity;
|
||||||
import net.minecraft.world.entity.player.Player;
|
import net.minecraft.world.entity.player.Player;
|
||||||
|
import net.minecraft.world.phys.Vec3;
|
||||||
import net.neoforged.api.distmarker.Dist;
|
import net.neoforged.api.distmarker.Dist;
|
||||||
import net.neoforged.api.distmarker.OnlyIn;
|
import net.neoforged.api.distmarker.OnlyIn;
|
||||||
|
|
||||||
|
@ -28,14 +30,17 @@ public class VehicleTeamOverlay implements LayeredDraw.Layer {
|
||||||
public void render(GuiGraphics guiGraphics, DeltaTracker deltaTracker) {
|
public void render(GuiGraphics guiGraphics, DeltaTracker deltaTracker) {
|
||||||
int w = guiGraphics.guiWidth();
|
int w = guiGraphics.guiWidth();
|
||||||
int h = guiGraphics.guiHeight();
|
int h = guiGraphics.guiHeight();
|
||||||
Player player = Minecraft.getInstance().player;
|
Minecraft mc = Minecraft.getInstance();
|
||||||
|
Player player = mc.player;
|
||||||
|
Camera camera = mc.gameRenderer.getMainCamera();
|
||||||
|
Vec3 cameraPos = camera.getPosition();
|
||||||
PoseStack poseStack = guiGraphics.pose();
|
PoseStack poseStack = guiGraphics.pose();
|
||||||
if (player == null) return;
|
if (player == null) return;
|
||||||
|
|
||||||
boolean lookAtEntity = false;
|
boolean lookAtEntity = false;
|
||||||
|
|
||||||
double entityRange = 0;
|
double entityRange = 0;
|
||||||
Entity lookingEntity = TraceTool.findLookingEntity(player, 520);
|
Entity lookingEntity = TraceTool.camerafFindLookingEntity(player, cameraPos, 512, deltaTracker.getRealtimeDeltaTicks());
|
||||||
|
|
||||||
if (lookingEntity instanceof VehicleEntity) {
|
if (lookingEntity instanceof VehicleEntity) {
|
||||||
lookAtEntity = true;
|
lookAtEntity = true;
|
||||||
|
|
|
@ -7,6 +7,7 @@ import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.core.Direction;
|
import net.minecraft.core.Direction;
|
||||||
import net.minecraft.world.entity.Entity;
|
import net.minecraft.world.entity.Entity;
|
||||||
import net.minecraft.world.entity.LivingEntity;
|
import net.minecraft.world.entity.LivingEntity;
|
||||||
|
import net.minecraft.world.entity.player.Player;
|
||||||
import net.minecraft.world.entity.projectile.Projectile;
|
import net.minecraft.world.entity.projectile.Projectile;
|
||||||
import net.minecraft.world.entity.projectile.ProjectileUtil;
|
import net.minecraft.world.entity.projectile.ProjectileUtil;
|
||||||
import net.minecraft.world.level.ClipContext;
|
import net.minecraft.world.level.ClipContext;
|
||||||
|
@ -119,6 +120,30 @@ public class TraceTool {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Entity camerafFindLookingEntity(Player player, Vec3 pos, double entityReach, float ticks) {
|
||||||
|
double distance = entityReach * entityReach;
|
||||||
|
HitResult hitResult = player.pick(entityReach, 1.0f, false);
|
||||||
|
|
||||||
|
Vec3 viewVec = player.getViewVector(ticks);
|
||||||
|
Vec3 toVec = pos.add(viewVec.x * entityReach, viewVec.y * entityReach, viewVec.z * entityReach);
|
||||||
|
AABB aabb = player.getBoundingBox().expandTowards(viewVec.scale(entityReach)).inflate(1.0D, 1.0D, 1.0D);
|
||||||
|
EntityHitResult entityhitresult = ProjectileUtil.getEntityHitResult(player, pos, toVec, aabb, p -> !p.isSpectator()
|
||||||
|
&& p.isAlive()
|
||||||
|
&& !(p instanceof Projectile)
|
||||||
|
&& SeekTool.baseFilter(p)
|
||||||
|
&& !(p instanceof DecoyEntity) && smokeFilter(p)
|
||||||
|
&& p != player
|
||||||
|
&& p != player.getVehicle(), distance);
|
||||||
|
if (entityhitresult != null) {
|
||||||
|
hitResult = entityhitresult;
|
||||||
|
|
||||||
|
}
|
||||||
|
if (hitResult.getType() == HitResult.Type.ENTITY) {
|
||||||
|
return ((EntityHitResult) hitResult).getEntity();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public static HitResult pickNew(Vec3 pos, double pHitDistance, VehicleEntity vehicle) {
|
public static HitResult pickNew(Vec3 pos, double pHitDistance, VehicleEntity vehicle) {
|
||||||
Vec3 vec31 = vehicle.getBarrelVector(1);
|
Vec3 vec31 = vehicle.getBarrelVector(1);
|
||||||
Vec3 vec32 = pos.add(vec31.x * pHitDistance, vec31.y * pHitDistance, vec31.z * pHitDistance);
|
Vec3 vec32 = pos.add(vec31.x * pHitDistance, vec31.y * pHitDistance, vec31.z * pHitDistance);
|
||||||
|
|
Loading…
Add table
Reference in a new issue