pub(crate) use stick::Btn;
pub(crate) use stick::Port as ControllerPort;
pub(crate) enum Axis {
JoyXY,
CamXY,
Lrt,
Pitch,
Yaw,
}
pub(crate) enum Btns {
Abxy,
Dpad,
Quit,
Menu,
Wz,
Lr,
Dc,
}
pub struct ControllerLayout {
pub(crate) joy: Option<bool>,
pub(crate) cam: Option<bool>,
pub(crate) lrt: Option<bool>,
pub(crate) pitch: Option<bool>,
pub(crate) yaw: Option<bool>,
pub(crate) abxy: Option<bool>,
pub(crate) dpad: Option<bool>,
pub(crate) quit: Option<bool>,
pub(crate) menu: Option<bool>,
pub(crate) wz: Option<bool>,
pub(crate) cd: Option<bool>,
pub(crate) lrb: Option<bool>,
pub(crate) axis: Vec<Axis>,
pub(crate) btns: Vec<Btns>,
}
impl ControllerLayout {
pub fn new() -> Self {
ControllerLayout {
joy: None,
cam: None,
lrt: None,
pitch: None,
yaw: None,
abxy: None,
dpad: None,
quit: None,
menu: None,
wz: None,
cd: None,
lrb: None,
axis: vec![],
btns: vec![],
}
}
pub fn joy(mut self, optional: bool) -> Self {
if self.joy.is_some() {
return self;
}
self.joy = Some(optional);
self.axis.push(Axis::JoyXY);
self
}
pub fn cam(mut self, optional: bool) -> Self {
if self.cam.is_some() {
return self;
}
self.cam = Some(optional);
self.axis.push(Axis::CamXY);
self
}
pub fn lrt(mut self, optional: bool) -> Self {
if self.lrt.is_some() {
return self;
}
self.cam = Some(optional);
self.axis.push(Axis::Lrt);
self
}
pub fn pitch(mut self, optional: bool) -> Self {
if self.pitch.is_some() {
return self;
}
self.pitch = Some(optional);
self.axis.push(Axis::Pitch);
self
}
pub fn yaw(mut self, optional: bool) -> Self {
if self.yaw.is_some() {
return self;
}
self.yaw = Some(optional);
self.axis.push(Axis::Yaw);
self
}
pub fn abxy(mut self, optional: bool) -> Self {
if self.abxy.is_some() {
return self;
}
self.abxy = Some(optional);
self.btns.push(Btns::Abxy);
self
}
pub fn arrow(mut self, optional: bool) -> Self {
if self.dpad.is_some() {
return self;
}
self.dpad = Some(optional);
self.btns.push(Btns::Dpad);
self
}
pub fn back(mut self, optional: bool) -> Self {
if self.quit.is_some() {
return self;
}
self.quit = Some(optional);
self.btns.push(Btns::Quit);
self
}
pub fn menu(mut self, optional: bool) -> Self {
if self.menu.is_some() {
return self;
}
self.menu = Some(optional);
self.btns.push(Btns::Menu);
self
}
pub fn wz(mut self, optional: bool) -> Self {
if self.wz.is_some() {
return self;
}
self.wz = Some(optional);
self.btns.push(Btns::Wz);
self
}
pub fn dc(mut self, optional: bool) -> Self {
if self.cd.is_some() {
return self;
}
self.cd = Some(optional);
self.btns.push(Btns::Dc);
self
}
pub fn lrb(mut self, optional: bool) -> Self {
if self.lrb.is_some() {
return self;
}
self.lrb = Some(optional);
self.btns.push(Btns::Lr);
self
}
}