Перетаскиваемый GuiScreen

Версия Minecraft
1.7.10

Sainthozier

Стрелочник
623
11
369
Всем привет.

Решил ознакомиться детальнее с гуишками различными и первым делом захотел сделать альтернативу гуи ачивок, только на весь экран и со своими фишками. Рамку и картинку на фоне я отрендерил, пришла очередь сделать так, чтобы при зажатой лкм на фоне, я мог его "перетаскивать" на заданное фиксированное расстояние. Первым делом, конечно же, я полез в исходники. В итоге копаюсь второй день.

Проблема состоит в том, что мне не до конца понятен алгоритм действий. По сути, да, я могу скопировать ванильный код и, возможно, он будет работать. Но я хочу узнать об этом немного больше, чтобы самому хорошо разобраться и свободно манипулировать этим, возможно улучшить, придумать что-то новое или же наоборот - добавить.

Итак, думаю рендер рамки никому не нужен, там ничего интересного, а вот с рендером картинки на фуллскрин возникли трудности. Поиск по форумам привёл к вполне логическому решению:
Java:
GL11.glPushMatrix();
//GL11.glTranslatef(0, 0, -200.0F);
float x = (float) width / backgroundImageWidth;
float y = (float) height / backgroundImageHeight;
GL11.glScalef(x, y, 1.0F);
this.mc.getTextureManager().bindTexture(bg);
// drawModalRectWithCustomSizedTexture
func_146110_a(0, 0, 0, 0, backgroundImageWidth, backgroundImageHeight, backgroundImageWidth,
              backgroundImageHeight);
GL11.glPopMatrix();
Если что, разрешение картинки 1000х625.
А вот по поводу GL11.glTranslatef(0, 0, -200.0F), это я взял с ванили. Почему-то мне показалось, что это позволит в дальнейшем перетаскивать фон. Закомментил на всякий случай, чтобы не забыть.
Так вот, рамка и фон есть. А вот дальше с чего начать - не совсем понимаю. Не могу никак придумать дальнейший алгоритм действий. Буду рад почитать подробнее о перетаскивании гуи, если кто в этом хорошо разбирается и понимает, как оно всё устроено )
 

Icosider

Kotliner
Администратор
3,600
99
663
А вот по поводу GL11.glTranslatef(0, 0, -200.0F), это я взял с ванили. Почему-то мне показалось, что это позволит в дальнейшем перетаскивать фон.
Не позволит, это просто смещение по оси z в глубь. Тебе нужно изменять положение элементов, фона(с помощью смещения позиций XY), перетаскивание можешь посмотреть в слайдерах меню GuiOptions.
 
1,159
38
544
Я бы оверрайднул handleMouseClick() (ну или handleMouseInput()) и в нем производил бы расчеты при клике, чтобы GUI следовало за мышкой.
 

Sainthozier

Стрелочник
623
11
369
Не позволит, это просто смещение по оси z в глубь.
А что подразумевается под смещением в 2D плоскости? Что-то вроде скейлинга или z-index'a?

Я бы оверрайднул handleMouseClick() (ну или handleMouseInput())
Да, конечно, но я до этого ещё не дошёл )

Моя вина, вопрос так и не сформирован. Немного перефразирую тогда. Вот приблизительный вид того, чего я хочу добиться в данный момент:
Сейчас у меня так:
FU6OWgLwgbU.jpg


А в итоге хочу сделать так:
DEQVZNUum0U.jpg

Где зелёным цветом нарисована рамка на всю ширину и высоту экрана, а чёрным - картинка, т.е. фон.
Проблема в том, что я не знаю как именно отрендерить фон, к каким координатам привязываться. И вообще, правильно ли он рендерится у меня в данный момент на фуллскрин? Если от стартовых координат отниму то кол-во, которое я бы хотел, чтобы было вне рамки, правильно ли это будет? Или может я не ту дорогу выбрал )
 

Icosider

Kotliner
Администратор
3,600
99
663
А что подразумевается под смещением в 2D плоскости? Что-то вроде скейлинга или z-index'a?
Представь слои из фотошопа, и представь, что ты их смещаешь так, чтобы нужный слой было видно. Тут что-то похожее, т.е. слой с 0 zLevel будет "ниже" и слой с 1 zLevel перекроет его.
 
Сверху