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