Loads more work on battling, initial stretch to run a turn done.
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2022-06-16 17:59:33 +02:00
parent a33369afcc
commit ff541b0696
50 changed files with 105871 additions and 497 deletions

View File

@@ -1,8 +1,13 @@
use crate::static_data::SecondaryEffect;
use crate::StringKey;
use std::collections::HashSet;
use hashbrown::HashSet;
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
#[derive(Copy, Clone, PartialEq, Debug)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "serde", serde(rename_all = "snake_case"))]
pub enum MoveCategory {
Physical = 0,
Special = 1,
@@ -10,6 +15,7 @@ pub enum MoveCategory {
}
#[derive(Copy, Clone, PartialEq, Debug)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub enum MoveTarget {
Adjacent = 0,
AdjacentAlly,
@@ -25,6 +31,7 @@ pub enum MoveTarget {
Any,
RandomOpponent,
#[cfg_attr(feature = "serde", serde(rename = "Self"))]
SelfUse,
}
@@ -39,7 +46,7 @@ pub struct MoveData {
target: MoveTarget,
priority: i8,
secondary_effect: SecondaryEffect,
flags: HashSet<String>,
flags: HashSet<StringKey>,
}
impl MoveData {
@@ -53,7 +60,7 @@ impl MoveData {
target: MoveTarget,
priority: i8,
secondary_effect: SecondaryEffect,
flags: HashSet<String>,
flags: HashSet<StringKey>,
) -> MoveData {
MoveData {
name: name.clone(),
@@ -99,7 +106,11 @@ impl MoveData {
&self.secondary_effect
}
pub fn has_flag(&self, key: &str) -> bool {
pub fn has_secondary_effect(&self) -> bool {
self.secondary_effect.effect_name() != &StringKey::empty()
}
pub fn has_flag(&self, key: &StringKey) -> bool {
self.flags.contains(key)
}
}

View File

@@ -1,3 +1,5 @@
use crate::StringKey;
#[derive(PartialEq, Debug)]
pub enum EffectParameter {
Bool(bool),
@@ -9,7 +11,7 @@ pub enum EffectParameter {
#[derive(PartialEq, Debug)]
pub struct SecondaryEffect {
chance: f32,
effect_name: String,
effect_name: StringKey,
parameters: Vec<EffectParameter>,
}
@@ -17,15 +19,11 @@ impl SecondaryEffect {
pub fn empty() -> SecondaryEffect {
SecondaryEffect {
chance: 0.0,
effect_name: "".to_string(),
effect_name: StringKey::empty(),
parameters: vec![],
}
}
pub fn new(
chance: f32,
effect_name: String,
parameters: Vec<EffectParameter>,
) -> SecondaryEffect {
pub fn new(chance: f32, effect_name: StringKey, parameters: Vec<EffectParameter>) -> SecondaryEffect {
SecondaryEffect {
chance,
effect_name,
@@ -36,7 +34,7 @@ impl SecondaryEffect {
pub fn chance(&self) -> f32 {
self.chance
}
pub fn effect_name(&self) -> &str {
pub fn effect_name(&self) -> &StringKey {
&self.effect_name
}
pub fn parameters(&self) -> &Vec<EffectParameter> {
@@ -53,11 +51,11 @@ mod tests {
fn create_secondary_effect() {
let empty = SecondaryEffect::empty();
assert_approx_eq!(empty.chance(), 0.0);
assert_eq!(empty.effect_name(), "");
assert_eq!(empty.effect_name(), &"".into());
assert_eq!(empty.parameters().len(), 0);
let set = SecondaryEffect::new(50.0, "foo".to_string(), Vec::new());
let set = SecondaryEffect::new(50.0, "foo".into(), Vec::new());
assert_approx_eq!(set.chance(), 50.0);
assert_eq!(set.effect_name(), "foo");
assert_eq!(set.effect_name(), &"foo".into());
assert_eq!(set.parameters().len(), 0);
}
}