Browse Source

move elseware characterclas/sectionid logic into libpso

cleanuppery
jake 1 year ago
parent
commit
240ddc7e84
  1. 4
      Cargo.toml
  2. 90
      src/character/character.rs
  3. 2
      src/character/mod.rs

4
Cargo.toml

@ -5,6 +5,8 @@ authors = ["Jake Probst <jake.probst@gmail.com>"]
edition = "2018" edition = "2018"
[dependencies] [dependencies]
psopacket = { path = "psopacket" }
rand = "0.6.5" rand = "0.6.5"
chrono = "*" chrono = "*"
psopacket = { path = "psopacket" }
serde = { version = "1.0", features = ["derive"]}
strum = { version = "0.25.0", features = ["derive"] }

90
src/character/character.rs

@ -1,9 +1,11 @@
// TODO: techniques to enum // TODO: techniques to enum
use psopacket::PSOPacketData; use psopacket::PSOPacketData;
use crate::{PSOPacketData, PacketParseError}; use crate::{PSOPacketData, PacketParseError};
use serde::{Serialize, Deserialize};
#[repr(u8)] #[repr(u8)]
#[derive(PSOPacketData, Debug, Copy, Clone, Hash, PartialEq, Eq)]
#[derive(PSOPacketData, Debug, Copy, Clone, Hash, PartialEq, Eq, strum::Display, strum::EnumString, Serialize, Deserialize)]
pub enum CharacterClass { pub enum CharacterClass {
HUmar, HUmar,
HUnewearl, HUnewearl,
@ -25,6 +27,7 @@ impl Default for CharacterClass {
} }
} }
// TODO: TryFrom
impl std::convert::From<u8> for CharacterClass { impl std::convert::From<u8> for CharacterClass {
fn from(f: u8) -> CharacterClass { fn from(f: u8) -> CharacterClass {
match f { match f {
@ -46,8 +49,54 @@ impl std::convert::From<u8> for CharacterClass {
} }
} }
impl From<CharacterClass> for u8 {
fn from(other: CharacterClass) -> u8 {
match other {
CharacterClass::HUmar => 0,
CharacterClass::HUnewearl => 1,
CharacterClass::HUcast => 2,
CharacterClass::RAmar => 3,
CharacterClass::RAcast => 4,
CharacterClass::RAcaseal => 5,
CharacterClass::FOmarl => 6,
CharacterClass::FOnewm => 7,
CharacterClass::FOnewearl => 8,
CharacterClass::HUcaseal => 9,
CharacterClass::FOmar => 10,
CharacterClass::RAmarl => 11,
}
}
}
impl CharacterClass {
pub fn is_human(&self) -> bool {
matches!(self,
CharacterClass::HUmar |
CharacterClass::RAmar |
CharacterClass::RAmarl |
CharacterClass::FOmar |
CharacterClass::FOmarl)
}
pub fn is_newman(&self) -> bool {
matches!(self,
CharacterClass::HUnewearl |
CharacterClass::FOnewm |
CharacterClass::FOnewearl)
}
pub fn is_android(&self) -> bool {
matches!(self,
CharacterClass::HUcast |
CharacterClass::HUcaseal |
CharacterClass::RAcast |
CharacterClass::RAcaseal)
}
}
#[repr(u8)] #[repr(u8)]
#[derive(PSOPacketData, Debug, Copy, Clone, Hash, PartialEq, Eq)]
#[derive(PSOPacketData, Debug, Copy, Clone, Hash, PartialEq, Eq, strum::Display, strum::EnumString, Serialize, Deserialize)]
pub enum SectionID { pub enum SectionID {
Viridia, Viridia,
Greenill, Greenill,
@ -67,6 +116,43 @@ impl Default for SectionID {
} }
} }
// TODO: TryFrom
impl From<u8> for SectionID {
fn from(id: u8) -> SectionID {
match id {
0 => SectionID::Viridia,
1 => SectionID::Greenill,
2 => SectionID::Skyly,
3 => SectionID::Bluefull,
4 => SectionID::Purplenum,
5 => SectionID::Pinkal,
6 => SectionID::Redria,
7 => SectionID::Oran,
8 => SectionID::Yellowboze,
9 => SectionID::Whitill,
_ => panic!(),
}
}
}
impl From<SectionID> for u8 {
fn from(other: SectionID) -> u8 {
match other {
SectionID::Viridia => 0,
SectionID::Greenill => 1,
SectionID::Skyly => 2,
SectionID::Bluefull => 3,
SectionID::Purplenum => 4,
SectionID::Pinkal => 5,
SectionID::Redria => 6,
SectionID::Oran => 7,
SectionID::Yellowboze => 8,
SectionID::Whitill => 9,
}
}
}
#[derive(PSOPacketData, Copy, Clone)] #[derive(PSOPacketData, Copy, Clone)]
#[repr(C)] #[repr(C)]

2
src/character/mod.rs

@ -2,3 +2,5 @@
pub mod settings; pub mod settings;
pub mod character; pub mod character;
pub mod guildcard; pub mod guildcard;
pub use character::{SectionID, CharacterClass};
Loading…
Cancel
Save