ToyDragAndDropHandler.h
3.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
//
// ToyDragAndDropHandler.h
// SteveMaggieCpp
//
// Created by Katarzyna Kalinowska-Górska on 02.06.2017.
//
//
#ifndef ToyDragAndDropHandler_h
#define ToyDragAndDropHandler_h
#include <stdio.h>
#include <vector>
#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<cocos2d::Node*> objectsToDrag, cocos2d::Node* destinationObject, std::vector<cocos2d::Node*> wrongDraggedObjects = std::vector<cocos2d::Node*>(), std::vector<cocos2d::Node*> wrongDestinationObjects = std::vector<cocos2d::Node*>());
virtual TouchHandlerFunction prepareTouchBeganHandler();
virtual TouchHandlerFunction prepareTouchMovedHandler();
virtual TouchHandlerFunction prepareTouchEndedHandler();
virtual void setObjectToDragExtendPercentValues(std::vector<float>);
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<cocos2d::Node*> _objectsToDrag;
std::vector<float> _extendPercentValues;
std::vector<cocos2d::Node*> _wrongDestinationObjects;
std::vector<cocos2d::Node*> _wrongDraggedObjects;
std::vector<int> _cachedDraggedObjectRFActionTags;
cocos2d::Node* _draggedObject;
cocos2d::Node* _destinationObject;
int _draggedObjectOriginalZ;
bool _draggingWrongObject;
cocos2d::Node* _draggingOverWrongDestinationObject;
DragState _currentDraggingState;
cocos2d::Point _startLocation;
cocos2d::Point _startingObjectPosition;
std::function<void(cocos2d::Node*, cocos2d::Node*)> _finalSuccessCallback;
std::function<void(cocos2d::Node*, cocos2d::Node*)> _successCallback;
std::function<void(cocos2d::Node*)> _wrongDestinationObjectCallback;
std::function<void(cocos2d::Node*)> _startDraggingWrongObjectCallback;
std::function<void(cocos2d::Node*)> _startDraggingCorrectObjectCallback;
// std::map<std::string, std::function<void(cocos2d::Node*)>> _startDraggingConcreteObjectCallbacks;
std::function<void(cocos2d::Node*, cocos2d::Node*)> _draggedObjectEnterCorrectDestinationCallback;
std::function<void(cocos2d::Node*, cocos2d::Node*)> _draggedObjectEnterWrongDestinationCallback;
std::function<void()> _dropTooSoonCallback;
std::function<void(cocos2d::Node*)> _draggedWrongObjectCallback;
std::function<void(cocos2d::Node*, cocos2d::Node*, cocos2d::Point)> _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 */