use godot::prelude::*; use crate::{genetics::manipulations::{PairGenomeModificator,SingleGenomeModificator}, godot_wrapper::godot_genome::GodotGenome}; #[derive(GodotClass)] #[class(base=Node)] pub struct ReferencePairModifier { #[export] godot_genome_a: Option>, #[export] godot_genome_b: Option>, modifier: Option, base: Base, } #[godot_api] impl INode for ReferencePairModifier{ fn init(base: Base) -> Self { Self { godot_genome_a: None, godot_genome_b: None, modifier: None, base } } fn ready(&mut self) { if self.godot_genome_a.is_none() || self.godot_genome_b.is_none() { godot_warn!("One of the genomes is not specified!"); return; } let (genome_a, genome_b) = (self.godot_genome_a.as_ref().unwrap().bind().get_genome(),self.godot_genome_b.as_ref().unwrap().bind().get_genome()); if genome_a.is_none() || genome_b.is_none() { godot_warn!("One of genomes does not contain a genome!"); return; } self.modifier = Some(PairGenomeModificator::new(genome_a.unwrap(),genome_b.unwrap())); } } #[godot_api] impl ReferencePairModifier { #[func] fn allelic_crossingover(&mut self) { if let Some(pair) = self.modifier.as_mut() { let (genome_a,genome_b) = pair.allelic_crossingover(None); self.godot_genome_a.as_mut().unwrap().bind_mut().set_genome(genome_a); self.godot_genome_b.as_mut().unwrap().bind_mut().set_genome(genome_b); godot_print!("Kukayan"); } else { godot_error!("Modifier is not initialized!"); } } }