simplify spec and skill var checks

This commit is contained in:
ntr 2019-03-14 18:03:21 +11:00
parent cf3dbaa6e9
commit 9d02499c5a
2 changed files with 56 additions and 82 deletions

View File

@ -63,7 +63,7 @@ class StatSheet extends Phaser.Scene {
const crypStat = (stat, i) => {
const STAT_X = X;
const STAT_Y = Y + (i + 2) * TEXT_MARGIN;
this.add.text(STAT_X, STAT_Y, `${stat.stat}: ${stat.value}`, TEXT.NORMAL);
this.add.text(STAT_X, STAT_Y, `${stat.stat}: ${stat.base} -> ${stat.value}`, TEXT.NORMAL);
};
const CRYP_STATS = [

View File

@ -35,7 +35,7 @@ pub enum Var {
Damage,
Protection,
Speed,
Hp,
Stamina,
StaminaI,
RedDamageI,
@ -94,84 +94,57 @@ impl Var {
}
}
fn effect(&self) -> Result<VarEffect, Error> {
fn effect(&self) -> Option<VarEffect> {
if let Some(_skill) = self.skill() {
return Some(VarEffect::Skill);
}
if let Some(_spec) = self.spec() {
return Some(VarEffect::Spec);
}
return None;
}
fn skill(&self) -> Option<Skill> {
match self {
Var::Amplify |
Var::Banish |
Var::Blast |
Var::Curse |
Var::Empower |
Var::Haste |
Var::Heal |
Var::Hex |
Var::Parry |
Var::Purge |
Var::Purify |
// Var::Reflect |
Var::Ruin |
Var::Shield |
Var::Silence |
Var::Slay |
Var::Slow |
Var::Snare |
Var::Strangle |
Var::Strike |
// Var::Clutch |
// Var::Taunt |
Var::Throw |
// Var::Toxic |
Var::Triage => Ok(VarEffect::Skill),
Var::StaminaI |
Var::RedShieldI |
Var::BlueShieldI |
Var::SpeedI => Ok(VarEffect::Spec),
_ => Err(err_msg("var has no effect on cryps"))
Var::Amplify => Some(Skill::Amplify),
Var::Banish => Some(Skill::Banish),
Var::Blast => Some(Skill::Blast),
Var::Curse => Some(Skill::Curse),
Var::Empower => Some(Skill::Empower),
Var::Haste => Some(Skill::Haste),
Var::Heal => Some(Skill::Heal),
Var::Hex => Some(Skill::Hex),
Var::Parry => Some(Skill::Parry),
Var::Purge => Some(Skill::Purge),
Var::Purify => Some(Skill::Purify),
// Var::Reflect => Some(Skill::Reflect),
Var::Ruin => Some(Skill::Ruin),
Var::Shield => Some(Skill::Shield),
Var::Silence => Some(Skill::Silence),
Var::Slay => Some(Skill::Slay),
Var::Slow => Some(Skill::Slow),
Var::Snare => Some(Skill::Snare),
Var::Strangle => Some(Skill::Strangle),
Var::Strike => Some(Skill::Strike),
// Var::Clutch => Some(Skill::Clutch),
// Var::Taunt => Some(Skill::Taunt),
Var::Throw => Some(Skill::Throw),
// Var::Toxic => Some(Skill::Toxic),
Var::Triage => Some(Skill::Triage),
_ => None,
}
}
fn skill(&self) -> Skill {
match self {
Var::Amplify => Skill::Amplify,
Var::Banish => Skill::Banish,
Var::Blast => Skill::Blast,
Var::Curse => Skill::Curse,
Var::Empower => Skill::Empower,
Var::Haste => Skill::Haste,
Var::Heal => Skill::Heal,
Var::Hex => Skill::Hex,
Var::Parry => Skill::Parry,
Var::Purge => Skill::Purge,
Var::Purify => Skill::Purify,
// Var::Reflect => Skill::Reflect,
Var::Ruin => Skill::Ruin,
Var::Shield => Skill::Shield,
Var::Silence => Skill::Silence,
Var::Slay => Skill::Slay,
Var::Slow => Skill::Slow,
Var::Snare => Skill::Snare,
Var::Strangle => Skill::Strangle,
Var::Strike => Skill::Strike,
// Var::Clutch => Skill::Clutch,
// Var::Taunt => Skill::Taunt,
Var::Throw => Skill::Throw,
// Var::Toxic => Skill::Toxic,
Var::Triage => Skill::Triage,
_ => panic!("not a skill var"),
}
}
fn spec(&self) -> Spec {
fn spec(&self) -> Option<Spec> {
match *self {
Var::StaminaI => Spec::StaminaI,
Var::SpeedI => Spec::SpeedI,
Var::RedDamageI => Spec::RedDamageI,
Var::BlueDamageI => Spec::BlueDamageI,
Var::GreenDamageI => Spec::GreenDamageI,
Var::RedShieldI => Spec::RedShieldI,
Var::BlueShieldI => Spec::BlueShieldI,
_ => panic!("not a spec var"),
Var::StaminaI => Some(Spec::StaminaI),
Var::SpeedI => Some(Spec::SpeedI),
Var::RedDamageI => Some(Spec::RedDamageI),
Var::BlueDamageI => Some(Spec::BlueDamageI),
Var::GreenDamageI => Some(Spec::GreenDamageI),
Var::RedShieldI => Some(Spec::RedShieldI),
Var::BlueShieldI => Some(Spec::BlueShieldI),
_ => None,
}
}
}
@ -243,7 +216,7 @@ impl Vbox {
(Var::Damage, 1),
(Var::Protection, 1),
(Var::Speed, 1),
(Var::Hp, 1),
(Var::Stamina, 1),
];
let mut rng = thread_rng();
@ -387,7 +360,7 @@ impl Vbox {
},
Var::Protection => match colour_code {
ColourCode::RR => Var::RedShieldI,
ColourCode::GG => return Err(err_msg("unhandled skill combo")),
ColourCode::GG => Var::StaminaI,
ColourCode::BB => Var::BlueShieldI,
ColourCode::RG => return Err(err_msg("unhandled skill combo")),
ColourCode::GB => return Err(err_msg("unhandled skill combo")),
@ -432,9 +405,9 @@ pub fn vbox_apply(params: VboxApplyParams, tx: &mut Transaction, account: &Accou
let mut player = player_get(tx, account.id, params.instance_id)?;
let var = player.vbox.bound.remove(params.index);
match var.effect()? {
VarEffect::Skill => {
let skill = var.skill();
match var.effect() {
Some(VarEffect::Skill) => {
let skill = var.skill().ok_or(format_err!("var {:?} has no associated skill", var))?;
let cryp = player.cryp_get(params.cryp_id)?;
// done here because i teach them a tonne of skills for tests
let max_skills = 4;
@ -444,12 +417,13 @@ pub fn vbox_apply(params: VboxApplyParams, tx: &mut Transaction, account: &Accou
cryp.learn_mut(skill);
},
VarEffect::Spec => {
let spec = var.spec();
Some(VarEffect::Spec) => {
let spec = var.spec().ok_or(format_err!("var {:?} has no associated spec", var))?;
let cryp = player.cryp_get(params.cryp_id)?;
cryp.spec_add(spec)?;
},
None => return Err(err_msg("var has no effect on cryps")),
}
return player_update(tx, player, false);