// // AniParentScene.h // SteveMaggieCpp // // Created by Katarzyna Kalinowska-Górska on 16.05.2017. // // #ifndef AniParentScene_h #define AniParentScene_h #include "AniSceneWithUtils.h" //#include "AniScenarioHandler.h" #include "ui/CocosGUI.h" #include "TouchHandlerTypes.h" #include "AniScenarioObject.h" #include "AniLayoutParser.h" #include "audio/include/AudioEngine.h" class AniParentScene : public AniSceneWithUtils, public AniScenarioObject, public AniLayoutViewInterface { // friend class AniScenarioHandler; public: // create static AniParentScene* create(std::string layoutFilePath = "", std::string scenarioFilePath = ""); virtual bool initWithConfigurationFiles(std::string layoutFilePath = "", std::string scenarioFilePath = ""); // overrides virtual void onEnter() override; virtual void onExit() override; // AniLayoutViewInterface virtual void addLayer(cocos2d::Layer* layer) override; virtual void addObject(std::string objectName, cocos2d::Node* object) override; virtual void addAniScenarioObject(std::string objectName, AniScenarioObject* object) override; virtual void setupBackgroundMusic(std::string backgroundMusicPath) override; virtual bool touchHandlerForWidget(std::string objectName, cocos2d::ui::Widget::TouchEventType touchEventType) override; // Scenario Object virtual AniScenarioObject* getObjectByName(std::string objectName) override; virtual void setProperty(std::string propertyName, const rapidjson::Value& newValue, ActionParseDelegate* parseDelegate) override; virtual void callFunctionByName(std::string methodName, const rapidjson::Value* arguments, ActionParseDelegate* parseDelegate, std::function callback = [](){}) override; virtual std::string getPropertyAsString(std::string propertyName = "") override; // other virtual void addNewObject(std::string objectName, AniScenarioObject* newObject); virtual void disableButton(const std::string& buttonName); virtual void enableButton(const std::string& buttonName); virtual void disableFastForwardButton(); virtual void enableFastForwardButton(); virtual long long getLastScreenTouchTime(); virtual void setAlwaysSkipDemo(bool alwaysSkipDemo); virtual void addTouchHandler(std::string key, TouchHandlerFunction touchHandler, TouchHandlerType touchType); virtual void removeTouchHandler(std::string touchHandlerKey, TouchHandlerType touchHandlerType); virtual void setLoadFromAssets(bool loadFromAssets); // void setLoadLayoutOnEnter(bool loadOnEnter){ // m_loadLayoutOnEnter = loadOnEnter; // }; protected: // configuration file paths std::string _layoutFilePath; std::string _scenarioFilePath; bool _loadFromAssets; // bool m_loadLayoutOnEnter {false}; // layout objects std::vector _layers; std::map _objects; std::map _AniScenarioObjects; // other than cocos2d::Nodes // state vars bool _layoutLoaded; // scenario handling bool _alwaysSkipDemo; // AniScenarioHandler* _AniScenarioHandler; // touch handling std::map _touchBeganHandlers; std::map _touchMovedHandlers; std::map _touchEndedHandlers; std::map _touchHandlersToRemove; bool _isHandlingTouches; long long _lastUserTouchEndedTime; long long _lastUserTouchMovedTime; bool _userTaskInteractionStarted; std::map _userTaskInteractionStartedMap; std::string _currentTask; bool _rightObjectTouchedAlready; bool isShowingLevelPicker; // methods virtual void adjustBgMusicButton(bool bgMusicPlaying); virtual void reloadLayoutClean(); virtual void loadLayout(bool forceLoad); virtual void loadScenario(bool skipDemoActions); virtual void configureTransitionListeners(); virtual void onGameHide(cocos2d::EventCustom* event); virtual void onGameShow(cocos2d::EventCustom* event); virtual void resetLastUserTouchTimes(); virtual void configureTouchHandlers(); virtual void filterTouchHandlers(); virtual void clearTouchHandlers(); virtual std::map* pickTouchHandlersContainer(TouchHandlerType touchHandlerType); virtual void addNewNodeToObjectLayer(cocos2d::Node* newNode); virtual void addTouchBlockingLayer(cocos2d::Node* layer); virtual void showTOSAcceptPopup(std::function onAccept); virtual void showAniLevelPickerLayer(std::function onLayerDismissed, std::function onLevelChanged = [](int){}); virtual void repeatPickLevelPrompt(); }; #endif /* AniParentScene_h */