// // Created by Wouter Groeneveld on 28/07/18. // #ifndef GBA_SPRITE_ENGINE_SCRENE_H #define GBA_SPRITE_ENGINE_SCRENE_H #include #include #include #include #include #include class GBAEngine; class Scene { protected: std::unique_ptr foregroundPalette; std::unique_ptr backgroundPalette; std::shared_ptr engine; public: ForegroundPaletteManager* getForegroundPalette() { return foregroundPalette.get(); } BackgroundPaletteManager* getBackgroundPalette() { return backgroundPalette.get(); } // WHY raw pointers? they're unwrapped unique_ptrs managed by the scene implementation - will be cleaned up in engine virtual std::vector meshes() = 0; virtual Camera camera() = 0; virtual void load() = 0; virtual void tick(u16 keys) = 0; Scene(std::shared_ptr engine) : engine(engine), foregroundPalette(std::unique_ptr(new ForegroundPaletteManager())), backgroundPalette(std::unique_ptr(new BackgroundPaletteManager())) { } virtual ~Scene() { // scenes should manage their own resources - use std::unique_ptr } }; #endif //GBA_SPRITE_ENGINE_SCRENE_H