Skip to content

Commit

Permalink
[WorldMenuState] Removed. Buttons moved to WorldSelectionState.
Browse files Browse the repository at this point in the history
  • Loading branch information
Unarelith committed Jun 26, 2020
1 parent b35a70f commit 377ff45
Show file tree
Hide file tree
Showing 9 changed files with 87 additions and 184 deletions.
2 changes: 2 additions & 0 deletions source/client/gui/MenuWidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,9 @@ TextButton &MenuWidget::addButton(const std::string &text, const TextButton::Cpp
TextButton &button = m_buttons.back();
button.setText(text);
button.setCallback(callback);

updateButtonPosition(button, x, y);

return button;
}

Expand Down
22 changes: 18 additions & 4 deletions source/client/gui/TextButton.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,14 @@ TextButton::TextButton(u16 width, Widget *parent) : Widget(width, 20, parent) {
m_background.setClipRect(0, 66, width, 20);
m_hoverBackground.setClipRect(0, 86, width, 20);
m_disabledBackground.setClipRect(0, 46, width, 20);

m_backgroundBorder.setClipRect(200 - 2, 66, 2, 20);
m_hoverBackgroundBorder.setClipRect(200 - 2, 86, 2, 20);
m_disabledBackgroundBorder.setClipRect(200 - 2, 46, 2, 20);

m_backgroundBorder.setPosition(width - 2, 0);
m_hoverBackgroundBorder.setPosition(width - 2, 0);
m_disabledBackgroundBorder.setPosition(width - 2, 0);
}

