diff --git a/src/main/java/com/atsuishio/superbwarfare/client/AnimationHelper.java b/src/main/java/com/atsuishio/superbwarfare/client/AnimationHelper.java index 69bc18494..06c965fa5 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/AnimationHelper.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/AnimationHelper.java @@ -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, diff --git a/src/main/java/com/atsuishio/superbwarfare/client/renderer/item/AK12ItemRenderer.java b/src/main/java/com/atsuishio/superbwarfare/client/renderer/item/AK12ItemRenderer.java index 4e93112e0..78e6c3f6e 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/renderer/item/AK12ItemRenderer.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/renderer/item/AK12ItemRenderer.java @@ -78,6 +78,7 @@ public class AK12ItemRenderer extends GeoItemRenderer { 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 { 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); } diff --git a/src/main/resources/assets/superbwarfare/geo/ak12.geo.json b/src/main/resources/assets/superbwarfare/geo/ak12.geo.json index 57af0d5c8..e1ffb5370 100644 --- a/src/main/resources/assets/superbwarfare/geo/ak12.geo.json +++ b/src/main/resources/assets/superbwarfare/geo/ak12.geo.json @@ -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", diff --git a/src/main/resources/assets/superbwarfare/textures/item/ak12_e.png b/src/main/resources/assets/superbwarfare/textures/item/ak12_e.png index 44fc089ce..aca633b1b 100644 Binary files a/src/main/resources/assets/superbwarfare/textures/item/ak12_e.png and b/src/main/resources/assets/superbwarfare/textures/item/ak12_e.png differ diff --git a/src/main/resources/assets/superbwarfare/textures/particle/flare.png b/src/main/resources/assets/superbwarfare/textures/particle/flare.png new file mode 100644 index 000000000..64d2bacd4 Binary files /dev/null and b/src/main/resources/assets/superbwarfare/textures/particle/flare.png differ