1 #ifndef HEADER_CONTROLS_H 2 #define HEADER_CONTROLS_H 3 4 class V2; 5 class Unit; 6 class Cube; 7 class PhaseLocker; 8 class KeyStroke; 9 class InputProvider; 10 class MouseStroke; 11 12 #include "NoCopy.h" 13 #include "KeyControl.h" 14 #include "StepCounter.h" 15 16 #include <vector> 17 #include <string> 18 19 /** 20 * Keyboard and mouse controls. 21 */ 22 class Controls : public StepCounter, public NoCopy { 23 private: 24 typedef std::vector<Unit*> t_units; 25 t_units m_units; 26 t_units::iterator m_active; 27 int m_speedup; 28 KeyControl m_arrows; 29 bool m_switch; 30 std::string m_moves; 31 PhaseLocker *m_locker; 32 char m_strokeSymbol; 33 private: 34 bool useSwitch(); 35 bool useStroke(); 36 bool driveUnit(const InputProvider *input); 37 void setActive(t_units::iterator active); 38 int getNeededPhases(int speedup) const; 39 bool activateDriven(char symbol); 40 public: 41 Controls(PhaseLocker *locker); 42 ~Controls(); 43 void setMoves(const std::string &moves); 44 void addUnit(Unit *unit); 45 const Unit *getActive(); 46 47 bool driving(const InputProvider *input); 48 void lockPhases(); 49 50 void checkActive(); 51 void switchActive(); 52 bool makeMove(char move); 53 bool cannotMove() const; 54 55 void controlEvent(const KeyStroke &stroke); 56 bool activateSelected(const Cube *occupant); 57 getStepCount()58 virtual int getStepCount() const { return m_moves.size(); } getMoves()59 virtual std::string getMoves() const { return m_moves; } 60 virtual bool isPowerful() const; 61 virtual bool isDangerousMove() const; 62 }; 63 64 #endif 65