1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
use std::str::FromStr; use std::fmt; use super::helpers; #[derive(Clone, Copy, PartialEq, Debug)] pub enum Move { Kick = 0, NinjaSword = 1, Nunchucks = 2, ShadowFireball = 3, ShadowSlip = 4, RunInCircles = 5, LightningFastKarateChop = 6, Rampage = 7, Muscle = 8, Zap = 9, Regenerate = 10, Gravedigger = 11, ZombieCorps = 12, Apocalypse = 13, SamuraiSword = 14, Helmet = 15, Smash = 16, Lightning = 17, Earthquake = 18, Twist = 19, Bend = 20, JugglingKnives = 21, AcidSpray = 22, Nose = 23, BackwardsMoustachio = 24, NoseOfTheTaunted = 25, MustacheMash = 26, BigHairyDeal = 27 } impl Move { pub fn to_u8(self) -> u8 { self as u8 } } impl FromStr for Move { type Err = (); fn from_str(s: &str) -> Result<Self, Self::Err> { match &helpers::lowercase_no_whitespace(s)[..] { "kick" => Ok(Move::Kick), "ninjasword" => Ok(Move::NinjaSword), "nunchucks" => Ok(Move::Nunchucks), "shadowfireball" => Ok(Move::ShadowFireball), "shadowslip" => Ok(Move::ShadowSlip), "runincircles" => Ok(Move::RunInCircles), "lightningfastkaratechop" => Ok(Move::LightningFastKarateChop), "rampage" => Ok(Move::Rampage), "muscle" => Ok(Move::Muscle), "zap" => Ok(Move::Zap), "regenerate" => Ok(Move::Regenerate), "gravedigger" => Ok(Move::Gravedigger), "zombiecorps" => Ok(Move::ZombieCorps), "apocalypse" => Ok(Move::Apocalypse), "samuraisword" => Ok(Move::SamuraiSword), "helmet" => Ok(Move::Helmet), "smash" => Ok(Move::Smash), "lightning" => Ok(Move::Lightning), "earthquake" => Ok(Move::Earthquake), "twist" => Ok(Move::Twist), "bend" => Ok(Move::Bend), "jugglingknives" => Ok(Move::JugglingKnives), "acidspray" => Ok(Move::AcidSpray), "nose" => Ok(Move::Nose), "backwardsmoustachio" => Ok(Move::BackwardsMoustachio), "noseofthetaunted" => Ok(Move::NoseOfTheTaunted), "mustachemash" => Ok(Move::MustacheMash), "bighairydeal" => Ok(Move::BigHairyDeal), _ => Err(()) } } } impl fmt::Display for Move { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { let string = match self { &Move::Kick => "Kick", &Move::NinjaSword => "Ninja Sword", &Move::Nunchucks => "Nunchucks", &Move::ShadowFireball => "Shadow Fireball", &Move::ShadowSlip => "Shadow Slip", &Move::RunInCircles => "Run In Circles", &Move::LightningFastKarateChop => "Lightning Fast Karate Chop", &Move::Rampage => "Rampage", &Move::Muscle => "Muscle", &Move::Zap => "Zap", &Move::Regenerate => "Regenerate", &Move::Gravedigger => "Gravedigger", &Move::ZombieCorps => "Zombie Corps", &Move::Apocalypse => "Apocalypse", &Move::SamuraiSword => "Samurai Sword", &Move::Helmet => "Helmet", &Move::Smash => "Smash", &Move::Lightning => "Lightning", &Move::Earthquake => "Earthquake", &Move::Twist => "Twist", &Move::Bend => "Bend", &Move::JugglingKnives => "Juggling Knives", &Move::AcidSpray => "Acid Spray", &Move::Nose => "Nose", &Move::BackwardsMoustachio => "Backwards Moustachio", &Move::NoseOfTheTaunted => "Nose Of The Taunted", &Move::MustacheMash => "Mustache Mash", &Move::BigHairyDeal => "Big Hairy Deal" }; write!(f, "{}", string) } } pub const SINGLE_USE_MOVES: [Move; 3] = [ Move::Zap, Move::Regenerate, Move::AcidSpray ]; pub const DESTRUCTIVE_MOVES: [Move; 2] = [ Move::Zap, Move::AcidSpray ];