This commit is contained in:
@@ -1,11 +1,26 @@
|
||||
use crate::static_data::Statistic;
|
||||
use crate::{ValueIdentifiable, ValueIdentifier};
|
||||
use std::fmt::Debug;
|
||||
use std::sync::Arc;
|
||||
|
||||
/// A nature is an attribute on a Pokemon that modifies the effective base stats on a Pokemon. They
|
||||
/// can have an increased statistic and a decreased statistic, or be neutral.
|
||||
pub trait Nature: ValueIdentifiable + Debug {
|
||||
/// The stat that should receive the increased modifier.
|
||||
fn increased_stat(&self) -> Statistic;
|
||||
|
||||
/// The stat that should receive the decreased modifier.
|
||||
fn decreased_stat(&self) -> Statistic;
|
||||
|
||||
/// Calculates the modifier for a given stat. If it's the increased stat, returns the increased
|
||||
/// modifier, if it's the decreased stat, returns the decreased modifier. Otherwise returns 1.0
|
||||
fn get_stat_modifier(&self, stat: Statistic) -> f32;
|
||||
}
|
||||
|
||||
/// A nature is an attribute on a Pokemon that modifies the effective base stats on a Pokemon. They
|
||||
/// can have an increased statistic and a decreased statistic, or be neutral.
|
||||
#[derive(Debug)]
|
||||
pub struct Nature {
|
||||
pub struct NatureImpl {
|
||||
/// A unique identifier so we know what value this is.
|
||||
identifier: ValueIdentifier,
|
||||
/// The stat that should receive the increased modifier.
|
||||
@@ -18,7 +33,7 @@ pub struct Nature {
|
||||
decrease_modifier: f32,
|
||||
}
|
||||
|
||||
impl Nature {
|
||||
impl NatureImpl {
|
||||
/// Instantiates a new statistic.
|
||||
pub fn new(
|
||||
increase_stat: Statistic,
|
||||
@@ -34,20 +49,22 @@ impl Nature {
|
||||
decrease_modifier,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
impl Nature for NatureImpl {
|
||||
/// The stat that should receive the increased modifier.
|
||||
pub fn increased_stat(&self) -> Statistic {
|
||||
fn increased_stat(&self) -> Statistic {
|
||||
self.increase_stat
|
||||
}
|
||||
|
||||
/// The stat that should receive the decreased modifier.
|
||||
pub fn decreased_stat(&self) -> Statistic {
|
||||
fn decreased_stat(&self) -> Statistic {
|
||||
self.decrease_stat
|
||||
}
|
||||
|
||||
/// Calculates the modifier for a given stat. If it's the increased stat, returns the increased
|
||||
/// modifier, if it's the decreased stat, returns the decreased modifier. Otherwise returns 1.0
|
||||
pub fn get_stat_modifier(&self, stat: Statistic) -> f32 {
|
||||
fn get_stat_modifier(&self, stat: Statistic) -> f32 {
|
||||
if stat == self.increase_stat && stat != self.decrease_stat {
|
||||
self.increase_modifier
|
||||
} else if stat == self.decrease_stat && stat != self.increase_stat {
|
||||
@@ -58,7 +75,7 @@ impl Nature {
|
||||
}
|
||||
}
|
||||
|
||||
impl ValueIdentifiable for Nature {
|
||||
impl ValueIdentifiable for NatureImpl {
|
||||
fn value_identifier(&self) -> ValueIdentifier {
|
||||
self.identifier
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user