优化光棱渲染。修复地形计算bug
This commit is contained in:
parent
8beccac565
commit
53a1536d34
8 changed files with 116 additions and 113 deletions
|
@ -11,10 +11,12 @@ import com.mojang.math.Axis;
|
|||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.MultiBufferSource;
|
||||
import net.minecraft.client.renderer.RenderType;
|
||||
import net.minecraft.client.renderer.culling.Frustum;
|
||||
import net.minecraft.client.renderer.entity.EntityRendererProvider;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.util.Mth;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.phys.AABB;
|
||||
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
||||
import software.bernie.geckolib.cache.object.GeoBone;
|
||||
import software.bernie.geckolib.renderer.GeoEntityRenderer;
|
||||
|
@ -55,6 +57,19 @@ public class PrismTankRenderer extends GeoEntityRenderer<PrismTankEntity> {
|
|||
@Override
|
||||
public void renderRecursively(PoseStack poseStack, PrismTankEntity animatable, GeoBone bone, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, boolean isReRender, float partialTick, int packedLight, int packedOverlay, int color) {
|
||||
String name = bone.getName();
|
||||
|
||||
Minecraft minecraft = Minecraft.getInstance();
|
||||
Frustum pCamera = minecraft.levelRenderer.getFrustum();
|
||||
|
||||
AABB aabb = animatable.getBoundingBoxForCulling().inflate(0.5);
|
||||
if (aabb.hasNaN() || aabb.getSize() == 0.0) {
|
||||
aabb = new AABB(animatable.getX() - 4.0, animatable.getY() - 3.0, animatable.getZ() - 4.0, animatable.getX() + 4.0, animatable.getY() + 3.0, animatable.getZ() + 4.0);
|
||||
}
|
||||
|
||||
if (name.equals("root")) {
|
||||
bone.setHidden(!pCamera.isVisible(aabb));
|
||||
}
|
||||
|
||||
for (int i = 0; i < 8; i++) {
|
||||
if (name.equals("wheelL" + i)) {
|
||||
bone.setRotX(1.5f * Mth.lerp(partialTick, animatable.leftWheelRotO, animatable.getLeftWheelRot()));
|
||||
|
@ -64,11 +79,11 @@ public class PrismTankRenderer extends GeoEntityRenderer<PrismTankEntity> {
|
|||
}
|
||||
}
|
||||
|
||||
if (name.equals("cannon")) {
|
||||
if (name.equals("cannon") || name.equals("cannon2")) {
|
||||
bone.setRotY(Mth.lerp(partialTick, animatable.turretYRotO, animatable.getTurretYRot()) * Mth.DEG_TO_RAD);
|
||||
}
|
||||
|
||||
if (name.equals("head")) {
|
||||
if (name.equals("head") || name.equals("head2")) {
|
||||
Player player = Minecraft.getInstance().player;
|
||||
bone.setHidden(ClientEventHandler.zoomVehicle && animatable.getFirstPassenger() == player);
|
||||
}
|
||||
|
@ -89,7 +104,7 @@ public class PrismTankRenderer extends GeoEntityRenderer<PrismTankEntity> {
|
|||
bone.setRotY((System.currentTimeMillis() % 36000000) / 75f);
|
||||
}
|
||||
|
||||
if (name.equals("barrel")) {
|
||||
if (name.equals("barrel") || name.equals("barrel2")) {
|
||||
|
||||
float a = animatable.getTurretYaw(partialTick);
|
||||
float r = (Mth.abs(a) - 90f) / 90f;
|
||||
|
@ -113,13 +128,6 @@ public class PrismTankRenderer extends GeoEntityRenderer<PrismTankEntity> {
|
|||
);
|
||||
}
|
||||
|
||||
if (name.equals("flare")) {
|
||||
bone.setRotZ((float) (0.5 * (Math.random() - 0.5)));
|
||||
}
|
||||
if (name.equals("flare2")) {
|
||||
bone.setRotZ((float) (0.5 * (Math.random() - 0.5)));
|
||||
}
|
||||
|
||||
for (int i = 0; i < 51; i++) {
|
||||
float tO = animatable.leftTrackO + 2 * i;
|
||||
float t = animatable.getLeftTrack() + 2 * i;
|
||||
|
|
|
@ -17,10 +17,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
|
|||
import com.atsuishio.superbwarfare.init.ModTags;
|
||||
import com.atsuishio.superbwarfare.network.message.receive.ClientIndicatorMessage;
|
||||
import com.atsuishio.superbwarfare.network.message.receive.ShakeClientMessage;
|
||||
import com.atsuishio.superbwarfare.tools.CustomExplosion;
|
||||
import com.atsuishio.superbwarfare.tools.EntityFindUtil;
|
||||
import com.atsuishio.superbwarfare.tools.ParticleTool;
|
||||
import com.atsuishio.superbwarfare.tools.SeekTool;
|
||||
import com.atsuishio.superbwarfare.tools.*;
|
||||
import com.mojang.math.Axis;
|
||||
import net.minecraft.ChatFormatting;
|
||||
import net.minecraft.client.gui.Font;
|
||||
|
@ -224,6 +221,10 @@ public class PrismTankEntity extends ContainerMobileVehicleEntity implements Geo
|
|||
|
||||
releaseSmokeDecoy();
|
||||
|
||||
if (this.getFirstPassenger() instanceof Player player && fireInputDown && getWeaponIndex(0) == 1 && getEnergy() > VehicleConfig.PRISM_TANK_SHOOT_COST_MODE_2.get() && !cannotFire) {
|
||||
vehicleShoot(player, 0);
|
||||
}
|
||||
|
||||
lowHealthWarning();
|
||||
this.refreshDimensions();
|
||||
}
|
||||
|
@ -329,6 +330,10 @@ public class PrismTankEntity extends ContainerMobileVehicleEntity implements Geo
|
|||
}
|
||||
|
||||
Level level = player.level();
|
||||
|
||||
float pitch = entityData.get(HEAT) <= 60 ? 1.1f : (float) (1.1f - 0.011 * Math.abs(60 - entityData.get(HEAT)));
|
||||
SoundTool.playLocalSound(player, ModSounds.PRISM_FIRE_1P_2.get(), 1f, pitch);
|
||||
|
||||
if (level instanceof ServerLevel) {
|
||||
if (!player.level().isClientSide) {
|
||||
if (player instanceof ServerPlayer serverPlayer) {
|
||||
|
@ -340,13 +345,6 @@ public class PrismTankEntity extends ContainerMobileVehicleEntity implements Geo
|
|||
this.consumeEnergy(VehicleConfig.PRISM_TANK_SHOOT_COST_MODE_2.get());
|
||||
}
|
||||
|
||||
final Vec3 center = new Vec3(this.getX(), this.getEyeY(), this.getZ());
|
||||
for (Entity target : level.getEntitiesOfClass(Entity.class, new AABB(center, center).inflate(2), e -> true).stream().sorted(Comparator.comparingDouble(e -> e.distanceToSqr(center))).toList()) {
|
||||
if (target instanceof ServerPlayer serverPlayer) {
|
||||
PacketDistributor.sendToPlayer(serverPlayer, new ShakeClientMessage(5, 3, 3, this.getX(), this.getEyeY(), this.getZ()));
|
||||
}
|
||||
}
|
||||
|
||||
float dis = laserLengthEntity(root);
|
||||
|
||||
if (dis < laserLength(root)) {
|
||||
|
@ -738,17 +736,15 @@ public class PrismTankEntity extends ContainerMobileVehicleEntity implements Geo
|
|||
if (getWeaponIndex(0) == 0) {
|
||||
return 30;
|
||||
} else if (getWeaponIndex(0) == 1) {
|
||||
return 1200;
|
||||
return 0;
|
||||
}
|
||||
return 20;
|
||||
return 30;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canShoot(Player player) {
|
||||
if (getWeaponIndex(0) == 0) {
|
||||
return getEnergy() > VehicleConfig.PRISM_TANK_SHOOT_COST_MODE_1.get() && !cannotFire;
|
||||
} else if (getWeaponIndex(0) == 1) {
|
||||
return getEnergy() > VehicleConfig.PRISM_TANK_SHOOT_COST_MODE_2.get() && !cannotFire;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -428,6 +428,8 @@ public abstract class MobileVehicleEntity extends EnergyVehicleEntity implements
|
|||
targetY = pos.y + shape.max(Direction.Axis.Y);
|
||||
} else if (res.getType() == HitResult.Type.BLOCK && this.level().noCollision(new AABB(pos, pos))) {
|
||||
targetY = res.getLocation().y;
|
||||
} else {
|
||||
targetY = pos.y - maxLength;
|
||||
}
|
||||
|
||||
double diffY = targetY - pos.y;
|
||||
|
|
|
@ -915,16 +915,8 @@ public class ClientEventHandler {
|
|||
if (iVehicle instanceof PrismTankEntity prismTank) {
|
||||
if (prismTank.getWeaponIndex(0) == 0) {
|
||||
player.playSound(ModSounds.PRISM_FIRE_1P.get(), 1f, 1);
|
||||
} else if (prismTank.getWeaponIndex(0) == 1) {
|
||||
float pitch = prismTank.getEntityData().get(HEAT) <= 60 ? 1.1f : (float) (1.1f - 0.011 * Math.abs(60 - prismTank.getEntityData().get(HEAT)));
|
||||
player.playSound(ModSounds.PRISM_FIRE_1P_2.get(), 1f, pitch);
|
||||
}
|
||||
}
|
||||
|
||||
if (iVehicle instanceof Hpj11Entity hpj11Entity) {
|
||||
float pitch = hpj11Entity.getEntityData().get(HEAT) <= 60 ? 1 : (float) (1 - 0.011 * Math.abs(60 - hpj11Entity.getEntityData().get(HEAT)));
|
||||
player.playSound(ModSounds.HPJ_11_FIRE_1P.get(), 1f, (float) ((2 * org.joml.Math.random() - 1) * 0.05f + pitch));
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
|
|
|
@ -439,7 +439,6 @@ public class ModSounds {
|
|||
public static final DeferredHolder<SoundEvent, SoundEvent> INSIDIOUS_VERYFAR = REGISTRY.register("insidious_veryfar", () -> SoundEvent.createVariableRangeEvent(Mod.loc("insidious_veryfar")));
|
||||
public static final DeferredHolder<SoundEvent, SoundEvent> INSIDIOUS_RELOAD_EMPTY = REGISTRY.register("insidious_reload_empty", () -> SoundEvent.createVariableRangeEvent(Mod.loc("insidious_reload_empty")));
|
||||
public static final DeferredHolder<SoundEvent, SoundEvent> SMOKE_FIRE = REGISTRY.register("smoke_fire", () -> SoundEvent.createVariableRangeEvent(Mod.loc("smoke_fire")));
|
||||
public static final DeferredHolder<SoundEvent, SoundEvent> HPJ_11_FIRE_1P = REGISTRY.register("hpj_11_fire_1p", () -> SoundEvent.createVariableRangeEvent(Mod.loc("hpj_11_fire_1p")));
|
||||
public static final DeferredHolder<SoundEvent, SoundEvent> HPJ_11_FIRE_3P = REGISTRY.register("hpj_11_fire_3p", () -> SoundEvent.createVariableRangeEvent(Mod.loc("hpj_11_fire_3p")));
|
||||
}
|
||||
|
||||
|
|
|
@ -1189,77 +1189,6 @@
|
|||
"parent": "cannon",
|
||||
"pivot": [0, 58, -8]
|
||||
},
|
||||
{
|
||||
"name": "laser",
|
||||
"parent": "barrel",
|
||||
"pivot": [0, 62.5018, -8],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [-1.68, 56.31904, -9.6],
|
||||
"size": [3.36, 12.36, 1.6],
|
||||
"uv": {
|
||||
"north": {"uv": [51, 88], "uv_size": [1, 1]},
|
||||
"east": {"uv": [51, 88], "uv_size": [1, 1]},
|
||||
"south": {"uv": [51, 88], "uv_size": [1, 1]},
|
||||
"west": {"uv": [51, 88], "uv_size": [1, 1]},
|
||||
"up": {"uv": [52, 89], "uv_size": [-1, -1]},
|
||||
"down": {"uv": [52, 89], "uv_size": [-1, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-2.52, 55.47848, -9.6],
|
||||
"size": [5.04, 0, 1.6],
|
||||
"uv": {
|
||||
"up": {"uv": [53, 89], "uv_size": [-1, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-11.52168, 55.48016, -9.6],
|
||||
"size": [14.04, 0, 1.6],
|
||||
"pivot": [0, 58.00016, -14.72],
|
||||
"rotation": [0, 0, 90],
|
||||
"uv": {
|
||||
"up": {"uv": [53, 89], "uv_size": [-1, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-2.52, 64.47848, -9.6],
|
||||
"size": [5.04, 0, 1.6],
|
||||
"pivot": [0, 67.00016, -14.72],
|
||||
"rotation": [0, 0, -180],
|
||||
"uv": {
|
||||
"up": {"uv": [53, 89], "uv_size": [-1, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-2.52168, 55.48016, -9.6],
|
||||
"size": [14.04, 0, 1.6],
|
||||
"pivot": [0, 58.00016, -14.72],
|
||||
"rotation": [0, 0, -90],
|
||||
"uv": {
|
||||
"up": {"uv": [53, 89], "uv_size": [-1, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-7.02, 62.50184, -10.52],
|
||||
"size": [14.04, 0, 5.04],
|
||||
"pivot": [0, 62.50184, -8],
|
||||
"rotation": [90, 0, -90],
|
||||
"uv": {
|
||||
"up": {"uv": [53, 89], "uv_size": [-1, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-2.52, 57.99848, -12.121],
|
||||
"size": [14.04, 0, 5.04],
|
||||
"pivot": [0, 57.99848, -9.601],
|
||||
"rotation": [-90, 0, -90],
|
||||
"uv": {
|
||||
"up": {"uv": [53, 89], "uv_size": [-1, -1]}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "head",
|
||||
"parent": "barrel",
|
||||
|
@ -10739,6 +10668,91 @@
|
|||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "cannon2",
|
||||
"pivot": [0, 34.3, -11.8]
|
||||
},
|
||||
{
|
||||
"name": "barrel2",
|
||||
"parent": "cannon2",
|
||||
"pivot": [0, 58, -8]
|
||||
},
|
||||
{
|
||||
"name": "head2",
|
||||
"parent": "barrel2",
|
||||
"pivot": [0, 62.5018, -8]
|
||||
},
|
||||
{
|
||||
"name": "laser",
|
||||
"parent": "head2",
|
||||
"pivot": [0, 62.5018, -8],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [-1.68, 56.31904, -9.6],
|
||||
"size": [3.36, 12.36, 1.6],
|
||||
"uv": {
|
||||
"north": {"uv": [51, 88], "uv_size": [1, 1]},
|
||||
"east": {"uv": [51, 88], "uv_size": [1, 1]},
|
||||
"south": {"uv": [51, 88], "uv_size": [1, 1]},
|
||||
"west": {"uv": [51, 88], "uv_size": [1, 1]},
|
||||
"up": {"uv": [52, 89], "uv_size": [-1, -1]},
|
||||
"down": {"uv": [52, 89], "uv_size": [-1, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-2.52, 55.47848, -9.6],
|
||||
"size": [5.04, 0, 1.6],
|
||||
"uv": {
|
||||
"up": {"uv": [53, 89], "uv_size": [-1, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-11.52168, 55.48016, -9.6],
|
||||
"size": [14.04, 0, 1.6],
|
||||
"pivot": [0, 58.00016, -14.72],
|
||||
"rotation": [0, 0, 90],
|
||||
"uv": {
|
||||
"up": {"uv": [53, 89], "uv_size": [-1, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-2.52, 64.47848, -9.6],
|
||||
"size": [5.04, 0, 1.6],
|
||||
"pivot": [0, 67.00016, -14.72],
|
||||
"rotation": [0, 0, -180],
|
||||
"uv": {
|
||||
"up": {"uv": [53, 89], "uv_size": [-1, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-2.52168, 55.48016, -9.6],
|
||||
"size": [14.04, 0, 1.6],
|
||||
"pivot": [0, 58.00016, -14.72],
|
||||
"rotation": [0, 0, -90],
|
||||
"uv": {
|
||||
"up": {"uv": [53, 89], "uv_size": [-1, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-7.02, 62.50184, -10.52],
|
||||
"size": [14.04, 0, 5.04],
|
||||
"pivot": [0, 62.50184, -8],
|
||||
"rotation": [90, 0, -90],
|
||||
"uv": {
|
||||
"up": {"uv": [53, 89], "uv_size": [-1, -1]}
|
||||
}
|
||||
},
|
||||
{
|
||||
"origin": [-2.52, 57.99848, -12.121],
|
||||
"size": [14.04, 0, 5.04],
|
||||
"pivot": [0, 57.99848, -9.601],
|
||||
"rotation": [-90, 0, -90],
|
||||
"uv": {
|
||||
"up": {"uv": [53, 89], "uv_size": [-1, -1]}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -3044,14 +3044,6 @@
|
|||
}
|
||||
]
|
||||
},
|
||||
"hpj_11_fire_1p": {
|
||||
"sounds": [
|
||||
{
|
||||
"name": "superbwarfare:hpj11/hpj_11_fire_1p",
|
||||
"stream": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"hpj_11_fire_3p": {
|
||||
"sounds": [
|
||||
{
|
||||
|
|
Binary file not shown.
Loading…
Add table
Reference in a new issue