4jcraft/Minecraft.Client/UI/Screens/ControlsScreen.cpp
2026-03-13 17:10:10 -05:00

67 lines
2.2 KiB
C++

#include "../../Platform/stdafx.h"
#include "ControlsScreen.h"
#include "../../GameState/Options.h"
#include "../SmallButton.h"
#include "../../../Minecraft.World/Headers/net.minecraft.locale.h"
ControlsScreen::ControlsScreen(Screen* lastScreen, Options* options) {
// 4J - added initialisers
title = L"Controls";
selectedKey = -1;
this->lastScreen = lastScreen;
this->options = options;
}
int ControlsScreen::getLeftScreenPosition() { return width / 2 - 155; }
void ControlsScreen::init() {
Language* language = Language::getInstance();
int leftPos = getLeftScreenPosition();
for (int i = 0; i < Options::keyMappings_length; i++) {
buttons.push_back(new SmallButton(
i, leftPos + i % 2 * ROW_WIDTH, height / 6 + 24 * (i >> 1),
BUTTON_WIDTH, 20, options->getKeyMessage(i)));
}
buttons.push_back(new Button(200, width / 2 - 100, height / 6 + 24 * 7,
language->getElement(L"gui.done")));
title = language->getElement(L"controls.title");
}
void ControlsScreen::buttonClicked(Button* button) {
for (int i = 0; i < Options::keyMappings_length; i++) {
buttons[i]->msg = options->getKeyMessage(i);
}
if (button->id == 200) {
minecraft->setScreen(lastScreen);
} else {
selectedKey = button->id;
button->msg = L"> " + options->getKeyMessage(button->id) + L" <";
}
}
void ControlsScreen::keyPressed(wchar_t eventCharacter, int eventKey) {
if (selectedKey >= 0) {
options->setKey(selectedKey, eventKey);
buttons[selectedKey]->msg = options->getKeyMessage(selectedKey);
selectedKey = -1;
} else {
Screen::keyPressed(eventCharacter, eventKey);
}
}
void ControlsScreen::render(int xm, int ym, float a) {
renderBackground();
drawCenteredString(font, title, width / 2, 20, 0xffffff);
int leftPos = getLeftScreenPosition();
for (int i = 0; i < Options::keyMappings_length; i++) {
drawString(font, options->getKeyDescription(i),
leftPos + i % 2 * ROW_WIDTH + BUTTON_WIDTH + 6,
height / 6 + 24 * (i >> 1) + 7, 0xffffffff);
}
Screen::render(xm, ym, a);
}