Radial Menu

Версия Minecraft
1.7.10
Привет,как сделать круглое меню как на скринах?
Tool-Belt-Mod-3.jpg
Avatar-2-Out-Of-The-Iceberg-Mod-8.jpg
Ability-Wheel.png
 
Решение
Лойсы в студию!
[video=youtube]https://youtu.be/hLiAT9gN3GQ[/video]
Код:
/**
         *    @Author - Ivasik
         *    @link - http://forum.mcmodding.ru/Пользователь-Ivasik
         */
        GlStateManager.pushMatrix();
        GlStateManager.disableTexture2D();
        GlStateManager.color(0, 0, 0, 0.4F);
        GlStateManager.translate(this.width / 2 + 0.5, this.height / 2, 0);

        double a = Math.toDegrees(Math.atan2(mouseY - (height / 2), mouseX - (width / 2)));
        double d = Math.sqrt(Math.pow(mouseX - (width / 2), 2) + Math.pow(mouseY - (height / 2), 2));
        float s0 = ((-0.5F / 4.0F) + 0.5f) * 360;
        if (a < s0) a += 360;

        for(int i = 1; i < 5; i++)
        {
            GlStateManager.rotate(90, 0, 0, 1);
  ...
5,018
47
783
Ivasik написал(а):
Немного доделать осталось, подредачу код и выложу на всеобщее обозрение.
ae1ac840b9616a30183adb03a31ec78d.jpg

В учебник. Вообще, если уж взялся, сливай в учебник все что умеешь
 

Icosider

Kotliner
Администратор
3,601
99
664
Лойсы в студию!
[video=youtube]https://youtu.be/hLiAT9gN3GQ[/video]
Код:
/**
         *    @Author - Ivasik
         *    @link - http://forum.mcmodding.ru/Пользователь-Ivasik
         */
        GlStateManager.pushMatrix();
        GlStateManager.disableTexture2D();
        GlStateManager.color(0, 0, 0, 0.4F);
        GlStateManager.translate(this.width / 2 + 0.5, this.height / 2, 0);

        double a = Math.toDegrees(Math.atan2(mouseY - (height / 2), mouseX - (width / 2)));
        double d = Math.sqrt(Math.pow(mouseX - (width / 2), 2) + Math.pow(mouseY - (height / 2), 2));
        float s0 = ((-0.5F / 4.0F) + 0.5f) * 360;
        if (a < s0) a += 360;

        for(int i = 1; i < 5; i++)
        {
            GlStateManager.rotate(90, 0, 0, 1);
            double angleSegment = (Math.PI * 2 / 4), angle = angleSegment * 2, radiusMin = 58, radiusMax = 92, angleAb, angleCircle;

            float s = (((i - 0.5F) / 4.0F) + 0.25F) * 360;
            float e = (((i + 0.5F) / 4.0F) + 0.25F) * 360;

            angle += Math.toRadians(180D);

            if (a >= s && a < e && d >= 10 && d < 92)
            {
                radiusMax = 92;//def: 100
                radiusMin = 10;//def: 64
                GlStateManager.color(0, 0, 0, 0.6f);
            }
            else
            {
                GlStateManager.color(0, 0, 0, 0.4f);
            }

            final VertexBuffer vertexBuffer = Tessellator.getInstance().getBuffer();
            vertexBuffer.begin(7, DefaultVertexFormats.POSITION);

            for (int i1 = 0; i1 < 32; i1++)
            {
                angleAb = ((angleSegment) / 32D);
                angleCircle = i1 * angleAb + angle - angleSegment / 2;
                vertexBuffer.pos(Math.sin(angleCircle) * radiusMax, Math.cos(angleCircle) * radiusMax, -1).endVertex();
                vertexBuffer.pos(Math.sin(angleCircle + angleAb) * radiusMax, Math.cos(angleCircle + angleAb) * radiusMax, -1).endVertex();
                vertexBuffer.pos(Math.sin(angleCircle + angleAb) * radiusMin, Math.cos(angleCircle + angleAb) * radiusMin, -1).endVertex();
                vertexBuffer.pos(Math.sin(angleCircle) * radiusMin, Math.cos(angleCircle) * radiusMin, -1).endVertex();
            }

            Tessellator.getInstance().draw();
        }

        GlStateManager.enableTexture2D();
        GlStateManager.popMatrix();

P.s. жду предложения по улучшению кода и огребания тапками.
 
Ivasik написал(а):
Лойсы в студию!
[video=youtube]https://youtu.be/hLiAT9gN3GQ[/video]
Код:
/**
         *    @Author - Ivasik
         *    @link - http://forum.mcmodding.ru/Пользователь-Ivasik
         */
        GlStateManager.pushMatrix();
        GlStateManager.disableTexture2D();
        GlStateManager.color(0, 0, 0, 0.4F);
        GlStateManager.translate(this.width / 2 + 0.5, this.height / 2, 0);

        double a = Math.toDegrees(Math.atan2(mouseY - (height / 2), mouseX - (width / 2)));
        double d = Math.sqrt(Math.pow(mouseX - (width / 2), 2) + Math.pow(mouseY - (height / 2), 2));
        float s0 = ((-0.5F / 4.0F) + 0.5f) * 360;
        if (a < s0) a += 360;

        for(int i = 1; i < 5; i++)
        {
            GlStateManager.rotate(90, 0, 0, 1);
            double angleSegment = (Math.PI * 2 / 4), angle = angleSegment * 2, radiusMin = 58, radiusMax = 92, angleAb, angleCircle;

            float s = (((i - 0.5F) / 4.0F) + 0.25F) * 360;
            float e = (((i + 0.5F) / 4.0F) + 0.25F) * 360;

            angle += Math.toRadians(180D);

            if (a >= s && a < e && d >= 10 && d < 92)
            {
                radiusMax = 92;//def: 100
                radiusMin = 10;//def: 64
                GlStateManager.color(0, 0, 0, 0.6f);
            }
            else
            {
                GlStateManager.color(0, 0, 0, 0.4f);
            }

            final VertexBuffer vertexBuffer = Tessellator.getInstance().getBuffer();
            vertexBuffer.begin(7, DefaultVertexFormats.POSITION);

            for (int i1 = 0; i1 < 32; i1++)
            {
                angleAb = ((angleSegment) / 32D);
                angleCircle = i1 * angleAb + angle - angleSegment / 2;
                vertexBuffer.pos(Math.sin(angleCircle) * radiusMax, Math.cos(angleCircle) * radiusMax, -1).endVertex();
                vertexBuffer.pos(Math.sin(angleCircle + angleAb) * radiusMax, Math.cos(angleCircle + angleAb) * radiusMax, -1).endVertex();
                vertexBuffer.pos(Math.sin(angleCircle + angleAb) * radiusMin, Math.cos(angleCircle + angleAb) * radiusMin, -1).endVertex();
                vertexBuffer.pos(Math.sin(angleCircle) * radiusMin, Math.cos(angleCircle) * radiusMin, -1).endVertex();
            }

            Tessellator.getInstance().draw();
        }

        GlStateManager.enableTexture2D();
        GlStateManager.popMatrix();

P.s. жду предложения по улучшению кода и огребания тапками.
Ты на какую версию делал?
 
Ivasik написал(а):
Biter7789 написал(а):
Ты на какую версию делал?
1.11.2, данный код должен для всего подойти, вертекс буффер для 1.7 только изменить нужно.

Можешь на 1.7.10 сделать?
Я просто в гуи мало что понимаю,да и разница большая между 1.7 и 1.11.2
 
Ivasik написал(а):
Лойсы в студию!
[video=youtube]https://youtu.be/hLiAT9gN3GQ[/video]
Код:
/**
         *    @Author - Ivasik
         *    @link - http://forum.mcmodding.ru/Пользователь-Ivasik
         */
        GlStateManager.pushMatrix();
        GlStateManager.disableTexture2D();
        GlStateManager.color(0, 0, 0, 0.4F);
        GlStateManager.translate(this.width / 2 + 0.5, this.height / 2, 0);

        double a = Math.toDegrees(Math.atan2(mouseY - (height / 2), mouseX - (width / 2)));
        double d = Math.sqrt(Math.pow(mouseX - (width / 2), 2) + Math.pow(mouseY - (height / 2), 2));
        float s0 = ((-0.5F / 4.0F) + 0.5f) * 360;
        if (a < s0) a += 360;

        for(int i = 1; i < 5; i++)
        {
            GlStateManager.rotate(90, 0, 0, 1);
            double angleSegment = (Math.PI * 2 / 4), angle = angleSegment * 2, radiusMin = 58, radiusMax = 92, angleAb, angleCircle;

            float s = (((i - 0.5F) / 4.0F) + 0.25F) * 360;
            float e = (((i + 0.5F) / 4.0F) + 0.25F) * 360;

            angle += Math.toRadians(180D);

            if (a >= s && a < e && d >= 10 && d < 92)
            {
                radiusMax = 92;//def: 100
                radiusMin = 10;//def: 64
                GlStateManager.color(0, 0, 0, 0.6f);
            }
            else
            {
                GlStateManager.color(0, 0, 0, 0.4f);
            }

            final VertexBuffer vertexBuffer = Tessellator.getInstance().getBuffer();
            vertexBuffer.begin(7, DefaultVertexFormats.POSITION);

            for (int i1 = 0; i1 < 32; i1++)
            {
                angleAb = ((angleSegment) / 32D);
                angleCircle = i1 * angleAb + angle - angleSegment / 2;
                vertexBuffer.pos(Math.sin(angleCircle) * radiusMax, Math.cos(angleCircle) * radiusMax, -1).endVertex();
                vertexBuffer.pos(Math.sin(angleCircle + angleAb) * radiusMax, Math.cos(angleCircle + angleAb) * radiusMax, -1).endVertex();
                vertexBuffer.pos(Math.sin(angleCircle + angleAb) * radiusMin, Math.cos(angleCircle + angleAb) * radiusMin, -1).endVertex();
                vertexBuffer.pos(Math.sin(angleCircle) * radiusMin, Math.cos(angleCircle) * radiusMin, -1).endVertex();
            }

            Tessellator.getInstance().draw();
        }

        GlStateManager.enableTexture2D();
        GlStateManager.popMatrix();

P.s. жду предложения по улучшению кода и огребания тапками.

Можно ли как-то менять количество секторов на радиусе?
 
4,046
63
645
Ну а самому подумать!
...
Ivasik, посмотрел таки видео... Оценил музон )))
Знаешь... Заменить полупрозрачный диск изображением пластинки, завязать проигрывание на вращение мышкой и можно выпускать свой мод )))

