53 lines
1.4 KiB
Rust
53 lines
1.4 KiB
Rust
use crate::defines::LevelInt;
|
|
use crate::dynamic_data::models::learned_move::MoveLearnMethod;
|
|
use crate::dynamic_data::models::pokemon::Pokemon;
|
|
use crate::dynamic_data::DynamicLibrary;
|
|
use crate::static_data::{AbilityIndex, DataLibrary, Gender};
|
|
use crate::StringKey;
|
|
|
|
pub struct PokemonBuilder<'own> {
|
|
library: &'own DynamicLibrary,
|
|
species: StringKey,
|
|
level: LevelInt,
|
|
learned_moves: Vec<StringKey>,
|
|
}
|
|
|
|
impl<'own> PokemonBuilder<'own> {
|
|
pub fn new(library: &'own DynamicLibrary, species: StringKey, level: LevelInt) -> Self {
|
|
Self {
|
|
library,
|
|
species,
|
|
level,
|
|
learned_moves: vec![],
|
|
}
|
|
}
|
|
pub fn learn_move(mut self, learned_move: StringKey) -> Self {
|
|
self.learned_moves.push(learned_move);
|
|
self
|
|
}
|
|
|
|
pub fn build(self) -> Pokemon<'own, 'own> {
|
|
let species = self.library.static_data().species().get(&self.species).unwrap();
|
|
let form = species.get_default_form();
|
|
let p = Pokemon::new(
|
|
self.library,
|
|
species,
|
|
form,
|
|
AbilityIndex {
|
|
hidden: false,
|
|
index: 0,
|
|
},
|
|
self.level,
|
|
0,
|
|
Gender::Male,
|
|
0,
|
|
&"hardy".into(),
|
|
);
|
|
for learned_move in self.learned_moves {
|
|
p.learn_move(&learned_move, MoveLearnMethod::Unknown);
|
|
}
|
|
|
|
p
|
|
}
|
|
}
|