Further massive amounts of work
This commit is contained in:
80
src/dynamic_data/models/pokemon_party.rs
Normal file
80
src/dynamic_data/models/pokemon_party.rs
Normal file
@@ -0,0 +1,80 @@
|
||||
use crate::dynamic_data::models::pokemon::Pokemon;
|
||||
use std::sync::{Arc, RwLock};
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct PokemonParty<'a> {
|
||||
pokemon: Vec<Option<Arc<RwLock<Pokemon<'a>>>>>,
|
||||
}
|
||||
|
||||
impl<'a> PokemonParty<'a> {
|
||||
pub fn new(size: usize) -> Self {
|
||||
let mut pokemon = Vec::with_capacity(size);
|
||||
for _i in 0..size {
|
||||
pokemon.push(None);
|
||||
}
|
||||
Self { pokemon }
|
||||
}
|
||||
|
||||
pub fn at(&self, index: usize) -> &Option<Arc<RwLock<Pokemon<'a>>>> {
|
||||
let opt = self.pokemon.get(index);
|
||||
if let Some(v) = opt {
|
||||
v
|
||||
} else {
|
||||
&None
|
||||
}
|
||||
}
|
||||
|
||||
pub fn switch(&mut self, a: usize, b: usize) {
|
||||
self.pokemon.swap(a, b);
|
||||
}
|
||||
|
||||
pub fn swap_into(
|
||||
&mut self,
|
||||
index: usize,
|
||||
pokemon: Option<Arc<RwLock<Pokemon<'a>>>>,
|
||||
) -> Option<Arc<RwLock<Pokemon<'a>>>> {
|
||||
if index >= self.pokemon.len() {
|
||||
return pokemon;
|
||||
}
|
||||
let old = self.pokemon[index].as_ref().cloned();
|
||||
self.pokemon[index] = pokemon;
|
||||
old
|
||||
}
|
||||
|
||||
pub fn has_usable_pokemon(&self) -> bool {
|
||||
for pokemon in self.pokemon.iter().flatten() {
|
||||
if pokemon.read().unwrap().is_usable() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
false
|
||||
}
|
||||
|
||||
pub fn length(&self) -> usize {
|
||||
self.pokemon.len()
|
||||
}
|
||||
|
||||
pub fn pokemon(&self) -> &Vec<Option<Arc<RwLock<Pokemon<'a>>>>> {
|
||||
&self.pokemon
|
||||
}
|
||||
|
||||
pub fn pack_party(&mut self) {
|
||||
let mut first_empty = None;
|
||||
let mut i = 0;
|
||||
loop {
|
||||
if self.pokemon[i].is_none() {
|
||||
if first_empty.is_none() {
|
||||
first_empty = Some(i)
|
||||
}
|
||||
} else if first_empty.is_some() {
|
||||
self.pokemon.swap(first_empty.unwrap(), i);
|
||||
i = first_empty.unwrap();
|
||||
first_empty = None;
|
||||
}
|
||||
i += 1;
|
||||
if i >= self.pokemon.len() {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user