Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Визуальная часть Кольцо Rockstar Skid(Updated) | Zenith Recode

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
9 Май 2023
Сообщения
261
Реакции
8
Выберите загрузчик игры
  1. Fabric
Скид кольца из рокстара/эксселента
UPD
Улучшил рендер и оптимизацию. Теперь выглядит в разы лучше :da:

Пожалуйста, авторизуйтесь для просмотра ссылки.

Код:
Expand Collapse Copy
    //Краснение
    private int applyDamageFlash(int color) {
        if (!damageRed.isEnabled()) return color;

        float targetIntensity = 0f;
        long timeSinceDamage = System.currentTimeMillis() - lastDamageTime;
        if (timeSinceDamage < DAMAGE_FLASH_DURATION) {
            float progress = (float) timeSinceDamage / DAMAGE_FLASH_DURATION;
            targetIntensity = 1.0f - easeOutCubic(progress);
        }

        damageFlashIntensity = MathHelper.lerp(0.1f, damageFlashIntensity, targetIntensity);
        if (damageFlashIntensity < 0.05f) return color;

        int r = (color >> 16) & 0xFF, g = (color >> 8) & 0xFF, b = color & 0xFF, a = (color >> 24) & 0xFF;
        int finalR = (int) MathHelper.lerp(damageFlashIntensity, r, 255);
        int finalG = (int) MathHelper.lerp(damageFlashIntensity, g, 50);
        int finalB = (int) MathHelper.lerp(damageFlashIntensity, b, 50);

        return (a << 24) | (finalR << 16) | (finalG << 8) | finalB;
    }  
   
    //Само кольцо
    private void renderJello(EventRender3D event) {
        jelloMoving += 4f;
       
        float alpha = this.animationProgress;
        if (alpha <= 0.0F) return;

        LivingEntity entityToRender = this.target != null ? this.target : this.lastTarget;
        if (entityToRender == null) return;

        Camera camera = mc.getEntityRenderDispatcher().camera;
        Vec3d cameraPos = camera.getPos();
        Vec3d targetPos = MathUtil.interpolate(entityToRender);
        Vec3d renderPos = targetPos.subtract(cameraPos);

        float entityWidth = entityToRender.getWidth() * 1.65f;
        float entityHeight = entityToRender.getHeight() - 0.15f;
        float alphaAnim = (this.target != null) ? easeOutCubic(alpha) : easeOutQuad(alpha);

        int color = getThemeColor();

        MatrixStack matrices = event.getMatrix();

        RenderSystem.enableBlend();
        RenderSystem.blendFunc(GlStateManager.SrcFactor.SRC_ALPHA, GlStateManager.DstFactor.ONE);
        RenderSystem.disableCull();

        if (throughWalls.isEnabled()) {
            RenderSystem.disableDepthTest();
        } else {
            RenderSystem.enableDepthTest();
            RenderSystem.depthMask(false);
        }

        matrices.push();
        matrices.translate(renderPos.x, renderPos.y, renderPos.z);
        RenderSystem.setShaderTexture(0, glowTexture);
        RenderSystem.setShader(ShaderProgramKeys.POSITION_TEX_COLOR);

        BufferBuilder buffer = Tessellator.getInstance().begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_TEXTURE_COLOR);

        for (int i = 0; i < 360; i += 2) {
            float scale = Math.max(0.5f, 0.7f - 0.2f * alphaAnim);
            double rad = Math.toRadians(i + jelloMoving);
            float xOffset = (float) (Math.cos(rad) * entityWidth * scale);
            float zOffset = (float) (Math.sin(rad) * entityWidth * scale);

            float sizeBase = 0.2f;

            for (int j = 0; j < 15; ++j) {
                float yOffsetLayer = entityHeight / 1.7f + (entityHeight / 2.0f) * (float) Math.cos(Math.toRadians(jelloMoving / 1.5f + j * 2.0f));

                matrices.push();
                matrices.translate(xOffset, yOffsetLayer, zOffset);
                matrices.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(-camera.getYaw()));
                matrices.multiply(RotationAxis.POSITIVE_X.rotationDegrees(camera.getPitch()));

                MatrixStack.Entry entry = matrices.peek();
                int finalAlpha = (int) (255 * alphaAnim * ((float) j / 15.0f) * 0.05f);
                int r = (color >> 16) & 0xFF, g = (color >> 8) & 0xFF, b = color & 0xFF;

                buffer.vertex(entry.getPositionMatrix(), -sizeBase / 2.0f, -sizeBase / 2.0f, 0).texture(0, 0).color(r, g, b, finalAlpha);
                buffer.vertex(entry.getPositionMatrix(), sizeBase / 2.0f, -sizeBase / 2.0f, 0).texture(1, 0).color(r, g, b, finalAlpha);
                buffer.vertex(entry.getPositionMatrix(), sizeBase / 2.0f, sizeBase / 2.0f, 0).texture(1, 1).color(r, g, b, finalAlpha);
                buffer.vertex(entry.getPositionMatrix(), -sizeBase / 2.0f, sizeBase / 2.0f, 0).texture(0, 1).color(r, g, b, finalAlpha);
                buffer.vertex(entry.getPositionMatrix(), -sizeBase / 2.0f, -sizeBase / 2.0f, 0).texture(0, 0).color(r, g, b, finalAlpha);
                buffer.vertex(entry.getPositionMatrix(), sizeBase / 2.0f, -sizeBase / 2.0f, 0).texture(1, 0).color(r, g, b, finalAlpha);
                matrices.pop();
            }
        }

        BufferRenderer.drawWithGlobalProgram(buffer.end());
        matrices.pop();

        matrices.push();
        matrices.translate(renderPos.x, renderPos.y, renderPos.z);
        RenderSystem.setShaderTexture(0, glowTexture);
        RenderSystem.setShader(ShaderProgramKeys.POSITION_TEX_COLOR);

        buffer = Tessellator.getInstance().begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_TEXTURE_COLOR);

        for (int i = 0; i < 360; i += 2) {
            float scale = Math.max(0.5f, 0.7f - 0.2f * alphaAnim);
            double rad = Math.toRadians(i + jelloMoving);
            float xOffset = (float) (Math.cos(rad) * entityWidth * scale);
            float zOffset = (float) (Math.sin(rad) * entityWidth * scale);
            float yOffset = entityHeight / 1.75f + (entityHeight / 2.0f) * (float) Math.cos(Math.toRadians(jelloMoving / 1.5f + 30.0f));

            float sizeLarge = 0.2f;

            matrices.push();
            matrices.translate(xOffset, yOffset, zOffset);
            matrices.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(-camera.getYaw()));
            matrices.multiply(RotationAxis.POSITIVE_X.rotationDegrees(camera.getPitch()));

            MatrixStack.Entry entry = matrices.peek();
            int finalAlpha = (int) (255 * alphaAnim * 0.2f);
            int r = (color >> 16) & 0xFF, g = (color >> 8) & 0xFF, b = color & 0xFF;

            buffer.vertex(entry.getPositionMatrix(), -sizeLarge / 2.0f, -sizeLarge / 2.0f, 0).texture(0, 0).color(r, g, b, finalAlpha);
            buffer.vertex(entry.getPositionMatrix(), sizeLarge / 2.0f, -sizeLarge / 2.0f, 0).texture(1, 0).color(r, g, b, finalAlpha);
            buffer.vertex(entry.getPositionMatrix(), sizeLarge / 2.0f, sizeLarge / 2.0f, 0).texture(1, 1).color(r, g, b, finalAlpha);
            buffer.vertex(entry.getPositionMatrix(), -sizeLarge / 2.0f, sizeLarge / 2.0f, 0).texture(0, 1).color(r, g, b, finalAlpha);

            matrices.pop();
        }

        BufferRenderer.drawWithGlobalProgram(buffer.end());
        matrices.pop();

        if (!throughWalls.isEnabled()) {
            RenderSystem.depthMask(true);
        }
        RenderSystem.enableDepthTest();
        RenderSystem.enableCull();
        RenderSystem.defaultBlendFunc();
        RenderSystem.disableBlend();
    }
 
