Refactor: Move code to rutile module and namespace

This commit is contained in:
Lexi / Zoe 2026-04-28 23:28:53 +02:00
parent bb43d308c0
commit 8039b1276e
Signed by: binaryDiv
GPG key ID: F8D4956E224DA232
12 changed files with 59 additions and 59 deletions

View file

@ -1,30 +1,30 @@
import app; import rutile.app;
#define SDL_MAIN_USE_CALLBACKS #define SDL_MAIN_USE_CALLBACKS
#include <SDL3/SDL_main.h> #include <SDL3/SDL_main.h>
SDL_AppResult SDL_AppInit(void** appstate, const int /*argc*/, char** /*argv*/) SDL_AppResult SDL_AppInit(void** appstate, const int /*argc*/, char** /*argv*/)
{ {
auto* app = new App; auto* app = new rutile::App;
*appstate = app; *appstate = app;
return static_cast<SDL_AppResult>(app->initialize()); return static_cast<SDL_AppResult>(app->initialize());
} }
SDL_AppResult SDL_AppEvent(void* appstate, SDL_Event* event) SDL_AppResult SDL_AppEvent(void* appstate, SDL_Event* event)
{ {
auto* app = static_cast<App*>(appstate); auto* app = static_cast<rutile::App*>(appstate);
return static_cast<SDL_AppResult>(app->handle_event(event)); return static_cast<SDL_AppResult>(app->handle_event(event));
} }
SDL_AppResult SDL_AppIterate(void* appstate) SDL_AppResult SDL_AppIterate(void* appstate)
{ {
auto* app = static_cast<App*>(appstate); auto* app = static_cast<rutile::App*>(appstate);
return static_cast<SDL_AppResult>(app->iterate()); return static_cast<SDL_AppResult>(app->iterate());
} }
void SDL_AppQuit(void* appstate, const SDL_AppResult /*result*/) void SDL_AppQuit(void* appstate, const SDL_AppResult /*result*/)
{ {
const auto* app = static_cast<App*>(appstate); const auto* app = static_cast<rutile::App*>(appstate);
app->shutdown(); app->shutdown();
delete app; delete app;
} }

View file

