From b9d5b7916ce0c9a4804a4a36f28fb8b160b1e638 Mon Sep 17 00:00:00 2001 From: Adrian Malacoda Date: Sun, 19 Feb 2017 05:06:55 -0600 Subject: [PATCH] cleanup --- src/modules/pvn.rs | 78 ++++++++++++++++++++++++++++++---------------- 1 file changed, 52 insertions(+), 26 deletions(-) diff --git a/src/modules/pvn.rs b/src/modules/pvn.rs index 9f4c1ec..ad05822 100644 --- a/src/modules/pvn.rs +++ b/src/modules/pvn.rs @@ -7,6 +7,7 @@ use event::Event; use {Channel, User}; +use pvn::Error; use pvn::Fighter; use pvn::pirates::{Pirate, Pirates}; use pvn::ninjas::{Ninja, Ninjas}; @@ -45,34 +46,51 @@ fn reply (message: &str, channel: &Option, user: &User) { } } -fn print_pirate (pirate: &Pirate, channel: &Option, user: &User) { - reply(&format!("**{}**", pirate.name), channel, user); - reply(&format!("Swashbuckling: {}", pirate.swashbuckling), channel, user); - reply(&format!("Drunkenness: {}", pirate.drunkenness), channel, user); - reply(&format!("Booty: {}", pirate.booty), channel, user); - reply(&format!("Weapons: {}", pirate.weapons.join(", ")), channel, user); - reply(&format!("**TOTAL POWER: {}**", pirate.power()), channel, user); +trait PvnFighter: Fighter { + fn name (&self) -> &str; + fn print (&self, channel: &Option, user: &User); + + fn fight (&self, other: &PvnFighter, channel: &Option, user: &User) { + self.print(channel, user); + other.print(channel, user); + + if self.power() == other.power() { + reply("**It's a tie!**", channel, user); + } else if self.power() > other.power() { + reply(&format!("**Winner: {}!**", self.name()), channel, user); + } else { + reply(&format!("**Winner: {}!**", other.name()), channel, user); + } + } } -fn print_ninja (ninja: &Ninja, channel: &Option, user: &User) { - reply(&format!("**{}**", ninja.name), channel, user); - reply(&format!("Sneakiness: {}", ninja.sneakiness), channel, user); - reply(&format!("Pajamas: {}", ninja.pajamas), channel, user); - reply(&format!("Pointy Things: {}", ninja.pointy_things), channel, user); - reply(&format!("Weapons: {}", ninja.weapons.join(", ")), channel, user); - reply(&format!("**TOTAL POWER: {}**", ninja.power()), channel, user); +impl PvnFighter for Pirate { + fn print (&self, channel: &Option, user: &User) { + reply(&format!("**{}**", self.name), channel, user); + reply(&format!("Swashbuckling: {}", self.swashbuckling), channel, user); + reply(&format!("Drunkenness: {}", self.drunkenness), channel, user); + reply(&format!("Booty: {}", self.booty), channel, user); + reply(&format!("Weapons: {}", self.weapons.join(", ")), channel, user); + reply(&format!("**TOTAL POWER: {}**", self.power()), channel, user); + } + + fn name (&self) -> &str { + &self.name[..] + } } -fn pirate_vs_ninja (pirate: &Pirate, ninja: &Ninja, channel: &Option, user: &User) { - print_pirate(pirate, channel, user); - print_ninja(ninja, channel, user); +impl PvnFighter for Ninja { + fn print (&self, channel: &Option, user: &User) { + reply(&format!("**{}**", self.name), channel, user); + reply(&format!("Sneakiness: {}", self.sneakiness), channel, user); + reply(&format!("Pajamas: {}", self.pajamas), channel, user); + reply(&format!("Pointy Things: {}", self.pointy_things), channel, user); + reply(&format!("Weapons: {}", self.weapons.join(", ")), channel, user); + reply(&format!("**TOTAL POWER: {}**", self.power()), channel, user); + } - if pirate.power() == ninja.power() { - reply("**It's a tie!**", channel, user); - } else if pirate.power() > ninja.power() { - reply(&format!("**Winner: {}!**", pirate.name), channel, user); - } else { - reply(&format!("**Winner: {}!**", ninja.name), channel, user); + fn name (&self) -> &str { + &self.name[..] } } @@ -89,7 +107,7 @@ impl PirateVsNinja { Ok(pirate) => { match self.ninjas.get(ninja_name) { Ok(ninja) => { - pirate_vs_ninja(pirate, ninja, channel, user); + pirate.fight(ninja, channel, user); }, Err(error) => { error!("Error getting ninja: {:?}", error); @@ -110,7 +128,7 @@ impl PirateVsNinja { fn pirate_command (&mut self, name: &str, channel: &Option, user: &User) { match self.pirates.get(name) { Ok(pirate) => { - print_pirate(pirate, channel, user); + pirate.print(channel, user); }, Err(error) => { error!("Error getting pirate: {:?}", error); @@ -121,13 +139,21 @@ impl PirateVsNinja { fn ninja_command (&mut self, name: &str, channel: &Option, user: &User) { match self.ninjas.get(name) { Ok(ninja) => { - print_ninja(ninja, channel, user); + ninja.print(channel, user); }, Err(error) => { error!("Error getting ninja: {:?}", error); } } } + + fn get_pirate (&mut self, name: &str) -> Result<&Pirate, Error> { + self.pirates.get(name) + } + + fn get_ninja (&mut self, name: &str) -> Result<&Ninja, Error> { + self.ninjas.get(name) + } } impl Module for PvnModule {