mirror of
https://github.com/TomHarte/CLK.git
synced 2025-02-16 18:30:32 +00:00
Implements multitarget joysticks.
This commit is contained in:
parent
29921bfa8d
commit
bae38497bb
@ -10,11 +10,65 @@
|
|||||||
|
|
||||||
using namespace Analyser::Dynamic;
|
using namespace Analyser::Dynamic;
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
class MultiJoystick: public Inputs::Joystick {
|
||||||
|
public:
|
||||||
|
MultiJoystick(std::vector<JoystickMachine::Machine *> &machines, std::size_t index) {
|
||||||
|
for(const auto &machine: machines) {
|
||||||
|
const auto &joysticks = machine->get_joysticks();
|
||||||
|
if(joysticks.size() >= index) {
|
||||||
|
joysticks_.push_back(joysticks[index].get());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<DigitalInput> get_inputs() override {
|
||||||
|
std::vector<DigitalInput> inputs;
|
||||||
|
|
||||||
|
for(const auto &joystick: joysticks_) {
|
||||||
|
std::vector<DigitalInput> joystick_inputs = joystick->get_inputs();
|
||||||
|
for(const auto &input: joystick_inputs) {
|
||||||
|
if(std::find(inputs.begin(), inputs.end(), input) != inputs.end()) {
|
||||||
|
inputs.push_back(input);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return inputs;
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_digital_input(const DigitalInput &digital_input, bool is_active) override {
|
||||||
|
for(const auto &joystick: joysticks_) {
|
||||||
|
joystick->set_digital_input(digital_input, is_active);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void reset_all_inputs() override {
|
||||||
|
for(const auto &joystick: joysticks_) {
|
||||||
|
joystick->reset_all_inputs();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::vector<Inputs::Joystick *> joysticks_;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
MultiJoystickMachine::MultiJoystickMachine(const std::vector<std::unique_ptr<::Machine::DynamicMachine>> &machines) {
|
MultiJoystickMachine::MultiJoystickMachine(const std::vector<std::unique_ptr<::Machine::DynamicMachine>> &machines) {
|
||||||
|
std::size_t total_joysticks = 0;
|
||||||
|
std::vector<JoystickMachine::Machine *> joystick_machines;
|
||||||
for(const auto &machine: machines) {
|
for(const auto &machine: machines) {
|
||||||
JoystickMachine::Machine *joystick_machine = machine->joystick_machine();
|
JoystickMachine::Machine *joystick_machine = machine->joystick_machine();
|
||||||
if(joystick_machine) machines_.push_back(joystick_machine);
|
if(joystick_machine) {
|
||||||
|
joystick_machines.push_back(joystick_machine);
|
||||||
|
total_joysticks = std::max(total_joysticks, joystick_machine->get_joysticks().size());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for(std::size_t index = 0; index < total_joysticks; ++index) {
|
||||||
|
joysticks_.emplace_back(new MultiJoystick(joystick_machines, index));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::unique_ptr<Inputs::Joystick>> &MultiJoystickMachine::get_joysticks() {
|
std::vector<std::unique_ptr<Inputs::Joystick>> &MultiJoystickMachine::get_joysticks() {
|
||||||
|
@ -31,7 +31,6 @@ class MultiJoystickMachine: public JoystickMachine::Machine {
|
|||||||
std::vector<std::unique_ptr<Inputs::Joystick>> &get_joysticks() override;
|
std::vector<std::unique_ptr<Inputs::Joystick>> &get_joysticks() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::vector<JoystickMachine::Machine *> machines_;
|
|
||||||
std::vector<std::unique_ptr<Inputs::Joystick>> joysticks_;
|
std::vector<std::unique_ptr<Inputs::Joystick>> joysticks_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user