// // ToyDragAndDropHandler.h // SteveMaggieCpp // // Created by Katarzyna Kalinowska-Górska on 02.06.2017. // // #ifndef ToyDragAndDropHandler_h #define ToyDragAndDropHandler_h #include #include #include "cocos2d.h" #include "ToyScenarioObject.h" #include "TouchHandlerTypes.h" class ToyDragAndDropHandler : public ToyScenarioObject { public: typedef enum DragState { NotDragging, Dragging, DraggingOverCorrectDestination, DraggingOverWrongDestination } DragState; ToyDragAndDropHandler(std::vector objectsToDrag, cocos2d::Node* destinationObject, std::vector wrongDraggedObjects = std::vector(), std::vector wrongDestinationObjects = std::vector()); virtual TouchHandlerFunction prepareTouchBeganHandler(); virtual TouchHandlerFunction prepareTouchMovedHandler(); virtual TouchHandlerFunction prepareTouchEndedHandler(); virtual void setObjectToDragExtendPercentValues(std::vector); virtual void setAccurateDestinationCheck(bool accurateDstCheck); virtual void setFingerOnlyDestinationCheck(bool fingerOnlyDstCheck); friend class ToyBlockingActionParser; //temporary. will prepare setters when I have more time protected: bool _allowDraggingWrongObjects; bool _allowDraggingInvisibleObjects; bool _allowMultipleDrag; bool _moreAccurateDestinationCheck; bool _fingerOnlyDestinationCheck; std::vector _objectsToDrag; std::vector _extendPercentValues; std::vector _wrongDestinationObjects; std::vector _wrongDraggedObjects; std::vector _cachedDraggedObjectRFActionTags; cocos2d::Node* _draggedObject; cocos2d::Node* _destinationObject; int _draggedObjectOriginalZ; bool _draggingWrongObject; cocos2d::Node* _draggingOverWrongDestinationObject; DragState _currentDraggingState; cocos2d::Point _startLocation; cocos2d::Point _startingObjectPosition; std::function _finalSuccessCallback; std::function _successCallback; std::function _wrongDestinationObjectCallback; std::function _startDraggingWrongObjectCallback; std::function _startDraggingCorrectObjectCallback; // std::map> _startDraggingConcreteObjectCallbacks; std::function _draggedObjectEnterCorrectDestinationCallback; std::function _draggedObjectEnterWrongDestinationCallback; std::function _dropTooSoonCallback; std::function _draggedWrongObjectCallback; std::function _objectDragNDropSuccessBehaviour; virtual void onMovingOverCorrectDestination(); virtual void onMovingOverWrongDestination(cocos2d::Node* wrongDestinationObject); virtual void onMovingOverNothing(); virtual void onTouchEndedOverCorrectDestination(); virtual void draggedObjectMoveBack(bool restoreActions); virtual cocos2d::Node* detectDestination(const cocos2d::Point& touchLocation, bool& isRightObject, bool& isWrongObject); virtual bool checkDraggingOverCorrectDestination(const cocos2d::Point& touchLocation); virtual cocos2d::Node* checkDraggingOverWrongDestination(const cocos2d::Point& touchLocation); }; #endif /* ToyDragAndDropHandler_h */