Последнее редактирование:
Сливаю вам скид кольца из рокстара/эксселента
До этого не хотел сливать, но сейчас оно мне банально уже не нравится ну и его оптимизация я бы сказал хромает
Думаю кому-то будет полезно:4Head:
Мб на реке чуууть-чууть по другому выглядит, но не сильно
Пожалуйста, авторизуйтесь для просмотра ссылки.

Кольцо + Покраснение при дамаге:
Expand Collapse Copy
private void renderKolco2(EventRender3D event, float interpolatedAlpha) {
        float alpha = Math.max(this.animationProgress, interpolatedAlpha);
        if (alpha <= 0.0F) return;

        LivingEntity targetEntity = this.target != null ? this.target : this.lastTarget;
        if (targetEntity == null) return;

        Camera camera = mc.getEntityRenderDispatcher().camera;
        Vec3d renderPos = MathUtil.interpolate(targetEntity).subtract(camera.getPos());

        float entityWidth = targetEntity.getWidth() * 0.9f;
        float entityHeight = targetEntity.getHeight();
        float animationAlpha = easeOutCubic(interpolatedAlpha);

        boolean canSee = Objects.requireNonNull(mc.player).canSee(targetEntity);
        boolean useDepth = !throughWalls.isEnabled() && canSee;

        if (!throughWalls.isEnabled() && !canSee) return;

        MatrixStack matrices = event.getMatrix();

        RenderSystem.enableBlend();
        RenderSystem.blendFunc(GlStateManager.SrcFactor.SRC_ALPHA, GlStateManager.DstFactor.ONE);
        RenderSystem.disableCull();

        if (useDepth) {
            RenderSystem.enableDepthTest();
            RenderSystem.depthMask(false);
        } else {
            RenderSystem.disableDepthTest();
        }

        double currentStep = MathUtil.interpolate(kolcoStep - ring2Speed, kolcoStep);
       
        double golovkaY = MathUtil.absSinAnimation(currentStep) * entityHeight;
        double tailBaseY = MathUtil.absSinAnimation(currentStep - 0.4) * entityHeight;

        float golovkaSize = 0.12f;
        float tailSize = 0.08f;

        int totalPoints = 138;
        int tailSegments = 16;
       
        long currentTime = System.currentTimeMillis();

        for (int i = 0; i < totalPoints; i++) {
            double angleRadians = 2 * Math.PI * i / totalPoints;
           
            float xOffset = (float) (Math.cos(angleRadians) * entityWidth);
            float zOffset = (float) (Math.sin(angleRadians) * entityWidth);

            int baseColor = getThemeColorAngle(i * (360 / totalPoints), currentTime);

            matrices.push();
            matrices.translate(renderPos.x + xOffset, renderPos.y + golovkaY, renderPos.z + zOffset);
            matrices.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(-camera.getYaw()));
            matrices.multiply(RotationAxis.POSITIVE_X.rotationDegrees(camera.getPitch()));

            MatrixStack.Entry golovkaEntry = matrices.peek().copy();

            int coreColor = ColorUtil.multAlpha(baseColor, animationAlpha * 0.9f);
            Vector4i coreVec = new Vector4i(coreColor, coreColor, coreColor, coreColor);
            Render3DUtil.drawGlowTexture(golovkaEntry, glowTexture, -golovkaSize / 2, -golovkaSize / 2, golovkaSize, golovkaSize, coreVec, useDepth);

            matrices.pop();

            for (int t = 1; t <= tailSegments; t++) {
                float tailProgress = (float) t / (tailSegments + 1);
               
                double currentTailY = golovkaY + (tailBaseY - golovkaY) * tailProgress;
                float currentTailAlpha = animationAlpha * (1f - tailProgress) * 0.6f;

                matrices.push();
                matrices.translate(renderPos.x + xOffset, renderPos.y + currentTailY, renderPos.z + zOffset);
                matrices.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(-camera.getYaw()));
                matrices.multiply(RotationAxis.POSITIVE_X.rotationDegrees(camera.getPitch()));

                MatrixStack.Entry tailEntry = matrices.peek().copy();

                int tailCoreColor = ColorUtil.multAlpha(baseColor, currentTailAlpha);
                Vector4i tailCoreVec = new Vector4i(tailCoreColor, tailCoreColor, tailCoreColor, tailCoreColor);
                Render3DUtil.drawGlowTexture(tailEntry, glowTexture, -tailSize / 2, -tailSize / 2, tailSize, tailSize, tailCoreVec, useDepth);

                matrices.pop();
            }
        }

        if (useDepth) RenderSystem.depthMask(true);
        RenderSystem.enableDepthTest();
        RenderSystem.enableCull();
        RenderSystem.defaultBlendFunc();
        RenderSystem.disableBlend();
    }

    private int getThemeColorAngle(int offsetAngle, long currentTime) {
        int color;
        try {
            float timeFactor = (currentTime % 3000) / 3000.0f;
            int colorAngle = (int) (timeFactor * 360) + offsetAngle;
            color = Zenith.getInstance().getThemeManager().getClientColor(colorAngle % 360).getRGB();
        } catch (Exception e) {
            color = 0xFF42A5F5;
        }
        return applyDamageFlash(color);
    }

    private int applyDamageFlash(int color) {
        if (!damageRed.isEnabled()) return color;

        float targetIntensity = 0f;
        long timeSinceDamage = System.currentTimeMillis() - lastDamageTime;
       
        if (timeSinceDamage < DAMAGE_FLASH_DURATION) {
            float progress = (float) timeSinceDamage / DAMAGE_FLASH_DURATION;
            targetIntensity = 1.0f - easeOutCubic(progress);
        }

        damageFlashIntensity = MathHelper.lerp(1f, damageFlashIntensity, targetIntensity);
       
        if (damageFlashIntensity < 0.05f) return color;

        int alpha = (color >> 24) & 0xFF;
        int red = (color >> 16) & 0xFF;
        int green = (color >> 8) & 0xFF;
        int blue = color & 0xFF;

        int finalRed = (int) MathHelper.lerp(damageFlashIntensity, red, 255);
        int finalGreen = (int) MathHelper.lerp(damageFlashIntensity, green, 50);
        int finalBlue = (int) MathHelper.lerp(damageFlashIntensity, blue, 50);

        return (alpha << 24) | (finalRed << 16) | (finalGreen << 8) | finalBlue;
    }
