diff --git a/server/src/vbox.rs b/server/src/vbox.rs index 6123f910..fe93ab85 100644 --- a/server/src/vbox.rs +++ b/server/src/vbox.rs @@ -22,7 +22,7 @@ use item::*; #[derive(Debug,Clone,Serialize,Deserialize)] pub struct Vbox { pub bits: u16, - pub free: Vec>, + pub free: Vec>>, pub bound: Vec, } @@ -69,35 +69,32 @@ impl Vbox { .map(|item_type| { let items = match item_type { ItemType::Colours => vec![ - (Item::Red, 1), - (Item::Green, 1), - (Item::Blue, 1), + (Some(Item::Red), 1), + (Some(Item::Green), 1), + (Some(Item::Blue), 1), ], ItemType::Skills => vec![ - (Item::Attack, 1), - (Item::Block, 1), - (Item::Buff, 1), - (Item::Debuff, 1), - (Item::Stun, 1), + (Some(Item::Attack), 1), + (Some(Item::Block), 1), + (Some(Item::Buff), 1), + (Some(Item::Debuff), 1), + (Some(Item::Stun), 1), ], ItemType::Specs => vec![ - (Item::Power, 1), - (Item::Life, 1), - (Item::Speed, 1), + (Some(Item::Power), 1), + (Some(Item::Life), 1), + (Some(Item::Speed), 1), ], }; let dist = WeightedIndex::new(items.iter().map(|item| item.1)).unwrap(); - iter::repeat_with(|| { - items[dist.sample(&mut rng)].0 + iter::repeat_with(|| { + items[dist.sample(&mut rng)].0}).take(match item_type { + ItemType::Colours => 6, + _ => 3, + }).collect::>>() }) - .take(match item_type { - ItemType::Colours => 6, - _ => 3, - }) - .collect::>() - }) - .collect::>>(); + .collect::>>>(); self } @@ -113,11 +110,19 @@ impl Vbox { .get(j).ok_or(format_err!("no item at index {:?}", j))?; // check can purchase - let cost = self.free[i][j].cost(); + let cost = match self.free[i][j] { + None => 0, + _ => self.free[i][j].unwrap().cost() + }; self.balance_sub(cost)?; // actually move - self.bound.push(self.free[i].remove(j)); + match self.free[i][j] { + None => (), + _ => self.bound.push(self.free[i][j].unwrap()) + } + // self.bound.push(self.free[i][j].unwrap()); + self.free[i][j] = None; // self.bound.sort_unstable(); Ok(self)