Allelic crossingover backend
This commit is contained in:
parent
471f14c19e
commit
84b2053bea
6 changed files with 121 additions and 8 deletions
57
rust-pvz-genetics/src/godot_wrapper/reference_modifiers.rs
Normal file
57
rust-pvz-genetics/src/godot_wrapper/reference_modifiers.rs
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
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<Gd<GodotGenome>>,
|
||||
#[export]
|
||||
godot_genome_b: Option<Gd<GodotGenome>>,
|
||||
modifier: Option<PairGenomeModificator>,
|
||||
base: Base<Node>,
|
||||
}
|
||||
|
||||
#[godot_api]
|
||||
impl INode for ReferencePairModifier{
|
||||
fn init(base: Base<Node>) -> 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!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue