1 #ifndef HARDWARE_CONTROLLER_H 2 #define HARDWARE_CONTROLLER_H 3 4 #include "engine.h" 5 #include "hardwareOutputDevice.h" 6 7 class HardwareOutputDevice; 8 class HardwareMappingEffect; 9 class HardwareMappingState 10 { 11 public: 12 enum EOperator 13 { 14 Less, 15 Greater, 16 Equal, 17 NotEqual 18 }; 19 20 string variable; 21 EOperator compare_operator; 22 float compare_value; 23 int channel_nr; 24 25 HardwareMappingEffect* effect; 26 }; 27 class HardwareMappingEvent 28 { 29 public: 30 enum EOperator 31 { 32 Change, 33 Increase, 34 Decrease 35 }; 36 37 string trigger_variable; 38 float runtime; 39 bool triggered; 40 sf::Clock start_time; 41 42 EOperator compare_operator; 43 bool previous_valid; 44 float previous_value; 45 int channel_nr; 46 47 HardwareMappingEffect* effect; 48 }; 49 class HardwareController : public Updatable 50 { 51 private: 52 std::vector<HardwareOutputDevice*> devices; 53 std::unordered_map<string, std::vector<int> > channel_mapping; 54 std::vector<HardwareMappingState> states; 55 std::vector<HardwareMappingEvent> events; 56 std::vector<float> channels; 57 public: 58 HardwareController() = default; 59 ~HardwareController(); 60 61 void loadConfiguration(string filename); 62 63 virtual void update(float delta); 64 65 bool getVariableValue(string variable_name, float& value); 66 private: 67 void handleConfig(string section, std::unordered_map<string, string>& settings); 68 void createNewHardwareMappingState(int channel_number, std::unordered_map<string, string>& settings); 69 void createNewHardwareMappingEvent(int channel_number, std::unordered_map<string, string>& settings); 70 HardwareMappingEffect* createEffect(std::unordered_map<string, string>& settings); 71 }; 72 73 #endif//HARDWARE_CONTROLLER_H 74