mirror of
https://github.com/enduro2d/enduro2d.git
synced 2025-12-15 08:15:38 +07:00
clean up engine parameters and application classes
This commit is contained in:
@@ -28,7 +28,6 @@ namespace e2d
|
|||||||
class dbgui;
|
class dbgui;
|
||||||
class debug;
|
class debug;
|
||||||
class deferrer;
|
class deferrer;
|
||||||
class application;
|
|
||||||
class engine;
|
class engine;
|
||||||
class mouse;
|
class mouse;
|
||||||
class keyboard;
|
class keyboard;
|
||||||
|
|||||||
@@ -10,115 +10,19 @@
|
|||||||
|
|
||||||
namespace e2d
|
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
|
// engine
|
||||||
//
|
//
|
||||||
|
|
||||||
class engine final : public module<engine> {
|
class engine final : public module<engine> {
|
||||||
public:
|
public:
|
||||||
class debug_parameters {
|
class application;
|
||||||
public:
|
using application_uptr = std::unique_ptr<application>;
|
||||||
debug_parameters& log_filename(str_view value);
|
public:
|
||||||
debug_parameters& file_logging(bool value) noexcept;
|
class debug_parameters;
|
||||||
debug_parameters& console_logging(bool value) noexcept;
|
class window_parameters;
|
||||||
|
class timer_parameters;
|
||||||
const str& log_filename() const noexcept;
|
class parameters;
|
||||||
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_;
|
|
||||||
};
|
|
||||||
public:
|
public:
|
||||||
engine(int argc, char *argv[], const parameters& params);
|
engine(int argc, char *argv[], const parameters& params);
|
||||||
~engine() noexcept final;
|
~engine() noexcept final;
|
||||||
@@ -137,6 +41,114 @@ namespace e2d
|
|||||||
class internal_state;
|
class internal_state;
|
||||||
std::unique_ptr<internal_state> 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
|
namespace e2d
|
||||||
|
|||||||
@@ -10,49 +10,57 @@
|
|||||||
|
|
||||||
namespace e2d
|
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
|
// starter
|
||||||
//
|
//
|
||||||
|
|
||||||
class starter final : public module<starter> {
|
class starter final : public module<starter> {
|
||||||
public:
|
public:
|
||||||
class parameters {
|
class application;
|
||||||
public:
|
using application_uptr = std::unique_ptr<application>;
|
||||||
parameters() = delete;
|
public:
|
||||||
parameters(const engine::parameters& engine_params);
|
class parameters;
|
||||||
|
|
||||||
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_;
|
|
||||||
};
|
|
||||||
public:
|
public:
|
||||||
starter(int argc, char *argv[], const parameters& params);
|
starter(int argc, char *argv[], const parameters& params);
|
||||||
~starter() noexcept final;
|
~starter() noexcept final;
|
||||||
|
|
||||||
template < typename HighApplication, typename... Args >
|
template < typename HighApplication, typename... Args >
|
||||||
bool start(Args&&... 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()}};
|
vertex2{color32::yellow()}};
|
||||||
}
|
}
|
||||||
|
|
||||||
class game final : public application {
|
class game final : public engine::application {
|
||||||
public:
|
public:
|
||||||
bool initialize() final {
|
bool initialize() final {
|
||||||
the<vfs>().register_scheme<archive_file_source>(
|
the<vfs>().register_scheme<archive_file_source>(
|
||||||
|
|||||||
@@ -150,7 +150,7 @@ namespace
|
|||||||
vertex2{color32::yellow()}};
|
vertex2{color32::yellow()}};
|
||||||
}
|
}
|
||||||
|
|
||||||
class game final : public application {
|
class game final : public engine::application {
|
||||||
public:
|
public:
|
||||||
bool initialize() final {
|
bool initialize() final {
|
||||||
the<vfs>().register_scheme<archive_file_source>(
|
the<vfs>().register_scheme<archive_file_source>(
|
||||||
|
|||||||
@@ -105,7 +105,7 @@ namespace
|
|||||||
vertex{{-x, y, z}, {0, 0}}};
|
vertex{{-x, y, z}, {0, 0}}};
|
||||||
}
|
}
|
||||||
|
|
||||||
class game final : public application {
|
class game final : public engine::application {
|
||||||
public:
|
public:
|
||||||
bool initialize() final {
|
bool initialize() final {
|
||||||
the<vfs>().register_scheme<archive_file_source>(
|
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:
|
public:
|
||||||
bool initialize() final {
|
bool initialize() final {
|
||||||
return create_scene()
|
return create_scene()
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ namespace
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class game final : public high_application {
|
class game final : public starter::application {
|
||||||
public:
|
public:
|
||||||
bool initialize() final {
|
bool initialize() final {
|
||||||
return create_scene()
|
return create_scene()
|
||||||
|
|||||||
@@ -44,18 +44,18 @@ namespace e2d
|
|||||||
// application
|
// application
|
||||||
//
|
//
|
||||||
|
|
||||||
bool application::initialize() {
|
bool engine::application::initialize() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void application::shutdown() noexcept {
|
void engine::application::shutdown() noexcept {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool application::frame_tick() {
|
bool engine::application::frame_tick() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void application::frame_render() {
|
void engine::application::frame_render() {
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -33,21 +33,21 @@ namespace
|
|||||||
: modules::initialize<Module>(std::forward<Args>(args)...);
|
: modules::initialize<Module>(std::forward<Args>(args)...);
|
||||||
}
|
}
|
||||||
|
|
||||||
class starter_application final : public application {
|
class engine_application final : public engine::application {
|
||||||
public:
|
public:
|
||||||
starter_application(high_application_uptr application)
|
engine_application(starter::application_uptr application)
|
||||||
: high_application_(std::move(application)) {}
|
: application_(std::move(application)) {}
|
||||||
|
|
||||||
bool initialize() final {
|
bool initialize() final {
|
||||||
ecs::registry_filler(the<world>().registry())
|
ecs::registry_filler(the<world>().registry())
|
||||||
.system<flipbook_system>(world::priority_update)
|
.system<flipbook_system>(world::priority_update)
|
||||||
.system<render_system>(world::priority_render);
|
.system<render_system>(world::priority_render);
|
||||||
return !high_application_ || high_application_->initialize();
|
return !application_ || application_->initialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
void shutdown() noexcept final {
|
void shutdown() noexcept final {
|
||||||
if ( high_application_ ) {
|
if ( application_ ) {
|
||||||
high_application_->shutdown();
|
application_->shutdown();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -56,7 +56,7 @@ namespace
|
|||||||
world::priority_update_section_begin,
|
world::priority_update_section_begin,
|
||||||
world::priority_update_section_end);
|
world::priority_update_section_end);
|
||||||
return !the<window>().should_close()
|
return !the<window>().should_close()
|
||||||
|| (high_application_ && !high_application_->on_should_close());
|
|| (application_ && !application_->on_should_close());
|
||||||
}
|
}
|
||||||
|
|
||||||
void frame_render() final {
|
void frame_render() final {
|
||||||
@@ -65,24 +65,24 @@ namespace
|
|||||||
world::priority_render_section_end);
|
world::priority_render_section_end);
|
||||||
}
|
}
|
||||||
private:
|
private:
|
||||||
high_application_uptr high_application_;
|
starter::application_uptr application_;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace e2d
|
namespace e2d
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// high_application
|
// starter::application
|
||||||
//
|
//
|
||||||
|
|
||||||
bool high_application::initialize() {
|
bool starter::application::initialize() {
|
||||||
return true;
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -145,9 +145,9 @@ namespace e2d
|
|||||||
modules::shutdown<engine>();
|
modules::shutdown<engine>();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool starter::start(high_application_uptr app) {
|
bool starter::start(application_uptr app) {
|
||||||
return the<engine>().start(
|
return the<engine>().start(
|
||||||
std::make_unique<starter_application>(
|
std::make_unique<engine_application>(
|
||||||
std::move(app)));
|
std::move(app)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user