From 36cb725cc13bfbff41c5801ef8073bd6f75909db Mon Sep 17 00:00:00 2001 From: BlackMATov Date: Wed, 4 Dec 2019 10:28:25 +0700 Subject: [PATCH] dummy sample_08 --- samples/CMakeLists.txt | 1 + samples/bin/library/scenes/sample_08.json | 26 ++++++ .../library/scripts/sample_08/sample_08.lua | 22 +++++ .../bin/library/scripts/sample_08/ship.lua | 36 ++++++++ samples/sources/sample_08/sample_08.cpp | 87 +++++++++++++++++++ 5 files changed, 172 insertions(+) create mode 100644 samples/bin/library/scenes/sample_08.json create mode 100644 samples/bin/library/scripts/sample_08/sample_08.lua create mode 100644 samples/bin/library/scripts/sample_08/ship.lua create mode 100644 samples/sources/sample_08/sample_08.cpp diff --git a/samples/CMakeLists.txt b/samples/CMakeLists.txt index 6206d32f..aee64702 100644 --- a/samples/CMakeLists.txt +++ b/samples/CMakeLists.txt @@ -46,3 +46,4 @@ add_e2d_sample(04) add_e2d_sample(05) add_e2d_sample(06) add_e2d_sample(07) +add_e2d_sample(08) diff --git a/samples/bin/library/scenes/sample_08.json b/samples/bin/library/scenes/sample_08.json new file mode 100644 index 00000000..b21f1514 --- /dev/null +++ b/samples/bin/library/scenes/sample_08.json @@ -0,0 +1,26 @@ +{ + "components" : { + "scene" : {}, + "behaviour" : { + "script" : "../scripts/sample_08/sample_08.lua" + } + }, + "children" : [{ + "prototype" : "../prefabs/camera_prefab.json" + },{ + "prototype" : "../prefabs/ship_prefab.json", + "components" : { + "actor" : { + "translation" : [0,0], + "scale" : 1 + }, + "behaviour" : { + "script" : "../scripts/sample_08/ship.lua" + }, + "touchable" : {}, + "rect_collider" : { + "size" : [66,113] + } + } + }] +} diff --git a/samples/bin/library/scripts/sample_08/sample_08.lua b/samples/bin/library/scripts/sample_08/sample_08.lua new file mode 100644 index 00000000..2e3cfdf9 --- /dev/null +++ b/samples/bin/library/scripts/sample_08/sample_08.lua @@ -0,0 +1,22 @@ +local M = {} + +---@param go gobject +function M:on_start(go) + the_debug:trace("sample_08: on_start") +end + +---@param go gobject +function M:on_update(go) +end + +---@param go gobject +---@param type string +---@param event any +function M:on_event(go, type, event) +end + +---@param go gobject +function M:on_shutdown(go) +end + +return M diff --git a/samples/bin/library/scripts/sample_08/ship.lua b/samples/bin/library/scripts/sample_08/ship.lua new file mode 100644 index 00000000..b0f8f5a4 --- /dev/null +++ b/samples/bin/library/scripts/sample_08/ship.lua @@ -0,0 +1,36 @@ +-- ----------------------------------------------------------------------------- +-- +-- private +-- +-- ----------------------------------------------------------------------------- + +---@class ship_meta + +---@param meta ship_meta +---@param go gobject +local function update_ship_rotation(meta, go) + local time = the_engine.time + go.actor.node.rotation = time +end + +-- ----------------------------------------------------------------------------- +-- +-- meta +-- +-- ----------------------------------------------------------------------------- + +local M = {} + +---@param meta ship_meta +---@param go gobject +function M.on_start(meta, go) + meta.life_time = 5 +end + +---@param meta ship_meta +---@param go gobject +function M.on_update(meta, go) + update_ship_rotation(meta, go) +end + +return M diff --git a/samples/sources/sample_08/sample_08.cpp b/samples/sources/sample_08/sample_08.cpp new file mode 100644 index 00000000..c8c135c1 --- /dev/null +++ b/samples/sources/sample_08/sample_08.cpp @@ -0,0 +1,87 @@ +/******************************************************************************* + * This file is part of the "Enduro2D" + * For conditions of distribution and use, see copyright notice in LICENSE.md + * Copyright (C) 2018-2019, by Matvey Cherevko (blackmatov@gmail.com) + ******************************************************************************/ + +#include "../common.hpp" +using namespace e2d; + +namespace +{ + class game_system final : public systems::update_system { + public: + void process( + ecs::registry& owner, + const systems::update_event& event) override + { + E2D_UNUSED(owner, event); + const keyboard& k = the().keyboard(); + + if ( k.is_key_just_released(keyboard_key::f12) ) { + the().toggle_visible(!the().visible()); + } + + if ( k.is_key_just_released(keyboard_key::escape) ) { + the().set_should_close(true); + } + + if ( k.is_key_pressed(keyboard_key::lsuper) && k.is_key_just_released(keyboard_key::enter) ) { + the().toggle_fullscreen(!the().fullscreen()); + } + } + }; + + class camera_system final : public systems::render_system { + public: + void process( + ecs::registry& owner, + const systems::render_event& event) override + { + E2D_UNUSED(event); + owner.for_joined_components( + [](const ecs::const_entity&, camera& cam){ + if ( !cam.target() ) { + cam.viewport( + the().framebuffer_size()); + cam.projection(math::make_orthogonal_lh_matrix4( + the().real_size().cast_to(), 0.f, 1000.f)); + } + }); + } + }; + + class game final : public starter::application { + public: + bool initialize() final { + return create_scene() + && create_systems(); + } + private: + bool create_scene() { + auto scene_prefab_res = the().load_asset("scenes/sample_08.json"); + auto scene_go = scene_prefab_res + ? the().instantiate(scene_prefab_res->content()) + : gobject(); + return scene_go.valid(); + } + + bool create_systems() { + ecs::registry_filler(the().registry()) + .feature(ecs::feature() + .add_system() + .add_system()); + return true; + } + }; +} + +int e2d_main(int argc, char *argv[]) { + const auto starter_params = starter::parameters( + engine::parameters("sample_08", "enduro2d") + .timer_params(engine::timer_parameters() + .maximal_framerate(100))); + modules::initialize(argc, argv, starter_params).start(); + modules::shutdown(); + return 0; +}