wrapper pt1
This commit is contained in:
parent
5abbbc3bf9
commit
219fc97519
6 changed files with 58 additions and 4 deletions
|
|
@ -6,6 +6,8 @@ pub enum GenePlace {
|
||||||
Stem,
|
Stem,
|
||||||
Head,
|
Head,
|
||||||
Face,
|
Face,
|
||||||
|
Mouth,
|
||||||
|
Eyes,
|
||||||
Leaf,
|
Leaf,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -17,6 +19,8 @@ impl Display for GenePlace {
|
||||||
GenePlace::Head => "Head",
|
GenePlace::Head => "Head",
|
||||||
GenePlace::Face => "Face",
|
GenePlace::Face => "Face",
|
||||||
GenePlace::Leaf => "Leaf",
|
GenePlace::Leaf => "Leaf",
|
||||||
|
GenePlace::Eyes => "Eyes",
|
||||||
|
GenePlace::Mouth => "Mouth",
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -29,6 +33,8 @@ impl GenePlace {
|
||||||
GenePlace::Head => GenePlace::Head,
|
GenePlace::Head => GenePlace::Head,
|
||||||
GenePlace::Face => GenePlace::Face,
|
GenePlace::Face => GenePlace::Face,
|
||||||
GenePlace::Leaf => GenePlace::Leaf,
|
GenePlace::Leaf => GenePlace::Leaf,
|
||||||
|
GenePlace::Mouth => GenePlace::Face,
|
||||||
|
GenePlace::Eyes => GenePlace::Face,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ use std::fmt::Display;
|
||||||
|
|
||||||
use crate::genetics::gene::Gene;
|
use crate::genetics::gene::Gene;
|
||||||
|
|
||||||
#[derive(Clone,PartialEq,Eq)]
|
#[derive(Default,Clone,PartialEq,Eq)]
|
||||||
pub struct Genome {
|
pub struct Genome {
|
||||||
pub(crate) graph: Vec<(Gene,Vec<usize>)>,
|
pub(crate) graph: Vec<(Gene,Vec<usize>)>,
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,12 +6,14 @@ pub fn peashooter_template() -> Genome {
|
||||||
Gene::new(GeneSource::Peashooter,GenePlace::Stem, GeneType::fill_all()),
|
Gene::new(GeneSource::Peashooter,GenePlace::Stem, GeneType::fill_all()),
|
||||||
Gene::new(GeneSource::Peashooter,GenePlace::Head,GeneType::random_distribution()),
|
Gene::new(GeneSource::Peashooter,GenePlace::Head,GeneType::random_distribution()),
|
||||||
Gene::new(GeneSource::Peashooter,GenePlace::Leaf,GeneType::modifier(|_|{Flow::empty()})),
|
Gene::new(GeneSource::Peashooter,GenePlace::Leaf,GeneType::modifier(|_|{Flow::empty()})),
|
||||||
Gene::new(GeneSource::Peashooter,GenePlace::Face,GeneType::consumer(|_|{}))
|
Gene::new(GeneSource::Peashooter,GenePlace::Eyes,GeneType::Structural),
|
||||||
|
Gene::new(GeneSource::Peashooter,GenePlace::Mouth,GeneType::consumer(|_|{}))
|
||||||
],vec![
|
],vec![
|
||||||
(0,1),
|
(0,1),
|
||||||
(1,2),
|
(1,2),
|
||||||
(2,3),
|
(2,3),
|
||||||
(2,4)
|
(2,4),
|
||||||
|
(2,5),
|
||||||
]).unwrap()
|
]).unwrap()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -20,11 +22,13 @@ pub fn sunflower_template() -> Genome {
|
||||||
Gene::new(GeneSource::Sunflower,GenePlace::Root, GeneType::Structural),
|
Gene::new(GeneSource::Sunflower,GenePlace::Root, GeneType::Structural),
|
||||||
Gene::new(GeneSource::Sunflower,GenePlace::Stem, GeneType::Structural),
|
Gene::new(GeneSource::Sunflower,GenePlace::Stem, GeneType::Structural),
|
||||||
Gene::new(GeneSource::Sunflower,GenePlace::Head, GeneType::modifier(|_|{Flow::empty()})),
|
Gene::new(GeneSource::Sunflower,GenePlace::Head, GeneType::modifier(|_|{Flow::empty()})),
|
||||||
Gene::new(GeneSource::Sunflower,GenePlace::Face, GeneType::consumer(|_|{})),
|
Gene::new(GeneSource::Sunflower,GenePlace::Eyes, GeneType::Structural),
|
||||||
|
Gene::new(GeneSource::Sunflower,GenePlace::Mouth, GeneType::consumer(|_|{})),
|
||||||
], vec![
|
], vec![
|
||||||
(0,1),
|
(0,1),
|
||||||
(1,2),
|
(1,2),
|
||||||
(2,3),
|
(2,3),
|
||||||
|
(2,4),
|
||||||
]).unwrap()
|
]).unwrap()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,2 +1,11 @@
|
||||||
|
use godot::prelude::*;
|
||||||
|
|
||||||
pub mod genetics;
|
pub mod genetics;
|
||||||
pub mod wrapper;
|
pub mod wrapper;
|
||||||
|
|
||||||
|
struct PVZGenetics;
|
||||||
|
|
||||||
|
#[gdextension]
|
||||||
|
unsafe impl ExtensionLibrary for PVZGenetics {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
||||||
34
rust-pvz-genetics/src/wrapper/godot_genome.rs
Normal file
34
rust-pvz-genetics/src/wrapper/godot_genome.rs
Normal file
|
|
@ -0,0 +1,34 @@
|
||||||
|
use godot::prelude::*;
|
||||||
|
use godot::classes::{Node,INode};
|
||||||
|
|
||||||
|
use crate::genetics::genome::Genome;
|
||||||
|
|
||||||
|
#[derive(GodotConvert, Var, Export, Default, Clone)]
|
||||||
|
#[godot(via = GString)]
|
||||||
|
pub enum PlantType {
|
||||||
|
#[default] // Rust standard attribute, not godot-rust.
|
||||||
|
None,
|
||||||
|
Peashooter,
|
||||||
|
Sunflower,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(GodotClass)]
|
||||||
|
#[class(base=Node)]
|
||||||
|
struct GodotGenome {
|
||||||
|
#[export]
|
||||||
|
from_plant: PlantType,
|
||||||
|
genome: Genome,
|
||||||
|
base: Base<Node>
|
||||||
|
}
|
||||||
|
|
||||||
|
#[godot_api]
|
||||||
|
impl INode for GodotGenome {
|
||||||
|
fn init(base: Base<Node>) -> Self {
|
||||||
|
Self {
|
||||||
|
from_plant: PlantType::None,
|
||||||
|
genome: Genome::new(),
|
||||||
|
base
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
pub mod godot_genome;
|
||||||
Loading…
Add table
Add a link
Reference in a new issue