优化开火火焰的渲染方法
This commit is contained in:
parent
6285838dd7
commit
9d4064587f
5 changed files with 42 additions and 37 deletions
|
@ -1,7 +1,9 @@
|
|||
package com.atsuishio.superbwarfare.client;
|
||||
|
||||
import com.atsuishio.superbwarfare.Mod;
|
||||
import com.atsuishio.superbwarfare.event.ClientEventHandler;
|
||||
import com.atsuishio.superbwarfare.item.gun.data.GunData;
|
||||
import com.atsuishio.superbwarfare.item.gun.data.value.AttachmentType;
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
@ -17,6 +19,7 @@ import net.minecraft.resources.ResourceLocation;
|
|||
import net.minecraft.util.Mth;
|
||||
import net.minecraft.world.item.ItemDisplayContext;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import org.joml.Matrix3f;
|
||||
import software.bernie.geckolib.animation.AnimationProcessor;
|
||||
import software.bernie.geckolib.cache.object.GeoBone;
|
||||
import software.bernie.geckolib.util.RenderUtil;
|
||||
|
@ -36,15 +39,7 @@ public class AnimationHelper {
|
|||
}
|
||||
|
||||
public static void renderPartOverBoneR(ModelPart model, GeoBone bone, PoseStack stack, VertexConsumer buffer, int packedLightIn, int packedOverlayIn) {
|
||||
setupModelFromBone(model, bone);
|
||||
model.render(stack, buffer, packedLightIn, packedOverlayIn);
|
||||
}
|
||||
|
||||
public static void setupModelFromBoneR(ModelPart model, GeoBone bone) {
|
||||
model.setPos(bone.getPivotX(), bone.getPivotY(), bone.getPivotZ());
|
||||
model.xRot = 0.0f;
|
||||
model.yRot = 0.0f;
|
||||
model.zRot = 0.0f;
|
||||
renderPartOverBone(model, bone, stack, buffer, packedLightIn, packedOverlayIn);
|
||||
}
|
||||
|
||||
public static void renderPartOverBone2(ModelPart model, GeoBone bone, PoseStack stack, VertexConsumer buffer, int packedLightIn, int packedOverlayIn) {
|
||||
|
@ -96,6 +91,40 @@ public class AnimationHelper {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
public static void handleShootFlare(String name, PoseStack stack, ItemStack itemStack, GeoBone bone, MultiBufferSource buffer, int packedLightIn, double x, double y, double z, double size) {
|
||||
if (name.equals("flare") && ClientEventHandler.firePosTimer > 0 && ClientEventHandler.firePosTimer < 0.5 && GunData.from(itemStack).attachment.get(AttachmentType.BARREL) != 2) {
|
||||
bone.setScaleX((float) (size + 0.8 * size * (Math.random() - 0.5)));
|
||||
bone.setScaleY((float) (size + 0.8 * size * (Math.random() - 0.5)));
|
||||
bone.setRotZ((float) (0.5 * (Math.random() - 0.5)));
|
||||
|
||||
stack.pushPose();
|
||||
stack.translate(x, y, -z);
|
||||
RenderUtil.translateMatrixToBone(stack, bone);
|
||||
RenderUtil.translateToPivotPoint(stack, bone);
|
||||
RenderUtil.rotateMatrixAroundBone(stack, bone);
|
||||
RenderUtil.scaleMatrixForBone(stack, bone);
|
||||
RenderUtil.translateAwayFromPivotPoint(stack, bone);
|
||||
PoseStack.Pose pose = stack.last();
|
||||
Matrix3f normal = pose.normal();
|
||||
VertexConsumer vertexConsumer = buffer.getBuffer(RenderType.eyes(Mod.loc("textures/particle/flare.png")));
|
||||
vertex(vertexConsumer, pose, normal, packedLightIn, 0.0F, 0, 0, 1);
|
||||
vertex(vertexConsumer, pose, normal, packedLightIn, 1.0F, 0, 1, 1);
|
||||
vertex(vertexConsumer, pose, normal, packedLightIn, 1.0F, 1, 1, 0);
|
||||
vertex(vertexConsumer, pose, normal, packedLightIn, 0.0F, 1, 0, 0);
|
||||
stack.popPose();
|
||||
}
|
||||
}
|
||||
|
||||
private static void vertex(VertexConsumer pConsumer, PoseStack.Pose pPose, Matrix3f pNormal, int pLightmapUV, float pX, float pY, int pU, int pV) {
|
||||
pConsumer.addVertex(pPose, pX - 0.5F, pY - 0.5F, 0.0F)
|
||||
.setColor(255, 255, 255, 255)
|
||||
.setUv((float) pU, (float) pV)
|
||||
.setOverlay(OverlayTexture.NO_OVERLAY)
|
||||
.setLight(pLightmapUV)
|
||||
.setNormal(pPose, 0.0F, 1.0F, 0.0F);
|
||||
}
|
||||
|
||||
public static void renderArms(
|
||||
Minecraft mc,
|
||||
LocalPlayer player,
|
||||
|
|
|
@ -78,6 +78,7 @@ public class AK12ItemRenderer extends GeoItemRenderer<AK12Item> {
|
|||
|
||||
var player = mc.player;
|
||||
if (player != null) {
|
||||
|
||||
ItemStack itemStack = player.getMainHandItem();
|
||||
if (!(itemStack.getItem() instanceof GunItem)) return;
|
||||
var data = GunData.from(itemStack);
|
||||
|
@ -104,19 +105,8 @@ public class AK12ItemRenderer extends GeoItemRenderer<AK12Item> {
|
|||
bone.setHidden(ClientEventHandler.zoomPos > 0.7 && ClientEventHandler.zoom);
|
||||
}
|
||||
|
||||
if (name.equals("flare")) {
|
||||
if (GunData.from(itemStack).attachment.get(AttachmentType.BARREL) == 1) {
|
||||
bone.setPosZ(2.25f);
|
||||
}
|
||||
if (ClientEventHandler.firePosTimer == 0 || ClientEventHandler.firePosTimer > 0.5 || GunData.from(itemStack).attachment.get(AttachmentType.BARREL) == 2) {
|
||||
bone.setHidden(true);
|
||||
} else {
|
||||
bone.setHidden(false);
|
||||
bone.setScaleX((float) (0.75 + 0.5 * (Math.random() - 0.5)));
|
||||
bone.setScaleY((float) (0.75 + 0.5 * (Math.random() - 0.5)));
|
||||
bone.setRotZ((float) (0.5 * (Math.random() - 0.5)));
|
||||
}
|
||||
}
|
||||
|
||||
AnimationHelper.handleShootFlare(name, stack, itemStack, bone, buffer, packedLightIn, -0.012, 0.02, 1.25229375, 0.3);
|
||||
|
||||
ItemModelHelper.handleGunAttachments(bone, itemStack, name);
|
||||
}
|
||||
|
|
|
@ -16534,21 +16534,7 @@
|
|||
{
|
||||
"name": "flare",
|
||||
"parent": "0",
|
||||
"pivot": [0.52734, 1.86914, -20.03672],
|
||||
"cubes": [
|
||||
{
|
||||
"origin": [-2.47266, -1.1375, -20.03672],
|
||||
"size": [6, 6.01328, 0],
|
||||
"uv": {
|
||||
"north": {"uv": [124.75, 46.375], "uv_size": [-3.25, 3.375]},
|
||||
"east": {"uv": [0, 0], "uv_size": [0, 8]},
|
||||
"south": {"uv": [78.375, 1.125], "uv_size": [48.25, 42.125]},
|
||||
"west": {"uv": [0, 0], "uv_size": [0, 8]},
|
||||
"up": {"uv": [8, 0], "uv_size": [-8, 0]},
|
||||
"down": {"uv": [8, 0], "uv_size": [-8, 0]}
|
||||
}
|
||||
}
|
||||
]
|
||||
"pivot": [0.52734, 1.86914, -20.03672]
|
||||
},
|
||||
{
|
||||
"name": "Righthand",
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 4.6 KiB |
Binary file not shown.
After Width: | Height: | Size: 218 KiB |
Loading…
Add table
Reference in a new issue