forked from Kolyah35/minecraft-pe-0.6.1
132 lines
4.2 KiB
C++
132 lines
4.2 KiB
C++
#include "CreditsScreen.h"
|
|
#include "StartMenuScreen.h"
|
|
#include "OptionsScreen.h"
|
|
#include "../../Minecraft.h"
|
|
#include "../components/Button.h"
|
|
#include "../components/ImageButton.h"
|
|
#include "platform/input/Mouse.h"
|
|
|
|
CreditsScreen::CreditsScreen()
|
|
: bHeader(NULL), btnBack(NULL)
|
|
{}
|
|
CreditsScreen::~CreditsScreen() {
|
|
if (bHeader) delete bHeader;
|
|
if (btnBack) delete btnBack;
|
|
}
|
|
|
|
void CreditsScreen::init() {
|
|
bHeader = new Touch::THeader(0, "Credits");
|
|
btnBack = new ImageButton(1, "");
|
|
{
|
|
ImageDef def;
|
|
def.name = "gui/touchgui.png";
|
|
def.width = 34;
|
|
def.height = 26;
|
|
def.setSrc(IntRectangle(150, 0, (int)def.width, (int)def.height));
|
|
btnBack->setImageDef(def, true);
|
|
}
|
|
buttons.push_back(bHeader);
|
|
buttons.push_back(btnBack);
|
|
|
|
// TODO: rewrite it
|
|
// prepare text lines
|
|
_lines.clear();
|
|
_lines.push_back("Minecraft: Pocket Edition");
|
|
_lines.push_back("Original game by Mojang");
|
|
_lines.push_back("");
|
|
_lines.push_back("Programmers:");
|
|
_lines.push_back("mschiller890");
|
|
_lines.push_back("InviseDivine");
|
|
_lines.push_back("Kolyah35");
|
|
_lines.push_back("karson");
|
|
_lines.push_back("deepfriedwaffles");
|
|
_lines.push_back("EpikIzCool");
|
|
_lines.push_back("");
|
|
// avoid color tags around the URL so it isn't mangled by the parser please
|
|
_lines.push_back("Join our Discord server: https://discord.gg/c58YesBxve");
|
|
_scrollSpeed = 0.5f;
|
|
_scrollY = height; // start below screen
|
|
}
|
|
|
|
void CreditsScreen::setupPositions() {
|
|
int buttonHeight = btnBack->height;
|
|
btnBack->x = width - btnBack->width;
|
|
btnBack->y = 0;
|
|
if (bHeader) {
|
|
bHeader->x = 0;
|
|
bHeader->y = 0;
|
|
bHeader->width = width - btnBack->width;
|
|
bHeader->height = btnBack->height;
|
|
}
|
|
|
|
// reset scroll starting position when screen size changes
|
|
_scrollY = height;
|
|
}
|
|
|
|
void CreditsScreen::tick() {
|
|
// move text upward
|
|
_scrollY -= _scrollSpeed;
|
|
// if text has scrolled off the top, restart
|
|
float totalHeight = _lines.size() * (minecraft->font->lineHeight + 8);
|
|
if (_scrollY + totalHeight < 0) {
|
|
_scrollY = height;
|
|
}
|
|
|
|
if (Mouse::isButtonDown(MouseAction::ACTION_LEFT)) {
|
|
_scrollSpeed = 1.5f;
|
|
} else {
|
|
_scrollSpeed = 0.5f;
|
|
}
|
|
}
|
|
|
|
void CreditsScreen::render(int xm, int ym, float a) {
|
|
renderBackground();
|
|
int w = width;
|
|
Font* font = minecraft->font;
|
|
float y = _scrollY;
|
|
const float lineHeight = font->lineHeight + 8;
|
|
for (size_t i = 0; i < _lines.size(); ++i) {
|
|
const std::string& line = _lines[i];
|
|
// use color-tag-aware drawing, centre by total width
|
|
float lineWidth = Gui::getColoredWidth(font, line);
|
|
Gui::drawColoredString(font, line, w/2 - lineWidth/2, (int)y, 255);
|
|
// underline hyperlink lines manually
|
|
if (line.find("http") != std::string::npos || line.find("discord.gg") != std::string::npos) {
|
|
float x0 = w/2 - lineWidth/2;
|
|
float y0 = y + font->lineHeight - 1;
|
|
this->fill(x0, y0, x0 + lineWidth, y0 + 1, 0xffffffff);
|
|
}
|
|
y += lineHeight;
|
|
}
|
|
|
|
super::render(xm, ym, a);
|
|
}
|
|
|
|
void CreditsScreen::buttonClicked(Button* button) {
|
|
if (button->id == 1) {
|
|
minecraft->setScreen(new OptionsScreen());
|
|
}
|
|
}
|
|
|
|
void CreditsScreen::mouseClicked(int x, int y, int buttonNum) {
|
|
// map click to a line in the scrolling text
|
|
const float lineHeight = minecraft->font->lineHeight + 8;
|
|
for (size_t i = 0; i < _lines.size(); ++i) {
|
|
float lineY = _scrollY + i * lineHeight;
|
|
if (y >= lineY && y < lineY + lineHeight) {
|
|
const std::string& line = _lines[i];
|
|
size_t start = line.find("http");
|
|
if (start == std::string::npos)
|
|
start = line.find("discord.gg");
|
|
if (start != std::string::npos) {
|
|
// extract until space
|
|
size_t end = line.find(' ', start);
|
|
std::string url = line.substr(start, (end == std::string::npos) ? std::string::npos : end - start);
|
|
minecraft->platform()->openURL(url);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
super::mouseClicked(x, y, buttonNum);
|
|
}
|