Added petgraph dependency

This commit is contained in:
rendo 2026-04-06 16:45:57 +05:00
commit b36038696e
4 changed files with 71 additions and 1 deletions

View file

@ -55,6 +55,12 @@ version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
[[package]]
name = "fixedbitset"
version = "0.5.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99"
[[package]] [[package]]
name = "foldhash" name = "foldhash"
version = "0.1.5" version = "0.1.5"
@ -247,6 +253,18 @@ version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a846cbc04412cf509efcd8f3694b114fc700a035fb5a37f21517f9fb019f1ebc" 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]] [[package]]
name = "prettyplease" name = "prettyplease"
version = "0.2.37" version = "0.2.37"
@ -332,6 +350,7 @@ name = "rust-pvz-genetics"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"godot", "godot",
"petgraph",
"rand", "rand",
"serde", "serde",
] ]

View file

@ -5,6 +5,7 @@ edition = "2024"
[dependencies] [dependencies]
godot = "0.4.5" godot = "0.4.5"
petgraph = "0.8.3"
rand = "0.10.0" rand = "0.10.0"
serde = { version = "1.0.228", features = ["derive"] } serde = { version = "1.0.228", features = ["derive"] }

View file

@ -79,6 +79,13 @@ impl PairGenomeModificator {
(self.genome_a.clone(),self.genome_b.clone()) (self.genome_a.clone(),self.genome_b.clone())
} }
pub fn combine(&mut self) -> (Genome,Genome){ 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()) (self.genome_a.clone(),self.genome_b.clone())
} }
pub fn cancel(&self) -> (Genome,Genome) { pub fn cancel(&self) -> (Genome,Genome) {

View file

@ -12,6 +12,15 @@ pub struct ReferencePairModifier {
base: Base<Node>, 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] #[godot_api]
impl INode for ReferencePairModifier{ impl INode for ReferencePairModifier{
fn init(base: Base<Node>) -> Self { 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] #[godot_api]
impl ReferencePairModifier { impl ReferencePairModifier {
#[func] #[func]
@ -63,5 +96,15 @@ impl ReferencePairModifier {
godot_error!("Modifier is not initialized!"); 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!");
}
}
} }