mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
173 lines
5.0 KiB
Rust
173 lines
5.0 KiB
Rust
|
use serde::{Deserialize, Serialize};
|
||
|
use std::convert::AsRef;
|
||
|
use strum::{AsRefStr, EnumIter};
|
||
|
|
||
|
/// Represents a key that the game recognises after input mapping.
|
||
|
#[derive(
|
||
|
Clone,
|
||
|
Copy,
|
||
|
Debug,
|
||
|
PartialEq,
|
||
|
Eq,
|
||
|
PartialOrd,
|
||
|
Ord,
|
||
|
Hash,
|
||
|
Deserialize,
|
||
|
Serialize,
|
||
|
AsRefStr,
|
||
|
EnumIter,
|
||
|
)]
|
||
|
pub enum GameInput {
|
||
|
#[strum(serialize = "gameinput.primary")]
|
||
|
Primary,
|
||
|
#[strum(serialize = "gameinput.secondary")]
|
||
|
Secondary,
|
||
|
#[strum(serialize = "gameinput.block")]
|
||
|
Block,
|
||
|
#[strum(serialize = "gameinput.slot1")]
|
||
|
Slot1,
|
||
|
#[strum(serialize = "gameinput.slot2")]
|
||
|
Slot2,
|
||
|
#[strum(serialize = "gameinput.slot3")]
|
||
|
Slot3,
|
||
|
#[strum(serialize = "gameinput.slot4")]
|
||
|
Slot4,
|
||
|
#[strum(serialize = "gameinput.slot5")]
|
||
|
Slot5,
|
||
|
#[strum(serialize = "gameinput.slot6")]
|
||
|
Slot6,
|
||
|
#[strum(serialize = "gameinput.slot7")]
|
||
|
Slot7,
|
||
|
#[strum(serialize = "gameinput.slot8")]
|
||
|
Slot8,
|
||
|
#[strum(serialize = "gameinput.slot9")]
|
||
|
Slot9,
|
||
|
#[strum(serialize = "gameinput.slot10")]
|
||
|
Slot10,
|
||
|
#[strum(serialize = "gameinput.togglecursor")]
|
||
|
ToggleCursor,
|
||
|
#[strum(serialize = "gameinput.moveforward")]
|
||
|
MoveForward,
|
||
|
#[strum(serialize = "gameinput.moveback")]
|
||
|
MoveBack,
|
||
|
#[strum(serialize = "gameinput.moveleft")]
|
||
|
MoveLeft,
|
||
|
#[strum(serialize = "gameinput.moveright")]
|
||
|
MoveRight,
|
||
|
#[strum(serialize = "gameinput.jump")]
|
||
|
Jump,
|
||
|
#[strum(serialize = "gameinput.sit")]
|
||
|
Sit,
|
||
|
#[strum(serialize = "gameinput.dance")]
|
||
|
Dance,
|
||
|
#[strum(serialize = "gameinput.greet")]
|
||
|
Greet,
|
||
|
#[strum(serialize = "gameinput.glide")]
|
||
|
Glide,
|
||
|
#[strum(serialize = "gameinput.climb")]
|
||
|
Climb,
|
||
|
#[strum(serialize = "gameinput.climbdown")]
|
||
|
ClimbDown,
|
||
|
#[strum(serialize = "gameinput.swimup")]
|
||
|
SwimUp,
|
||
|
#[strum(serialize = "gameinput.swimdown")]
|
||
|
SwimDown,
|
||
|
#[strum(serialize = "gameinput.fly")]
|
||
|
Fly,
|
||
|
#[strum(serialize = "gameinput.sneak")]
|
||
|
Sneak,
|
||
|
#[strum(serialize = "gameinput.togglelantern")]
|
||
|
ToggleLantern,
|
||
|
#[strum(serialize = "gameinput.mount")]
|
||
|
Mount,
|
||
|
#[strum(serialize = "gameinput.chat")]
|
||
|
Chat,
|
||
|
#[strum(serialize = "gameinput.command")]
|
||
|
Command,
|
||
|
#[strum(serialize = "gameinput.escape")]
|
||
|
Escape,
|
||
|
#[strum(serialize = "gameinput.map")]
|
||
|
Map,
|
||
|
#[strum(serialize = "gameinput.bag")]
|
||
|
Bag,
|
||
|
#[strum(serialize = "gameinput.trade")]
|
||
|
Trade,
|
||
|
#[strum(serialize = "gameinput.social")]
|
||
|
Social,
|
||
|
#[strum(serialize = "gameinput.crafting")]
|
||
|
Crafting,
|
||
|
#[strum(serialize = "gameinput.spellbook")]
|
||
|
Spellbook,
|
||
|
#[strum(serialize = "gameinput.settings")]
|
||
|
Settings,
|
||
|
#[strum(serialize = "gameinput.toggleinterface")]
|
||
|
ToggleInterface,
|
||
|
#[strum(serialize = "gameinput.help")]
|
||
|
Help,
|
||
|
#[strum(serialize = "gameinput.toggledebug")]
|
||
|
ToggleDebug,
|
||
|
#[strum(serialize = "gameinput.fullscreen")]
|
||
|
Fullscreen,
|
||
|
#[strum(serialize = "gameinput.screenshot")]
|
||
|
Screenshot,
|
||
|
#[strum(serialize = "gameinput.toggleingameui")]
|
||
|
ToggleIngameUi,
|
||
|
#[strum(serialize = "gameinput.roll")]
|
||
|
Roll,
|
||
|
#[strum(serialize = "gameinput.respawn")]
|
||
|
Respawn,
|
||
|
#[strum(serialize = "gameinput.interact")]
|
||
|
Interact,
|
||
|
#[strum(serialize = "gameinput.togglewield")]
|
||
|
ToggleWield,
|
||
|
#[strum(serialize = "gameinput.swaploadout")]
|
||
|
SwapLoadout,
|
||
|
#[strum(serialize = "gameinput.freelook")]
|
||
|
FreeLook,
|
||
|
#[strum(serialize = "gameinput.autowalk")]
|
||
|
AutoWalk,
|
||
|
#[strum(serialize = "gameinput.cameraclamp")]
|
||
|
CameraClamp,
|
||
|
#[strum(serialize = "gameinput.cyclecamera")]
|
||
|
CycleCamera,
|
||
|
#[strum(serialize = "gameinput.select")]
|
||
|
Select,
|
||
|
#[strum(serialize = "gameinput.acceptgroupinvite")]
|
||
|
AcceptGroupInvite,
|
||
|
#[strum(serialize = "gameinput.declinegroupinvite")]
|
||
|
DeclineGroupInvite,
|
||
|
#[strum(serialize = "gameinput.mapzoomin")]
|
||
|
MapZoomIn,
|
||
|
#[strum(serialize = "gameinput.mapzoomout")]
|
||
|
MapZoomOut,
|
||
|
}
|
||
|
|
||
|
impl GameInput {
|
||
|
pub fn get_localization_key(&self) -> &str { self.as_ref() }
|
||
|
|
||
|
/// Return true if `a` and `b` are able to be bound to the same key at the
|
||
|
/// same time without conflict. For example, the player can't jump and climb
|
||
|
/// at the same time, so these can be bound to the same key.
|
||
|
pub fn can_share_bindings(a: GameInput, b: GameInput) -> bool {
|
||
|
a.get_representative_binding() == b.get_representative_binding()
|
||
|
}
|
||
|
|
||
|
/// If two GameInputs are able to be bound at the same time, then they will
|
||
|
/// return the same value from this function (the representative value for
|
||
|
/// that set). This models the Find operation of a disjoint-set data
|
||
|
/// structure.
|
||
|
fn get_representative_binding(&self) -> GameInput {
|
||
|
match self {
|
||
|
GameInput::Jump => GameInput::Jump,
|
||
|
GameInput::Climb => GameInput::Jump,
|
||
|
GameInput::SwimUp => GameInput::Jump,
|
||
|
GameInput::Respawn => GameInput::Jump,
|
||
|
|
||
|
GameInput::FreeLook => GameInput::FreeLook,
|
||
|
GameInput::AutoWalk => GameInput::FreeLook,
|
||
|
|
||
|
_ => *self,
|
||
|
}
|
||
|
}
|
||
|
}
|