r-type  0.0.0
R-Type main
Loading...
Searching...
No Matches
client.cpp
Go to the documentation of this file.
1#include "Client/Client.hpp"
9#include "R-TypeClient/RTypeClient.hpp"
10#include "Utils/Clock.hpp"
11#include "Utils/Logger.hpp"
13
14static constexpr eng::Color DARK = {.r = 0U, .g = 0U, .b = 0U, .a = 255U};
15
17{
18 utl::Logger::log("PROJECT INFO:", utl::LogLevel::INFO);
19 std::cout << "\tName: " PROJECT_NAME "\n"
20 << "\tVersion: " PROJECT_VERSION "\n"
21 << "\tBuild type: " BUILD_TYPE "\n"
22 << "\tGit tag: " GIT_TAG "\n"
23 << "\tGit commit hash: " GIT_COMMIT_HASH "\n";
24
25 m_pluginLoader = std::make_unique<utl::PluginLoader>();
26 m_engine = std::make_unique<eng::Engine>(
27 [this, cfg]()
28 {
31 },
32 [this, cfg]()
33 {
35 !cfg.network_lib_path.empty() ? cfg.network_lib_path
37 },
38 [this, cfg]()
39 {
42 });
43 // m_game = std::make_unique<gme::RTypeClient>();
44 m_engine->getRenderer()->createWindow("R-Type Client", cfg.height, cfg.width, cfg.frameLimit, cfg.fullscreen);
45
46 m_engine->addSystem(std::make_unique<AnimationSystem>(*m_engine->getRenderer()));
47 m_engine->addSystem(std::make_unique<AudioSystem>(*m_engine->getAudio()));
48 // m_engine->addSystem(std::make_unique<SpawnSystem>(*m_engine->getRenderer())); TODO(bobis33): only in game
49 m_engine->addSystem(std::make_unique<AsteroidSystem>(*m_engine->getRenderer()));
50 m_engine->addSystem(std::make_unique<BeamSystem>(*m_engine->getRenderer()));
51 m_engine->addSystem(std::make_unique<CollisionSystem>(*m_engine->getRenderer()));
52 m_engine->addSystem(std::make_unique<EnemySystem>(*m_engine->getRenderer()));
53 m_engine->addSystem(std::make_unique<ExplosionSystem>(*m_engine->getRenderer()));
54 m_engine->addSystem(std::make_unique<LoadingAnimationSystem>(*m_engine->getRenderer()));
55 m_engine->addSystem(std::make_unique<PixelSystem>(*m_engine->getRenderer()));
56 m_engine->addSystem(std::make_unique<PlayerDirectionSystem>());
57 m_engine->addSystem(std::make_unique<ProjectileSystem>(*m_engine->getRenderer()));
58 m_engine->addSystem(std::make_unique<SpriteSystem>(*m_engine->getRenderer()));
59 m_engine->addSystem(std::make_unique<TextSystem>(*m_engine->getRenderer()));
60 // m_engine->addSystem(std::make_unique<WeaponSystem>(*m_engine->getRenderer())); TODO(bobis33): tofix
61
62 auto menu = std::make_unique<Menu>(m_engine->getRenderer(), m_engine->getAudio());
63 auto configMulti = std::make_unique<ConfigMulti>(m_engine->getRenderer(), m_engine->getAudio());
64 auto configSolo = std::make_unique<ConfigSolo>(m_engine->getRenderer(), m_engine->getAudio());
65 auto gameSolo = std::make_unique<GameSolo>(m_engine->getRenderer(), m_engine->getAudio());
66 auto settings = std::make_unique<Settings>(m_engine->getRenderer(), m_engine->getAudio());
67 const auto menuId = menu->getId();
68 const auto configMultiId = configMulti->getId();
69 const auto configSoloId = configSolo->getId();
70 const auto gameSoloId = gameSolo->getId();
71 const auto settingsId = settings->getId();
72 menu->onOptionSelected = [this, configSoloId, configMultiId, settingsId](const std::string &option)
73 {
74 if (option == "Solo")
75 {
76 m_engine->getSceneManager()->switchToScene(configSoloId);
77 }
78 else if (option == "Multi")
79 {
80 m_engine->getSceneManager()->switchToScene(configMultiId);
81 }
82 else if (option == "Settings")
83 {
84 m_engine->getSceneManager()->switchToScene(settingsId);
85 }
86 };
87 configMulti->onOptionSelected = [this, menuId](const std::string &option)
88 {
89 if (option == "Create room")
90 {
91 // m_engine->getSceneManager()->switchToScene(createRoomId);
92 }
93 else if (option == "Join room")
94 {
95 // m_engine->getSceneManager()->switchToScene(joinRoomId);
96 }
97 else if (option == "Go back to menu")
98 {
99 m_engine->getSceneManager()->switchToScene(menuId);
100 }
101 };
102 configSolo->onOptionSelected = [this, gameSoloId, menuId](const std::string &option)
103 {
104 if (option == "Level easy")
105 {
106 m_engine->getSceneManager()->switchToScene(gameSoloId);
107 }
108 else if (option == "Level medium")
109 {
110 m_engine->getSceneManager()->switchToScene(gameSoloId);
111 }
112 else if (option == "Go back to menu")
113 {
114 m_engine->getSceneManager()->switchToScene(menuId);
115 }
116 };
117 settings->onLeave = [this, menuId]() { m_engine->getSceneManager()->switchToScene(menuId); };
118 m_engine->getSceneManager()->addScene(std::move(menu));
119 m_engine->getSceneManager()->addScene(std::move(configMulti));
120 m_engine->getSceneManager()->addScene(std::move(configSolo));
121 m_engine->getSceneManager()->addScene(std::move(gameSolo));
122 m_engine->getSceneManager()->addScene(std::move(settings));
123 m_engine->getSceneManager()->switchToScene(menuId);
124}
125
127{
128 eng::Event event;
129
130 while (m_engine->getState() == eng::State::RUN && m_engine->getRenderer()->windowIsOpen())
131 {
132 const float delta = m_engine->getClock()->getDeltaSeconds();
133
134 m_engine->getClock()->restart();
135 m_engine->getSceneManager()->getCurrentScene()->update(delta, m_engine->getRenderer()->getWindowSize());
136 handleEvents(event);
137 m_engine->render(m_engine->getSceneManager()->getCurrentScene()->getRegistry(), DARK, delta);
138 }
139 m_engine->stop();
140}
This file contains the Client class declaration.
This file contains the Clock class.
This file contains the multiplayer configuration scene.
This file contains the solo configuration scene.
This file contains the solo Game scene.
This file contains the Logger class.
This file contains the menu scene.
Modern, cross-platform plugin loader.
This file contains the settings scene.
std::unique_ptr< utl::PluginLoader > m_pluginLoader
Definition Client.hpp:41
std::unique_ptr< eng::Engine > m_engine
Definition Client.hpp:42
Client(const ArgsConfig &cfg)
Definition client.cpp:16
void run()
Definition client.cpp:126
std::shared_ptr< IAudio > & getAudio()
Definition Engine.hpp:49
std::shared_ptr< IRenderer > & getRenderer()
Definition Engine.hpp:51
std::unique_ptr< SceneManager > & getSceneManager()
Definition Engine.hpp:53
void addSystem(std::unique_ptr< ISystem > system)
Definition Engine.hpp:56
Interface for the audio.
Definition IAudio.hpp:29
Interface for the client network.
Interface for the renderer.
static void log(const std::string &message, const LogLevel &logLevel)
Definition Logger.hpp:51
std::shared_ptr< T > loadPlugin(const std::string &path)
Load a plugin of type T.
#define BUILD_TYPE
Definition Version.hpp:15
#define PROJECT_VERSION
Definition Version.hpp:8
#define GIT_TAG
Definition Version.hpp:14
#define PROJECT_NAME
Definition Version.hpp:7
#define GIT_COMMIT_HASH
Definition Version.hpp:13
This file contains the system definitions.
static constexpr eng::Color DARK
Definition client.cpp:14
auto PLUGIN_AUDIO_SFML
Definition Common.hpp:54
auto PLUGIN_RENDERER_SFML
Definition Common.hpp:58
auto PLUGIN_NETWORK_ASIO_CLIENT
Definition Common.hpp:56
@ RUN
Definition Engine.hpp:26
unsigned int frameLimit
std::string audio_lib_path
unsigned int height
unsigned int width
std::string network_lib_path
std::string renderer_lib_path
unsigned char r
Definition IRenderer.hpp:17