clean up engine parameters and application classes

This commit is contained in:
2019-05-18 14:44:01 +07:00
parent 0ebb9bcfaf
commit c3f6f93d7e
10 changed files with 177 additions and 158 deletions

View File

@@ -28,7 +28,6 @@ namespace e2d
class dbgui;
class debug;
class deferrer;
class application;
class engine;
class mouse;
class keyboard;

View File

@@ -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

View File

@@ -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_;
};
}

View File

@@ -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>(

View File

@@ -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>(

View File

@@ -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>(

View File

@@ -63,7 +63,7 @@ namespace
}
};
class game final : public high_application {
class game final : public starter::application {
public:
bool initialize() final {
return create_scene()

View File

@@ -44,7 +44,7 @@ namespace
}
};
class game final : public high_application {
class game final : public starter::application {
public:
bool initialize() final {
return create_scene()

View File

@@ -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() {
}
//

View File

@@ -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)));
}
}