88 lines
2.9 KiB
C++
88 lines
2.9 KiB
C++
#include "InfoAppMenu.h"
|
|
|
|
#include "AppMenu.h"
|
|
#include "../PlayerCursor.h"
|
|
|
|
#include <stack>
|
|
#include <memory>
|
|
#include <vector>
|
|
#include <SFML/Graphics.hpp>
|
|
|
|
|
|
InfoAppMenu::InfoAppMenu(std::shared_ptr<MenuStack> menuStack, std::shared_ptr<Settings> settings, std::shared_ptr<sf::RenderWindow> renderWindow) :
|
|
AppMenu(menuStack, settings, renderWindow),
|
|
playerCursor({4}),
|
|
sectionsName(
|
|
"< ABOUT >",
|
|
"< ROTATION SYSTEM >",
|
|
"< SCORING >",
|
|
"< 0 DEGREES ROTATIONS >"
|
|
),
|
|
sectionsContent(
|
|
"This game is written in C++,\n"
|
|
"using SFML 3 for the GUI.\n"
|
|
"It has been inspired by other\n"
|
|
"stacker games, such as\n"
|
|
"Techmino, jstris, tetr.io, etc.\n"
|
|
"This project isn't affiliated\n"
|
|
"to them in any ways.\n"
|
|
"Current version: beta.",
|
|
|
|
"This game uses its own\n"
|
|
"Rotation Sytem, called AutoRS.\n"
|
|
"The rotation center is always the\n"
|
|
"center of the piece by default.\n"
|
|
"When kicking the piece, it will\n"
|
|
"compute and try (most) position that\n"
|
|
"touches the original piece,\n"
|
|
"prioritizing sides over depth and\n"
|
|
"firstly going down before going up.",
|
|
|
|
"The score gained from a line clear\n"
|
|
"doubles when clearing one more line.\n"
|
|
"Clearing with a spin scores as much\n"
|
|
"as clearing 2x more lines normally.\n"
|
|
"B2B is granted by clearing at least\n"
|
|
"4 lines or doing a spin or mini-spin,\n"
|
|
"and doubles the score gained.\n"
|
|
"A spin is detected when the piece is\n"
|
|
"locked in place, a mini-spin simply\n"
|
|
"when the last move was a kick.",
|
|
|
|
"This games introduces 0 degrees\n"
|
|
"rotations, which work by simpling\n"
|
|
"moving the piece down and kicking\n"
|
|
"it as is, allowing for new kinds\n"
|
|
"of kicks.\n"
|
|
"As a leniency mechanic, when a\n"
|
|
"piece spawns it will automatically\n"
|
|
"try a 0 degrees rotations if it\n"
|
|
"spawned inside a wall."
|
|
) {
|
|
|
|
}
|
|
|
|
void InfoAppMenu::computeFrame() {
|
|
this->updateMetaBinds();
|
|
this->playerCursor.updatePosition();
|
|
|
|
if (this->escReleased) {
|
|
this->menuStack->pop();
|
|
}
|
|
}
|
|
|
|
void InfoAppMenu::drawFrame() const {
|
|
this->renderWindow->clear(sf::Color(200, 200, 200));
|
|
|
|
sf::Text text(this->pressStartFont, "", this->settings->getWindowSizeMultiplier() * 2);
|
|
text.setFillColor(sf::Color(0, 0, 0));
|
|
text.setOutlineColor(sf::Color(255, 255, 255));
|
|
|
|
this->placeTitle(text, this->playerCursor, this->sectionsName[this->playerCursor.getPosition().x], 10.f, this->playerCursor.getPosition());
|
|
|
|
text.setLineSpacing((float) this->settings->getWindowSizeMultiplier() / 8);
|
|
this->placeText(text, {}, this->sectionsContent[this->playerCursor.getPosition().x], 5.f, 30.f, {});
|
|
|
|
this->renderWindow->display();
|
|
}
|