From 9739b6d40258440cef4f7664f501efa81497263b Mon Sep 17 00:00:00 2001 From: IcECreAm777 <31211782+IcECreAm777@users.noreply.github.com> Date: Sat, 16 Jul 2022 14:06:14 +0200 Subject: base implementation for the buffs they are not tested and the extra stroke is missing since we need the scoring system for it beforehand --- rust/src/buff_ball.rs | 79 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 rust/src/buff_ball.rs (limited to 'rust/src/buff_ball.rs') diff --git a/rust/src/buff_ball.rs b/rust/src/buff_ball.rs new file mode 100644 index 0000000..4b89dbb --- /dev/null +++ b/rust/src/buff_ball.rs @@ -0,0 +1,79 @@ +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) + } +} -- cgit