feat: new worlds and data centre

This commit is contained in:
Anna 2022-07-04 10:06:05 -04:00
parent a95a481a26
commit 585aa788fc
Signed by: anna
GPG Key ID: 0B391D8F06FCD9E0
2 changed files with 110 additions and 51 deletions

View File

@ -15,13 +15,14 @@ pub enum DataCenter {
Gaia, Gaia,
Light, Light,
Mana, Mana,
Primal,
Materia, Materia,
Meteor,
Primal,
} }
impl DataCenter { impl DataCenter {
#[cfg(feature = "all_const")] #[cfg(feature = "all_const")]
pub const ALL: [DataCenter; 9] = [ pub const ALL: [DataCenter; 10] = [
DataCenter::Aether, DataCenter::Aether,
DataCenter::Chaos, DataCenter::Chaos,
DataCenter::Crystal, DataCenter::Crystal,
@ -29,8 +30,9 @@ impl DataCenter {
DataCenter::Gaia, DataCenter::Gaia,
DataCenter::Light, DataCenter::Light,
DataCenter::Mana, DataCenter::Mana,
DataCenter::Primal,
DataCenter::Materia, DataCenter::Materia,
DataCenter::Meteor,
DataCenter::Primal,
]; ];
pub fn as_str(&self) -> &'static str { pub fn as_str(&self) -> &'static str {
@ -42,8 +44,9 @@ impl DataCenter {
DataCenter::Gaia => "Gaia", DataCenter::Gaia => "Gaia",
DataCenter::Light => "Light", DataCenter::Light => "Light",
DataCenter::Mana => "Mana", DataCenter::Mana => "Mana",
DataCenter::Primal => "Primal",
DataCenter::Materia => "Materia", DataCenter::Materia => "Materia",
DataCenter::Meteor => "Meteor",
DataCenter::Primal => "Primal",
} }
} }
@ -65,8 +68,9 @@ impl FromStr for DataCenter {
"gaia" => DataCenter::Gaia, "gaia" => DataCenter::Gaia,
"light" => DataCenter::Light, "light" => DataCenter::Light,
"mana" => DataCenter::Mana, "mana" => DataCenter::Mana,
"primal" => DataCenter::Primal,
"materia" => DataCenter::Materia, "materia" => DataCenter::Materia,
"meteor" => DataCenter::Meteor,
"primal" => DataCenter::Primal,
_ => return Err(UnknownVariant("DataCenter", s.into())) _ => return Err(UnknownVariant("DataCenter", s.into()))
}; };

View File