@ -4,19 +4,19 @@ module;
#include <memory> #include <memory>
#include <SDL3/SDL.h> #include <SDL3/SDL.h>
export module app; export module rutile.app;
import config; import rutile.config;
import core.engine; import rutile.core.engine;
import game.game; import rutile.game.game;
import wrappers.sdl; import wrappers.sdl;
export export namespace rutile
{ {
class App class App
{ {
std::unique_ptr<core::Engine> engine_{nullptr}; std::unique_ptr<Engine> engine_{nullptr};
std::unique_ptr<game::Game> game_{nullptr}; std::unique_ptr<Game> game_{nullptr};
public: public:
App() = default; App() = default;
@ -37,8 +37,8 @@ export
sdl::Init(sdl::InitFlags::Video | sdl::InitFlags::Events); sdl::Init(sdl::InitFlags::Video | sdl::InitFlags::Events);
// Create engine (includes window and renderer) and game state // Create engine (includes window and renderer) and game state
engine_ = core::Engine::create(); engine_ = Engine::create();
game_ = game::Game::create(*engine_); game_ = Game::create(*engine_);
} }
catch (const std::runtime_error& e) { catch (const std::runtime_error& e) {
std::cerr << "Unhandled exception during initialization: " << e.what() << '\n'; std::cerr << "Unhandled exception during initialization: " << e.what() << '\n';

View file

@ -8,9 +8,9 @@ module;
#define DEBUG_BOOL true #define DEBUG_BOOL true
#endif #endif
export module config; export module rutile.config;
export namespace config export namespace rutile::config
{ {
constexpr auto debug = DEBUG_BOOL; constexpr auto debug = DEBUG_BOOL;

View file

@ -4,12 +4,12 @@ module;
#include <optional> #include <optional>
#include <string> #include <string>
export module core.drawing.sprite; export module rutile.core.drawing.sprite;
import core.render_server; import rutile.core.render_server;
import wrappers.sdl; import wrappers.sdl;
export namespace core export namespace rutile
{ {
class Sprite class Sprite
{ {

View file

@ -4,13 +4,13 @@ module;
#include <cstddef> #include <cstddef>
#include <memory> #include <memory>
export module core.drawing.tile_map; export module rutile.core.drawing.tile_map;
import core.drawing.tile_set; import rutile.core.drawing.tile_set;
import core.render_server; import rutile.core.render_server;
import wrappers.sdl; import wrappers.sdl;
export namespace core export namespace rutile
{ {
// Restrict map size to 16 bit per dimension, so that width*height still fits within size_t // Restrict map size to 16 bit per dimension, so that width*height still fits within size_t
using MapCoord = uint16_t; using MapCoord = uint16_t;

View file

@ -5,12 +5,12 @@ module;
#include <utility> #include <utility>
#include <vector> #include <vector>
export module core.drawing.tile_set; export module rutile.core.drawing.tile_set;
import core.render_server; import rutile.core.render_server;
import wrappers.sdl; import wrappers.sdl;
export namespace core export namespace rutile
{ {
using TileSetID = unsigned int; using TileSetID = unsigned int;
using TileID = unsigned int; using TileID = unsigned int;

View file

@ -3,13 +3,13 @@ module;
#include <cassert> #include <cassert>
#include <memory> #include <memory>
export module core.engine; export module rutile.core.engine;
import config; import rutile.config;
import core.render_server; import rutile.core.render_server;
import wrappers.sdl; import wrappers.sdl;
export namespace core export namespace rutile
{ {
class Engine class Engine
{ {

View file

@ -3,13 +3,13 @@ module;
#include <string> #include <string>
#include <utility> #include <utility>
export module core.render_server; export module rutile.core.render_server;
import core.resource_manager; import rutile.core.resource_manager;
import core.texture_loader; import rutile.core.texture_loader;
import wrappers.sdl; import wrappers.sdl;
export namespace core export namespace rutile
{ {
using TextureID = unsigned int; using TextureID = unsigned int;
using TextureManager = ResourceManager<TextureID, sdl::Texture, TextureLoader>; using TextureManager = ResourceManager<TextureID, sdl::Texture, TextureLoader>;

View file

@ -6,9 +6,9 @@ module;
#include <string> #include <string>
#include <vector> #include <vector>
export module core.resource_manager; export module rutile.core.resource_manager;
export namespace core export namespace rutile
{ {
template <typename ResourceLoaderType, typename ResourceType> template <typename ResourceLoaderType, typename ResourceType>
concept IsResourceLoader = requires(ResourceLoaderType loader, const std::string& name) concept IsResourceLoader = requires(ResourceLoaderType loader, const std::string& name)

View file

@ -2,13 +2,13 @@ module;
#include <string> #include <string>
export module core.texture_loader; export module rutile.core.texture_loader;
import core.resource_manager; import rutile.core.resource_manager;
import wrappers.sdl; import wrappers.sdl;
import wrappers.sdl_image; import wrappers.sdl_image;
export namespace core export namespace rutile
{ {
class TextureLoader class TextureLoader
{ {

View file

@ -5,17 +5,17 @@ module;
#include <optional> #include <optional>
#include <vector> #include <vector>
export module game.game; export module rutile.game.game;
import core.drawing.sprite; import rutile.core.drawing.sprite;
import core.drawing.tile_map; import rutile.core.drawing.tile_map;
import core.drawing.tile_set; import rutile.core.drawing.tile_set;
import core.engine; import rutile.core.engine;
import core.render_server; import rutile.core.render_server;
import wrappers.sdl; import wrappers.sdl;
import wrappers.sdl_image; import wrappers.sdl_image;
export namespace game export namespace rutile
{ {
class Game class Game
{ {
@ -23,21 +23,21 @@ export namespace game
static bool instantiated_; static bool instantiated_;
// Reference to the engine // Reference to the engine
core::Engine& engine_; Engine& engine_;
// Sprites for testing // Sprites for testing
core::Sprite player_sprite_; Sprite player_sprite_;
std::vector<core::Sprite> sprites_; std::vector<Sprite> sprites_;
// Tile set and tile map (TODO: tile set should be moved to resource manager in engine) // Tile set and tile map (TODO: tile set should be moved to resource manager in engine)
core::TileSet tile_set_; TileSet tile_set_;
core::TileMap tile_map_; TileMap tile_map_;
// Private constructor // Private constructor
explicit Game(core::Engine& engine) explicit Game(Engine& engine)
: engine_(engine), : engine_(engine),
player_sprite_{ player_sprite_{
core::Sprite::create_from_texture( Sprite::create_from_texture(
engine_.get_render_server(), engine_.get_render_server(),
"assets/sprites/neocat_64.png", "assets/sprites/neocat_64.png",
std::nullopt, std::nullopt,
@ -46,7 +46,7 @@ export namespace game
) )
}, },
tile_set_{ tile_set_{
core::TileSet::create_from_texture( TileSet::create_from_texture(
engine_.get_render_server(), engine_.get_render_server(),
"assets/tilesets/terrain.png", "assets/tilesets/terrain.png",
32, 32,
@ -86,7 +86,7 @@ export namespace game
instantiated_ = false; instantiated_ = false;
} }
static std::unique_ptr<Game> create(core::Engine& engine) static std::unique_ptr<Game> create(Engine& engine)
{ {
// Prevent the class from being instantiated multiple times // Prevent the class from being instantiated multiple times
assert(!instantiated_); assert(!instantiated_);
@ -105,7 +105,7 @@ export namespace game
if (event->type == sdl::EventType::MouseButtonUp) { if (event->type == sdl::EventType::MouseButtonUp) {
sprites_.push_back( sprites_.push_back(
core::Sprite::create_from_texture( Sprite::create_from_texture(
engine_.get_render_server(), engine_.get_render_server(),
"assets/sprites/neofox_64.png", "assets/sprites/neofox_64.png",
std::nullopt, std::nullopt,
@ -132,7 +132,7 @@ export namespace game
tile_map_.draw(render_server, tile_set_); tile_map_.draw(render_server, tile_set_);
// Render sprites // Render sprites
for (const core::Sprite& sprite : sprites_) { for (const Sprite& sprite : sprites_) {
sprite.draw(render_server); sprite.draw(render_server);
} }
player_sprite_.draw(render_server); player_sprite_.draw(render_server);

View file

@ -19,7 +19,7 @@ export namespace sdl
* Wrapper around SDL_RectEmptyFloat(). * Wrapper around SDL_RectEmptyFloat().
* @return True if the floating point rectangle takes no space. * @return True if the floating point rectangle takes no space.
*/ */
constexpr bool is_empty() const bool is_empty() const
{ {
return SDL_RectEmptyFloat(this); return SDL_RectEmptyFloat(this);
} }
@ -34,7 +34,7 @@ export namespace sdl
* Wrapper around SDL_RectEmpty(). * Wrapper around SDL_RectEmpty().
* @return True if the rectangle takes no space. * @return True if the rectangle takes no space.
*/ */
constexpr bool is_empty() const bool is_empty() const
{ {
return SDL_RectEmpty(this); return SDL_RectEmpty(this);
} }