Фиксация гуи

Версия Minecraft
1.7.10
1,196
31
183
Решил побаловаться и поперемещать ванильную гуишку.
Но она перемещается в зависимости от размера экрана майна, оххх...
Пробовал брать event.resolution.getScaledWidth(); и прочее - бестолку
Но зафиксировать то хочется. Темы листал по этой теме и все пробовал, ну не получается все равно...
Помогите пожалуйста
 

Вложения

  • Снимок1.JPG
    Снимок1.JPG
    120.3 KB · Просмотры: 37
  • Снимок.JPG
    Снимок.JPG
    62.8 KB · Просмотры: 36
Решение
Тебе нужно сначала вернуть координаты смещения в 0, 0, а потом уже смещать куда нужно.
Посмотри в GuiIngameForge на каких координатах рисуется тот или иной элемент, допустим на 100, 100.
Потом тебе нужно у себя сделать сначала glTranslatef(-100, -100, 0), а потом уже glTranslatef(width / 2, height / 2).
3,005
192
592
Пробовал брать event.resolution.getScaledWidth(); и прочее - бестолку
Все должно работать нормально, если ты будешь это юзать.
Можешь хотя бы скинуть код, который ты юзаешь?
 
7,099
324
1,510
1,196
31
183
Java:
@SubscribeEvent
     public void render(RenderGameOverlayEvent.Pre event){
        int w = event.resolution.getScaledWidth();
        int h = event.resolution.getScaledHeight();
        
        if(event.type == ElementType.FOOD){
            GL11.glPushMatrix();
            //System.out.println(w);
            GL11.glTranslatef(w - 550, h - 382, 0.0F);
        }
        if(event.type == ElementType.HEALTH){
            GL11.glPushMatrix();
            GL11.glTranslatef(w - 450, h - 400, 0.0F);       
        }
     }
     @SubscribeEvent
     public void render(RenderGameOverlayEvent.Post event){     
        if(event.type == ElementType.FOOD){
            GL11.glPopMatrix();
        }
        if(event.type == ElementType.HEALTH){
            
            GL11.glPopMatrix();
        }
     }
Возможно я не так рендерю, как нужно? Простите, в этом полный ноль(
 
1,196
31
183
в той теме написано
Но разве элементы гуи, такие как голод, жизнь, их можно отцентровать одним из каких либо способов в той теме? Каким, лул?
Я ж просто транслейчу уже зарисованные части интерфейса
 

tox1cozZ

aka Agravaine
8,455
598
2,892
Тебе нужно сначала вернуть координаты смещения в 0, 0, а потом уже смещать куда нужно.
Посмотри в GuiIngameForge на каких координатах рисуется тот или иной элемент, допустим на 100, 100.
Потом тебе нужно у себя сделать сначала glTranslatef(-100, -100, 0), а потом уже glTranslatef(width / 2, height / 2).
 
7,099
324
1,510
1,196
31
183
Тебе нужно сначала вернуть координаты смещения в 0, 0, а потом уже смещать куда нужно.
Посмотри в GuiIngameForge на каких координатах рисуется тот или иной элемент, допустим на 100, 100.
Потом тебе нужно у себя сделать сначала glTranslatef(-100, -100, 0), а потом уже glTranslatef(width / 2, height / 2).
Чекнул - не понял, лол
@hohserg1 ну так это же текстура -_ -- Мне заново рисовать ванильное гуи?)
 
7,099
324
1,510
7,099
324
1,510
В лс будущие поколения не увидят.
Тестуру новую не нужно рисовать.
Идея в том, чтобы сдвигать перед ванильной отрисовкой текстуры. Сначала в центр координат, а потом по формулам которые написал svk в нужное место. А майн уже дальше рисует че-то
 
1,196
31
183
Дело в том, что прочекав GuiIngameForge, я совершенно не понял, куда сдвигается худ здоровья, например
@Agravaine , в другой теме (в туториале твоем) ты тоже писал что сдвигать надо к нулю. Но, к какому нулю?

public void renderHealth(int width, int height)
{
bind(icons);
if (pre(HEALTH)) return;
mc.mcProfiler.startSection("health");
GL11.glEnable(GL11.GL_BLEND);

boolean highlight = mc.thePlayer.hurtResistantTime / 3 % 2 == 1;

if (mc.thePlayer.hurtResistantTime < 10)
{
highlight = false;
}

IAttributeInstance attrMaxHealth = this.mc.thePlayer.getEntityAttribute(SharedMonsterAttributes.maxHealth);
int health = MathHelper.ceiling_float_int(mc.thePlayer.getHealth());
int healthLast = MathHelper.ceiling_float_int(mc.thePlayer.prevHealth);
float healthMax = (float)attrMaxHealth.getAttributeValue();
float absorb = this.mc.thePlayer.getAbsorptionAmount();

int healthRows = MathHelper.ceiling_float_int((healthMax + absorb) / 2.0F / 10.0F);
int rowHeight = Math.max(10 - (healthRows - 2), 3);

this.rand.setSeed((long)(updateCounter * 312871));

int left = width / 2 - 91;
int top = height - left_height;
left_height += (healthRows * rowHeight);
if (rowHeight != 10) left_height += 10 - rowHeight;

int regen = -1;
if (mc.thePlayer.isPotionActive(Potion.regeneration))
{
regen = updateCounter % 25;
}

final int TOP = 9 * (mc.theWorld.getWorldInfo().isHardcoreModeEnabled() ? 5 : 0);
final int BACKGROUND = (highlight ? 25 : 16);
int MARGIN = 16;
if (mc.thePlayer.isPotionActive(Potion.poison)) MARGIN += 36;
else if (mc.thePlayer.isPotionActive(Potion.wither)) MARGIN += 72;
float absorbRemaining = absorb;

for (int i = MathHelper.ceiling_float_int((healthMax + absorb) / 2.0F) - 1; i >= 0; --i)
{
//int b0 = (highlight ? 1 : 0);
int row = MathHelper.ceiling_float_int((float)(i + 1) / 10.0F) - 1;
int x = left + i % 10 * 8;
int y = top - row * rowHeight;

if (health <= 4) y += rand.nextInt(2);
if (i == regen) y -= 2;

drawTexturedModalRect(x, y, BACKGROUND, TOP, 9, 9);

if (highlight)
{
if (i * 2 + 1 < healthLast)
drawTexturedModalRect(x, y, MARGIN + 54, TOP, 9, 9); //6
else if (i * 2 + 1 == healthLast)
drawTexturedModalRect(x, y, MARGIN + 63, TOP, 9, 9); //7
}

if (absorbRemaining > 0.0F)
{
if (absorbRemaining == absorb && absorb % 2.0F == 1.0F)
drawTexturedModalRect(x, y, MARGIN + 153, TOP, 9, 9); //17
else
drawTexturedModalRect(x, y, MARGIN + 144, TOP, 9, 9); //16
absorbRemaining -= 2.0F;
}
else
{
if (i * 2 + 1 < health)
drawTexturedModalRect(x, y, MARGIN + 36, TOP, 9, 9); //4
else if (i * 2 + 1 == health)
drawTexturedModalRect(x, y, MARGIN + 45, TOP, 9, 9); //5
}
}

GL11.glDisable(GL11.GL_BLEND);
mc.mcProfiler.endSection();
post(HEALTH);
}
Ничего здесь понять не могу.. Что за MARGIN? Почему он именно равен 16 сначала? Лол
 
Последнее редактирование:
Сверху