shield specs

This commit is contained in:
ntr 2019-03-14 19:29:31 +11:00
parent 788c68c015
commit e6986d57cd
4 changed files with 50 additions and 22 deletions

View File

@ -90,7 +90,7 @@ class StatSheet extends Phaser.Scene {
this.add.text(X + WIDTH * 0.175, Y, 'Skills', TEXT.HEADER); this.add.text(X + WIDTH * 0.175, Y, 'Skills', TEXT.HEADER);
this.add.text(X + WIDTH * 0.175, Y + HEIGHT * 0.25, 'Specs', TEXT.HEADER); this.add.text(X + WIDTH * 0.175, Y + HEIGHT * 0.25, 'Specs', TEXT.HEADER);
const knownSpec = (spec, i) => { const knownSpec = (spec, i) => {
const SKILL_X = X + WIDTH * 0.21 + WIDTH * 0.125 * i; const SKILL_X = X + WIDTH * 0.21 + WIDTH * 0.125 * i;
const SKILL_Y = Y + HEIGHT * 0.4; const SKILL_Y = Y + HEIGHT * 0.4;
const itemObj = new Item(this, spec, i, SKILL_X, SKILL_Y, SKILL_WIDTH, Math.floor(SKILL_WIDTH / 2)); const itemObj = new Item(this, spec, i, SKILL_X, SKILL_Y, SKILL_WIDTH, Math.floor(SKILL_WIDTH / 2));

View File

@ -72,7 +72,7 @@ impl CrypStat {
pub fn recalculate(&mut self, specs: &Vec<Spec>) -> &mut CrypStat { pub fn recalculate(&mut self, specs: &Vec<Spec>) -> &mut CrypStat {
let specs = specs let specs = specs
.iter() .iter()
.filter(|s| s.affects() == self.stat) .filter(|s| s.affects().contains(&self.stat))
.map(|s| *s) .map(|s| *s)
.collect::<Vec<Spec>>(); .collect::<Vec<Spec>>();

View File

@ -1,38 +1,59 @@
use rand::prelude::*;
use cryp::{Stat}; use cryp::{Stat};
#[derive(Debug,Copy,Clone,Serialize,Deserialize,PartialEq)] #[derive(Debug,Copy,Clone,Serialize,Deserialize,PartialEq)]
pub enum Spec { pub enum Spec {
SpeedI, SpeedI,
HpI,
LifeI,
RedShieldI,
BlueShieldI,
LRSI,
LBSI,
RBSI,
RedDamageI, RedDamageI,
GreenDamageI, GreenDamageI,
BlueDamageI, BlueDamageI,
RedShieldI,
BlueShieldI,
} }
impl Spec { impl Spec {
pub fn affects(&self) -> Stat { pub fn affects(&self) -> Vec<Stat> {
match *self { match *self {
Spec::RedDamageI => Stat::RedDamage, Spec::RedDamageI => vec![Stat::RedDamage],
Spec::GreenDamageI => Stat::GreenDamage, Spec::GreenDamageI => vec![Stat::GreenDamage],
Spec::BlueDamageI => Stat::BlueDamage, Spec::BlueDamageI => vec![Stat::BlueDamage],
Spec::RedShieldI => Stat::RedShield, Spec::RedShieldI => vec![Stat::RedShield],
Spec::BlueShieldI => Stat::BlueShield, Spec::BlueShieldI => vec![Stat::BlueShield],
Spec::SpeedI => Stat::Speed, Spec::SpeedI => vec![Stat::Speed],
Spec::HpI => Stat::Hp, Spec::LifeI => vec![Stat::Hp],
Spec::LRSI => vec![Stat::Hp, Stat::RedShield],
Spec::LBSI => vec![Stat::Hp, Stat::BlueShield],
Spec::RBSI => vec![Stat::BlueShield, Stat::RedShield],
} }
} }
pub fn apply(&self, modified: u64, base: u64) -> u64 { pub fn apply(&self, modified: u64, base: u64) -> u64 {
let mut rng = thread_rng();
let i_min = 32;
let i_max = 64;
match *self { match *self {
Spec::RedDamageI => modified + (base * 5 / 100), Spec::RedDamageI => modified + (base * 5 / 100),
Spec::GreenDamageI => modified + (base * 5 / 100), Spec::GreenDamageI => modified + (base * 5 / 100),
Spec::BlueDamageI => modified + (base * 5 / 100), Spec::BlueDamageI => modified + (base * 5 / 100),
Spec::SpeedI => modified + (base * 5 / 100), Spec::SpeedI => modified + (base * 5 / 100),
Spec::HpI => modified + (base * 5 / 100),
Spec::RedShieldI => modified + 50, Spec::LifeI => modified + (base * 5 / 100),
Spec::BlueShieldI => modified + 50, Spec::RedShieldI => modified + rng.gen_range(i_min, i_max),
Spec::BlueShieldI => modified + rng.gen_range(i_min, i_max),
Spec::LRSI => modified + (base * 5 / 100),
Spec::LBSI => modified + (base * 5 / 100),
Spec::RBSI => modified + (base * 5 / 100),
} }
} }

View File

@ -36,7 +36,11 @@ pub enum Var {
Hp, Hp,
Speed, Speed,
HpI, LifeI,
LRSI,
LBSI,
RBSI,
RedDamageI, RedDamageI,
BlueDamageI, BlueDamageI,
GreenDamageI, GreenDamageI,
@ -141,7 +145,10 @@ impl Var {
Var::BlueDamageI => Some(Spec::BlueDamageI), Var::BlueDamageI => Some(Spec::BlueDamageI),
Var::GreenDamageI => Some(Spec::GreenDamageI), Var::GreenDamageI => Some(Spec::GreenDamageI),
Var::HpI => Some(Spec::HpI), Var::LifeI => Some(Spec::LifeI),
Var::LRSI => Some(Spec::LRSI),
Var::LBSI => Some(Spec::LBSI),
Var::RBSI => Some(Spec::RBSI),
Var::RedShieldI => Some(Spec::RedShieldI), Var::RedShieldI => Some(Spec::RedShieldI),
Var::BlueShieldI => Some(Spec::BlueShieldI), Var::BlueShieldI => Some(Spec::BlueShieldI),
@ -360,11 +367,11 @@ impl Vbox {
}, },
Var::Hp => match colour_code { Var::Hp => match colour_code {
ColourCode::RR => Var::RedShieldI, ColourCode::RR => Var::RedShieldI,
ColourCode::GG => Var::HpI, ColourCode::GG => Var::LifeI,
ColourCode::BB => Var::BlueShieldI, ColourCode::BB => Var::BlueShieldI,
ColourCode::RG => return Err(err_msg("unhandled skill combo")), ColourCode::RG => Var::LRSI,
ColourCode::GB => return Err(err_msg("unhandled skill combo")), ColourCode::GB => Var::LBSI,
ColourCode::BR => return Err(err_msg("unhandled skill combo")), ColourCode::BR => Var::RBSI,
}, },
_ => panic!("wrong base {:?}", base), _ => panic!("wrong base {:?}", base),