крутое +rep
 
Сливаю вам скид кольца из рокстара/эксселента
До этого не хотел сливать, но сейчас оно мне банально уже не нравится ну и его оптимизация я бы сказал хромает
Думаю кому-то будет полезно
Мб на реке чуууть-чууть по другому выглядит, но не сильно
Пожалуйста, авторизуйтесь для просмотра ссылки.

Кольцо + Покраснение при дамаге:
Expand Collapse Copy
private void renderKolco2(EventRender3D event, float interpolatedAlpha) {
        float alpha = Math.max(this.animationProgress, interpolatedAlpha);
        if (alpha <= 0.0F) return;

        LivingEntity targetEntity = this.target != null ? this.target : this.lastTarget;
        if (targetEntity == null) return;

        Camera camera = mc.getEntityRenderDispatcher().camera;
        Vec3d renderPos = MathUtil.interpolate(targetEntity).subtract(camera.getPos());

        float entityWidth = targetEntity.getWidth() * 0.9f;
        float entityHeight = targetEntity.getHeight();
        float animationAlpha = easeOutCubic(interpolatedAlpha);

        boolean canSee = Objects.requireNonNull(mc.player).canSee(targetEntity);
        boolean useDepth = !throughWalls.isEnabled() && canSee;

        if (!throughWalls.isEnabled() && !canSee) return;

        MatrixStack matrices = event.getMatrix();

        RenderSystem.enableBlend();
        RenderSystem.blendFunc(GlStateManager.SrcFactor.SRC_ALPHA, GlStateManager.DstFactor.ONE);
        RenderSystem.disableCull();

        if (useDepth) {
            RenderSystem.enableDepthTest();
            RenderSystem.depthMask(false);
        } else {
            RenderSystem.disableDepthTest();
        }

        double currentStep = MathUtil.interpolate(kolcoStep - ring2Speed, kolcoStep);
      
        double golovkaY = MathUtil.absSinAnimation(currentStep) * entityHeight;
        double tailBaseY = MathUtil.absSinAnimation(currentStep - 0.4) * entityHeight;

        float golovkaSize = 0.12f;
        float tailSize = 0.08f;

        int totalPoints = 138;
        int tailSegments = 16;
      
        long currentTime = System.currentTimeMillis();

        for (int i = 0; i < totalPoints; i++) {
            double angleRadians = 2 * Math.PI * i / totalPoints;
          
            float xOffset = (float) (Math.cos(angleRadians) * entityWidth);
            float zOffset = (float) (Math.sin(angleRadians) * entityWidth);

            int baseColor = getThemeColorAngle(i * (360 / totalPoints), currentTime);

            matrices.push();
            matrices.translate(renderPos.x + xOffset, renderPos.y + golovkaY, renderPos.z + zOffset);
            matrices.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(-camera.getYaw()));
            matrices.multiply(RotationAxis.POSITIVE_X.rotationDegrees(camera.getPitch()));

            MatrixStack.Entry golovkaEntry = matrices.peek().copy();

            int coreColor = ColorUtil.multAlpha(baseColor, animationAlpha * 0.9f);
            Vector4i coreVec = new Vector4i(coreColor, coreColor, coreColor, coreColor);
            Render3DUtil.drawGlowTexture(golovkaEntry, glowTexture, -golovkaSize / 2, -golovkaSize / 2, golovkaSize, golovkaSize, coreVec, useDepth);

            matrices.pop();

            for (int t = 1; t <= tailSegments; t++) {
                float tailProgress = (float) t / (tailSegments + 1);
              
                double currentTailY = golovkaY + (tailBaseY - golovkaY) * tailProgress;
                float currentTailAlpha = animationAlpha * (1f - tailProgress) * 0.6f;

                matrices.push();
                matrices.translate(renderPos.x + xOffset, renderPos.y + currentTailY, renderPos.z + zOffset);
                matrices.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(-camera.getYaw()));
                matrices.multiply(RotationAxis.POSITIVE_X.rotationDegrees(camera.getPitch()));

                MatrixStack.Entry tailEntry = matrices.peek().copy();

                int tailCoreColor = ColorUtil.multAlpha(baseColor, currentTailAlpha);
                Vector4i tailCoreVec = new Vector4i(tailCoreColor, tailCoreColor, tailCoreColor, tailCoreColor);
                Render3DUtil.drawGlowTexture(tailEntry, glowTexture, -tailSize / 2, -tailSize / 2, tailSize, tailSize, tailCoreVec, useDepth);

                matrices.pop();
            }
        }

        if (useDepth) RenderSystem.depthMask(true);
        RenderSystem.enableDepthTest();
        RenderSystem.enableCull();
        RenderSystem.defaultBlendFunc();
        RenderSystem.disableBlend();
    }

    private int getThemeColorAngle(int offsetAngle, long currentTime) {
        int color;
        try {
            float timeFactor = (currentTime % 3000) / 3000.0f;
            int colorAngle = (int) (timeFactor * 360) + offsetAngle;
            color = Zenith.getInstance().getThemeManager().getClientColor(colorAngle % 360).getRGB();
        } catch (Exception e) {
            color = 0xFF42A5F5;
        }
        return applyDamageFlash(color);
    }

    private int applyDamageFlash(int color) {
        if (!damageRed.isEnabled()) return color;

        float targetIntensity = 0f;
        long timeSinceDamage = System.currentTimeMillis() - lastDamageTime;
      
        if (timeSinceDamage < DAMAGE_FLASH_DURATION) {
            float progress = (float) timeSinceDamage / DAMAGE_FLASH_DURATION;
            targetIntensity = 1.0f - easeOutCubic(progress);
        }

        damageFlashIntensity = MathHelper.lerp(1f, damageFlashIntensity, targetIntensity);
      
        if (damageFlashIntensity < 0.05f) return color;

        int alpha = (color >> 24) & 0xFF;
        int red = (color >> 16) & 0xFF;
        int green = (color >> 8) & 0xFF;
        int blue = color & 0xFF;

        int finalRed = (int) MathHelper.lerp(damageFlashIntensity, red, 255);
        int finalGreen = (int) MathHelper.lerp(damageFlashIntensity, green, 50);
        int finalBlue = (int) MathHelper.lerp(damageFlashIntensity, blue, 50);

        return (alpha << 24) | (finalRed << 16) | (finalGreen << 8) | finalBlue;
    }