TextButton::TextButton(const CppCallback &callback, Widget *parent) : TextButton(parent) {
Expand All @@ -45,7 +53,7 @@ void TextButton::onEvent(const sf::Event &event) {

if (m_isEnabled && m_isHovered && m_text.color() == gk::Color::White)
m_text.setColor({255, 255, 160});
else if (!m_isHovered && m_text.color() != gk::Color::White)
else if (m_isEnabled && !m_isHovered && m_text.color() != gk::Color::White)
m_text.setColor(gk::Color::White);
}
else if (event.type == sf::Event::MouseButtonPressed && event.mouseButton.button == sf::Mouse::Left && m_isHovered && m_isEnabled) {
Expand All @@ -66,12 +74,18 @@ void TextButton::setText(const std::string &text) {
void TextButton::draw(gk::RenderTarget &target, gk::RenderStates states) const {
states.transform *= getTransform();

if (!m_isEnabled)
if (!m_isEnabled) {
target.draw(m_disabledBackground, states);
else if (m_isHovered)
target.draw(m_disabledBackgroundBorder, states);
}
else if (m_isHovered) {
target.draw(m_hoverBackground, states);
else
target.draw(m_hoverBackgroundBorder, states);
}
else {
target.draw(m_background, states);
target.draw(m_backgroundBorder, states);
}

target.draw(m_text, states);
}
Expand Down
10 changes: 9 additions & 1 deletion source/client/gui/TextButton.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,11 @@ class TextButton : public Widget {
void setCallback(const CppCallback &callback) { m_cppCallback = callback; }
void setCallback(const LuaCallback &callback) { m_luaCallback = callback; }

void setEnabled(bool isEnabled) { m_isEnabled = isEnabled; }
void setEnabled(bool isEnabled) {
m_isEnabled = isEnabled;
m_text.setColor(isEnabled ? gk::Color::White : gk::Color{160, 160, 160});
m_text.setShadowEnabled(isEnabled);
}

private:
void draw(gk::RenderTarget &target, gk::RenderStates states) const override;
Expand All @@ -62,6 +66,10 @@ class TextButton : public Widget {
gk::Image m_hoverBackground{"texture-widgets"};
gk::Image m_disabledBackground{"texture-widgets"};

gk::Image m_backgroundBorder{"texture-widgets"};
gk::Image m_hoverBackgroundBorder{"texture-widgets"};
gk::Image m_disabledBackgroundBorder{"texture-widgets"};

Text m_text;

CppCallback m_cppCallback;
Expand Down
4 changes: 2 additions & 2 deletions source/client/states/WorldCreationState.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,8 @@ WorldCreationState::WorldCreationState(TitleScreenState *titleScreen, const std:
m_stateStack->pop(); // WorldSelectionState
m_stateStack->push<WorldSelectionState>(titleScreen);
}

m_stateStack->pop();
else
m_stateStack->pop();

if (originalName.empty())
titleScreen->startSingleplayer(true, worldName);
Expand Down
1 change: 0 additions & 1 deletion source/client/states/WorldDeletionState.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,6 @@ WorldDeletionState::WorldDeletionState(const std::string &worldName, TitleScreen
if (fs::exists(saveFilepath))
fs::remove(saveFilepath);
m_stateStack->pop(); // WorldDeletionState
m_stateStack->pop(); // WorldMenuState

// FIXME: This is needed because there's currently no way to refresh WorldSelectionState
m_stateStack->pop(); // WorldSelectionState
Expand Down
100 changes: 0 additions & 100 deletions source/client/states/WorldMenuState.cpp

This file was deleted.

54 changes: 0 additions & 54 deletions source/client/states/WorldMenuState.hpp

This file was deleted.

74 changes: 53 additions & 21 deletions source/client/states/WorldSelectionState.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
#include "Config.hpp"
#include "TitleScreenState.hpp"
#include "WorldCreationState.hpp"
#include "WorldMenuState.hpp"
#include "WorldDeletionState.hpp"
#include "WorldSelectionState.hpp"

namespace fs = ghc::filesystem;
Expand All @@ -41,28 +41,44 @@ WorldSelectionState::WorldSelectionState(TitleScreenState *titleScreen)
: InterfaceState(titleScreen), m_titleScreen(titleScreen)
{
m_title.setScale(Config::guiScale, Config::guiScale);
m_title.setString("Select or create a world");
m_title.setString("Select World");
m_title.updateVertexBuffer();

m_background.setScale(Config::guiScale * 2, Config::guiScale * 2);

m_filter1.setFillColor(gk::Color(0, 0, 0, 128));
m_filter1.setFillColor(gk::Color(0, 0, 0, 176));
m_filter2.setFillColor(gk::Color(0, 0, 0, 192));

m_worldList.setScale(Config::guiScale, Config::guiScale);

m_menuWidget.setScale(Config::guiScale, Config::guiScale);
m_menuWidget.addButton("New world", [this](TextButton &) {
m_menuWidget1.setScale(Config::guiScale, Config::guiScale);
m_menuWidget1.addButton("Play Selected World", [this](TextButton &) {
const ScrollableListElement *element = m_worldList.selectedElement();
if (element)
m_titleScreen->startSingleplayer(true, element->line1());
});
m_menuWidget1.addButton("Create New World", [this](TextButton &) {
m_stateStack->push<WorldCreationState>(m_titleScreen);
}, 100);
m_menuWidget.addButton("Open", [this](TextButton &) {
});

m_menuWidget2.setScale(Config::guiScale, Config::guiScale);
m_menuWidget2.addButton("Edit", [this](TextButton &) {
const ScrollableListElement *element = m_worldList.selectedElement();
if (element)
m_stateStack->push<WorldMenuState>(element->line1(), m_titleScreen);
}, 100);
m_menuWidget.addButton("Cancel", [this](TextButton &) {
m_stateStack->push<WorldCreationState>(m_titleScreen, element->line1());
}, 98);
m_menuWidget2.addButton("Delete", [this](TextButton &) {
const ScrollableListElement *element = m_worldList.selectedElement();
if (element)
m_stateStack->push<WorldDeletionState>(element->line1(), m_titleScreen);
}, 97);

m_menuWidget3.setScale(Config::guiScale, Config::guiScale);
m_menuWidget3.addButton("Re-Create", [](TextButton &) {
}, 97).setEnabled(false);
m_menuWidget3.addButton("Cancel", [this](TextButton &) {
m_stateStack->pop();
}, 100);
}, 98);

updateWidgetPosition();
loadSaveList();
Expand All @@ -77,7 +93,10 @@ void WorldSelectionState::onEvent(const sf::Event &event) {

if (!m_stateStack->empty() && &m_stateStack->top() == this) {
m_worldList.onEvent(event);
m_menuWidget.onEvent(event);

m_menuWidget1.onEvent(event);
m_menuWidget2.onEvent(event);
m_menuWidget3.onEvent(event);
}
}

Expand All @@ -90,23 +109,34 @@ void WorldSelectionState::updateWidgetPosition() {

m_filter1.setSize(Config::screenWidth, Config::screenHeight);

const int borderSize = 25 * Config::guiScale;
m_filter2.setSize(Config::screenWidth, Config::screenHeight - borderSize * 2);
m_filter2.setPosition(0, borderSize);
const int topBorderSize = 25 * Config::guiScale;
const int bottomBorderSize = 50 * Config::guiScale;
m_filter2.setSize(Config::screenWidth, Config::screenHeight - topBorderSize - bottomBorderSize);
m_filter2.setPosition(0, topBorderSize);

m_title.setPosition(
Config::screenWidth / 2.0f - m_title.getSize().x * Config::guiScale / 2.0f,
borderSize / 2 - m_title.getSize().y * Config::guiScale / 2.0f
topBorderSize / 2.0f - m_title.getSize().y * Config::guiScale / 2.0f
);

m_worldList.setPosition(
Config::screenWidth / 2.0f - m_worldList.getGlobalBounds().sizeX / 2.0f,
borderSize + 2 * Config::guiScale
topBorderSize + 2.0f * Config::guiScale
);

m_menuWidget1.setPosition(
Config::screenWidth / 2.0f - m_menuWidget1.getGlobalBounds().sizeX / 2.0f,
Config::screenHeight - bottomBorderSize / 2.0f - m_menuWidget1.getGlobalBounds().sizeY - 2
);

m_menuWidget2.setPosition(
Config::screenWidth / 2.0f - m_menuWidget2.getGlobalBounds().sizeX - 10,
Config::screenHeight - bottomBorderSize / 2.0f + 2
);

m_menuWidget.setPosition(
Config::screenWidth / 2.0f - m_menuWidget.getGlobalBounds().sizeX / 2.0f,
Config::screenHeight - borderSize / 2 - m_menuWidget.getGlobalBounds().sizeY / 2.0f
m_menuWidget3.setPosition(
Config::screenWidth / 2.0f + 6,
Config::screenHeight - bottomBorderSize / 2.0f + 2
);
}

Expand Down Expand Up @@ -146,7 +176,9 @@ void WorldSelectionState::draw(gk::RenderTarget &target, gk::RenderStates states
target.draw(m_title, states);

target.draw(m_worldList, states);
target.draw(m_menuWidget, states);
target.draw(m_menuWidget1, states);
target.draw(m_menuWidget2, states);
target.draw(m_menuWidget3, states);
}
}

4 changes: 3 additions & 1 deletion source/client/states/WorldSelectionState.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,9 @@ class WorldSelectionState : public InterfaceState {

ScrollableList m_worldList;

MenuWidget m_menuWidget{3, 1};
MenuWidget m_menuWidget1{2, 1};
MenuWidget m_menuWidget2{2, 1};
MenuWidget m_menuWidget3{2, 1};
};

#endif // WORLDSELECTIONSTATE_HPP_

0 comments on commit 377ff45

Please sign in to comment.