Skip to content

Commit

Permalink
Finish basic game selection screen
Browse files Browse the repository at this point in the history
Signed-off-by: Hopson97 <[email protected]>
  • Loading branch information
Hopson97 committed Jun 5, 2018
1 parent 3b6188e commit 33aa32d
Show file tree
Hide file tree
Showing 6 changed files with 42 additions and 19 deletions.
6 changes: 4 additions & 2 deletions HopsonArcade.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -100,12 +100,14 @@
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>D:\_Programming Libraries\C++\SFML\MSVC\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>D:\_Programming_Libraries\C++\SFML\MSVC\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalLibraryDirectories>D:\_Programming Libraries\C++\SFML\MSVC\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalLibraryDirectories>D:\_Programming_Libraries\C++\SFML\MSVC\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>sfml-graphics.lib;sfml-audio.lib;sfml-network.lib;sfml-window.lib;sfml-system.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
Expand Down
9 changes: 5 additions & 4 deletions Source/Arcade/GameSelection/GameSelect.cpp
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
#include "GameSelect.h"

#include "../../Framework/ResourceManager/ResourceHolder.h"
#include "../../SpaceInvaders/States/StateMainMenu.h"

GameSelect::GameSelect(const std::string& name)
{
m_container.setSize({ WIDTH, HEIGHT });
m_thumbnail.setSize({ 256, 256 });
m_thumbnail.setSize({ HEIGHT, HEIGHT });

m_container.setOutlineThickness(2);
m_container.setOutlineColor({ 100, 100, 100 });
Expand All @@ -29,7 +30,7 @@ void GameSelect::setPosition(const sf::Vector2f position)
m_thumbnail.setPosition(position);
}

void GameSelect::draw(sf::RenderTarget & renderer)
void GameSelect::draw(sf::RenderTarget& renderer)
{
renderer.draw(m_container);
renderer.draw(m_thumbnail);
Expand All @@ -38,7 +39,7 @@ void GameSelect::draw(sf::RenderTarget & renderer)
SpaceInvadersSelect::SpaceInvadersSelect(const std::string & name)
: GameSelect(name) { }

std::unique_ptr<StateBase> SpaceInvadersSelect::getInitState()
std::unique_ptr<StateBase> SpaceInvadersSelect::getInitState(Game& game)
{
return std::unique_ptr<StateBase>();
return std::make_unique<SpaceInvaders::StateMainMenu>(game);
}
4 changes: 2 additions & 2 deletions Source/Arcade/GameSelection/GameSelect.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ class GameSelect
void setPosition(const sf::Vector2f position);
void draw(sf::RenderTarget& renderer);

virtual std::unique_ptr<StateBase> getInitState() = 0;
virtual std::unique_ptr<StateBase> getInitState(Game& game) = 0;

private:
sf::RectangleShape m_container;
Expand All @@ -28,5 +28,5 @@ class GameSelect
struct SpaceInvadersSelect : public GameSelect
{
SpaceInvadersSelect(const std::string& name);
std::unique_ptr<StateBase> getInitState() override;
std::unique_ptr<StateBase> getInitState(Game& game) override;
};
36 changes: 28 additions & 8 deletions Source/Arcade/GameSelection/StateGameSelect.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,7 @@
StateGameSelect::StateGameSelect(Game& game)
: StateBase(game, "Game Select", 1280, 720)
{
registerGame(std::make_unique<SpaceInvadersSelect>("SpaceInvaders"));
registerGame(std::make_unique<SpaceInvadersSelect>("SpaceInvaders"));
registerGame(std::make_unique<SpaceInvadersSelect>("SpaceInvaders"));
registerGame(std::make_unique<SpaceInvadersSelect>("SpaceInvaders"));
registerGame(std::make_unique<SpaceInvadersSelect>("SpaceInvaders"));
registerGame(std::make_shared<SpaceInvadersSelect>("SpaceInvaders"));
}

void StateGameSelect::onOpen()
Expand All @@ -20,6 +16,27 @@ void StateGameSelect::onOpen()

void StateGameSelect::handleEvent(sf::Event e)
{
std::shared_ptr<GameSelect> selectedGame = nullptr;
switch (e.type) {
case sf::Event::MouseButtonPressed:
switch (e.mouseButton.button) {
case sf::Mouse::Left: {
for (auto & game : m_gameSelects) {
selectedGame = game;
break;
}

}
default:
break;
}
default:
break;
}

if (selectedGame) {
m_pGame->pushState(selectedGame->getInitState(*m_pGame));
}
}

void StateGameSelect::render(sf::RenderTarget& target)
Expand All @@ -29,11 +46,14 @@ void StateGameSelect::render(sf::RenderTarget& target)
}
}

void StateGameSelect::registerGame(std::unique_ptr<GameSelect> gameSelect)
void StateGameSelect::registerGame(std::shared_ptr<GameSelect> gameSelect)
{
float x = 123.0f + (m_gameSelects.size() % 2 == 0 ? 0 : GameSelect::WIDTH);
const float w = GameSelect::WIDTH;
const int index = m_gameSelects.size() % 2 != 0;

float x = ((w / 4) - 5) + (m_gameSelects.size() % 2 == 0 ? 0 : w) + index * 10;
float y = int(m_gameSelects.size() / 2) * (GameSelect::HEIGHT);

gameSelect->setPosition({ x, y });
m_gameSelects.push_back(std::move(gameSelect));
m_gameSelects.push_back(gameSelect);
}
4 changes: 2 additions & 2 deletions Source/Arcade/GameSelection/StateGameSelect.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ class StateGameSelect : public StateBase
void render(sf::RenderTarget& target) override;

private:
void registerGame(std::unique_ptr<GameSelect> gameSelect);
void registerGame(std::shared_ptr<GameSelect> gameSelect);

std::vector<std::unique_ptr<GameSelect>> m_gameSelects;
std::vector<std::shared_ptr<GameSelect>> m_gameSelects;
};
2 changes: 1 addition & 1 deletion Source/SpaceInvaders/States/StateMainMenu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ namespace SpaceInvaders
auto exitBtn = gui::makeButton();
exitBtn->setText("Exit game");
exitBtn->setFunction([&]() {
m_pGame->exitGame();
m_pGame->popState();
});

m_mainMenu.addWidget(std::move(playBtn));
Expand Down

0 comments on commit 33aa32d

Please sign in to comment.