Read analoge stick positions
This commit is contained in:
parent
01a535fad3
commit
d54de6dddf
|
@ -2,7 +2,7 @@
|
||||||
#include <PSX/GPU/gpu.hpp>
|
#include <PSX/GPU/gpu.hpp>
|
||||||
|
|
||||||
namespace ControllerTest {
|
namespace ControllerTest {
|
||||||
using DigitalButton = Periphery::GenericController::Button;
|
using DigitalButton = Periphery::AnalogeController::Button;
|
||||||
using namespace JabyEngine;
|
using namespace JabyEngine;
|
||||||
|
|
||||||
// This should go to JabyEngine eventually
|
// This should go to JabyEngine eventually
|
||||||
|
@ -41,10 +41,11 @@ namespace ControllerTest {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ControllerState :: update(const Periphery::GenericController& controller) {
|
void ControllerState :: update(const Periphery::AnalogeController& controller, JabyEngine::FontWriter& font_writer) {
|
||||||
static const DigitalButton ButtonSprtMap[] = {
|
static const DigitalButton ButtonSprtMap[] = {
|
||||||
DigitalButton::Triangle, DigitalButton::Circle, DigitalButton::Cross, DigitalButton::Square,
|
DigitalButton::Triangle, DigitalButton::Circle, DigitalButton::Cross, DigitalButton::Square,
|
||||||
DigitalButton::ST, DigitalButton::SEL, DigitalButton::L1, DigitalButton::L2, DigitalButton::R1, DigitalButton::R2
|
DigitalButton::ST, DigitalButton::SEL, DigitalButton::L1, DigitalButton::L2, DigitalButton::R1, DigitalButton::R2,
|
||||||
|
DigitalButton::L3, DigitalButton::R3
|
||||||
};
|
};
|
||||||
static const DigitalButton ArrowPolyMap[] = {
|
static const DigitalButton ArrowPolyMap[] = {
|
||||||
DigitalButton::Up, DigitalButton::Right, DigitalButton::Down, DigitalButton::Left
|
DigitalButton::Up, DigitalButton::Right, DigitalButton::Down, DigitalButton::Left
|
||||||
|
@ -61,6 +62,13 @@ namespace ControllerTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
set_active(cur_button_sprts[12], controller.header.state == Periphery::RawController::State::Disconnected);
|
set_active(cur_button_sprts[12], controller.header.state == Periphery::RawController::State::Disconnected);
|
||||||
|
|
||||||
|
// Text stuff down here
|
||||||
|
const auto left_stick = controller.get_left_stick_pos();
|
||||||
|
const auto right_stick = controller.get_right_stick_pos();
|
||||||
|
|
||||||
|
auto cursor = State::create(Make::PositionI16(98, 0), 0);
|
||||||
|
font_writer.write(cursor, "Right: %i, %i\n Left: %i, %i", right_stick.x, right_stick.y, left_stick.x, left_stick.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ControllerState :: render() {
|
void ControllerState :: render() {
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#include "../../../include/shared.hpp"
|
#include "../../../include/shared.hpp"
|
||||||
|
#include "../../include/font_writer.hpp"
|
||||||
#include "include/controller_state.hpp"
|
#include "include/controller_state.hpp"
|
||||||
#include <PSX/Periphery/periphery.hpp>
|
#include <PSX/Periphery/periphery.hpp>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
@ -19,12 +20,13 @@ namespace ControllerTest {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
controller_state.update(Periphery::get_primary_controller_as<JabyEngine::Periphery::GenericController>());
|
controller_state.update(Periphery::get_primary_controller_as<JabyEngine::Periphery::AnalogeController>(), FontWriter::new_font_writer);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void render() {
|
static void render() {
|
||||||
controller_state.render();
|
controller_state.render();
|
||||||
|
FontWriter::new_font_writer.render();
|
||||||
Shared::back_menu.render();
|
Shared::back_menu.render();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "controller_test_assets.hpp"
|
#include "controller_test_assets.hpp"
|
||||||
|
#include <FontWriter/font_writer.hpp>
|
||||||
#include <PSX/GPU/make_gpu_primitives.hpp>
|
#include <PSX/GPU/make_gpu_primitives.hpp>
|
||||||
#include <PSX/Periphery/controller.hpp>
|
#include <PSX/Periphery/controller.hpp>
|
||||||
|
|
||||||
|
@ -60,7 +61,7 @@ namespace ControllerTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
void setup();
|
void setup();
|
||||||
void update(const Periphery::GenericController& controller);
|
void update(const Periphery::AnalogeController& controller, JabyEngine::FontWriter& font_writer);
|
||||||
void render();
|
void render();
|
||||||
};
|
};
|
||||||
}
|
}
|
|
@ -1,4 +1,5 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
#include "../GPU/gpu_types.hpp"
|
||||||
#include "raw_controller.hpp"
|
#include "raw_controller.hpp"
|
||||||
|
|
||||||
namespace JabyEngine {
|
namespace JabyEngine {
|
||||||
|
@ -55,6 +56,48 @@ namespace JabyEngine {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class AnalogeController : public GenericController {
|
||||||
|
public:
|
||||||
|
enum struct Button : uint16_t {
|
||||||
|
L2 = static_cast<uint16_t>(GenericButton::D0),
|
||||||
|
R2 = static_cast<uint16_t>(GenericButton::D1),
|
||||||
|
L1 = static_cast<uint16_t>(GenericButton::D2),
|
||||||
|
R1 = static_cast<uint16_t>(GenericButton::D3),
|
||||||
|
Triangle = static_cast<uint16_t>(GenericButton::D4),
|
||||||
|
Circle = static_cast<uint16_t>(GenericButton::D5),
|
||||||
|
Cross = static_cast<uint16_t>(GenericButton::D6),
|
||||||
|
Square = static_cast<uint16_t>(GenericButton::D7),
|
||||||
|
SEL = static_cast<uint16_t>(GenericButton::D8),
|
||||||
|
L3 = static_cast<uint16_t>(GenericButton::D9),
|
||||||
|
R3 = static_cast<uint16_t>(GenericButton::D10),
|
||||||
|
ST = static_cast<uint16_t>(GenericButton::D11),
|
||||||
|
Up = static_cast<uint16_t>(GenericButton::D12),
|
||||||
|
Right = static_cast<uint16_t>(GenericButton::D13),
|
||||||
|
Down = static_cast<uint16_t>(GenericButton::D14),
|
||||||
|
Left = static_cast<uint16_t>(GenericButton::D15)
|
||||||
|
};
|
||||||
|
|
||||||
|
private:
|
||||||
|
uint8_t read_special_byte(size_t idx) const {
|
||||||
|
return reinterpret_cast<const uint8_t(&)[4]>(this->special)[idx];
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
GPU::PositionI16 get_right_stick_pos() const {
|
||||||
|
const uint8_t joy_x = AnalogeController::read_special_byte(0);
|
||||||
|
const uint8_t joy_y = AnalogeController::read_special_byte(1);
|
||||||
|
|
||||||
|
return GPU::PositionI16::create(joy_x - 0x80, joy_y - 0x80);
|
||||||
|
}
|
||||||
|
|
||||||
|
GPU::PositionI16 get_left_stick_pos() const {
|
||||||
|
const uint8_t joy_x = AnalogeController::read_special_byte(2);
|
||||||
|
const uint8_t joy_y = AnalogeController::read_special_byte(3);
|
||||||
|
|
||||||
|
return GPU::PositionI16::create(joy_x - 0x80, joy_y - 0x80);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
using GenericButtonState = GenericController::ButtonState;
|
using GenericButtonState = GenericController::ButtonState;
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue