- 1,329
- 104
- 225
Я сделал рендер кругов с итемами в виде слоя. Он рабоатет, однако после 2-3 секунд игра начинает лагать (с 40-50 фпс падает 10-9, это значение со времен понижается ещё сильнее). Тот же код есть в TileEntityRenderer, но он не лагает.
Вызываются лаги именно слоями: профайлер кричит о задержке в gameRenderer, а при отключении слоёв игра себя чувствует нормально.
Код прилагаю.
Вызываются лаги именно слоями: профайлер кричит о задержке в gameRenderer, а при отключении слоёв игра себя чувствует нормально.
Код прилагаю.
Java:
@OnlyIn(Dist.CLIENT)
public static class RingLayerRender<T extends GuardianEntity, M extends EntityModel<T>> extends LayerRenderer<T, M> {
float[] angles = new float[9];
float anglePer = 360F / 9;
float totalAngle = 0F;
final int light;
public RingLayerRender(IEntityRenderer<T, M> renderer, int light) {
super(renderer);
for (short i = 0; i < angles.length; i++) {
angles[i] = totalAngle += anglePer;
}
this.light = light;
}
@Override public void render(MatrixStack ms, IRenderTypeBuffer buffer,
int combinedOverlay, T entity, float p_225628_5_, float p_225628_6_,
float p_225628_7_, float partialTicks, float p_225628_9_, float p_225628_10_) {
float time = entity.level.getGameTime() + partialTicks;
for (short i = 0; i < 9; i++) {
ms.pushPose();
ms.translate(0, 1.25F, 0);
ms.mulPose(Vector3f.YP.rotationDegrees(-angles[i] + time));
ms.translate(1.325F, 0F, 0.25F);
ms.mulPose(Vector3f.YP.rotationDegrees(90F));
ItemStack render = new ItemStack(ForgeRegistries.ITEMS.getValue(new ResourceLocation(
EnhancedEnchanting.MODID, EnchantmentsList.SYMBOLS_LIST.get(i))));
float s = 0.9f;
ms.scale(s, s, s);
Minecraft.getInstance().getItemRenderer().renderStatic(render,
ItemCameraTransforms.TransformType.GROUND, light, combinedOverlay, ms, buffer);
ms.popPose();
}
}
}
GuardianRenderer extends MobRenderer:
@Override public void render(GuardianEntity entity, float yaw, float tick,
MatrixStack stack, IRenderTypeBuffer buffer, int light) {
super.render(entity, yaw, tick, stack, buffer, light);
addLayer(new RingLayerRender<>(this, light));
}