/******************************************************************************* * This file is part of the "Enduro2D" * For conditions of distribution and use, see copyright notice in LICENSE.md * Copyright (C) 2018-2020, 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()); } // use keys R, J, G to start animations const bool roar = k.is_key_just_pressed(keyboard_key::r); const bool jump = k.is_key_just_pressed(keyboard_key::j); const bool gun_grab = k.is_key_just_pressed(keyboard_key::g); if ( roar || jump || gun_grab ) { owner.for_each_component([ roar, jump, gun_grab ](ecs::entity e, const spine_player& p) { if ( roar && p.has_animation("roar") ) { e.ensure_component>() .add(spine_player_commands::set_anim_cmd(0, "roar") .complete_message("to_walk")); } else if ( jump && p.has_animation("jump") ) { e.ensure_component>() .add(spine_player_commands::set_anim_cmd(0, "jump") .complete_message("to_walk")); } else if ( gun_grab && p.has_animation("gun-grab") ) { e.ensure_component>() .add(spine_player_commands::set_anim_cmd(1, "gun-grab")) .add(spine_player_commands::add_anim_cmd(1, "gun-holster").delay(3.f)); } }); } owner.for_joined_components>([ ](ecs::entity e, const events& pe) { for ( const auto& evt : pe.get() ) { if ( auto complete = std::get_if(&evt); complete && complete->message() == "to_walk" ) { e.ensure_component>() .add(spine_player_commands::add_anim_cmd(0, "walk") .loop(true)); } } }); } }; 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_06.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()); return true; } }; } int e2d_main(int argc, char *argv[]) { const auto starter_params = starter::parameters( engine::parameters("sample_06", "enduro2d") .window_params(engine::window_parameters() .size({1024, 768})) .timer_params(engine::timer_parameters() .maximal_framerate(100))); modules::initialize(argc, argv, starter_params).start(); modules::shutdown(); return 0; }