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,
|
||||
Head,
|
||||
Face,
|
||||
Mouth,
|
||||
Eyes,
|
||||
Leaf,
|
||||
}
|
||||
|
||||
|
|
@ -17,6 +19,8 @@ impl Display for GenePlace {
|
|||
GenePlace::Head => "Head",
|
||||
GenePlace::Face => "Face",
|
||||
GenePlace::Leaf => "Leaf",
|
||||
GenePlace::Eyes => "Eyes",
|
||||
GenePlace::Mouth => "Mouth",
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
@ -29,6 +33,8 @@ impl GenePlace {
|
|||
GenePlace::Head => GenePlace::Head,
|
||||
GenePlace::Face => GenePlace::Face,
|
||||
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;
|
||||
|
||||
#[derive(Clone,PartialEq,Eq)]
|
||||
#[derive(Default,Clone,PartialEq,Eq)]
|
||||
pub struct Genome {
|
||||
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::Head,GeneType::random_distribution()),
|
||||
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![
|
||||
(0,1),
|
||||
(1,2),
|
||||
(2,3),
|
||||
(2,4)
|
||||
(2,4),
|
||||
(2,5),
|
||||
]).unwrap()
|
||||
}
|
||||
|
||||
|
|
@ -20,11 +22,13 @@ pub fn sunflower_template() -> Genome {
|
|||
Gene::new(GeneSource::Sunflower,GenePlace::Root, 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::Face, GeneType::consumer(|_|{})),
|
||||
Gene::new(GeneSource::Sunflower,GenePlace::Eyes, GeneType::Structural),
|
||||
Gene::new(GeneSource::Sunflower,GenePlace::Mouth, GeneType::consumer(|_|{})),
|
||||
], vec![
|
||||
(0,1),
|
||||
(1,2),
|
||||
(2,3),
|
||||
(2,4),
|
||||
]).unwrap()
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,2 +1,11 @@
|
|||
use godot::prelude::*;
|
||||
|
||||
pub mod genetics;
|
||||
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