# | Line 42 | Line 42 | |
---|---|---|
42 | #ifndef SELECTION_SELECTIONMANAGER_HPP | |
43 | #define SELECTION_SELECTIONMANAGER_HPP | |
44 | ||
45 | + | #include "utils/BitSet.hpp" |
46 | + | #include "primitives/StuntDouble.hpp" |
47 | namespace oopse { | |
48 | ||
49 | < | /** |
50 | < | * @class SelectionManager SelectionManager.hpp "selection/SelectionManager.hpp" |
51 | < | * @brief |
52 | < | */ |
53 | < | class SelectionManager { |
49 | > | class SimInfo; |
50 | > | /** |
51 | > | * @class SelectionManager SelectionManager.hpp "selection/SelectionManager.hpp" |
52 | > | * @brief |
53 | > | */ |
54 | > | class SelectionManager { |
55 | > | public: |
56 | > | SelectionManager(SimInfo* info); |
57 | ||
58 | < | }; |
58 | > | void addSelection(StuntDouble* sd) { |
59 | > | bsSelection_.setBitOn(sd->getGlobalIndex()); |
60 | > | } |
61 | > | |
62 | > | void addSelectionSet(const BitSet& bs) { |
63 | > | bsSelection_ |= bs; |
64 | > | } |
65 | ||
66 | + | void setSelection(StuntDouble* sd) { |
67 | + | bsSelection_.clearAll(); |
68 | + | bsSelection_.setBitOn(sd->getGlobalIndex()); |
69 | + | } |
70 | + | |
71 | + | void setSelectionSet(const BitSet& bs) { |
72 | + | bsSelection_ = bs; |
73 | + | } |
74 | + | |
75 | + | void toggleSelection(StuntDouble* sd) { |
76 | + | bsSelection_.flip(sd->getGlobalIndex()); |
77 | + | } |
78 | + | |
79 | + | void toggleSelection() { |
80 | + | bsSelection_.flip(); |
81 | + | } |
82 | + | |
83 | + | void selectAll() { |
84 | + | bsSelection_.setAll(); |
85 | + | } |
86 | + | |
87 | + | void clearSelection() { |
88 | + | bsSelection_.clearAll(); |
89 | + | } |
90 | + | |
91 | + | void clearSelection(StuntDouble* sd) { |
92 | + | bsSelection_.setBitOff(sd->getGlobalIndex()); |
93 | + | } |
94 | + | |
95 | + | bool isSelected(StuntDouble* sd) { |
96 | + | return bsSelection_[sd->getGlobalIndex()]; |
97 | + | } |
98 | + | |
99 | + | bool isEmpty() { |
100 | + | return bsSelection_.none(); |
101 | + | } |
102 | + | |
103 | + | int getSelectionCount() { |
104 | + | return bsSelection_.countBits(); |
105 | + | } |
106 | + | |
107 | + | BitSet getSelectionSet() { |
108 | + | return bsSelection_; |
109 | + | } |
110 | + | |
111 | + | |
112 | + | StuntDouble* beginSelected(int& i); |
113 | + | StuntDouble* nextSelected(int& i); |
114 | + | |
115 | + | StuntDouble* beginUnselected(int& i); |
116 | + | StuntDouble* nextUnSelected(int& i); |
117 | + | |
118 | + | SelectionManager& operator&= (const SelectionManager &sman) { |
119 | + | bsSelection_ &= sman.bsSelection_; |
120 | + | return *this; |
121 | + | } |
122 | + | |
123 | + | SelectionManager& operator|= (const SelectionManager &sman) { |
124 | + | bsSelection_ |= sman.bsSelection_; |
125 | + | return *this; |
126 | + | } |
127 | + | |
128 | + | SelectionManager& operator^= (const SelectionManager &sman) { |
129 | + | bsSelection_ ^= sman.bsSelection_; |
130 | + | return *this; |
131 | + | } |
132 | + | |
133 | + | SelectionManager& operator-= (const SelectionManager &sman) { |
134 | + | bsSelection_ -= sman.bsSelection_; |
135 | + | return *this; |
136 | + | } |
137 | + | |
138 | + | friend SelectionManager operator| (const SelectionManager& sman1, const SelectionManager& sman2); |
139 | + | friend SelectionManager operator& (const SelectionManager& sman1, const SelectionManager& sman2); |
140 | + | friend SelectionManager operator^ (const SelectionManager& sman1, const SelectionManager& sman2); |
141 | + | friend SelectionManager operator-(const SelectionManager& sman1, const SelectionManager& sman2); |
142 | + | |
143 | + | private: |
144 | + | SimInfo* info_; |
145 | + | BitSet bsSelection_; |
146 | + | std::vector<StuntDouble*> stuntdoubles_; |
147 | + | }; |
148 | + | |
149 | } | |
150 | #endif |
– | Removed lines |
+ | Added lines |
< | Changed lines |
> | Changed lines |