[img=600x413]http://4damki.ru/wp-content/uploads/2015/01/dj-101783_640.jpg[/img]
 
Liahim написал(а):
Ну а самому подумать!
...
Ivasik, посмотрел таки видео... Оценил музон )))
Знаешь... Заменить полупрозрачный диск изображением пластинки, завязать проигрывание на вращение мышкой и можно выпускать свой мод )))

[img=600x413]http://4damki.ru/wp-content/uploads/2015/01/dj-101783_640.jpg[/img]
Как то можно,но они у меня накладываются один на другой.
 

Icosider

Kotliner
Администратор
3,601
99
664
Liahim написал(а):
Ну а самому подумать!
...
Ivasik, посмотрел таки видео... Оценил музон )))
Знаешь... Заменить полупрозрачный диск изображением пластинки, завязать проигрывание на вращение мышкой и можно выпускать свой мод )))

[img=600x413]http://4damki.ru/wp-content/uploads/2015/01/dj-101783_640.jpg[/img]
Стрелять колотить! Идея! Сделаю такой диск и в зависимости от того куда будешь поворачивать звук будет увеличиваться или уменьшаться по скорости воспроизведения. Добавлю кнопки и переключатели, и каждая будет допустим изменять тон и т.п. Но так как я ленивый, мод не появится :С Хотя я подумаю, итак 4 мода пилю...
 
