// // ParentScene.h // SteveMaggieCpp // // Created by Katarzyna Kalinowska-Górska on 16.05.2017. // // #ifndef ParentScene_h #define ParentScene_h #include "SceneWithUtils.h" //#include "ScenarioHandler.h" #include "ui/CocosGUI.h" #include "TouchHandlerTypes.h" #include "ScenarioObject.h" #include "LayoutParser.h" #include "audio/include/AudioEngine.h" class ParentScene : public SceneWithUtils, public ScenarioObject, public LayoutViewInterface { // friend class ScenarioHandler; public: // create static ParentScene* 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; // layoutViewinterface virtual void addLayer(cocos2d::Layer* layer) override; virtual void addObject(std::string objectName, cocos2d::Node* object) override; virtual void addScenarioObject(std::string objectName, ScenarioObject* object) override; virtual void setupBackgroundMusic(std::string backgroundMusicPath) override; virtual bool touchHandlerForWidget(std::string objectName, cocos2d::ui::Widget::TouchEventType touchEventType) override; // Scenario Object virtual ScenarioObject* 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, ScenarioObject* 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); protected: // configuration file paths std::string _layoutFilePath; std::string _scenarioFilePath; bool _loadFromAssets; // layout objects std::vector _layers; std::map _objects; std::map _scenarioObjects; // other than cocos2d::Nodes // state vars bool _layoutLoaded; // scenario handling bool _alwaysSkipDemo; // ScenarioHandler* _scenarioHandler; // 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 showLevelPickerLayer(std::function onLayerDismissed, std::function onLevelChanged = [](int){}); virtual void repeatPickLevelPrompt(); }; #endif /* ParentScene_h */