module; #include #include export module game.game; import core.engine; import core.renderer; import game.sprite; import resources.texture; export namespace game { class Game { core::Engine& engine_; // Sprite for testing std::unique_ptr sprite_ = nullptr; public: Game() = delete; explicit Game(core::Engine& engine) : engine_(engine) {} // No copy or move operations because we have a reference to the engine Game(const Game&) = delete; Game& operator=(const Game&) = delete; Game(Game&&) = delete; Game& operator=(Game&&) = delete; ~Game() = default; void initialize() { auto texture = resources::Texture::load_from_file( engine_.get_renderer().get_sdl_renderer(), "assets/neocat.png" ); sprite_ = std::make_unique(std::move(texture), 100, 100); } // Handles an SDL event. Returns true if the event has been handled. bool handle_event(const SDL_Event* event) const { if (event->type == SDL_EVENT_MOUSE_MOTION) { sprite_->move( event->motion.x - 50, event->motion.y - 50 ); return true; } return false; } void update() { } void render() const { const auto& renderer = engine_.get_renderer(); renderer.clear(); sprite_->draw(renderer); renderer.present(); } void shutdown() { } }; }