Character: sectionid, charclass to use enums

This commit is contained in:
jake 2023-11-18 23:37:14 -07:00
parent d975874a64
commit c309e51f02

View File

@ -1,12 +1,10 @@
// TODO: ch_class to CharacterClass enum
// TODO: section_id to SectionId enum
// TODO: techniques to enum // TODO: techniques to enum
use psopacket::PSOPacketData; use psopacket::PSOPacketData;
use crate::{PSOPacketData, PacketParseError}; use crate::{PSOPacketData, PacketParseError};
#[repr(u32)] #[repr(u8)]
#[derive(Copy, Clone, Hash, PartialEq, Eq)] #[derive(PSOPacketData, Debug, Copy, Clone, Hash, PartialEq, Eq)]
pub enum Class { pub enum CharacterClass {
HUmar, HUmar,
HUnewearl, HUnewearl,
HUcast, HUcast,
@ -21,28 +19,35 @@ pub enum Class {
FOnewearl, FOnewearl,
} }
impl std::convert::From<u8> for Class { impl Default for CharacterClass {
fn from(f: u8) -> Class { fn default() -> CharacterClass {
CharacterClass::HUmar
}
}
impl std::convert::From<u8> for CharacterClass {
fn from(f: u8) -> CharacterClass {
match f { match f {
0 => Class::HUmar, 0 => CharacterClass::HUmar,
1 => Class::HUnewearl, 1 => CharacterClass::HUnewearl,
2 => Class::HUcast, 2 => CharacterClass::HUcast,
3 => Class::RAmar, 3 => CharacterClass::RAmar,
4 => Class::RAcast, 4 => CharacterClass::RAcast,
5 => Class::RAcaseal, 5 => CharacterClass::RAcaseal,
6 => Class::FOmarl, 6 => CharacterClass::FOmarl,
7 => Class::FOnewm, 7 => CharacterClass::FOnewm,
8 => Class::FOnewearl, 8 => CharacterClass::FOnewearl,
9 => Class::HUcaseal, 9 => CharacterClass::HUcaseal,
10 => Class::RAmarl, 10 => CharacterClass::RAmarl,
11 => Class::FOmar, 11 => CharacterClass::FOmar,
_ => panic!("unknown class") _ => panic!("unknown class")
} }
} }
} }
#[repr(u8)]
#[derive(PSOPacketData, Debug, Copy, Clone, Hash, PartialEq, Eq)]
pub enum SectionID { pub enum SectionID {
Viridia, Viridia,
Greenill, Greenill,
@ -56,6 +61,11 @@ pub enum SectionID {
Whitill, Whitill,
} }
impl Default for SectionID {
fn default() -> SectionID {
SectionID::Viridia
}
}
#[derive(PSOPacketData, Copy, Clone)] #[derive(PSOPacketData, Copy, Clone)]
@ -80,8 +90,8 @@ pub struct Character {
pub _unused: [u8; 11], pub _unused: [u8; 11],
pub play_time: u32, pub play_time: u32,
pub name_color_checksum: u32, pub name_color_checksum: u32,
pub section_id: u8, pub section_id: SectionID,
pub ch_class: u8, pub ch_class: CharacterClass,
pub v2flags: u8, pub v2flags: u8,
pub version: u8, pub version: u8,
pub v1flags: u32, pub v1flags: u32,
@ -149,8 +159,8 @@ pub struct SelectScreenCharacter {
pub model: u8, pub model: u8,
pub _unused: [u8; 15], pub _unused: [u8; 15],
pub name_color_checksum: u32, pub name_color_checksum: u32,
pub section_id: u8, pub section_id: SectionID,
pub ch_class: u8, pub ch_class: CharacterClass,
pub v2flags: u8, pub v2flags: u8,
pub version: u8, pub version: u8,
pub v1flags: u32, pub v1flags: u32,
@ -301,8 +311,8 @@ pub struct FullCharacter {
pub guildcard_desc: [u16; 88], pub guildcard_desc: [u16; 88],
pub _reserved1: u8, pub _reserved1: u8,
pub _reserved2: u8, pub _reserved2: u8,
pub section_id: u8, pub section_id: SectionID,
pub char_class: u8, pub char_class: CharacterClass,
pub _unknown2: u32, pub _unknown2: u32,
pub symbol_chats: [u8; 0x4E0], pub symbol_chats: [u8; 0x4E0],
pub shortcuts: [u8; 2624], pub shortcuts: [u8; 2624],