More work on switching battle data to interior mutability, instead of exterior mutability.
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2022-06-19 12:07:54 +02:00
parent 2e19005a30
commit 715f16e2b8
14 changed files with 256 additions and 280 deletions

View File

@@ -5,57 +5,59 @@ use crate::dynamic_data::script_handling::script::ScriptContainer;
use crate::dynamic_data::script_handling::{ScriptSource, ScriptSourceData, ScriptWrapper};
use crate::static_data::MoveData;
use crate::{PkmnResult, PokemonError};
use atomic::Atomic;
use parking_lot::RwLock;
use std::ops::Deref;
use std::sync::atomic::{AtomicBool, AtomicU32, AtomicU8, Ordering};
use std::sync::Arc;
#[derive(Default, Debug)]
pub struct HitData {
critical: bool,
base_power: u8,
effectiveness: f32,
damage: u32,
move_type: u8,
has_failed: bool,
critical: AtomicBool,
base_power: AtomicU8,
effectiveness: Atomic<f32>,
damage: AtomicU32,
move_type: AtomicU8,
has_failed: AtomicBool,
}
impl HitData {
pub fn is_critical(&self) -> bool {
self.critical
self.critical.load(Ordering::Relaxed)
}
pub fn base_power(&self) -> u8 {
self.base_power
self.base_power.load(Ordering::Relaxed)
}
pub fn effectiveness(&self) -> f32 {
self.effectiveness
self.effectiveness.load(Ordering::Relaxed)
}
pub fn damage(&self) -> u32 {
self.damage
self.damage.load(Ordering::Relaxed)
}
pub fn move_type(&self) -> u8 {
self.move_type
self.move_type.load(Ordering::Relaxed)
}
pub fn has_failed(&self) -> bool {
self.has_failed
self.has_failed.load(Ordering::Relaxed)
}
pub fn set_critical(&mut self, value: bool) {
self.critical = value;
pub fn set_critical(&self, value: bool) {
self.critical.store(value, Ordering::SeqCst);
}
pub fn set_base_power(&mut self, value: u8) {
self.base_power = value;
pub fn set_base_power(&self, value: u8) {
self.base_power.store(value, Ordering::SeqCst);
}
pub fn set_effectiveness(&mut self, value: f32) {
self.effectiveness = value;
pub fn set_effectiveness(&self, value: f32) {
self.effectiveness.store(value, Ordering::SeqCst);
}
pub fn set_damage(&mut self, value: u32) {
self.damage = value;
pub fn set_damage(&self, value: u32) {
self.damage.store(value, Ordering::SeqCst);
}
pub fn set_move_type(&mut self, value: u8) {
self.move_type = value;
pub fn set_move_type(&self, value: u8) {
self.move_type.store(value, Ordering::SeqCst);
}
pub fn fail(&mut self) {
self.has_failed = true;
pub fn fail(&self) {
self.has_failed.store(true, Ordering::SeqCst);
}
}
@@ -156,9 +158,6 @@ impl<'own, 'battle, 'library> ExecutingMove<'own, 'battle, 'library> {
pub(crate) fn get_hit_from_raw_index(&self, index: usize) -> &HitData {
&self.hits[index]
}
pub(crate) fn get_hit_from_raw_index_mut(&mut self, index: usize) -> &mut HitData {
&mut self.hits[index]
}
}
impl<'own, 'battle, 'library> ScriptSource<'own> for ExecutingMove<'own, 'battle, 'library> {