#ifndef __SCOP_NATIVE_SCRIPT__ #define __SCOP_NATIVE_SCRIPT__ #include #include namespace Scop { class NativeActorScript : public ActorScript { public: NativeActorScript(std::function)> on_init, std::function, NonOwningPtr, class Inputs&, float)> on_update, std::function)> on_quit) : f_on_init(std::move(on_init)), f_on_update(std::move(on_update)), f_on_quit(std::move(on_quit)) {} inline void OnInit(NonOwningPtr actor) override { if(f_on_init) f_on_init(actor); } inline void OnUpdate(NonOwningPtr scene, NonOwningPtr actor, class Inputs& input, float delta) override { if(f_on_update) f_on_update(scene, actor, input, delta); } inline void OnQuit(NonOwningPtr actor) override { if(f_on_quit) f_on_quit(actor); } ~NativeActorScript() = default; private: std::function)> f_on_init; std::function, NonOwningPtr, class Inputs&, float)> f_on_update; std::function)> f_on_quit; }; class NativeSpriteScript : public SpriteScript { public: NativeSpriteScript(std::function)> on_init, std::function, NonOwningPtr, class Inputs&, float)> on_update, std::function)> on_quit) : f_on_init(std::move(on_init)), f_on_update(std::move(on_update)), f_on_quit(std::move(on_quit)) {} inline void OnInit(NonOwningPtr sprite) override { if(f_on_init) f_on_init(sprite); } inline void OnUpdate(NonOwningPtr scene, NonOwningPtr sprite, class Inputs& input, float delta) override { if(f_on_update) f_on_update(scene, sprite, input, delta); } inline void OnQuit(NonOwningPtr sprite) override { if(f_on_quit) f_on_quit(sprite); } ~NativeSpriteScript() = default; private: std::function)> f_on_init; std::function, NonOwningPtr, class Inputs&, float)> f_on_update; std::function)> f_on_quit; }; class NativeNarratorScript : public NarratorScript { public: NativeNarratorScript(std::function on_init, std::function, class Inputs&, float)> on_update, std::function on_quit) : f_on_init(std::move(on_init)), f_on_update(std::move(on_update)), f_on_quit(std::move(on_quit)) {} inline void OnInit() override { if(f_on_init) f_on_init(); } inline void OnUpdate(NonOwningPtr scene, class Inputs& input, float delta) override { if(f_on_update) f_on_update(scene, input, delta); } inline void OnQuit() override { if(f_on_quit) f_on_quit(); } ~NativeNarratorScript() = default; private: std::function f_on_init; std::function, class Inputs&, float)> f_on_update; std::function f_on_quit; }; } #endif