#pragma once // macros for scene input #define ACTION(X, Y) (name.compare(X) == 0 && type.compare(Y) == 0) #define ACTIONONCE(X) ((name.compare(X) == 0 && type.compare("start") == 0 && !actionState[name])) #define ACTIONAFTER(X) ((name.compare(X) == 0 && type.compare("end") == 0)) #define ACTIONPY ((name.size() > 3 && name.compare(name.size() - 3, 3, "_py") == 0)) #include "Common.h" #include #include "UI.h" #include "PyCallable.h" //#include "GameEngine.h" class GameEngine; // forward declare class Scene { protected: bool hasEnded = false; bool paused = false; std::map actions; std::map actionState; GameEngine* game; void simulate(int); void registerAction(int, std::string); public: //Scene(); Scene(GameEngine*); virtual void update() = 0; virtual void render() = 0; virtual void doAction(std::string, std::string) = 0; bool hasAction(std::string); bool hasAction(int); std::string action(int); virtual bool registerActionInjected(int, std::string); virtual bool unregisterActionInjected(int, std::string); std::shared_ptr>> ui_elements; //PyObject* key_callable; std::unique_ptr key_callable; void key_register(PyObject*); void key_unregister(); };