Skip to content

Commit

Permalink
Merge pull request #183 from BinaryDrag0n/master
Browse files Browse the repository at this point in the history
#168 GUI: Checkbox Pull Request
  • Loading branch information
Hopson97 committed Mar 29, 2020
2 parents 467f251 + 9222a47 commit d67d365
Show file tree
Hide file tree
Showing 11 changed files with 231 additions and 8 deletions.
15 changes: 15 additions & 0 deletions game/client/gui_helpers/stack_menu.lua
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ local WIDGET_WIDTH = 800
local WIDGET_HEIGHT = 90
local BUTTON_SIZE = GuiDim.new(0, WIDGET_WIDTH, 0, WIDGET_HEIGHT)
local widgetTexture = game.getTexture("res/button.png")
local checkboxTexture_unchecked = game.getTexture("res/checkbox-unchecked.png")
local checkboxTexture_checked = game.getTexture("res/checkbox-checked.png")

StackMenu = {}
StackMenu.__index = StackMenu
Expand Down Expand Up @@ -69,6 +71,19 @@ function StackMenu:addButton(text)
return button
end

function StackMenu:addCheckBox(text)
local checkBox = self.overlay:addCheckBox()
self:initBasicWidget(checkBox)
checkBox.position = GuiDim.new(0, (1920 / 2 - (WIDGET_WIDTH - 500) / 2), 0, self.y + self.widgetGap) -- LEFT OFF HERE!
checkBox.size = GuiDim.new(0, WIDGET_WIDTH - 500, 0, WIDGET_HEIGHT)
checkBox.image = checkboxTexture_unchecked
checkBox.text = text
checkBox.textSize = 30
checkBox.checkedImage = checkboxTexture_checked
checkBox.uncheckedImage = checkboxTexture_unchecked
return checkBox
end

function StackMenu:addLabel(text)
local label = self.overlay:addLabel()
label.textSize = 100
Expand Down
16 changes: 9 additions & 7 deletions game/client/menus/main_menu.lua
Original file line number Diff line number Diff line change
@@ -1,27 +1,29 @@

local backgroundTexture = game.getTexture("res/menu_bg.png")
local logoTexture = game.getTexture("res/logo.png")
local checkboxTexture_unchecked = game.getTexture("res/checkbox-unchecked.png")
local checkboxTexture_checked = game.getTexture("res/checkbox-checked.png")

local function onCreate(overlay)
local menu = StackMenu:create(900, overlay, 15)
menu:setBackground(backgroundTexture)
menu:addImage(logoTexture, 1064, 138)
menu:pad(150)

local continue = menu:addButton("Continue Game")
local playGame = menu:addButton("Play Game")
local continue = menu:addButton("Continue Game")
local playGame = menu:addButton("Play Game")
local settings = menu:addButton("Settings")
local exitGame = menu:addButton("Exit Game")

continue.onClick = function()
game.gui():change("transition", { message = "Starting Game" } )
game.gui():change("transition", {message = "Starting Game"})
game.control():loadWorld("Test")
end
end

playGame.onClick = function()
game.gui():push("world_select")
end

settings.onClick = function()
game.gui():push("settings_menu")
end
Expand All @@ -34,4 +36,4 @@ end
game.gui():addGui{
id = "main_menu",
create = onCreate,
}
}
1 change: 0 additions & 1 deletion game/client/menus/world_select.lua
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ local function onCreate(overlay)
createWorldSelectButton(menu, characterSlot)
end


