Commit 456d84eb authored by Georg Schäfer's avatar Georg Schäfer

Merge branch 'develop' of...

Merge branch 'develop' of gitlab.fsi.hochschule-trier.de:GameDevWeek/sommersemester-2019/cpp/phaseshifter into develop
parents 99f4f030 8b9846bb
tileset
##############################################################################
####################-----##########-##########################################
######---####-----#|> >|########|!|#########################################
##---} 7{--} 5 {} |######--} {--#######################################
#|@ 5 |#####| |######################################
##---] 7[--] 1 [] |#####| |######################################
######---####-----#|> >|#####| |######################################
####################-] [-######| |######################################
#####################| |#######| |######################################
#####################| |########--] [--#######################################
####################-} {-#########| |#########################################
###################|4 6|###-----} {#########################################
###############----} |##|5 5 7|########################################
##############| |##| |########################################
##############| |--] |##| 7|########################################
##############} {##|2 8|##| [----######---################################
#############|0 |##-----###}~ ~{########-}0 0{-##############################
#############| |#########| 5 5 |######| |#############################
#############| 0|#########| |###--#] [---] |#############################
#############| |#########| > |##|55{} |##-} {-############################
#############|0 |#########| < {--} |#|e f|###########################
#############| |#########| |#| |###########################
#############| 0|##########----------]11[##| |###########################
#############| |#####################--###| |###########################
##############] [############################-] [-############################
##############| |--------#####################| {------#######################
##############| d|####################| |######################
##############| |####--##--##--##--###--] |######################
##############| d|##-}<>{}<>{}<>{}<>{-###| j |######################
##############| {-} {--} |######################
##############| d |######################
##############| [-] [--------#######################
###############----------###-]><[]><[]><[]><[-################################
##############################--##--##--##--##################################
##############################################################################
\ No newline at end of file
#########################################################
###########################################-#############
##########################################|!|############
########################################--} {--##########
#######################################| hbh |#########
#######################################|3 7|#########
#######################################| h |#########
#######################################| |#########
#######################################| c |#########
#######################################| ~ |#########
#######################################| |#########
########################################--]@[--##########
##########################################| |############
###################################-------} |############
##################################| |############
##################################| < < < < |############
##################################| |############
##################################| > > > > |############
####################-----#########| |############
######---####-----#|> >|########| [-------#############
##---} 7{--} 5 {} |######--} {--##################
#| 5 |#####| |#################
##---] 7[--] 1 [] |#####| |#################
######---####-----#|> >|#####| h i |#################
####################-] [-######| |#################
#####################| |#######| |#################
#####################| |########--] [--##################
####################-} {-#########| |####################
###################|4 6|###-----} {####################
###############----} |##|5 5 7|###################
##############| |##| |###################
##############| |--] |##| 7|###################
##############} {##|2 8|##| [----######---###########
#############|0 |##-----###}~ ~{########-}0 0{-#########
#############| |#########| 5 5 |######| |########
#############| 0|#########| |###--#] [---] |########
#############| |#########| > |##|55{} |##-} {-#######
#############|0 |#########| < {--} |#|e f|######
#############| |#########| |#| |######
#############| 0|##########----------]11[##| |######
#############| |#####################--###| |######
##############] [############################-] [-#######
##############| |--------#####################| {------##
##############| d|####################| |#
##############| |####--##--##--##--###--] |#
##############| d|##-}<>{}<>{}<>{}<>{-###| j |#
##############| {-} {--} |#
##############| d |#
##############| [-] [--------##
###############----------###-]><[]><[]><[]><[-###########
##############################--##--##--##--#############
#########################################################
\ No newline at end of file
......@@ -33,9 +33,9 @@
"left_shoulder": {"type":"once_down", "action":"the_button"},
"right_shoulder": {"type":"once_down", "action":"the_button"},
"a": {"type":"once_down", "action":"the_button"},
"b": {"type":"once_down", "action":"the_button"},
"b": {"type":"once_down", "action":"b"},
"x": {"type":"once_down", "action":"the_button"},
"y": {"type":"once_down", "action":"the_button"},
"y": {"type":"once_down", "action":"b"},
"back": {"type":"once", "action":"quit"},
"start": {"type":"once", "action":"quit"}
},
......
Subproject commit 57bcafb5c858c315b9b8cfc00624505d46ea91a0
Subproject commit 3f7bceb13b0b5d29ab2b0d6fdd44f078365b4097
......@@ -2,9 +2,9 @@
#include "game_engine.hpp"
#include "gameover_screen.hpp"
#include "intro_screen.hpp"
#include "messages.hpp"
#include "meta_system.hpp"
#include "win_screen.hpp"
#include <mirrage/renderer/animation_comp.hpp>
#include <mirrage/renderer/light_comp.hpp>
......@@ -42,20 +42,17 @@ namespace phase_shifter {
{
_mailbox.subscribe_to([&](Once_action& e) {
switch(e.id) {
case "quit"_strid:
// TODO: show pause menu, instead
_engine.screens().leave();
break;
case "quit"_strid: _engine.screens().enter<Intro_screen>(); break;
}
});
_mailbox.subscribe_to([&](Win_msg& e) {
// TODO: fade out...
_engine.screens().enter<Win_screen>();
defer(0.5_s, [&] { _engine.screens().enter<Gameover_screen>(true, _meta_system.score()); });
});
_mailbox.subscribe_to([&](Lose_msg& e) {
// TODO: fade out...
_engine.screens().enter<Gameover_screen>();
defer(0.5_s, [&] { _engine.screens().enter<Gameover_screen>(); });
});
}
Game_screen::~Game_screen() noexcept = default;
......
......@@ -2,8 +2,11 @@
#include "game_engine.hpp"
#include "game_screen.hpp"
#include "intro_screen.hpp"
#include "sync_screen.hpp"
#include "ui/util.hpp"
#include <mirrage/gui/gui.hpp>
#include <mirrage/input/input_manager.hpp>
#include <mirrage/renderer/pass/clear_pass.hpp>
......@@ -29,18 +32,21 @@ namespace phase_shifter {
using namespace graphic;
Gameover_screen::Gameover_screen(Engine& engine)
Gameover_screen::Gameover_screen(Engine& engine, bool win, int score)
: Screen(engine)
, _mailbox(engine.bus())
, _renderer(dynamic_cast<Game_engine&>(engine).renderer_factory().create_renderer(
mirrage::util::nothing, {renderer::render_pass_id_of<renderer::Clear_pass_factory>()}))
, _gui(&engine.gui())
, _win(win)
, _score(score)
, _background(_gui->load_texture("tex:textures/loading_screen.ktx"_aid))
{
_mailbox.subscribe_to([&](Once_action& e) {
switch(e.id) {
case "quit"_strid:
// TODO: show pause menu, instead
_engine.screens().leave();
break;
case "quit"_strid: _engine.screens().enter<Intro_screen>(); break;
case "the_button"_strid: _engine.screens().enter<Game_screen>(); break;
}
});
}
......@@ -61,21 +67,57 @@ namespace phase_shifter {
{
_renderer->draw(); //< clear screen
ImGui::PushStyleColor(ImGuiCol_Text, ImVec4{0, 0, 0, 1});
ImGui::PushStyleColor(ImGuiCol_Button, ImVec4{0.4f, 0.4f, 0.4f, 0.3f});
ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4{0.4f, 0.4f, 0.4f, 0.8f});
ImGui::PositionNextWindow(glm::vec2(ImGui::GetIO().DisplaySize.x, ImGui::GetIO().DisplaySize.y),
ImGui::WindowPosition_X::center,
ImGui::WindowPosition_Y::center);
if(ImGui::Begin("Gameover_bg",
nullptr,
ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize
| ImGuiWindowFlags_NoBackground | ImGuiWindowFlags_NoBringToFrontOnFocus)) {
ImDrawList* drawList = ImGui::GetWindowDrawList();
drawList->AddImage(_background.get(), ImVec2(0, 0), ImGui::GetIO().DisplaySize);
}
ImGui::End();
auto heading_font = _gui->find_font("heading"_strid);
ui::push_font(heading_font);
ImGui::PositionNextWindow(
glm::vec2(500, 500), ImGui::WindowPosition_X::center, ImGui::WindowPosition_Y::center);
if(ImGui::Begin("Gameover")) {
ImGui::TextUnformatted("TODO");
if(ImGui::Button("Start")) {
glm::vec2(700, 500), ImGui::WindowPosition_X::left, ImGui::WindowPosition_Y::center);
if(ImGui::Begin("Gameover",
nullptr,
ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize
| ImGuiWindowFlags_NoBackground)) {
if(_win) {
ImGui::TextColored(ImVec4{0, 0, 0, 1}, "You have Won");
auto score_msg = "Score: " + std::to_string(_score);
ImGui::TextUnformatted("");
ImGui::TextColored(ImVec4{0, 0, 0, 1}, score_msg.c_str());
} else
ImGui::TextColored(ImVec4{0, 0, 0, 1}, "Game Over");
ImGui::TextUnformatted("");
if(ImGui::Button(_win ? "Replay (x)" : "Retry (X)")) {
_engine.screens().enter<Game_screen>();
}
if(ImGui::Button("Sync")) {
_engine.screens().enter<Sync_screen>();
}
if(ImGui::Button("Quit")) {
_engine.screens().leave();
if(ImGui::Button("Menu (Start)")) {
_engine.screens().enter<Intro_screen>();
}
}
ImGui::End();
ui::pop_font(heading_font);
ImGui::PopStyleColor();
ImGui::PopStyleColor();
ImGui::PopStyleColor();
}
} // namespace phase_shifter
......@@ -11,7 +11,7 @@ namespace phase_shifter {
class Gameover_screen : public mirrage::Screen {
public:
Gameover_screen(mirrage::Engine& engine);
Gameover_screen(mirrage::Engine& engine, bool win = false, int score = 0);
~Gameover_screen() noexcept override;
auto name() const -> std::string override { return "Gameover"; }
......@@ -31,6 +31,10 @@ namespace phase_shifter {
protected:
mirrage::util::Mailbox_collection _mailbox;
std::unique_ptr<mirrage::renderer::Deferred_renderer> _renderer;
mirrage::gui::Gui* _gui;
bool _win;
int _score;
std::shared_ptr<void> _background;
};
} // namespace phase_shifter
......@@ -34,13 +34,14 @@ namespace phase_shifter {
, _mailbox(engine.bus())
, _renderer(dynamic_cast<Game_engine&>(engine).renderer_factory().create_renderer(
mirrage::util::nothing, {renderer::render_pass_id_of<renderer::Clear_pass_factory>()}))
, _gui(&engine.gui())
, _background(_gui->load_texture("tex:textures/loading_screen.ktx"_aid))
{
_mailbox.subscribe_to([&](Once_action& e) {
switch(e.id) {
case "quit"_strid:
// TODO: show pause menu, instead
_engine.screens().leave();
break;
case "quit"_strid: _engine.screens().leave(); break;
case "the_button"_strid: _engine.screens().enter<Game_screen>(); break;
case "b"_strid: _engine.screens().enter<Sync_screen>(); break;
}
});
}
......@@ -61,21 +62,55 @@ namespace phase_shifter {
{
_renderer->draw(); //< clear screen
ImGui::PushStyleColor(ImGuiCol_Text, ImVec4{0, 0, 0, 1});
ImGui::PushStyleColor(ImGuiCol_Button, ImVec4{0.4f, 0.4f, 0.4f, 0.3f});
ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4{0.4f, 0.4f, 0.4f, 0.8f});
ImGui::PositionNextWindow(glm::vec2(ImGui::GetIO().DisplaySize.x, ImGui::GetIO().DisplaySize.y),
ImGui::WindowPosition_X::center,
ImGui::WindowPosition_Y::center);
if(ImGui::Begin("Gameover_bg",
nullptr,
ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize
| ImGuiWindowFlags_NoBackground | ImGuiWindowFlags_NoBringToFrontOnFocus)) {
ImDrawList* drawList = ImGui::GetWindowDrawList();
drawList->AddImage(_background.get(), ImVec2(0, 0), ImGui::GetIO().DisplaySize);
}
ImGui::End();
auto heading_font = _gui->find_font("heading"_strid);
ui::push_font(heading_font);
ImGui::PositionNextWindow(
glm::vec2(500, 500), ImGui::WindowPosition_X::center, ImGui::WindowPosition_Y::center);
if(ImGui::Begin("Intro")) {
ImGui::TextUnformatted("TODO");
if(ImGui::Button("Start")) {
glm::vec2(500, 700), ImGui::WindowPosition_X::center, ImGui::WindowPosition_Y::center);
if(ImGui::Begin("Gameover",
nullptr,
ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize
| ImGuiWindowFlags_NoBackground)) {
if(ImGui::Button("Start Game (X)")) {
_engine.screens().enter<Game_screen>();
}
if(ImGui::Button("Sync")) {
ImGui::TextUnformatted("");
if(ImGui::Button("Sync (B)")) {
_engine.screens().enter<Sync_screen>();
}
if(ImGui::Button("Quit")) {
ImGui::TextUnformatted("");
if(ImGui::Button("Quit (Start)")) {
_engine.screens().leave();
}
}
ImGui::End();
ui::pop_font(heading_font);
ImGui::PopStyleColor();
ImGui::PopStyleColor();
ImGui::PopStyleColor();
}
} // namespace phase_shifter
......@@ -31,6 +31,8 @@ namespace phase_shifter {
protected:
mirrage::util::Mailbox_collection _mailbox;
std::unique_ptr<mirrage::renderer::Deferred_renderer> _renderer;
mirrage::gui::Gui* _gui;
std::shared_ptr<void> _background;
};
} // namespace phase_shifter
......@@ -12,7 +12,6 @@
#include "gameover_screen.hpp"
#include "intro_screen.hpp"
#include "sync_screen.hpp"
#include "win_screen.hpp"
#include <mirrage/info.hpp>
......@@ -155,13 +154,11 @@ namespace {
[&]() { engine->screens().enter<Intro_screen>(); });
global_commands->add("screen.enter.sync | Enters the sync screen",
[&]() { engine->screens().enter<Sync_screen>(); });
global_commands->add("screen.enter.win | Enters the win screen",
[&]() { engine->screens().enter<Win_screen>(); });
if(argc > 1 && argv[1] == "game"s)
engine->screens().enter<Game_screen>();
else
engine->screens().enter<Game_screen>();
engine->screens().enter<Gameover_screen>();
}
void onFrame() { engine->on_frame(); }
......
......@@ -159,4 +159,6 @@ namespace phase_shifter {
void Meta_system::shrink_to_fit() { _renderer->shrink_to_fit(); }
auto Meta_system::score() const -> int { return _beat_system->beat_state().beats_left; }
} // namespace phase_shifter
......@@ -63,6 +63,8 @@ namespace phase_shifter {
auto renderer() noexcept -> auto& { return *_renderer; }
auto level_system() noexcept -> auto& { return *_level_system; }
auto score() const -> int;
private:
mirrage::ecs::Entity_manager _entities;
std::unique_ptr<mirrage::renderer::Deferred_renderer> _renderer;
......
......@@ -45,10 +45,7 @@ namespace phase_shifter {
{
_mailbox.subscribe_to([&](Once_action& e) {
switch(e.id) {
case "quit"_strid:
// TODO: show pause menu, instead
_engine.screens().leave();
break;
case "quit"_strid: _engine.screens().enter<Intro_screen>(); break;
case "the_button"_strid: _on_button_press(); break;
}
});
......@@ -166,7 +163,7 @@ namespace phase_shifter {
if(ImGui::Begin("Sync",
nullptr,
ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize
| ImGuiWindowFlags_NoBackground)) {}
| ImGuiWindowFlags_NoBackground | ImGuiWindowFlags_NoInputs)) {}
switch(_current_mode) {
case mode::start_audio_calibration: _draw_start_sync_audio_ui(); break;
case mode::countdown_audio_calibration: _draw_countdown_sync_audio_ui(); break;
......
#include "win_screen.hpp"
#include "game_engine.hpp"
#include "game_screen.hpp"
#include "sync_screen.hpp"
#include <mirrage/gui/gui.hpp>
#include <mirrage/input/input_manager.hpp>
#include <mirrage/renderer/pass/clear_pass.hpp>
#include <mirrage/utils/log.hpp>
#include <mirrage/utils/maybe.hpp>
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <chrono>
#include <cstdlib>
#include <iomanip>
#include <sstream>
#include <thread>
namespace phase_shifter {
using namespace mirrage;
using namespace ecs::components;
using namespace mirrage::input;
using namespace mirrage::util::unit_literals;
using namespace graphic;
Win_screen::Win_screen(Engine& engine)
: Screen(engine)
, _mailbox(engine.bus())
, _renderer(dynamic_cast<Game_engine&>(engine).renderer_factory().create_renderer(
mirrage::util::nothing, {renderer::render_pass_id_of<renderer::Clear_pass_factory>()}))
{
_mailbox.subscribe_to([&](Once_action& e) {
switch(e.id) {
case "quit"_strid:
// TODO: show pause menu, instead
_engine.screens().leave();
break;
}
});
}
Win_screen::~Win_screen() noexcept = default;
void Win_screen::_on_enter(mirrage::util::maybe<Screen&>) { _mailbox.enable(); }
void Win_screen::_on_leave(mirrage::util::maybe<Screen&>) { _mailbox.disable(); }
void Win_screen::_update(mirrage::util::Time dt)
{
std::this_thread::sleep_for(std::chrono::milliseconds(8));
_mailbox.update_subscriptions();
_renderer->update(dt);
}
void Win_screen::_draw()
{
_renderer->draw(); //< clear screen
ImGui::PositionNextWindow(
glm::vec2(500, 500), ImGui::WindowPosition_X::center, ImGui::WindowPosition_Y::center);
if(ImGui::Begin("Win")) {
ImGui::TextUnformatted("TODO");
if(ImGui::Button("Start")) {
_engine.screens().enter<Game_screen>();
}
if(ImGui::Button("Sync")) {
_engine.screens().enter<Sync_screen>();
}
if(ImGui::Button("Quit")) {
_engine.screens().leave();
}
}
ImGui::End();
}
} // namespace phase_shifter
#pragma once
#include <mirrage/engine.hpp>
#include <mirrage/gui/gui.hpp>
#include <mirrage/renderer/deferred_renderer.hpp>
#include <mirrage/utils/console_command.hpp>
#include <mirrage/utils/maybe.hpp>
namespace phase_shifter {
class Win_screen : public mirrage::Screen {
public:
Win_screen(mirrage::Engine& engine);
~Win_screen() noexcept override;
auto name() const -> std::string override { return "Gameover"; }
protected:
void _update(mirrage::util::Time delta_time) override;
void _draw() override;
void _on_enter(mirrage::util::maybe<Screen&> prev) override;
void _on_leave(mirrage::util::maybe<Screen&> next) override;
auto _prev_screen_policy() const noexcept -> mirrage::Prev_screen_policy override
{
return mirrage::Prev_screen_policy::discard;
}
protected:
mirrage::util::Mailbox_collection _mailbox;
std::unique_ptr<mirrage::renderer::Deferred_renderer> _renderer;
};
} // namespace phase_shifter
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment