// Copyright 2025 International Digital Economy Academy
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
///|
pub type Code = Int
///|
pub(all) enum Axis {
LeftStickX
LeftStickY
LeftZ
RightStickX
RightStickY
RightZ
DPadX
DPadY
Unknown
}
///|
pub fn Axis::is_stick(self : Axis) -> Bool {
match self {
LeftStickX | LeftStickY | RightStickX | RightStickY => true
_ => false
}
}
///|
pub fn Axis::second_axis(self : Axis) -> Axis? {
match self {
LeftStickX => Some(LeftStickY)
LeftStickY => Some(LeftStickX)
RightStickX => Some(RightStickY)
RightStickY => Some(RightStickX)
DPadX => Some(DPadY)
DPadY => Some(DPadX)
_ => None
}
}
///|
pub fn Axis::to_index(self : Axis) -> Int {
match self {
LeftStickX => 0
LeftStickY => 1
LeftZ => 2
RightStickX => 3
RightStickY => 4
RightZ => 5
DPadX => 6
DPadY => 7
Unknown => 8
}
}
///|
pub const AXIS_COUNT : Int = 9
///|
pub(all) enum Button {
South
East
C
North
West
Z
LeftTrigger
RightTrigger
LeftTrigger2
RightTrigger2
Select
Start
Mode
LeftThumb
RightThumb
DPadUp
DPadDown
DPadLeft
DPadRight
Unknown
}
///|
pub fn Button::is_action(self : Button) -> Bool {
match self {
South | East | North | West | C | Z => true
_ => false
}
}
///|
pub fn Button::is_trigger(self : Button) -> Bool {
match self {
LeftTrigger | LeftTrigger2 | RightTrigger | RightTrigger2 => true
_ => false
}
}
///|
pub fn Button::is_menu(self : Button) -> Bool {
match self {
Select | Start | Mode => true
_ => false
}
}
///|
pub fn Button::is_stick(self : Button) -> Bool {
match self {
LeftThumb | RightThumb => true
_ => false
}
}
///|
pub fn Button::is_dpad(self : Button) -> Bool {
match self {
DPadUp | DPadDown | DPadLeft | DPadRight => true
_ => false
}
}
///|
pub fn Button::to_index(self : Button) -> Int {
match self {
South => 0
East => 1
C => 2
North => 3
West => 4
Z => 5
LeftTrigger => 6
RightTrigger => 7
LeftTrigger2 => 8
RightTrigger2 => 9
Select => 10
Start => 11
Mode => 12
LeftThumb => 13
RightThumb => 14
DPadUp => 15
DPadDown => 16
DPadLeft => 17
DPadRight => 18
Unknown => 19
}
}
///|
pub const BUTTON_COUNT : Int = 20
///|
pub(all) enum AxisOrBtn {
Axis(Axis)
Btn(Button)
}
///|
pub fn AxisOrBtn::is_button(self : AxisOrBtn) -> Bool {
match self {
Btn(_) => true
Axis(_) => false
}
}