@ -1,12 +1,12 @@
//! World types //! World types
use std::fmt::{Display, Formatter, Result as FmtResult};
use std::str::FromStr;
#[cfg(feature = "data_centers")] #[cfg(feature = "data_centers")]
use data_centers::DataCenter; use data_centers::DataCenter;
use errors::UnknownVariant; use errors::UnknownVariant;
use std::fmt::{Display, Formatter, Result as FmtResult};
use std::str::FromStr;
/// The worlds, sometimes called servers, in the game. /// The worlds, sometimes called servers, in the game.
/// ///
/// Each [`DataCenter`] has multiple worlds attached to it. /// Each [`DataCenter`] has multiple worlds attached to it.
@ -28,7 +28,9 @@ pub enum World {
Louisoix, Louisoix,
Moogle, Moogle,
Omega, Omega,
Phantom,
Ragnarok, Ragnarok,
Sagittarius,
Spriggan, Spriggan,
// Crystal // Crystal
@ -48,10 +50,8 @@ pub enum World {
Garuda, Garuda,
Gungnir, Gungnir,
Kujata, Kujata,
Ramuh,
Tonberry, Tonberry,
Typhon, Typhon,
Unicorn,
// Gaia // Gaia
Alexander, Alexander,
@ -62,14 +62,13 @@ pub enum World {
Ridill, Ridill,
Tiamat, Tiamat,
Ultima, Ultima,
Valefor,
Yojimbo,
Zeromus,
// Light // Light
Alpha,
Lich, Lich,
Odin, Odin,
Phoenix, Phoenix,
Raiden,
Shiva, Shiva,
Twintania, Twintania,
Zodiark, Zodiark,
@ -77,14 +76,11 @@ pub enum World {
// Mana // Mana
Anima, Anima,
Asura, Asura,
Belias,
Chocobo, Chocobo,
Hades, Hades,
Ixion, Ixion,
Mandragora,
Masamune, Masamune,
Pandaemonium, Pandaemonium,
Shinryu,
Titan, Titan,
// Primal // Primal
@ -103,11 +99,21 @@ pub enum World {
Sephirot, Sephirot,
Sophia, Sophia,
Zurvan, Zurvan,
// Meteor
Belias,
Mandragora,
Ramuh,
Shinryu,
Unicorn,
Valefor,
Yojimbo,
Zeromus,
} }
impl World { impl World {
#[cfg(feature = "all_const")] #[cfg(feature = "all_const")]
pub const ALL: [World; 73] = [ pub const ALL: [World; 77] = [
// Aether // Aether
World::Adamantoise, World::Adamantoise,
World::Cactuar, World::Cactuar,
@ -123,7 +129,9 @@ impl World {
World::Louisoix, World::Louisoix,
World::Moogle, World::Moogle,
World::Omega, World::Omega,
World::Phantom,
World::Ragnarok, World::Ragnarok,
World::Sagittarius,
World::Spriggan, World::Spriggan,
// Crystal // Crystal
@ -143,10 +151,8 @@ impl World {
World::Garuda, World::Garuda,
World::Gungnir, World::Gungnir,
World::Kujata, World::Kujata,
World::Ramuh,
World::Tonberry, World::Tonberry,
World::Typhon, World::Typhon,
World::Unicorn,
// Gaia // Gaia
World::Alexander, World::Alexander,
@ -157,14 +163,13 @@ impl World {
World::Ridill, World::Ridill,
World::Tiamat, World::Tiamat,
World::Ultima, World::Ultima,
World::Valefor,
World::Yojimbo,
World::Zeromus,
// Light // Light
World::Alpha,
World::Lich, World::Lich,
World::Odin, World::Odin,
World::Phoenix, World::Phoenix,
World::Raiden,
World::Shiva, World::Shiva,
World::Twintania, World::Twintania,
World::Zodiark, World::Zodiark,
@ -172,14 +177,11 @@ impl World {
// Mana // Mana
World::Anima, World::Anima,
World::Asura, World::Asura,
World::Belias,
World::Chocobo, World::Chocobo,
World::Hades, World::Hades,
World::Ixion, World::Ixion,
World::Mandragora,
World::Masamune, World::Masamune,
World::Pandaemonium, World::Pandaemonium,
World::Shinryu,
World::Titan, World::Titan,
// Primal // Primal
@ -198,11 +200,22 @@ impl World {
World::Sephirot, World::Sephirot,
World::Sophia, World::Sophia,
World::Zurvan, World::Zurvan,
// Meteor
World::Belias,
World::Mandragora,
World::Ramuh,
World::Shinryu,
World::Unicorn,
World::Valefor,
World::Yojimbo,
World::Zeromus,
]; ];
/// Returns the string variant of this world. /// Returns the string variant of this world.
pub fn as_str(&self) -> &'static str { pub fn as_str(&self) -> &'static str {
match *self { match *self {
// Aether
World::Adamantoise => "Adamantoise", World::Adamantoise => "Adamantoise",
World::Cactuar => "Cactuar", World::Cactuar => "Cactuar",
World::Faerie => "Faerie", World::Faerie => "Faerie",
@ -212,13 +225,17 @@ impl World {
World::Sargatanas => "Sargatanas", World::Sargatanas => "Sargatanas",
World::Siren => "Siren", World::Siren => "Siren",
// Chaos
World::Cerberus => "Cerberus", World::Cerberus => "Cerberus",
World::Louisoix => "Louisoix", World::Louisoix => "Louisoix",
World::Moogle => "Moogle", World::Moogle => "Moogle",
World::Omega => "Omega", World::Omega => "Omega",
World::Phantom => "Phantom",
World::Ragnarok => "Ragnarok", World::Ragnarok => "Ragnarok",
World::Sagittarius => "Sagittarius",
World::Spriggan => "Spriggan", World::Spriggan => "Spriggan",
// Crystal
World::Balmung => "Balmung", World::Balmung => "Balmung",
World::Brynhildr => "Brynhildr", World::Brynhildr => "Brynhildr",
World::Coeurl => "Coeurl", World::Coeurl => "Coeurl",
@ -228,17 +245,17 @@ impl World {
World::Mateus => "Mateus", World::Mateus => "Mateus",
World::Zalera => "Zalera", World::Zalera => "Zalera",
// Elemental
World::Aegis => "Aegis", World::Aegis => "Aegis",
World::Atomos => "Atomos", World::Atomos => "Atomos",
World::Carbuncle => "Carbuncle", World::Carbuncle => "Carbuncle",
World::Garuda => "Garuda", World::Garuda => "Garuda",
World::Gungnir => "Gungnir", World::Gungnir => "Gungnir",
World::Kujata => "Kujata", World::Kujata => "Kujata",
World::Ramuh => "Ramuh",
World::Tonberry => "Tonberry", World::Tonberry => "Tonberry",
World::Typhon => "Typhon", World::Typhon => "Typhon",
World::Unicorn => "Unicorn",
// Gaia
World::Alexander => "Alexander", World::Alexander => "Alexander",
World::Bahamut => "Bahamut", World::Bahamut => "Bahamut",
World::Durandal => "Durandal", World::Durandal => "Durandal",
@ -247,29 +264,28 @@ impl World {
World::Ridill => "Ridill", World::Ridill => "Ridill",
World::Tiamat => "Tiamat", World::Tiamat => "Tiamat",
World::Ultima => "Ultima", World::Ultima => "Ultima",
World::Valefor => "Valefor",
World::Yojimbo => "Yojimbo",
World::Zeromus => "Zeromus",
// Light
World::Alpha => "Alpha",
World::Lich => "Lich", World::Lich => "Lich",
World::Odin => "Odin", World::Odin => "Odin",
World::Phoenix => "Phoenix", World::Phoenix => "Phoenix",
World::Raiden => "Raiden",
World::Shiva => "Shiva", World::Shiva => "Shiva",
World::Twintania => "Twintania", World::Twintania => "Twintania",
World::Zodiark => "Zodiark", World::Zodiark => "Zodiark",
// Mana
World::Anima => "Anima", World::Anima => "Anima",
World::Asura => "Asura", World::Asura => "Asura",
World::Belias => "Belias",
World::Chocobo => "Chocobo", World::Chocobo => "Chocobo",
World::Hades => "Hades", World::Hades => "Hades",
World::Ixion => "Ixion", World::Ixion => "Ixion",
World::Mandragora => "Mandragora",
World::Masamune => "Masamune", World::Masamune => "Masamune",
World::Pandaemonium => "Pandaemonium", World::Pandaemonium => "Pandaemonium",
World::Shinryu => "Shinryu",
World::Titan => "Titan", World::Titan => "Titan",
// Primal
World::Behemoth => "Behemoth", World::Behemoth => "Behemoth",
World::Excalibur => "Excalibur", World::Excalibur => "Excalibur",
World::Exodus => "Exodus", World::Exodus => "Exodus",
@ -279,11 +295,22 @@ impl World {
World::Leviathan => "Leviathan", World::Leviathan => "Leviathan",
World::Ultros => "Ultros", World::Ultros => "Ultros",
// Materia
World::Bismarck => "Bismarck", World::Bismarck => "Bismarck",
World::Ravana => "Ravana", World::Ravana => "Ravana",
World::Sephirot => "Sephirot", World::Sephirot => "Sephirot",
World::Sophia => "Sophia", World::Sophia => "Sophia",
World::Zurvan => "Zurvan", World::Zurvan => "Zurvan",
// Meteor
World::Belias => "Belias",
World::Mandragora => "Mandragora",
World::Ramuh => "Ramuh",
World::Shinryu => "Shinryu",
World::Unicorn => "Unicorn",
World::Valefor => "Valefor",
World::Yojimbo => "Yojimbo",
World::Zeromus => "Zeromus",
} }
} }
@ -296,6 +323,7 @@ impl World {
#[cfg(feature = "data_centers")] #[cfg(feature = "data_centers")]
pub fn data_center(&self) -> DataCenter { pub fn data_center(&self) -> DataCenter {
match *self { match *self {
// Aether
World::Adamantoise | World::Adamantoise |
World::Cactuar | World::Cactuar |
World::Faerie | World::Faerie |
@ -305,13 +333,17 @@ impl World {
World::Sargatanas | World::Sargatanas |
World::Siren => DataCenter::Aether, World::Siren => DataCenter::Aether,
// Chaos
World::Cerberus | World::Cerberus |
World::Louisoix | World::Louisoix |
World::Moogle | World::Moogle |
World::Omega | World::Omega |
World::Phantom |
World::Ragnarok | World::Ragnarok |
World::Sagittarius |
World::Spriggan => DataCenter::Chaos, World::Spriggan => DataCenter::Chaos,
// Crystal
World::Balmung | World::Balmung |
World::Brynhildr | World::Brynhildr |
World::Coeurl | World::Coeurl |
@ -321,17 +353,17 @@ impl World {
World::Mateus | World::Mateus |
World::Zalera => DataCenter::Crystal, World::Zalera => DataCenter::Crystal,
// Elemental
World::Aegis | World::Aegis |
World::Atomos | World::Atomos |
World::Carbuncle | World::Carbuncle |
World::Garuda | World::Garuda |
World::Gungnir | World::Gungnir |
World::Kujata | World::Kujata |
World::Ramuh |
World::Tonberry | World::Tonberry |
World::Typhon | World::Typhon => DataCenter::Elemental,
World::Unicorn => DataCenter::Elemental,
// Gaia
World::Alexander | World::Alexander |
World::Bahamut | World::Bahamut |
World::Durandal | World::Durandal |
@ -339,28 +371,26 @@ impl World {
World::Ifrit | World::Ifrit |
World::Ridill | World::Ridill |
World::Tiamat | World::Tiamat |
World::Ultima | World::Ultima => DataCenter::Gaia,
World::Valefor |
World::Yojimbo |
World::Zeromus => DataCenter::Gaia,
// Light
World::Alpha |
World::Lich | World::Lich |
World::Odin | World::Odin |
World::Phoenix | World::Phoenix |
World::Raiden |
World::Shiva | World::Shiva |
World::Twintania | World::Twintania |
World::Zodiark => DataCenter::Light, World::Zodiark => DataCenter::Light,
// Mana
World::Anima | World::Anima |
World::Asura | World::Asura |
World::Belias |
World::Chocobo | World::Chocobo |
World::Hades | World::Hades |
World::Ixion | World::Ixion |
World::Mandragora |
World::Masamune | World::Masamune |
World::Pandaemonium | World::Pandaemonium |
World::Shinryu |
World::Titan => DataCenter::Mana, World::Titan => DataCenter::Mana,
// Primal // Primal
@ -379,6 +409,16 @@ impl World {
World::Sephirot | World::Sephirot |
World::Sophia | World::Sophia |
World::Zurvan => DataCenter::Materia, World::Zurvan => DataCenter::Materia,
// Meteor
World::Belias |
World::Mandragora |
World::Ramuh |
World::Shinryu |
World::Unicorn |
World::Valefor |
World::Yojimbo |
World::Zeromus => DataCenter::Meteor,
} }
} }
} }
@ -391,6 +431,7 @@ impl FromStr for World {
/// This is case-insensitive. /// This is case-insensitive.
fn from_str(s: &str) -> Result<Self, Self::Err> { fn from_str(s: &str) -> Result<Self, Self::Err> {
let world = match s.to_lowercase().as_str() { let world = match s.to_lowercase().as_str() {
// Aether
"adamantoise" => World::Adamantoise, "adamantoise" => World::Adamantoise,
"cactuar" => World::Cactuar, "cactuar" => World::Cactuar,
"faerie" => World::Faerie, "faerie" => World::Faerie,
@ -400,13 +441,17 @@ impl FromStr for World {
"sargatanas" => World::Sargatanas, "sargatanas" => World::Sargatanas,
"siren" => World::Siren, "siren" => World::Siren,
// Chaos
"cerberus" => World::Cerberus, "cerberus" => World::Cerberus,
"louisoix" => World::Louisoix, "louisoix" => World::Louisoix,
"moogle" => World::Moogle, "moogle" => World::Moogle,
"omega" => World::Omega, "omega" => World::Omega,
"phantom" => World::Phantom,
"ragnarok" => World::Ragnarok, "ragnarok" => World::Ragnarok,
"sagittarius" => World::Sagittarius,
"spriggan" => World::Spriggan, "spriggan" => World::Spriggan,
// Crystal
"balmung" => World::Balmung, "balmung" => World::Balmung,
"brynhildr" => World::Brynhildr, "brynhildr" => World::Brynhildr,
"coeurl" => World::Coeurl, "coeurl" => World::Coeurl,
@ -416,17 +461,17 @@ impl FromStr for World {
"mateus" => World::Mateus, "mateus" => World::Mateus,
"zalera" => World::Zalera, "zalera" => World::Zalera,
// Elemental
"aegis" => World::Aegis, "aegis" => World::Aegis,
"atomos" => World::Atomos, "atomos" => World::Atomos,
"carbuncle" => World::Carbuncle, "carbuncle" => World::Carbuncle,
"garuda" => World::Garuda, "garuda" => World::Garuda,
"gungnir" => World::Gungnir, "gungnir" => World::Gungnir,
"kujata" => World::Kujata, "kujata" => World::Kujata,
"ramuh" => World::Ramuh,
"tonberry" => World::Tonberry, "tonberry" => World::Tonberry,
"typhon" => World::Typhon, "typhon" => World::Typhon,
"unicorn" => World::Unicorn,
// Gaia
"alexander" => World::Alexander, "alexander" => World::Alexander,
"bahamut" => World::Bahamut, "bahamut" => World::Bahamut,
"durandal" => World::Durandal, "durandal" => World::Durandal,
@ -435,29 +480,28 @@ impl FromStr for World {
"ridill" => World::Ridill, "ridill" => World::Ridill,
"tiamat" => World::Tiamat, "tiamat" => World::Tiamat,
"ultima" => World::Ultima, "ultima" => World::Ultima,
"valefor" => World::Valefor,
"yojimbo" => World::Yojimbo,
"zeromus" => World::Zeromus,
// Light
"alpha" => World::Alpha,
"lich" => World::Lich, "lich" => World::Lich,
"odin" => World::Odin, "odin" => World::Odin,
"phoenix" => World::Phoenix, "phoenix" => World::Phoenix,
"raiden" => World::Raiden,
"shiva" => World::Shiva, "shiva" => World::Shiva,
"twintania" => World::Twintania, "twintania" => World::Twintania,
"zodiark" => World::Zodiark, "zodiark" => World::Zodiark,
// Mana
"anima" => World::Anima, "anima" => World::Anima,
"asura" => World::Asura, "asura" => World::Asura,
"belias" => World::Belias,
"chocobo" => World::Chocobo, "chocobo" => World::Chocobo,
"hades" => World::Hades, "hades" => World::Hades,
"ixion" => World::Ixion, "ixion" => World::Ixion,
"mandragora" => World::Mandragora,
"masamune" => World::Masamune, "masamune" => World::Masamune,
"pandaemonium" => World::Pandaemonium, "pandaemonium" => World::Pandaemonium,
"shinryu" => World::Shinryu,
"titan" => World::Titan, "titan" => World::Titan,
// Primal
"behemoth" => World::Behemoth, "behemoth" => World::Behemoth,
"excalibur" => World::Excalibur, "excalibur" => World::Excalibur,
"exodus" => World::Exodus, "exodus" => World::Exodus,
@ -467,12 +511,23 @@ impl FromStr for World {
"leviathan" => World::Leviathan, "leviathan" => World::Leviathan,
"ultros" => World::Ultros, "ultros" => World::Ultros,
// Materia
"bismarck" => World::Bismarck, "bismarck" => World::Bismarck,
"ravana" => World::Ravana, "ravana" => World::Ravana,
"sephirot" => World::Sephirot, "sephirot" => World::Sephirot,
"sophia" => World::Sophia, "sophia" => World::Sophia,
"zurvan" => World::Zurvan, "zurvan" => World::Zurvan,
// Meteor
"belias" => World::Belias,
"mandragora" => World::Mandragora,
"ramuh" => World::Ramuh,
"shinryu" => World::Shinryu,
"unicorn" => World::Unicorn,
"valefor" => World::Valefor,
"yojimbo" => World::Yojimbo,
"zeromus" => World::Zeromus,
_ => return Err(UnknownVariant("World", s.into())) _ => return Err(UnknownVariant("World", s.into()))
}; };