mirror of
https://github.com/enduro2d/enduro2d.git
synced 2025-12-15 00:11:55 +07:00
clean up engine parameters and application classes
This commit is contained in:
@@ -28,7 +28,6 @@ namespace e2d
|
||||
class dbgui;
|
||||
class debug;
|
||||
class deferrer;
|
||||
class application;
|
||||
class engine;
|
||||
class mouse;
|
||||
class keyboard;
|
||||
|
||||
@@ -10,115 +10,19 @@
|
||||
|
||||
namespace e2d
|
||||
{
|
||||
//
|
||||
// application
|
||||
//
|
||||
|
||||
class application : private noncopyable {
|
||||
public:
|
||||
virtual ~application() noexcept = default;
|
||||
virtual bool initialize();
|
||||
virtual void shutdown() noexcept;
|
||||
virtual bool frame_tick();
|
||||
virtual void frame_render();
|
||||
};
|
||||
using application_uptr = std::unique_ptr<application>;
|
||||
|
||||
//
|
||||
// bad_engine_operation
|
||||
//
|
||||
|
||||
class bad_engine_operation final : public exception {
|
||||
public:
|
||||
const char* what() const noexcept final {
|
||||
return "bad engine operation";
|
||||
}
|
||||
};
|
||||
|
||||
//
|
||||
// engine
|
||||
//
|
||||
|
||||
class engine final : public module<engine> {
|
||||
public:
|
||||
class debug_parameters {
|
||||
public:
|
||||
debug_parameters& log_filename(str_view value);
|
||||
debug_parameters& file_logging(bool value) noexcept;
|
||||
debug_parameters& console_logging(bool value) noexcept;
|
||||
|
||||
const str& log_filename() const noexcept;
|
||||
bool file_logging() const noexcept;
|
||||
bool console_logging() const noexcept;
|
||||
private:
|
||||
str log_filename_{"log.txt"};
|
||||
bool file_logging_{true};
|
||||
bool console_logging_{true};
|
||||
};
|
||||
|
||||
class window_parameters {
|
||||
public:
|
||||
window_parameters& caption(str_view value);
|
||||
window_parameters& size(const v2u& value) noexcept;
|
||||
window_parameters& vsync(bool value) noexcept;
|
||||
window_parameters& fullscreen(bool value) noexcept;
|
||||
|
||||
const str& caption() const noexcept;
|
||||
const v2u& size() const noexcept;
|
||||
bool vsync() const noexcept;
|
||||
bool fullscreen() const noexcept;
|
||||
private:
|
||||
str caption_{"Enduro2D"};
|
||||
v2u size_{640, 480};
|
||||
bool vsync_{false};
|
||||
bool fullscreen_{false};
|
||||
};
|
||||
|
||||
class timer_parameters {
|
||||
public:
|
||||
timer_parameters& minimal_framerate(u32 value) noexcept;
|
||||
timer_parameters& maximal_framerate(u32 value) noexcept;
|
||||
|
||||
u32 minimal_framerate() const noexcept;
|
||||
u32 maximal_framerate() const noexcept;
|
||||
private:
|
||||
u32 minimal_framerate_{30u};
|
||||
u32 maximal_framerate_{1000u};
|
||||
};
|
||||
|
||||
class parameters {
|
||||
public:
|
||||
parameters() = delete;
|
||||
parameters(str_view game_name, str_view company_name);
|
||||
|
||||
parameters& game_name(str_view value);
|
||||
parameters& company_name(str_view value);
|
||||
parameters& without_graphics(bool value);
|
||||
parameters& debug_params(const debug_parameters& value);
|
||||
parameters& window_params(const window_parameters& value);
|
||||
parameters& timer_params(const timer_parameters& value);
|
||||
|
||||
str& game_name() noexcept;
|
||||
str& company_name() noexcept;
|
||||
bool& without_graphics() noexcept;
|
||||
debug_parameters& debug_params() noexcept;
|
||||
window_parameters& window_params() noexcept;
|
||||
timer_parameters& timer_params() noexcept;
|
||||
|
||||
const str& game_name() const noexcept;
|
||||
const str& company_name() const noexcept;
|
||||
const bool& without_graphics() const noexcept;
|
||||
const debug_parameters& debug_params() const noexcept;
|
||||
const window_parameters& window_params() const noexcept;
|
||||
const timer_parameters& timer_params() const noexcept;
|
||||
private:
|
||||
str game_name_{"noname"};
|
||||
str company_name_{"noname"};
|
||||
bool without_graphics_{false};
|
||||
debug_parameters debug_params_;
|
||||
window_parameters window_params_;
|
||||
timer_parameters timer_params_;
|
||||
};
|
||||
class application;
|
||||
using application_uptr = std::unique_ptr<application>;
|
||||
public:
|
||||
class debug_parameters;
|
||||
class window_parameters;
|
||||
class timer_parameters;
|
||||
class parameters;
|
||||
public:
|
||||
engine(int argc, char *argv[], const parameters& params);
|
||||
~engine() noexcept final;
|
||||
@@ -137,6 +41,114 @@ namespace e2d
|
||||
class internal_state;
|
||||
std::unique_ptr<internal_state> state_;
|
||||
};
|
||||
|
||||
//
|
||||
// engine::application
|
||||
//
|
||||
|
||||
class engine::application : private e2d::noncopyable {
|
||||
public:
|
||||
virtual ~application() noexcept = default;
|
||||
virtual bool initialize();
|
||||
virtual void shutdown() noexcept;
|
||||
virtual bool frame_tick();
|
||||
virtual void frame_render();
|
||||
};
|
||||
|
||||
//
|
||||
// engine::debug_parameters
|
||||
//
|
||||
|
||||
class engine::debug_parameters {
|
||||
public:
|
||||
debug_parameters& log_filename(str_view value);
|
||||
debug_parameters& file_logging(bool value) noexcept;
|
||||
debug_parameters& console_logging(bool value) noexcept;
|
||||
|
||||
const str& log_filename() const noexcept;
|
||||
bool file_logging() const noexcept;
|
||||
bool console_logging() const noexcept;
|
||||
private:
|
||||
str log_filename_{"log.txt"};
|
||||
bool file_logging_{true};
|
||||
bool console_logging_{true};
|
||||
};
|
||||
|
||||
//
|
||||
// engine::window_parameters
|
||||
//
|
||||
|
||||
class engine::window_parameters {
|
||||
public:
|
||||
window_parameters& caption(str_view value);
|
||||
window_parameters& size(const v2u& value) noexcept;
|
||||
window_parameters& vsync(bool value) noexcept;
|
||||
window_parameters& fullscreen(bool value) noexcept;
|
||||
|
||||
const str& caption() const noexcept;
|
||||
const v2u& size() const noexcept;
|
||||
bool vsync() const noexcept;
|
||||
bool fullscreen() const noexcept;
|
||||
private:
|
||||
str caption_{"Enduro2D"};
|
||||
v2u size_{640, 480};
|
||||
bool vsync_{false};
|
||||
bool fullscreen_{false};
|
||||
};
|
||||
|
||||
//
|
||||
// engine::timer_parameters
|
||||
//
|
||||
|
||||
class engine::timer_parameters {
|
||||
public:
|
||||
timer_parameters& minimal_framerate(u32 value) noexcept;
|
||||
timer_parameters& maximal_framerate(u32 value) noexcept;
|
||||
|
||||
u32 minimal_framerate() const noexcept;
|
||||
u32 maximal_framerate() const noexcept;
|
||||
private:
|
||||
u32 minimal_framerate_{30u};
|
||||
u32 maximal_framerate_{1000u};
|
||||
};
|
||||
|
||||
//
|
||||
// engine::parameters
|
||||
//
|
||||
|
||||
class engine::parameters {
|
||||
public:
|
||||
parameters() = delete;
|
||||
parameters(str_view game_name, str_view company_name);
|
||||
|
||||
parameters& game_name(str_view value);
|
||||
parameters& company_name(str_view value);
|
||||
parameters& without_graphics(bool value);
|
||||
parameters& debug_params(const debug_parameters& value);
|
||||
parameters& window_params(const window_parameters& value);
|
||||
parameters& timer_params(const timer_parameters& value);
|
||||
|
||||
str& game_name() noexcept;
|
||||
str& company_name() noexcept;
|
||||
bool& without_graphics() noexcept;
|
||||
debug_parameters& debug_params() noexcept;
|
||||
window_parameters& window_params() noexcept;
|
||||
timer_parameters& timer_params() noexcept;
|
||||
|
||||
const str& game_name() const noexcept;
|
||||
const str& company_name() const noexcept;
|
||||
const bool& without_graphics() const noexcept;
|
||||
const debug_parameters& debug_params() const noexcept;
|
||||
const window_parameters& window_params() const noexcept;
|
||||
const timer_parameters& timer_params() const noexcept;
|
||||
private:
|
||||
str game_name_{"noname"};
|
||||
str company_name_{"noname"};
|
||||
bool without_graphics_{false};
|
||||
debug_parameters debug_params_;
|
||||
window_parameters window_params_;
|
||||
timer_parameters timer_params_;
|
||||
};
|
||||
}
|
||||
|
||||
namespace e2d
|
||||
|
||||
@@ -10,49 +10,57 @@
|
||||
|
||||
namespace e2d
|
||||
{
|
||||
//
|
||||
// high_application
|
||||
//
|
||||
|
||||
class high_application : private noncopyable {
|
||||
public:
|
||||
virtual ~high_application() noexcept = default;
|
||||
virtual bool initialize();
|
||||
virtual void shutdown() noexcept;
|
||||
virtual bool on_should_close();
|
||||
};
|
||||
using high_application_uptr = std::unique_ptr<high_application>;
|
||||
|
||||
//
|
||||
// starter
|
||||
//
|
||||
|
||||
class starter final : public module<starter> {
|
||||
public:
|
||||
class parameters {
|
||||
public:
|
||||
parameters() = delete;
|
||||
parameters(const engine::parameters& engine_params);
|
||||
|
||||
parameters& library_root(const url& value);
|
||||
parameters& engine_params(const engine::parameters& value);
|
||||
|
||||
url& library_root() noexcept;
|
||||
engine::parameters& engine_params() noexcept;
|
||||
|
||||
const url& library_root() const noexcept;
|
||||
const engine::parameters& engine_params() const noexcept;
|
||||
private:
|
||||
url library_root_{"resources://bin/library"};
|
||||
engine::parameters engine_params_;
|
||||
};
|
||||
class application;
|
||||
using application_uptr = std::unique_ptr<application>;
|
||||
public:
|
||||
class parameters;
|
||||
public:
|
||||
starter(int argc, char *argv[], const parameters& params);
|
||||
~starter() noexcept final;
|
||||
|
||||
template < typename HighApplication, typename... Args >
|
||||
bool start(Args&&... args);
|
||||
bool start(high_application_uptr app);
|
||||
bool start(application_uptr app);
|
||||
};
|
||||
|
||||
//
|
||||
// starter::application
|
||||
//
|
||||
|
||||
class starter::application : private e2d::noncopyable {
|
||||
public:
|
||||
virtual ~application() noexcept = default;
|
||||
virtual bool initialize();
|
||||
virtual void shutdown() noexcept;
|
||||
virtual bool on_should_close();
|
||||
};
|
||||
|
||||
//
|
||||
// starter::parameters
|
||||
//
|
||||
|
||||
class starter::parameters {
|
||||
public:
|
||||
parameters() = delete;
|
||||
parameters(const engine::parameters& engine_params);
|
||||
|
||||
parameters& library_root(const url& value);
|
||||
parameters& engine_params(const engine::parameters& value);
|
||||
|
||||
url& library_root() noexcept;
|
||||
engine::parameters& engine_params() noexcept;
|
||||
|
||||
const url& library_root() const noexcept;
|
||||
const engine::parameters& engine_params() const noexcept;
|
||||
private:
|
||||
url library_root_{"resources://bin/library"};
|
||||
engine::parameters engine_params_;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -90,7 +90,7 @@ namespace
|
||||
vertex2{color32::yellow()}};
|
||||
}
|
||||
|
||||
class game final : public application {
|
||||
class game final : public engine::application {
|
||||
public:
|
||||
bool initialize() final {
|
||||
the<vfs>().register_scheme<archive_file_source>(
|
||||
|
||||
@@ -150,7 +150,7 @@ namespace
|
||||
vertex2{color32::yellow()}};
|
||||
}
|
||||
|
||||
class game final : public application {
|
||||
class game final : public engine::application {
|
||||
public:
|
||||
bool initialize() final {
|
||||
the<vfs>().register_scheme<archive_file_source>(
|
||||
|
||||
@@ -105,7 +105,7 @@ namespace
|
||||
vertex{{-x, y, z}, {0, 0}}};
|
||||
}
|
||||
|
||||
class game final : public application {
|
||||
class game final : public engine::application {
|
||||
public:
|
||||
bool initialize() final {
|
||||
the<vfs>().register_scheme<archive_file_source>(
|
||||
|
||||
@@ -63,7 +63,7 @@ namespace
|
||||
}
|
||||
};
|
||||
|
||||
class game final : public high_application {
|
||||
class game final : public starter::application {
|
||||
public:
|
||||
bool initialize() final {
|
||||
return create_scene()
|
||||
|
||||
@@ -44,7 +44,7 @@ namespace
|
||||
}
|
||||
};
|
||||
|
||||
class game final : public high_application {
|
||||
class game final : public starter::application {
|
||||
public:
|
||||
bool initialize() final {
|
||||
return create_scene()
|
||||
|
||||
@@ -44,18 +44,18 @@ namespace e2d
|
||||
// application
|
||||
//
|
||||
|
||||
bool application::initialize() {
|
||||
bool engine::application::initialize() {
|
||||
return true;
|
||||
}
|
||||
|
||||
void application::shutdown() noexcept {
|
||||
void engine::application::shutdown() noexcept {
|
||||
}
|
||||
|
||||
bool application::frame_tick() {
|
||||
bool engine::application::frame_tick() {
|
||||
return true;
|
||||
}
|
||||
|
||||
void application::frame_render() {
|
||||
void engine::application::frame_render() {
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
@@ -33,21 +33,21 @@ namespace
|
||||
: modules::initialize<Module>(std::forward<Args>(args)...);
|
||||
}
|
||||
|
||||
class starter_application final : public application {
|
||||
class engine_application final : public engine::application {
|
||||
public:
|
||||
starter_application(high_application_uptr application)
|
||||
: high_application_(std::move(application)) {}
|
||||
engine_application(starter::application_uptr application)
|
||||
: application_(std::move(application)) {}
|
||||
|
||||
bool initialize() final {
|
||||
ecs::registry_filler(the<world>().registry())
|
||||
.system<flipbook_system>(world::priority_update)
|
||||
.system<render_system>(world::priority_render);
|
||||
return !high_application_ || high_application_->initialize();
|
||||
return !application_ || application_->initialize();
|
||||
}
|
||||
|
||||
void shutdown() noexcept final {
|
||||
if ( high_application_ ) {
|
||||
high_application_->shutdown();
|
||||
if ( application_ ) {
|
||||
application_->shutdown();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,7 +56,7 @@ namespace
|
||||
world::priority_update_section_begin,
|
||||
world::priority_update_section_end);
|
||||
return !the<window>().should_close()
|
||||
|| (high_application_ && !high_application_->on_should_close());
|
||||
|| (application_ && !application_->on_should_close());
|
||||
}
|
||||
|
||||
void frame_render() final {
|
||||
@@ -65,24 +65,24 @@ namespace
|
||||
world::priority_render_section_end);
|
||||
}
|
||||
private:
|
||||
high_application_uptr high_application_;
|
||||
starter::application_uptr application_;
|
||||
};
|
||||
}
|
||||
|
||||
namespace e2d
|
||||
{
|
||||
//
|
||||
// high_application
|
||||
// starter::application
|
||||
//
|
||||
|
||||
bool high_application::initialize() {
|
||||
bool starter::application::initialize() {
|
||||
return true;
|
||||
}
|
||||
|
||||
void high_application::shutdown() noexcept {
|
||||
void starter::application::shutdown() noexcept {
|
||||
}
|
||||
|
||||
bool high_application::on_should_close() {
|
||||
bool starter::application::on_should_close() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -145,9 +145,9 @@ namespace e2d
|
||||
modules::shutdown<engine>();
|
||||
}
|
||||
|
||||
bool starter::start(high_application_uptr app) {
|
||||
bool starter::start(application_uptr app) {
|
||||
return the<engine>().start(
|
||||
std::make_unique<starter_application>(
|
||||
std::make_unique<engine_application>(
|
||||
std::move(app)));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user