5,018
47
783
Ivasik написал(а):
Liahim написал(а):
Ну а самому подумать!
...
Ivasik, посмотрел таки видео... Оценил музон )))
Знаешь... Заменить полупрозрачный диск изображением пластинки, завязать проигрывание на вращение мышкой и можно выпускать свой мод )))

[img=600x413]http://4damki.ru/wp-content/uploads/2015/01/dj-101783_640.jpg[/img]
Стрелять колотить! Идея! Сделаю такой диск и в зависимости от того куда будешь поворачивать звук будет увеличиваться или уменьшаться по скорости воспроизведения. Добавлю кнопки и переключатели, и каждая будет допустим изменять тон и т.п. Но так как я ленивый, мод не появится :С Хотя я подумаю, итак 4 мода пилю...
Какие моды? Давай сюда, -_- эксперт оценить качество
 

Icosider

Kotliner
Администратор
3,601
99
664
Maxik001 написал(а):
Ivasik написал(а):
Liahim написал(а):
Ну а самому подумать!
...
Ivasik, посмотрел таки видео... Оценил музон )))
Знаешь... Заменить полупрозрачный диск изображением пластинки, завязать проигрывание на вращение мышкой и можно выпускать свой мод )))

[img=600x413]http://4damki.ru/wp-content/uploads/2015/01/dj-101783_640.jpg[/img]
Стрелять колотить! Идея! Сделаю такой диск и в зависимости от того куда будешь поворачивать звук будет увеличиваться или уменьшаться по скорости воспроизведения. Добавлю кнопки и переключатели, и каждая будет допустим изменять тон и т.п. Но так как я ленивый, мод не появится :С Хотя я подумаю, итак 4 мода пилю...
Какие моды? Давай сюда, -_- эксперт оценить качество
Ага, ага, вот так сразу, наивный) Раскрою лишь то что один мод это либа, второй рпг, третий фермерство, четвертый на военную тематику.
 
Ivasik написал(а):
Liahim написал(а):
Ну а самому подумать!
...
Ivasik, посмотрел таки видео... Оценил музон )))
Знаешь... Заменить полупрозрачный диск изображением пластинки, завязать проигрывание на вращение мышкой и можно выпускать свой мод )))

[img=600x413]http://4damki.ru/wp-content/uploads/2015/01/dj-101783_640.jpg[/img]
Стрелять колотить! Идея! Сделаю такой диск и в зависимости от того куда будешь поворачивать звук будет увеличиваться или уменьшаться по скорости воспроизведения. Добавлю кнопки и переключатели, и каждая будет допустим изменять тон и т.п. Но так как я ленивый, мод не появится :С Хотя я подумаю, итак 4 мода пилю...
Так как увеличить или уменьшить количество секторов?
 
Сверху