use gdnative::{export::hint::EnumHint, prelude::*}; use lazy_static::lazy_static; use std::{string::ToString, vec}; use strum::IntoEnumIterator; use strum_macros::{Display, EnumIter}; use tokio::sync::RwLock; lazy_static! { // static ref STATE: RwLock = RwLock::new(Vector3::new(1.0, 2.0, 3.0)); } #[derive(Debug, EnumIter, Display, FromVariant, ToVariant)] enum Terrain { Earth, Rock, Sand, Water, Air, } #[derive(NativeClass)] #[inherit(Node)] pub struct StateServer; #[methods] impl StateServer { fn new(_owner: &Node) -> Self { StateServer } #[export] fn _ready(&self, _owner: &Node) { // godot_print!("hello, state") } #[export] fn terrain_types(&self, _owner: &Node) -> EnumHint{ let mut hints = vec![]; for terrain in Terrain::iter() { hints.push(terrain.to_string()); } EnumHint::new(hints) } }