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_phase.rs | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 rust/src/buff_phase.rs (limited to 'rust/src/buff_phase.rs') diff --git a/rust/src/buff_phase.rs b/rust/src/buff_phase.rs new file mode 100644 index 0000000..e64508e --- /dev/null +++ b/rust/src/buff_phase.rs @@ -0,0 +1,60 @@ +use gdnative::api::*; +use gdnative::prelude::*; +use crate::buff_trait::Buff; + +struct BuffPhase { + name: String, + description: String, + rigid_body: Option>, + + wall_layer_bit: i64, +} + +impl BuffPhase { + fn new(rigid_body: Option>) -> Self { + // calculate the bit for the mask to enable/ disable collision detection + let mask_layer = 2; + let mask_bit = 2_i64.pow(mask_layer - 1); + + BuffPhase { + name: String::from("Phase"), + description: String::from("Phases through thin fences"), + rigid_body, + + wall_layer_bit: mask_bit, + } + } +} + +impl Buff for BuffPhase { + unsafe fn execute_buff(&mut self) { + match &self.rigid_body { + Some(body) => { + // actually disable the collision to the fences + let save_body = body.assume_safe(); + save_body.set_collision_mask_bit(self.wall_layer_bit, false); + }, + None => godot_warn!("Rigid body not found") + } + } + + unsafe fn revert_buff(& mut self) { + // make sure the rigid body exists + match &self.rigid_body { + Some(body) => { + // actually enable the collision again + let save_body = body.assume_safe(); + save_body.set_collision_mask_bit(self.wall_layer_bit, false); + }, + None => godot_warn!("Rigid body not found") + } + } + + fn get_name(self) -> GodotString { + GodotString::from_str(self.name) + } + + fn get_description(self) -> GodotString { + GodotString::from_str(self.description) + } +} -- cgit