санчез прекращай
 
Сливаю вам скид кольца из рокстара/эксселента
До этого не хотел сливать, но сейчас оно мне банально уже не нравится ну и его оптимизация я бы сказал хромает
Думаю кому-то будет полезно
Мб на реке чуууть-чууть по другому выглядит, но не сильно
Пожалуйста, авторизуйтесь для просмотра ссылки.

Кольцо + Покраснение при дамаге:
Expand Collapse Copy
private void renderKolco2(EventRender3D event, float interpolatedAlpha) {
        float alpha = Math.max(this.animationProgress, interpolatedAlpha);
        if (alpha <= 0.0F) return;

        LivingEntity targetEntity = this.target != null ? this.target : this.lastTarget;
        if (targetEntity == null) return;

        Camera camera = mc.getEntityRenderDispatcher().camera;
        Vec3d renderPos = MathUtil.interpolate(targetEntity).subtract(camera.getPos());

        float entityWidth = targetEntity.getWidth() * 0.9f;
        float entityHeight = targetEntity.getHeight();
        float animationAlpha = easeOutCubic(interpolatedAlpha);

        boolean canSee = Objects.requireNonNull(mc.player).canSee(targetEntity);
        boolean useDepth = !throughWalls.isEnabled() && canSee;

        if (!throughWalls.isEnabled() && !canSee) return;

        MatrixStack matrices = event.getMatrix();

        RenderSystem.enableBlend();
        RenderSystem.blendFunc(GlStateManager.SrcFactor.SRC_ALPHA, GlStateManager.DstFactor.ONE);
        RenderSystem.disableCull();

        if (useDepth) {
            RenderSystem.enableDepthTest();
            RenderSystem.depthMask(false);
        } else {
            RenderSystem.disableDepthTest();
        }

        double currentStep = MathUtil.interpolate(kolcoStep - ring2Speed, kolcoStep);
     
        double golovkaY = MathUtil.absSinAnimation(currentStep) * entityHeight;
        double tailBaseY = MathUtil.absSinAnimation(currentStep - 0.4) * entityHeight;

        float golovkaSize = 0.12f;
        float tailSize = 0.08f;

        int totalPoints = 138;
        int tailSegments = 16;
     
        long currentTime = System.currentTimeMillis();

        for (int i = 0; i < totalPoints; i++) {
            double angleRadians = 2 * Math.PI * i / totalPoints;
         
            float xOffset = (float) (Math.cos(angleRadians) * entityWidth);
            float zOffset = (float) (Math.sin(angleRadians) * entityWidth);

            int baseColor = getThemeColorAngle(i * (360 / totalPoints), currentTime);

            matrices.push();
            matrices.translate(renderPos.x + xOffset, renderPos.y + golovkaY, renderPos.z + zOffset);
            matrices.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(-camera.getYaw()));
            matrices.multiply(RotationAxis.POSITIVE_X.rotationDegrees(camera.getPitch()));

            MatrixStack.Entry golovkaEntry = matrices.peek().copy();

            int coreColor = ColorUtil.multAlpha(baseColor, animationAlpha * 0.9f);
            Vector4i coreVec = new Vector4i(coreColor, coreColor, coreColor, coreColor);
            Render3DUtil.drawGlowTexture(golovkaEntry, glowTexture, -golovkaSize / 2, -golovkaSize / 2, golovkaSize, golovkaSize, coreVec, useDepth);

            matrices.pop();

            for (int t = 1; t <= tailSegments; t++) {
                float tailProgress = (float) t / (tailSegments + 1);
             
                double currentTailY = golovkaY + (tailBaseY - golovkaY) * tailProgress;
                float currentTailAlpha = animationAlpha * (1f - tailProgress) * 0.6f;

                matrices.push();
                matrices.translate(renderPos.x + xOffset, renderPos.y + currentTailY, renderPos.z + zOffset);
                matrices.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(-camera.getYaw()));
                matrices.multiply(RotationAxis.POSITIVE_X.rotationDegrees(camera.getPitch()));

                MatrixStack.Entry tailEntry = matrices.peek().copy();

                int tailCoreColor = ColorUtil.multAlpha(baseColor, currentTailAlpha);
                Vector4i tailCoreVec = new Vector4i(tailCoreColor, tailCoreColor, tailCoreColor, tailCoreColor);
                Render3DUtil.drawGlowTexture(tailEntry, glowTexture, -tailSize / 2, -tailSize / 2, tailSize, tailSize, tailCoreVec, useDepth);

                matrices.pop();
            }
        }

        if (useDepth) RenderSystem.depthMask(true);
        RenderSystem.enableDepthTest();
        RenderSystem.enableCull();
        RenderSystem.defaultBlendFunc();
        RenderSystem.disableBlend();
    }

    private int getThemeColorAngle(int offsetAngle, long currentTime) {
        int color;
        try {
            float timeFactor = (currentTime % 3000) / 3000.0f;
            int colorAngle = (int) (timeFactor * 360) + offsetAngle;
            color = Zenith.getInstance().getThemeManager().getClientColor(colorAngle % 360).getRGB();
        } catch (Exception e) {
            color = 0xFF42A5F5;
        }
        return applyDamageFlash(color);
    }

    private int applyDamageFlash(int color) {
        if (!damageRed.isEnabled()) return color;

        float targetIntensity = 0f;
        long timeSinceDamage = System.currentTimeMillis() - lastDamageTime;
     
        if (timeSinceDamage < DAMAGE_FLASH_DURATION) {
            float progress = (float) timeSinceDamage / DAMAGE_FLASH_DURATION;
            targetIntensity = 1.0f - easeOutCubic(progress);
        }

        damageFlashIntensity = MathHelper.lerp(1f, damageFlashIntensity, targetIntensity);
     
        if (damageFlashIntensity < 0.05f) return color;

        int alpha = (color >> 24) & 0xFF;
        int red = (color >> 16) & 0xFF;
        int green = (color >> 8) & 0xFF;
        int blue = color & 0xFF;

        int finalRed = (int) MathHelper.lerp(damageFlashIntensity, red, 255);
        int finalGreen = (int) MathHelper.lerp(damageFlashIntensity, green, 50);
        int finalBlue = (int) MathHelper.lerp(damageFlashIntensity, blue, 50);

        return (alpha << 24) | (finalRed << 16) | (finalGreen << 8) | finalBlue;
    }
