1
0
mirror of https://github.com/TomHarte/CLK.git synced 2026-01-23 16:16:16 +00:00

Flip axes, maximise range.

This commit is contained in:
Thomas Harte
2025-10-02 17:43:33 -04:00
parent a8325b6bce
commit fcf648bbb2
2 changed files with 41 additions and 10 deletions

View File

@@ -168,7 +168,8 @@ public:
if(stick_types_.size() < required_size) {
stick_types_.resize(required_size);
}
stick_types_[size_t(input.info.control.index)] = is_digital_axis ? StickType::Digital : StickType::Analogue;
stick_types_[size_t(input.info.control.index)] =
is_digital_axis ? StickType::Digital : StickType::Analogue;
}
}
}
@@ -188,11 +189,21 @@ public:
// convenient hard-coded values. TODO: make these a function of time.
using Type = Joystick::Input::Type;
switch(input.type) {
default: did_set_input(input, is_active ? 1.0f : 0.0f); break;
case Type::Left: did_set_input(Input(Type::Horizontal, input.info.control.index), is_active ? 0.1f : 0.5f); break;
case Type::Right: did_set_input(Input(Type::Horizontal, input.info.control.index), is_active ? 0.9f : 0.5f); break;
case Type::Up: did_set_input(Input(Type::Vertical, input.info.control.index), is_active ? 0.1f : 0.5f); break;
case Type::Down: did_set_input(Input(Type::Vertical, input.info.control.index), is_active ? 0.9f : 0.5f); break;
default:
did_set_input(input, is_active ? 1.0f : 0.0f);
break;
case Type::Left:
did_set_input(Input(Type::Horizontal, input.info.control.index), is_active ? digital_minimum() : 0.5f);
break;
case Type::Right:
did_set_input(Input(Type::Horizontal, input.info.control.index), is_active ? digital_maximum() : 0.5f);
break;
case Type::Up:
did_set_input(Input(Type::Vertical, input.info.control.index), is_active ? digital_minimum() : 0.5f);
break;
case Type::Down:
did_set_input(Input(Type::Vertical, input.info.control.index), is_active ? digital_maximum() : 0.5f);
break;
}
}
@@ -206,7 +217,9 @@ public:
// Otherwise apply a threshold test to convert to digital, with remapping from axes to digital inputs.
using Type = Joystick::Input::Type;
switch(input.type) {
default: did_set_input(input, value > 0.5f); break;
default:
did_set_input(input, value > 0.5f);
break;
case Type::Horizontal:
did_set_input(Input(Type::Left, input.info.control.index), value <= 0.25f);
did_set_input(Input(Type::Right, input.info.control.index), value >= 0.75f);
@@ -221,6 +234,8 @@ public:
protected:
virtual void did_set_input([[maybe_unused]] const Input &input, [[maybe_unused]] float value) {}
virtual void did_set_input([[maybe_unused]] const Input &input, [[maybe_unused]] bool value) {}
virtual float digital_minimum() const { return 0.1f; }
virtual float digital_maximum() const { return 0.9f; }
private:
const std::vector<Input> inputs_;

View File

@@ -61,11 +61,20 @@ public:
first_channel_(first_channel) {}
void did_set_input(const Input &input, const float value) final {
adc_.set_input(first_channel_ + (input.type == Input::Vertical), value);
switch(input.type) {
case Input::Horizontal:
case Input::Vertical:
adc_.set_input(first_channel_ + (input.type == Input::Vertical), 1.0f - value);
break;
default: break;
}
}
void did_set_input(const Input &, const bool is_active) final {
fire_ = is_active;
void did_set_input(const Input &input, const bool is_active) final {
if(input.type == Input::Fire) {
fire_ = is_active;
}
}
bool fire() const {
@@ -73,6 +82,13 @@ public:
}
private:
float digital_minimum() const final {
return 0.0f;
}
float digital_maximum() const final {
return 1.0f;
}
NEC::uPD7002 &adc_;
const int first_channel_;
bool fire_ = false;