use gdnative::api::*; use gdnative::prelude::*; use crate::buff_trait::Buff; struct BuffBall { name: String, description: String, die_body: Option>, sphere_body: Option> } impl BuffBall { fn new(die_body: Option>, sphere_body: Option>) -> Self { BuffBall { name: String::from("Ball"), description: String::from("Roll the dice"), die_body, sphere_body } } } impl Buff for BuffBall { unsafe fn execute_buff(&mut self) { // make sure the sphere rigid body exists match &self.sphere_body { Some(sphere) => { // make sure the dice rigid body exists match &self.die_body { Some(die) => { // get the safe references from the ref<> let save_sphere = sphere.assume_safe(); let save_die = die.assume_safe(); // set the properties of the rigid bodies save_die.set_process(false); save_sphere.set_process(true); save_sphere.show(); }, None => godot_warn!("Die body not assigned") } }, None => godot_warn!("Sphere body not assigned") } } unsafe fn revert_buff(&mut self) { // make sure the sphere rigid body exists match &self.sphere_body { Some(sphere) => { // make sure the dice rigid body exists match &self.die_body { Some(die) => { // get the safe references from the ref<> let save_sphere = sphere.assume_safe(); let save_die = die.assume_safe(); // set the properties of the rigid bodies save_die.set_process(true); save_sphere.set_process(false); save_sphere.hide(); }, None => godot_warn!("Die body not assigned") } }, None => godot_warn!("Sphere body not assigned") } } fn get_name(self) -> GodotString { GodotString::from_str(self.name) } fn get_description(self) -> GodotString { GodotString::from_str(self.description) } }