выглядит не очень я бы даже сказал плохо и не похоже
 
Сливаю вам скид кольца из рокстара/эксселента
До этого не хотел сливать, но сейчас оно мне банально уже не нравится ну и его оптимизация я бы сказал хромает
Думаю кому-то будет полезно
Мб на реке чуууть-чууть по другому выглядит, но не сильно
Пожалуйста, авторизуйтесь для просмотра ссылки.

Кольцо + Покраснение при дамаге:
Expand Collapse Copy
private void renderKolco2(EventRender3D event, float interpolatedAlpha) {
        float alpha = Math.max(this.animationProgress, interpolatedAlpha);
        if (alpha <= 0.0F) return;

        LivingEntity targetEntity = this.target != null ? this.target : this.lastTarget;
        if (targetEntity == null) return;

        Camera camera = mc.getEntityRenderDispatcher().camera;
        Vec3d renderPos = MathUtil.interpolate(targetEntity).subtract(camera.getPos());

        float entityWidth = targetEntity.getWidth() * 0.9f;
        float entityHeight = targetEntity.getHeight();
        float animationAlpha = easeOutCubic(interpolatedAlpha);

        boolean canSee = Objects.requireNonNull(mc.player).canSee(targetEntity);
        boolean useDepth = !throughWalls.isEnabled() && canSee;

        if (!throughWalls.isEnabled() && !canSee) return;

        MatrixStack matrices = event.getMatrix();

        RenderSystem.enableBlend();
        RenderSystem.blendFunc(GlStateManager.SrcFactor.SRC_ALPHA, GlStateManager.DstFactor.ONE);
        RenderSystem.disableCull();

        if (useDepth) {
            RenderSystem.enableDepthTest();
            RenderSystem.depthMask(false);
        } else {
            RenderSystem.disableDepthTest();
        }

        double currentStep = MathUtil.interpolate(kolcoStep - ring2Speed, kolcoStep);
      
        double golovkaY = MathUtil.absSinAnimation(currentStep) * entityHeight;
        double tailBaseY = MathUtil.absSinAnimation(currentStep - 0.4) * entityHeight;

        float golovkaSize = 0.12f;
        float tailSize = 0.08f;

        int totalPoints = 138;
        int tailSegments = 16;
      
        long currentTime = System.currentTimeMillis();

        for (int i = 0; i < totalPoints; i++) {
            double angleRadians = 2 * Math.PI * i / totalPoints;
          
            float xOffset = (float) (Math.cos(angleRadians) * entityWidth);
            float zOffset = (float) (Math.sin(angleRadians) * entityWidth);

            int baseColor = getThemeColorAngle(i * (360 / totalPoints), currentTime);

            matrices.push();
            matrices.translate(renderPos.x + xOffset, renderPos.y + golovkaY, renderPos.z + zOffset);
            matrices.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(-camera.getYaw()));
            matrices.multiply(RotationAxis.POSITIVE_X.rotationDegrees(camera.getPitch()));

            MatrixStack.Entry golovkaEntry = matrices.peek().copy();

            int coreColor = ColorUtil.multAlpha(baseColor, animationAlpha * 0.9f);
            Vector4i coreVec = new Vector4i(coreColor, coreColor, coreColor, coreColor);
            Render3DUtil.drawGlowTexture(golovkaEntry, glowTexture, -golovkaSize / 2, -golovkaSize / 2, golovkaSize, golovkaSize, coreVec, useDepth);

            matrices.pop();

            for (int t = 1; t <= tailSegments; t++) {
                float tailProgress = (float) t / (tailSegments + 1);
              
                double currentTailY = golovkaY + (tailBaseY - golovkaY) * tailProgress;
                float currentTailAlpha = animationAlpha * (1f - tailProgress) * 0.6f;

                matrices.push();
                matrices.translate(renderPos.x + xOffset, renderPos.y + currentTailY, renderPos.z + zOffset);
                matrices.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(-camera.getYaw()));
                matrices.multiply(RotationAxis.POSITIVE_X.rotationDegrees(camera.getPitch()));

                MatrixStack.Entry tailEntry = matrices.peek().copy();

                int tailCoreColor = ColorUtil.multAlpha(baseColor, currentTailAlpha);
                Vector4i tailCoreVec = new Vector4i(tailCoreColor, tailCoreColor, tailCoreColor, tailCoreColor);
                Render3DUtil.drawGlowTexture(tailEntry, glowTexture, -tailSize / 2, -tailSize / 2, tailSize, tailSize, tailCoreVec, useDepth);

                matrices.pop();
            }
        }

        if (useDepth) RenderSystem.depthMask(true);
        RenderSystem.enableDepthTest();
        RenderSystem.enableCull();
        RenderSystem.defaultBlendFunc();
        RenderSystem.disableBlend();
    }

    private int getThemeColorAngle(int offsetAngle, long currentTime) {
        int color;
        try {
            float timeFactor = (currentTime % 3000) / 3000.0f;
            int colorAngle = (int) (timeFactor * 360) + offsetAngle;
            color = Zenith.getInstance().getThemeManager().getClientColor(colorAngle % 360).getRGB();
        } catch (Exception e) {
            color = 0xFF42A5F5;
        }
        return applyDamageFlash(color);
    }

    private int applyDamageFlash(int color) {
        if (!damageRed.isEnabled()) return color;

        float targetIntensity = 0f;
        long timeSinceDamage = System.currentTimeMillis() - lastDamageTime;
      
        if (timeSinceDamage < DAMAGE_FLASH_DURATION) {
            float progress = (float) timeSinceDamage / DAMAGE_FLASH_DURATION;
            targetIntensity = 1.0f - easeOutCubic(progress);
        }

        damageFlashIntensity = MathHelper.lerp(1f, damageFlashIntensity, targetIntensity);
      
        if (damageFlashIntensity < 0.05f) return color;

        int alpha = (color >> 24) & 0xFF;
        int red = (color >> 16) & 0xFF;
        int green = (color >> 8) & 0xFF;
        int blue = color & 0xFF;

        int finalRed = (int) MathHelper.lerp(damageFlashIntensity, red, 255);
        int finalGreen = (int) MathHelper.lerp(damageFlashIntensity, green, 50);
        int finalBlue = (int) MathHelper.lerp(damageFlashIntensity, blue, 50);

        return (alpha << 24) | (finalRed << 16) | (finalGreen << 8) | finalBlue;
    }