local joinWorldButton = overlay:addButton()
joinWorldButton.textSize = 50
joinWorldButton.text = "Join World"
Expand Down
Binary file added res/checkbox-checked.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added res/checkbox-unchecked.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions src/client/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ add_library(ob-client
gui/widget/button_widget.cpp
gui/widget/text_box_widget.cpp
gui/widget/widget_helper.cpp
gui/widget/checkbox_widget.cpp

window.cpp

Expand Down
13 changes: 13 additions & 0 deletions src/client/gui/overlay.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
#include "widget/image_widget.h"
#include "widget/label_widget.h"
#include "widget/text_box_widget.h"
#include "widget/checkbox_widget.h"
#include <iostream>

namespace gui {
Expand Down Expand Up @@ -38,6 +39,18 @@ namespace gui {
return dynamic_cast<CenteredLabelWidget*>(widget);
}

CheckBoxWidget* Overlay::addCheckBox()
{
auto rectangle =
rectangleComponents.emplace_back(std::make_unique<RectangleComponent>())
.get();
auto label = textComponents.emplace_back(std::make_unique<TextComponent>()).get();
auto checkBox = std::make_unique<CheckBoxWidget>(rectangle, label);
auto widget = m_widgets.emplace_back(std::move(checkBox)).get();

return dynamic_cast<CheckBoxWidget*>(widget);
}

ButtonWidget* Overlay::addButton()
{
auto rectangle =
Expand Down
3 changes: 3 additions & 0 deletions src/client/gui/overlay.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ namespace gui {
class ImageWidget;
class LabelWidget;
class ButtonWidget;
class CheckBoxWidget;
class CenteredLabelWidget;
class TextBoxWidget;
/**
Expand All @@ -20,6 +21,7 @@ namespace gui {
*/
struct OverlayDefinition final {
std::string id;

sol::function create;
};

Expand All @@ -40,6 +42,7 @@ namespace gui {
ImageWidget* addImage();
LabelWidget* addLabel();
CenteredLabelWidget* addCenteredLabel();
CheckBoxWidget* addCheckBox();
ButtonWidget* addButton();
TextBoxWidget* addTextBox();

Expand Down
119 changes: 119 additions & 0 deletions src/client/gui/widget/checkbox_widget.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
#include "checkbox_widget.h"

#include "../component/rectangle_component.h"
#include "../component/text_component.h"
#include "widget_helper.h"

namespace gui {

CheckBoxWidget::CheckBoxWidget(RectangleComponent* rectComponent, TextComponent* label)
: mp_rectangle(rectComponent)
, mp_label(label)
, m_checked(false)
{
componentList.push_back(mp_rectangle);
componentList.push_back(mp_label);

mp_label->setFontSize(40);
}

void CheckBoxWidget::setPosition(const GuiDimension& position)
{
mp_rectangle->setPosition(position);
}

void CheckBoxWidget::setSize(const GuiDimension& size)
{
mp_rectangle->setSize(size);
}

void CheckBoxWidget::setColour(float r, float g, float b)
{
mp_rectangle->colour = {r, g, b};
}

void CheckBoxWidget::setImage(int Image)
{
mp_rectangle->setTexture(Image);
}

void CheckBoxWidget::setUncheckedImage(int Image)
{
uncheckedTexture = Image;
}

void CheckBoxWidget::setCheckedImage(int Image)
{
checkedTexture = Image;
}

void CheckBoxWidget::setText(const std::string& text)
{
mp_label->setText(text);
}

void CheckBoxWidget::setTextSize(unsigned size)
{
mp_label->setFontSize(size);
}

void CheckBoxWidget::setChecked(bool checked)
{
m_checked = checked;
}

void CheckBoxWidget::handleClick(sf::Mouse::Button button, float mx, float my)
{
if (mp_rectangle->isInBounds(mx, my) && button == sf::Mouse::Left) {
onClick();
}
}

void CheckBoxWidget::handleMouseMove(float mx, float my)
{
if (mp_rectangle->isInBounds(mx, my)) {
if (m_onMoveOver.valid()) {
m_onMoveOver();
}
}
else {
if (m_onMoveOver.valid()) {
m_onMouseOff();
}
}
}

void CheckBoxWidget::onClick()
{
m_checked = !m_checked;
if (m_checked)
setImage(checkedTexture);
else
setImage(uncheckedTexture);
}

void CheckBoxWidget::setOnMouseOver(sol::function function)
{
m_onMoveOver = function;
}

void CheckBoxWidget::setOnMouseOff(sol::function function)
{
m_onMouseOff = function;
}

void CheckBoxWidget::prepareRender()
{
GuiDimension pos = centerText(mp_rectangle->getBounds(), *mp_label);
pos.offset.x -= mp_rectangle->getBounds().width / 6;

mp_label->setPosition(pos);
}

bool CheckBoxWidget::getChecked()
{
return m_checked;
}


} // namespace gui
50 changes: 50 additions & 0 deletions src/client/gui/widget/checkbox_widget.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
#pragma once

#include "widget.h"

#include <sol/sol.hpp>

namespace gui {

class CheckBoxWidget final : public Widget {
public:
CheckBoxWidget(RectangleComponent* mp_rectangle, TextComponent* label);
void setPosition(const GuiDimension& position) final override;
void setSize(const GuiDimension& size) final override;

void setColour(float r, float g, float b) final override;
void setImage(int Image);
void setUncheckedImage(int Image);
void setCheckedImage(int Image);

void setText(const std::string& text);
void setTextSize(unsigned size);

void setChecked(bool check);

void handleClick(sf::Mouse::Button, float, float) final override;
void handleMouseMove(float, float) final override;


void onClick();
void setOnMouseOver(sol::function function);
void setOnMouseOff(sol::function function);

void prepareRender() final override;

bool getChecked();

private:

int checkedTexture;
int uncheckedTexture;

bool m_checked;
RectangleComponent* mp_rectangle = nullptr;
TextComponent* mp_label = nullptr;

sol::function m_onMoveOver;
sol::function m_onMouseOff;
};

} // namespace gui
21 changes: 21 additions & 0 deletions src/client/lua/gui_widget_api.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#include "../gui/widget/image_widget.h"
#include "../gui/widget/label_widget.h"
#include "../gui/widget/text_box_widget.h"
#include "../gui/widget/checkbox_widget.h"
#include <common/lua/script_engine.h>

namespace {
Expand Down Expand Up @@ -69,6 +70,23 @@ namespace {
addCommonAPI(buttonApi);
}

void addGuiCheckBoxApi(ScriptEngine& engine)
{
auto checkBoxApi = engine.lua.new_usertype<gui::CheckBoxWidget>("CheckBoxWidget");
checkBoxApi["checkedImage"] =
sol::property(&gui::CheckBoxWidget::setCheckedImage);
checkBoxApi["uncheckedImage"] =
sol::property(&gui::CheckBoxWidget::setUncheckedImage);
checkBoxApi["image"] = sol::property(&gui::CheckBoxWidget::setImage);
checkBoxApi["checked"] = sol::property(&gui::CheckBoxWidget::getChecked, &gui::CheckBoxWidget::setChecked);

checkBoxApi["onMouseOver"] = sol::property(&gui::CheckBoxWidget::setOnMouseOver);
checkBoxApi["onMouseOff"] = sol::property(&gui::CheckBoxWidget::setOnMouseOff);

addCommonLabelApi(checkBoxApi);
addCommonAPI(checkBoxApi);
}

void addGuiTextboxApi(ScriptEngine& engine)
{
auto textboxApi = engine.lua.new_usertype<gui::TextBoxWidget>("TextBoxWidget");
Expand Down Expand Up @@ -97,6 +115,7 @@ namespace {
overlayApi["addButton"] = &gui::Overlay::addButton;
overlayApi["addCenteredLabel"] = &gui::Overlay::addCenteredLabel;
overlayApi["addTextBox"] = &gui::Overlay::addTextBox;
overlayApi["addCheckBox"] = &gui::Overlay::addCheckBox;

overlayApi["hide"] = &gui::Overlay::hide;
overlayApi["show"] = &gui::Overlay::show;
Expand All @@ -114,4 +133,6 @@ void luaInitGuiWidgetApi(ScriptEngine& scriptEngine)
addGuiButtonApi(scriptEngine);
addGuiTextboxApi(scriptEngine);
addGuiCenteredLabelApi(scriptEngine);
addGuiCheckBoxApi(scriptEngine);

}

0 comments on commit d67d365

Please sign in to comment.