From da774529da7518e104f8dffce4861ca324f50ba6 Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Tue, 16 Apr 2024 21:14:59 -0400 Subject: [PATCH] Remove overcomplicated internal race macro to a big match statement There's really no reason to use macros for this, let's rewrite it in a big match statement. --- Cargo.toml | 1 - src/lib.rs | 3 -- src/macros.rs | 38 ----------------- src/race.rs | 113 +++++++++++++++++++++++++++++--------------------- 4 files changed, 65 insertions(+), 90 deletions(-) delete mode 100755 src/macros.rs diff --git a/Cargo.toml b/Cargo.toml index 5a39b46..1fc12c3 100755 --- a/Cargo.toml +++ b/Cargo.toml @@ -61,7 +61,6 @@ libz-sys = { version = "1.1" } # nice to have features rust is lacking at the moment modular-bitfield = "0.11" -paste = "1" # needed for half-float support which FFXIV uses in its model data half = { version = "2", optional = true } diff --git a/src/lib.rs b/src/lib.rs index 408083d..e24335c 100755 --- a/src/lib.rs +++ b/src/lib.rs @@ -48,9 +48,6 @@ pub mod common; /// Methods for installing game and boot patches. pub mod patch; -#[macro_use] -mod macros; - /// Implementation of the Blowfish ECB block cipher used by the retail client. It's used to encrypt arguments in the launcher, to prevent login token snooping. pub mod blowfish; diff --git a/src/macros.rs b/src/macros.rs deleted file mode 100755 index f9cf7d9..0000000 --- a/src/macros.rs +++ /dev/null @@ -1,38 +0,0 @@ -// SPDX-FileCopyrightText: 2023 Joshua Goins -// SPDX-License-Identifier: GPL-3.0-or-later - -/// Creates a enum list of combined race identifiers. For example, (Hyur, Midlander, Male) becomes a new variant called HyurMidlanderMale. -#[macro_export] -#[doc(hidden)] -macro_rules! define_race_enum { - ( - pub enum $name:ident { - $( - $([$id:expr]($race:ident, $gender:ident $(, $subrace:ident)?))* - ),+$(,)? - } - ) => { - paste! { - #[derive(PartialEq, Eq, Debug)] - - pub enum $name { - $( - $([<$race $($subrace)? $gender>] = $id)* - , - )+ - } - } - - paste! { - pub fn convert_to_internal(race : Race, subrace : Subrace, gender : Gender) -> Option<$name> { - $( - $(if race == $race $(&& subrace == $subrace)? && gender == $gender { - return Some($name::[<$race $($subrace)? $gender>]) - })* - )+ - - None - } - } - }; -} diff --git a/src/race.rs b/src/race.rs index 41f2800..82c2922 100755 --- a/src/race.rs +++ b/src/race.rs @@ -46,52 +46,71 @@ pub enum Race { Viera, } -mod internal_race { - use paste::paste; - - use crate::define_race_enum; - use crate::race::Gender; - use crate::race::Gender::*; - use crate::race::Race; - use crate::race::Race::*; - use crate::race::Subrace; - use crate::race::Subrace::*; - - define_race_enum! { - pub enum RaceTest { - [101](Hyur, Male, Midlander), - [201](Hyur, Female, Midlander), - [301](Hyur, Male, Highlander), - [401](Hyur, Female, Highlander), - - [501](Elezen, Male), - [601](Elezen, Female), - - [701](Miqote, Male), - [801](Miqote, Female), - - [901](Roegadyn, Male), - [1001](Roegadyn, Female), - - [1101](Lalafell, Male), - [1201](Lalafell, Female), - - [1301](AuRa, Male), - [1401](AuRa, Female), - - [1501](Hrothgar, Male), - [1601](Hrothgar, Female), - - [1701](Viera, Male), - [1801](Viera, Female) - } - } -} - /// Gets a proper race identifier (such as 101, for Hyur-Midlander-Males) given a race, a subrace, /// and a gender. pub fn get_race_id(race: Race, subrace: Subrace, gender: Gender) -> Option { - Some(internal_race::convert_to_internal(race, subrace, gender).unwrap() as i32) + // TODO: should we check for invalid subraces like the Hyur branch does? + match race { + Race::Hyur => { + match subrace { + Subrace::Midlander => { + match gender { + Gender::Male => Some(101), + Gender::Female => Some(201) + } + } + Subrace::Highlander => { + match gender { + Gender::Male => Some(301), + Gender::Female => Some(401) + } + } + _ => None + } + } + Race::Elezen => { + match gender { + Gender::Male => Some(501), + Gender::Female => Some(601) + } + } + Race::Lalafell => { + match gender { + Gender::Male => Some(501), + Gender::Female => Some(601) + } + } + Race::Miqote => { + match gender { + Gender::Male => Some(701), + Gender::Female => Some(801) + } + } + Race::Roegadyn => { + match gender { + Gender::Male => Some(901), + Gender::Female => Some(1001) + } + } + Race::AuRa => { + match gender { + Gender::Male => Some(1301), + Gender::Female => Some(1401) + } + } + Race::Hrothgar => { + match gender { + Gender::Male => Some(1501), + Gender::Female => Some(1601) // TODO: is this accurate as of dawntrail? + } + } + Race::Viera => { + match gender { + Gender::Male => Some(1701), + Gender::Female => Some(1801) + } + } + } } /// Builds the path to the skeleton (sklb) file for a given `race`, `subrace` and `gender`. @@ -118,15 +137,13 @@ pub fn get_supported_subraces(race: Race) -> [Subrace; 2] { #[cfg(test)] mod tests { - use crate::race::internal_race::{convert_to_internal, RaceTest}; - use super::*; #[test] - fn test_convert_to_internal() { + fn test_convert_race_num() { assert_eq!( - convert_to_internal(Race::Hyur, Subrace::Midlander, Gender::Female).unwrap(), - RaceTest::HyurMidlanderFemale + get_race_id(Race::Roegadyn, Subrace::SeaWolf, Gender::Male), + Some(901) ); } }