ты будешь сливать срц найта?
 
Последнее редактирование:
Сливаю вам скид кольца из рокстара/эксселента
До этого не хотел сливать, но сейчас оно мне банально уже не нравится ну и его оптимизация я бы сказал хромает
Думаю кому-то будет полезно
Мб на реке чуууть-чууть по другому выглядит, но не сильно
Пожалуйста, авторизуйтесь для просмотра ссылки.

Кольцо + Покраснение при дамаге:
Expand Collapse Copy
private void renderKolco2(EventRender3D event, float interpolatedAlpha) {
        float alpha = Math.max(this.animationProgress, interpolatedAlpha);
        if (alpha <= 0.0F) return;

        LivingEntity targetEntity = this.target != null ? this.target : this.lastTarget;
        if (targetEntity == null) return;

        Camera camera = mc.getEntityRenderDispatcher().camera;
        Vec3d renderPos = MathUtil.interpolate(targetEntity).subtract(camera.getPos());

        float entityWidth = targetEntity.getWidth() * 0.9f;
        float entityHeight = targetEntity.getHeight();
        float animationAlpha = easeOutCubic(interpolatedAlpha);

        boolean canSee = Objects.requireNonNull(mc.player).canSee(targetEntity);
        boolean useDepth = !throughWalls.isEnabled() && canSee;

        if (!throughWalls.isEnabled() && !canSee) return;

        MatrixStack matrices = event.getMatrix();

        RenderSystem.enableBlend();
        RenderSystem.blendFunc(GlStateManager.SrcFactor.SRC_ALPHA, GlStateManager.DstFactor.ONE);
        RenderSystem.disableCull();

        if (useDepth) {
            RenderSystem.enableDepthTest();
            RenderSystem.depthMask(false);
        } else {
            RenderSystem.disableDepthTest();
        }

        double currentStep = MathUtil.interpolate(kolcoStep - ring2Speed, kolcoStep);
      
        double golovkaY = MathUtil.absSinAnimation(currentStep) * entityHeight;
        double tailBaseY = MathUtil.absSinAnimation(currentStep - 0.4) * entityHeight;

        float golovkaSize = 0.12f;
        float tailSize = 0.08f;

        int totalPoints = 138;
        int tailSegments = 16;
      
        long currentTime = System.currentTimeMillis();

        for (int i = 0; i < totalPoints; i++) {
            double angleRadians = 2 * Math.PI * i / totalPoints;
          
            float xOffset = (float) (Math.cos(angleRadians) * entityWidth);
            float zOffset = (float) (Math.sin(angleRadians) * entityWidth);

            int baseColor = getThemeColorAngle(i * (360 / totalPoints), currentTime);

            matrices.push();
            matrices.translate(renderPos.x + xOffset, renderPos.y + golovkaY, renderPos.z + zOffset);
            matrices.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(-camera.getYaw()));
            matrices.multiply(RotationAxis.POSITIVE_X.rotationDegrees(camera.getPitch()));

            MatrixStack.Entry golovkaEntry = matrices.peek().copy();

            int coreColor = ColorUtil.multAlpha(baseColor, animationAlpha * 0.9f);
            Vector4i coreVec = new Vector4i(coreColor, coreColor, coreColor, coreColor);
            Render3DUtil.drawGlowTexture(golovkaEntry, glowTexture, -golovkaSize / 2, -golovkaSize / 2, golovkaSize, golovkaSize, coreVec, useDepth);

            matrices.pop();

            for (int t = 1; t <= tailSegments; t++) {
                float tailProgress = (float) t / (tailSegments + 1);
              
                double currentTailY = golovkaY + (tailBaseY - golovkaY) * tailProgress;
                float currentTailAlpha = animationAlpha * (1f - tailProgress) * 0.6f;

                matrices.push();
                matrices.translate(renderPos.x + xOffset, renderPos.y + currentTailY, renderPos.z + zOffset);
                matrices.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(-camera.getYaw()));
                matrices.multiply(RotationAxis.POSITIVE_X.rotationDegrees(camera.getPitch()));

                MatrixStack.Entry tailEntry = matrices.peek().copy();

                int tailCoreColor = ColorUtil.multAlpha(baseColor, currentTailAlpha);
                Vector4i tailCoreVec = new Vector4i(tailCoreColor, tailCoreColor, tailCoreColor, tailCoreColor);
                Render3DUtil.drawGlowTexture(tailEntry, glowTexture, -tailSize / 2, -tailSize / 2, tailSize, tailSize, tailCoreVec, useDepth);

                matrices.pop();
            }
        }

        if (useDepth) RenderSystem.depthMask(true);
        RenderSystem.enableDepthTest();
        RenderSystem.enableCull();
        RenderSystem.defaultBlendFunc();
        RenderSystem.disableBlend();
    }

    private int getThemeColorAngle(int offsetAngle, long currentTime) {
        int color;
        try {
            float timeFactor = (currentTime % 3000) / 3000.0f;
            int colorAngle = (int) (timeFactor * 360) + offsetAngle;
            color = Zenith.getInstance().getThemeManager().getClientColor(colorAngle % 360).getRGB();
        } catch (Exception e) {
            color = 0xFF42A5F5;
        }
        return applyDamageFlash(color);
    }

    private int applyDamageFlash(int color) {
        if (!damageRed.isEnabled()) return color;

        float targetIntensity = 0f;
        long timeSinceDamage = System.currentTimeMillis() - lastDamageTime;
      
        if (timeSinceDamage < DAMAGE_FLASH_DURATION) {
            float progress = (float) timeSinceDamage / DAMAGE_FLASH_DURATION;
            targetIntensity = 1.0f - easeOutCubic(progress);
        }

        damageFlashIntensity = MathHelper.lerp(1f, damageFlashIntensity, targetIntensity);
      
        if (damageFlashIntensity < 0.05f) return color;

        int alpha = (color >> 24) & 0xFF;
        int red = (color >> 16) & 0xFF;
        int green = (color >> 8) & 0xFF;
        int blue = color & 0xFF;

        int finalRed = (int) MathHelper.lerp(damageFlashIntensity, red, 255);
        int finalGreen = (int) MathHelper.lerp(damageFlashIntensity, green, 50);
        int finalBlue = (int) MathHelper.lerp(damageFlashIntensity, blue, 50);

        return (alpha << 24) | (finalRed << 16) | (finalGreen << 8) | finalBlue;
    }

это странный вопрос но ты делаешь фулл скид rockstar 2.0? за код + rep то выглядит хуйня у всех такое
 
1768763365106.png
кольцо сука скид а не худ
 
Назад
Сверху Снизу