Further massive amounts of work

This commit is contained in:
2022-06-06 13:54:59 +02:00
parent df662ce6b5
commit ce33ec0649
33 changed files with 848 additions and 80 deletions

View 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;
}
}
}
}