Added petgraph dependency
This commit is contained in:
parent
8d46e9218a
commit
b36038696e
4 changed files with 71 additions and 1 deletions
19
rust-pvz-genetics/Cargo.lock
generated
19
rust-pvz-genetics/Cargo.lock
generated
|
|
@ -55,6 +55,12 @@ version = "1.0.2"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
|
||||
|
||||
[[package]]
|
||||
name = "fixedbitset"
|
||||
version = "0.5.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99"
|
||||
|
||||
[[package]]
|
||||
name = "foldhash"
|
||||
version = "0.1.5"
|
||||
|
|
@ -247,6 +253,18 @@ version = "0.2.1"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a846cbc04412cf509efcd8f3694b114fc700a035fb5a37f21517f9fb019f1ebc"
|
||||
|
||||
[[package]]
|
||||
name = "petgraph"
|
||||
version = "0.8.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8701b58ea97060d5e5b155d383a69952a60943f0e6dfe30b04c287beb0b27455"
|
||||
dependencies = [
|
||||
"fixedbitset",
|
||||
"hashbrown 0.15.5",
|
||||
"indexmap",
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "prettyplease"
|
||||
version = "0.2.37"
|
||||
|
|
@ -332,6 +350,7 @@ name = "rust-pvz-genetics"
|
|||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"godot",
|
||||
"petgraph",
|
||||
"rand",
|
||||
"serde",
|
||||
]
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ edition = "2024"
|
|||
|
||||
[dependencies]
|
||||
godot = "0.4.5"
|
||||
petgraph = "0.8.3"
|
||||
rand = "0.10.0"
|
||||
serde = { version = "1.0.228", features = ["derive"] }
|
||||
|
||||
|
|
|
|||
|
|
@ -79,6 +79,13 @@ impl PairGenomeModificator {
|
|||
(self.genome_a.clone(),self.genome_b.clone())
|
||||
}
|
||||
pub fn combine(&mut self) -> (Genome,Genome){
|
||||
let donor_gene: usize = self.generator.random_range(0..self.genome_a.graph.len());
|
||||
let mut extracted = vec![self.genome_a.graph.remove(donor_gene)];
|
||||
let mut idx = 0;
|
||||
while idx < extracted.len() {
|
||||
for child_idx
|
||||
idx += 1;
|
||||
}
|
||||
(self.genome_a.clone(),self.genome_b.clone())
|
||||
}
|
||||
pub fn cancel(&self) -> (Genome,Genome) {
|
||||
|
|
|
|||
|
|
@ -12,6 +12,15 @@ pub struct ReferencePairModifier {
|
|||
base: Base<Node>,
|
||||
}
|
||||
|
||||
#[derive(GodotClass)]
|
||||
#[class(base=Node)]
|
||||
pub struct ReferenceSingleModifier {
|
||||
#[export]
|
||||
godot_genome: Option<Gd<GodotGenome>>,
|
||||
modifier: Option<SingleGenomeModificator>,
|
||||
base: Base<Node>
|
||||
}
|
||||
|
||||
#[godot_api]
|
||||
impl INode for ReferencePairModifier{
|
||||
fn init(base: Base<Node>) -> Self {
|
||||
|
|
@ -39,6 +48,30 @@ impl INode for ReferencePairModifier{
|
|||
|
||||
}
|
||||
|
||||
#[godot_api]
|
||||
impl INode for ReferenceSingleModifier {
|
||||
fn init(base: Base<Node>) -> Self {
|
||||
Self {
|
||||
godot_genome: None,
|
||||
modifier: None,
|
||||
base
|
||||
}
|
||||
}
|
||||
fn ready(&mut self) {
|
||||
let Some(genome) = self.godot_genome.as_ref() else {
|
||||
godot_warn!("The genome is not specified!");
|
||||
return;
|
||||
};
|
||||
|
||||
let Some(genome) = genome.bind().get_genome() else {
|
||||
godot_warn!("Genome does not contain a genome!");
|
||||
return;
|
||||
};
|
||||
|
||||
self.modifier = Some(SingleGenomeModificator::new(genome));
|
||||
}
|
||||
}
|
||||
|
||||
#[godot_api]
|
||||
impl ReferencePairModifier {
|
||||
#[func]
|
||||
|
|
@ -63,5 +96,15 @@ impl ReferencePairModifier {
|
|||
godot_error!("Modifier is not initialized!");
|
||||
}
|
||||
}
|
||||
#[func]
|
||||
fn combine(&mut self) {
|
||||
if let Some(pair) = self.modifier.as_mut() {
|
||||
let (genome_a,genome_b) = pair.combine();
|
||||
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);
|
||||
}
|
||||
else {
|
||||
godot_error!("Modifier is not initialized!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue