diff --git a/WORKLOG.md b/WORKLOG.md
index 9387fab2..12b2dd5b 100644
--- a/WORKLOG.md
+++ b/WORKLOG.md
@@ -33,6 +33,9 @@
## NOW
*CLIENT*
+* fix mobile menu
+ * make fullscreen
+ * disappear on touch
*SERVER*
diff --git a/client/src/components/info.component.jsx b/client/src/components/info.component.jsx
index 70fb688a..d0c32d28 100644
--- a/client/src/components/info.component.jsx
+++ b/client/src/components/info.component.jsx
@@ -2,10 +2,9 @@ const preact = require('preact');
const range = require('lodash/range');
const { INFO } = require('./../constants');
-const { SPECS } = require('./../utils');
const { COLOUR_ICONS, convertItem } = require('../utils');
-function Info(args) {
+function InfoComponent(args) {
const {
info,
itemInfo,
@@ -24,16 +23,6 @@ function Info(args) {
const isSkill = fullInfo.skill;
const isSpec = fullInfo.spec;
- let red = 0;
- let blue = 0;
- let green = 0;
- player.constructs.forEach(construct => {
- red += construct.colours.red;
- blue += construct.colours.blue;
- green += construct.colours.green;
- });
- const teamColours = { red, blue, green };
-
if (isSkill) {
return (
@@ -44,8 +33,18 @@ function Info(args) {
}
if (isSpec) {
- const breaks = SPECS[info].thresholds;
- const colourReqs = SPECS[info].colours || [];
+ let red = 0;
+ let blue = 0;
+ let green = 0;
+ player.constructs.forEach(construct => {
+ red += construct.colours.red;
+ blue += construct.colours.blue;
+ green += construct.colours.green;
+ });
+ const teamColours = { red, blue, green };
+
+ const breaks = fullInfo.values;
+ const colourReqs = fullInfo.values || [];
const thresholdEl = colourReqs.map((c, i) => {
const numIcons = Math.max(...breaks);
@@ -142,4 +141,4 @@ function Info(args) {
);
}
-module.exports = Info;
+module.exports = InfoComponent;
diff --git a/client/src/components/instance.equip.jsx b/client/src/components/instance.equip.jsx
index fa5f8813..03903492 100644
--- a/client/src/components/instance.equip.jsx
+++ b/client/src/components/instance.equip.jsx
@@ -4,7 +4,7 @@ const range = require('lodash/range');
const actions = require('../actions');
const shapes = require('./shapes');
-const { convertItem, SPECS } = require('./../utils');
+const { convertItem } = require('./../utils');
const addState = connect(
function receiveState(state) {
@@ -103,11 +103,12 @@ function Equipment(props) {
const specs = range(0, 9).map(i => {
const item = convertItem(vbox.bound[i]);
- if (specList.includes(item)) {
+ const fullInfo = itemInfo.items.find(i => i.item === item);
+ if (fullInfo.spec) {
return (
skillClick(e, i)} onMouseOver={e => hoverInfo(e, item)} >
- {SPECS[item].svg(`stat-icon ${SPECS[item].colour}`)}
- {SPECS[item].caption}
+ {shapes[fullInfo.values.shape.toLowerCase()](`stat-icon ${itemInfo[item].colour}`)}
+ {item}
);
} return false;
diff --git a/client/src/socket.jsx b/client/src/socket.jsx
index 347b24aa..6597cdfe 100644
--- a/client/src/socket.jsx
+++ b/client/src/socket.jsx
@@ -300,15 +300,15 @@ function createSocket(events) {
position: 'bottomCenter',
});
+ sendPing();
+ sendItemInfo();
+
if (account) {
events.setAccount(account);
sendAccountInstances();
sendAccountConstructs();
- setTimeout(sendItemInfo, 2000);
}
- sendPing();
-
return true;
});
diff --git a/client/src/utils.jsx b/client/src/utils.jsx
index dc8ebc98..879c8111 100644
--- a/client/src/utils.jsx
+++ b/client/src/utils.jsx
@@ -167,135 +167,6 @@ const STATS = {
},
};
-const SPECS = {
- Life: {
- colour: 'white',
- caption: 'Life',
- svg: shapes.square
- },
- GreenLifeI: {
- colour: 'green',
- caption: 'Life',
- thresholds: [5, 10, 20],
- svg: shapes.square,
- },
- RedLifeI: {
- colour: 'red',
- caption: 'Life',
- thresholds: [2, 5, 10],
- svg: shapes.square,
- },
- BlueLifeI: {
- colour: 'blue',
- caption: 'Life',
- thresholds: [2, 5, 10],
- svg: shapes.square,
- },
- GRLI: {
- colour: 'yellow',
- caption: 'Life',
- thresholds: [2, 5, 10],
- svg: shapes.square
- },
- GBLI: {
- colour: 'cyan',
- caption: 'Life',
- thresholds: [2, 5, 10],
- svg: shapes.square
- },
- RBLI: {
- colour: 'purple',
- caption: 'Life',
- thresholds: [2, 5, 10],
- svg: shapes.square
- },
-
- Power: {
- colour: 'white',
- caption: 'Power',
- thresholds: [],
- svg: shapes.circle
- },
- RedPowerI: {
- colour: 'red',
- caption: 'PowerI',
- thresholds: [5, 10, 20],
- svg: shapes.circle
- },
- BluePowerI: {
- colour: 'blue',
- caption: 'PowerI',
- thresholds: [5, 10, 20],
- svg: shapes.circle
- },
- GreenPowerI: {
- colour: 'green',
- caption: 'PowerI',
- thresholds: [5, 10, 20],
- svg: shapes.circle,
- },
- GRDI: {
- colour: 'yellow',
- caption: 'PowerI',
- thresholds: [2, 5, 10],
- svg: shapes.circle
- },
- GBDI: {
- colour: 'cyan',
- caption: 'PowerI',
- thresholds: [2, 5, 10],
- svg: shapes.circle,
- },
- RBDI: {
- colour: 'purple',
- caption: 'PowerI',
- thresholds: [2, 5, 10],
- svg: shapes.circle,
- },
-
- Speed: {
- colour: 'white',
- caption: 'Speed',
- svg: shapes.triangle,
- },
- RedSpeedI: {
- colour: 'red',
- caption: 'Speed',
- thresholds: [5, 10, 20],
- svg: shapes.triangle,
- },
- BlueSpeedI: {
- colour: 'blue',
- caption: 'Speed',
- thresholds: [2, 5, 10],
- svg: shapes.triangle,
- },
- GreenSpeedI: {
- colour: 'green',
- caption: 'Speed',
- thresholds: [2, 5, 10],
- svg: shapes.triangle,
- },
- GRSpeedI: {
- colour: 'yellow',
- caption: 'Speed',
- thresholds: [2, 5, 10],
- svg: shapes.triangle,
- },
- GBSpeedI: {
- colour: 'cyan',
- caption: 'Speed',
- thresholds: [2, 5, 10],
- svg: shapes.triangle,
- },
- RBSpeedI: {
- colour: 'purple',
- caption: 'Speed',
- thresholds: [2, 5, 10],
- svg: shapes.triangle,
- },
-
-};
const COLOUR_ICONS = {
red: { colour: 'red', caption: 'red', svg: shapes.square },
@@ -599,6 +470,5 @@ module.exports = {
resoConstructHealth,
NULL_UUID,
STATS,
- SPECS,
COLOUR_ICONS,
};
diff --git a/server/src/item.rs b/server/src/item.rs
index fb8f550c..a5f3f0de 100644
--- a/server/src/item.rs
+++ b/server/src/item.rs
@@ -1,5 +1,5 @@
use skill::{Skill, Colour};
-use spec::{Spec};
+use spec::{Spec, SpecValues};
use construct::{Colours};
#[derive(Debug,Copy,Clone,Serialize,Deserialize,PartialEq,PartialOrd,Ord,Eq)]
@@ -26,7 +26,7 @@ pub enum Item {
LifeGGI,
LifeRRI,
LifeBBI,
- LifeGRI,
+ LifeRGI,
LifeGBI,
LifeRBI,
@@ -34,7 +34,7 @@ pub enum Item {
PowerRRI,
PowerBBI,
PowerGGI,
- PowerGRI,
+ PowerRGI,
PowerGBI,
PowerRBI,
@@ -42,7 +42,7 @@ pub enum Item {
SpeedRRI,
SpeedBBI,
SpeedGGI,
- SpeedGRI,
+ SpeedRGI,
SpeedGBI,
SpeedRBI,
@@ -350,7 +350,7 @@ impl Item {
Item::SpeedRRI => Some(Spec::SpeedRRI),
Item::SpeedBBI => Some(Spec::SpeedBBI),
Item::SpeedGGI => Some(Spec::SpeedGGI),
- Item::SpeedGRI => Some(Spec::SpeedGRI),
+ Item::SpeedRGI => Some(Spec::SpeedRGI),
Item::SpeedGBI => Some(Spec::SpeedGBI),
Item::SpeedRBI => Some(Spec::SpeedRBI),
@@ -358,12 +358,12 @@ impl Item {
Item::PowerRRI => Some(Spec::PowerRRI),
Item::PowerBBI => Some(Spec::PowerBBI),
Item::PowerGGI => Some(Spec::PowerGGI),
- Item::PowerGRI => Some(Spec::PowerGRI),
+ Item::PowerRGI => Some(Spec::PowerRGI),
Item::PowerGBI => Some(Spec::PowerGBI),
Item::PowerRBI => Some(Spec::PowerRBI),
Item::Life => Some(Spec::Life),
- Item::LifeGRI => Some(Spec::LifeGRI),
+ Item::LifeRGI => Some(Spec::LifeRGI),
Item::LifeGBI => Some(Spec::LifeGBI),
Item::LifeRBI => Some(Spec::LifeRBI),
Item::LifeGGI => Some(Spec::LifeGGI),
@@ -418,7 +418,7 @@ impl Item {
RedDamage dealt to your construct reduces RedLife before GreenLife."),
Item::LifeBBI => format!("Increases CONSTRUCT BlueLife.
BlueDamage dealt to your construct reduces BlueLife before GreenLife."),
- Item::LifeGRI => format!("Increases CONSTRUCT GreenLife + RedLife"),
+ Item::LifeRGI => format!("Increases CONSTRUCT GreenLife + RedLife"),
Item::LifeGBI => format!("Increases CONSTRUCT GreenLife + BlueLife"),
Item::LifeRBI => format!("Increases CONSTRUCT RedLife + BlueLife"),
@@ -426,7 +426,7 @@ impl Item {
Item::PowerRRI => format!("Increases CONSTRUCT RedPower."),
Item::PowerBBI => format!("Increases CONSTRUCT BluePower."),
Item::PowerGGI => format!("Increases CONSTRUCT GreenPower."),
- Item::PowerGRI => format!("Increases CONSTRUCT GreenPower + RedPower."),
+ Item::PowerRGI => format!("Increases CONSTRUCT GreenPower + RedPower."),
Item::PowerGBI => format!("Increases CONSTRUCT GreenPower + BluePower."),
Item::PowerRBI => format!("Increases CONSTRUCT RedPower + BluePower."),
@@ -434,7 +434,7 @@ impl Item {
Item::SpeedRRI => format!("Increases CONSTRUCT SPEED and provides COLOUR BONUSES"),
Item::SpeedBBI => format!("Increases CONSTRUCT SPEED and provides COLOUR BONUSES"),
Item::SpeedGGI => format!("Increases CONSTRUCT SPEED and provides COLOUR BONUSES"),
- Item::SpeedGRI => format!("Increases CONSTRUCT SPEED and provides COLOUR BONUSES"),
+ Item::SpeedRGI => format!("Increases CONSTRUCT SPEED and provides COLOUR BONUSES"),
Item::SpeedGBI => format!("Increases CONSTRUCT SPEED and provides COLOUR BONUSES"),
Item::SpeedRBI => format!("Increases CONSTRUCT SPEED and provides COLOUR BONUSES"),
@@ -462,7 +462,7 @@ impl Item {
self.into_skill().unwrap().multiplier()),
Item::ClutchI |
- Item::ClutchII |
+ Item::ClutchII |
Item::ClutchIII => format!("Construct cannot be KO'd while active. Additionally provides immunity to disables."),
Item::CorruptI |
@@ -482,7 +482,7 @@ impl Item {
self.into_skill().unwrap().effect().first().unwrap().get_duration()),
Item::DecayI |
- Item::DecayII |
+ Item::DecayII |
Item::DecayIII => format!(
"Reduces healing taken by {:?}% and deals blue damage {:?}% blue power each turn. Lasts {:?}T",
100 - self.into_skill().unwrap().effect().first().unwrap().get_multiplier(),
@@ -513,7 +513,7 @@ impl Item {
Item::HexI |
Item::HexII |
Item::HexIII => format!("Blue based skill that applies Hex for {:?}T. \
- Hexed targets cannot cast any skills.",
+ Hexed targets cannot cast any skills.",
self.into_skill().unwrap().effect().first().unwrap().get_duration()),
Item::ImpurityI |
@@ -526,7 +526,7 @@ impl Item {
self.into_skill().unwrap().effect().first().unwrap().get_duration()),
Item::InvertI |
- Item::InvertII |
+ Item::InvertII |
Item::InvertIII => format!(
"Reverse healing into damage and damage into healing.
Any excess red or blue damage is converted into shield recharge."),
@@ -557,7 +557,7 @@ impl Item {
self.into_skill().unwrap().effect().first().unwrap().get_duration()),
Item::RechargeI |
- Item::RechargeII |
+ Item::RechargeII |
Item::RechargeIII => format!(
"Recharge Red and Blue Life based on {:?} RedPower and BluePower",
self.into_skill().unwrap().multiplier()),
@@ -567,7 +567,7 @@ impl Item {
Item::RuinIII => format!(
"Team wide Stun for {:?}T. Stunned constructs are unable to cast skills.",
self.into_skill().unwrap().effect().first().unwrap().get_duration()),
-
+
Item::ScatterI |
Item::ScatterII |
Item::ScatterIII => format!(
@@ -637,7 +637,7 @@ impl Item {
"Stun the target for {:?}T and applies Vulnerable increasing RedDamage taken by {:?}% for {:?}T",
self.into_skill().unwrap().effect().first().unwrap().get_duration(),
- self.into_skill().unwrap().effect().first().unwrap().get_multiplier() - 100,
+ self.into_skill().unwrap().effect().last().unwrap().get_multiplier() - 100,
self.into_skill().unwrap().effect().last().unwrap().get_duration()),
Item::TriageI |
@@ -662,15 +662,15 @@ impl Item {
Item::ScatterI => vec![Item::Buff, Item::Blue, Item::Blue],
Item::ScatterII => vec![Item::ScatterI, Item::ScatterI, Item::ScatterI],
Item::ScatterIII => vec![Item::ScatterIII, Item::ScatterIII, Item::ScatterIII],
-
+
Item::HasteI => vec![Item::Buff, Item::Red, Item::Green],
Item::HasteII => vec![Item::HasteI, Item::HasteI, Item::HasteI],
Item::HasteIII => vec![Item::HasteII, Item::HasteII, Item::HasteII],
Item::ImpurityI => vec![Item::Buff, Item::Green, Item::Blue],
Item::ImpurityII => vec![Item::ImpurityI, Item::ImpurityI, Item::ImpurityI],
Item::ImpurityIII => vec![Item::ImpurityII, Item::ImpurityII, Item::ImpurityII],
- Item::AmplifyI => vec![Item::Buff, Item::Red, Item::Blue],
- Item::AmplifyII => vec![Item::AmplifyI, Item::AmplifyI, Item::AmplifyI],
+ Item::AmplifyI => vec![Item::Buff, Item::Red, Item::Blue],
+ Item::AmplifyII => vec![Item::AmplifyI, Item::AmplifyI, Item::AmplifyI],
Item::AmplifyIII => vec![Item::AmplifyII, Item::AmplifyII, Item::AmplifyII],
Item::SnareI => vec![Item::Debuff, Item::Red, Item::Red],
@@ -752,21 +752,21 @@ impl Item {
Item::PowerRRI => vec![Item::Power, Item::Red, Item::Red],
Item::PowerGGI => vec![Item::Power, Item::Green, Item::Green],
Item::PowerBBI => vec![Item::Power, Item::Blue, Item::Blue],
- Item::PowerGRI => vec![Item::Power, Item::Red, Item::Green],
+ Item::PowerRGI => vec![Item::Power, Item::Red, Item::Green],
Item::PowerGBI => vec![Item::Power, Item::Green, Item::Blue],
Item::PowerRBI => vec![Item::Power, Item::Red, Item::Blue],
Item::LifeRRI => vec![Item::Life, Item::Red, Item::Red],
Item::LifeGGI => vec![Item::Life, Item::Green, Item::Green],
Item::LifeBBI => vec![Item::Life, Item::Blue, Item::Blue],
- Item::LifeGRI => vec![Item::Life, Item::Red, Item::Green],
+ Item::LifeRGI => vec![Item::Life, Item::Red, Item::Green],
Item::LifeGBI => vec![Item::Life, Item::Green, Item::Blue],
Item::LifeRBI => vec![Item::Life, Item::Red, Item::Blue],
Item::SpeedRRI => vec![Item::Speed, Item::Red, Item::Red],
Item::SpeedGGI => vec![Item::Speed, Item::Green, Item::Green],
Item::SpeedBBI => vec![Item::Speed, Item::Blue, Item::Blue],
- Item::SpeedGRI => vec![Item::Speed, Item::Red, Item::Green],
+ Item::SpeedRGI => vec![Item::Speed, Item::Red, Item::Green],
Item::SpeedGBI => vec![Item::Speed, Item::Green, Item::Blue],
Item::SpeedRBI => vec![Item::Speed, Item::Red, Item::Blue],
@@ -894,7 +894,7 @@ impl From for Item {
Spec::SpeedRRI => Item::SpeedRRI,
Spec::SpeedBBI => Item::SpeedBBI,
Spec::SpeedGGI => Item::SpeedGGI,
- Spec::SpeedGRI => Item::SpeedGRI,
+ Spec::SpeedRGI => Item::SpeedRGI,
Spec::SpeedGBI => Item::SpeedGBI,
Spec::SpeedRBI => Item::SpeedRBI,
@@ -902,12 +902,12 @@ impl From for Item {
Spec::PowerRRI => Item::PowerRRI,
Spec::PowerBBI => Item::PowerBBI,
Spec::PowerGGI => Item::PowerGGI,
- Spec::PowerGRI => Item::PowerGRI,
+ Spec::PowerRGI => Item::PowerRGI,
Spec::PowerGBI => Item::PowerGBI,
Spec::PowerRBI => Item::PowerRBI,
Spec::Life => Item::Life,
- Spec::LifeGRI => Item::LifeGRI,
+ Spec::LifeRGI => Item::LifeRGI,
Spec::LifeGBI => Item::LifeGBI,
Spec::LifeRBI => Item::LifeRBI,
Spec::LifeGGI => Item::LifeGGI,
@@ -938,7 +938,7 @@ pub fn get_combos() -> Vec {
Combo { components: Item::ScatterI.combo(), item: Item::ScatterI },
Combo { components: Item::ScatterII.combo(), item: Item::ScatterII },
Combo { components: Item::ScatterIII.combo(), item: Item::ScatterIII },
-
+
Combo { components: Item::HasteI.combo(), item: Item::HasteI },
Combo { components: Item::HasteII.combo(), item: Item::HasteII },
Combo { components: Item::HasteIII.combo(), item: Item::HasteIII },
@@ -948,7 +948,7 @@ pub fn get_combos() -> Vec {
Combo { components: Item::ImpurityI.combo(), item: Item::ImpurityI },
Combo { components: Item::ImpurityII.combo(), item: Item::ImpurityII },
Combo { components: Item::ImpurityIII.combo(), item: Item::ImpurityIII },
-
+
Combo { components: Item::AmplifyI.combo(), item: Item::AmplifyI },
Combo { components: Item::AmplifyII.combo(), item: Item::AmplifyII },
Combo { components: Item::AmplifyIII.combo(), item: Item::AmplifyIII },
@@ -981,11 +981,11 @@ pub fn get_combos() -> Vec {
Combo { components: Item::PurifyI.combo(), item: Item::PurifyI },
Combo { components: Item::PurifyII.combo(), item: Item::PurifyII },
Combo { components: Item::PurifyIII.combo(), item: Item::PurifyIII },
-
+
Combo { components: Item::CorruptI.combo(), item: Item::CorruptI },
Combo { components: Item::CorruptII.combo(), item: Item::CorruptII },
Combo { components: Item::CorruptIII.combo(), item: Item::CorruptIII },
-
+
Combo { components: Item::ClutchI.combo(), item: Item::ClutchI },
Combo { components: Item::ClutchII.combo(), item: Item::ClutchII },
Combo { components: Item::ClutchIII.combo(), item: Item::ClutchIII },
@@ -1041,21 +1041,21 @@ pub fn get_combos() -> Vec {
Combo { components: Item::PowerRRI.combo(), item: Item::PowerRRI },
Combo { components: Item::PowerGGI.combo(), item: Item::PowerGGI },
Combo { components: Item::PowerBBI.combo(), item: Item::PowerBBI },
- Combo { components: Item::PowerGRI.combo(), item: Item::PowerGRI },
+ Combo { components: Item::PowerRGI.combo(), item: Item::PowerRGI },
Combo { components: Item::PowerGBI.combo(), item: Item::PowerGBI },
Combo { components: Item::PowerRBI.combo(), item: Item::PowerRBI },
Combo { components: Item::LifeRRI.combo(), item: Item::LifeRRI },
Combo { components: Item::LifeGGI.combo(), item: Item::LifeGGI },
Combo { components: Item::LifeBBI.combo(), item: Item::LifeBBI },
- Combo { components: Item::LifeGRI.combo(), item: Item::LifeGRI },
+ Combo { components: Item::LifeRGI.combo(), item: Item::LifeRGI },
Combo { components: Item::LifeGBI.combo(), item: Item::LifeGBI },
Combo { components: Item::LifeRBI.combo(), item: Item::LifeRBI },
Combo { components: Item::SpeedRRI.combo(), item: Item::SpeedRRI },
Combo { components: Item::SpeedGGI.combo(), item: Item::SpeedGGI },
Combo { components: Item::SpeedBBI.combo(), item: Item::SpeedBBI },
- Combo { components: Item::SpeedGRI.combo(), item: Item::SpeedGRI },
+ Combo { components: Item::SpeedRGI.combo(), item: Item::SpeedRGI },
Combo { components: Item::SpeedGBI.combo(), item: Item::SpeedGBI },
Combo { components: Item::SpeedRBI.combo(), item: Item::SpeedRBI },
@@ -1066,11 +1066,36 @@ pub fn get_combos() -> Vec {
return combinations;
}
+#[derive(Debug,Clone,Copy,Serialize,Deserialize)]
+pub enum Shape {
+ Circle,
+ Diamond,
+ Hexagon,
+ Pentagon,
+ Square,
+ Squircle,
+ Triangle,
+ Saw,
+ VboxColour,
+}
+
+#[derive(Debug,Clone,Copy,Serialize,Deserialize)]
+pub enum ItemColour {
+ W,
+ RR,
+ GG,
+ BB,
+ RG,
+ RB,
+ GB,
+}
+
#[derive(Debug,Clone,Serialize,Deserialize)]
pub struct ItemInfo {
pub item: Item,
pub spec: bool,
pub skill: bool,
+ pub values: Option,
pub description: String,
}
@@ -1101,6 +1126,10 @@ pub fn item_info() -> ItemInfoCtr {
spec: v.into_spec().is_some(),
skill: v.into_skill().is_some(),
description: v.into_description(),
+ values: match v.into_spec() {
+ Some(s) => Some(s.values()),
+ None => None
+ },
})
.collect::>();
@@ -1139,4 +1168,10 @@ mod tests {
]);
}
+
+ #[test]
+ fn item_info_test() {
+ let info = item_info();
+ println!("{:#?}", info);
+ }
}
\ No newline at end of file
diff --git a/server/src/spec.rs b/server/src/spec.rs
index 4a5b165d..e727170b 100644
--- a/server/src/spec.rs
+++ b/server/src/spec.rs
@@ -1,4 +1,5 @@
use construct::{Stat, Colours};
+use item::{Shape, ItemColour};
use util::{IntPct};
@@ -10,7 +11,7 @@ pub struct SpecBonus {
impl SpecBonus {
pub fn get_bonus(&self, c: &Colours) -> u64 {
- if c.red >= self.req.red && c.blue >= self.req.blue && c.green >= self.req.green {
+ if c.red >= self.req.red && c.blue >= self.req.blue && c.green >= self.req.green {
return self.bonus;
}
return 0;
@@ -18,9 +19,11 @@ impl SpecBonus {
}
#[derive(Debug,Clone,Serialize,Deserialize)]
-pub struct SpecData {
+pub struct SpecValues {
pub base: u64,
pub bonuses: Vec,
+ pub shape: Shape,
+ pub colour: ItemColour,
}
@@ -30,7 +33,7 @@ pub enum Spec {
SpeedRRI,
SpeedBBI,
SpeedGGI,
- SpeedGRI,
+ SpeedRGI,
SpeedGBI,
SpeedRBI,
// Pure redLife has to come first as it applies the base amount
@@ -39,7 +42,7 @@ pub enum Spec {
LifeGGI,
LifeRRI,
LifeBBI,
- LifeGRI,
+ LifeRGI,
LifeGBI,
LifeRBI,
@@ -47,7 +50,7 @@ pub enum Spec {
PowerRRI,
PowerGGI,
PowerBBI,
- PowerGRI,
+ PowerRGI,
PowerGBI,
PowerRBI,
}
@@ -59,7 +62,7 @@ impl Spec {
Spec::PowerRRI => vec![Stat::RedPower],
Spec::PowerGGI => vec![Stat::GreenPower],
Spec::PowerBBI => vec![Stat::BluePower],
- Spec::PowerGRI => vec![Stat::GreenPower, Stat::RedPower],
+ Spec::PowerRGI => vec![Stat::GreenPower, Stat::RedPower],
Spec::PowerGBI => vec![Stat::GreenPower, Stat::BluePower],
Spec::PowerRBI => vec![Stat::RedPower, Stat::BluePower],
@@ -67,7 +70,7 @@ impl Spec {
Spec::SpeedRRI => vec![Stat::Speed],
Spec::SpeedBBI => vec![Stat::Speed],
Spec::SpeedGGI => vec![Stat::Speed],
- Spec::SpeedGRI => vec![Stat::Speed],
+ Spec::SpeedRGI => vec![Stat::Speed],
Spec::SpeedGBI => vec![Stat::Speed],
Spec::SpeedRBI => vec![Stat::Speed],
@@ -75,111 +78,232 @@ impl Spec {
Spec::LifeRRI => vec![Stat::RedLife],
Spec::LifeBBI => vec![Stat::BlueLife],
Spec::LifeGGI => vec![Stat::GreenLife],
- Spec::LifeGRI => vec![Stat::GreenLife, Stat::RedLife],
+ Spec::LifeRGI => vec![Stat::GreenLife, Stat::RedLife],
Spec::LifeGBI => vec![Stat::GreenLife, Stat::BlueLife],
Spec::LifeRBI => vec![Stat::BlueLife, Stat::RedLife],
}
}
- pub fn data(&self) -> SpecData {
+ pub fn values(&self) -> SpecValues {
match *self {
- Spec::Power => SpecData { base: 5, bonuses: vec![]},
-
- Spec::PowerRRI => SpecData {base: 10, bonuses: vec![
- SpecBonus { req: Colours {red: 5, green: 0, blue: 0}, bonus: 10},
- SpecBonus { req: Colours {red: 10, green: 0, blue: 0}, bonus: 20},
- SpecBonus { req: Colours {red: 20, green: 0, blue: 0}, bonus: 40}]},
-
- Spec::PowerGGI => SpecData {base: 10, bonuses: vec![
- SpecBonus { req: Colours {red: 0, green: 5, blue: 0}, bonus: 10},
- SpecBonus { req: Colours {red: 0, green: 10, blue: 0}, bonus: 20},
- SpecBonus { req: Colours {red: 0, green: 20, blue: 0}, bonus: 40}]},
-
- Spec::PowerBBI => SpecData {base: 10, bonuses: vec![
- SpecBonus { req: Colours {red: 0, green: 0, blue: 5}, bonus: 10},
- SpecBonus { req: Colours {red: 0, green: 0, blue: 10}, bonus: 20},
- SpecBonus { req: Colours {red: 0, green: 0, blue: 20}, bonus: 40}]},
+ Spec::Power => SpecValues {
+ colour: ItemColour::W,
+ base: 5,
+ shape: Shape::Circle,
+ bonuses: vec![]
+ },
- Spec::PowerGRI => SpecData {base: 5, bonuses: vec![
- SpecBonus { req: Colours {red: 2, green: 2, blue: 0}, bonus: 10},
- SpecBonus { req: Colours {red: 5, green: 5, blue: 0}, bonus: 15},
- SpecBonus { req: Colours {red: 10, green: 10, blue: 0}, bonus: 30}]},
+ Spec::PowerRRI => SpecValues {
+ colour: ItemColour::RR,
+ base: 10,
+ shape: Shape::Circle,
+ bonuses: vec![
+ SpecBonus { req: Colours { red: 5, green: 0, blue: 0 }, bonus: 10 },
+ SpecBonus { req: Colours { red: 10, green: 0, blue: 0 }, bonus: 20 },
+ SpecBonus { req: Colours { red: 20, green: 0, blue: 0 }, bonus: 40 }
+ ],
+ },
+
+ Spec::PowerGGI => SpecValues {
+ colour: ItemColour::GG,
+ base: 10,
+ shape: Shape::Circle,
+ bonuses: vec![
+ SpecBonus { req: Colours { red: 0, green: 5, blue: 0 }, bonus: 10 },
+ SpecBonus { req: Colours { red: 0, green: 10, blue: 0 }, bonus: 20 },
+ SpecBonus { req: Colours { red: 0, green: 20, blue: 0 }, bonus: 40 }
+ ],
+ },
+
+ Spec::PowerBBI => SpecValues {
+ colour: ItemColour::BB,
+ base: 10,
+ shape: Shape::Circle,
+ bonuses: vec![
+ SpecBonus { req: Colours { red: 0, green: 0, blue: 5 }, bonus: 10 },
+ SpecBonus { req: Colours { red: 0, green: 0, blue: 10 }, bonus: 20 },
+ SpecBonus { req: Colours { red: 0, green: 0, blue: 20 }, bonus: 40 }
+ ],
+ },
+
+ Spec::PowerRGI => SpecValues {
+ colour: ItemColour::RG,
+ base: 5,
+ shape: Shape::Circle,
+ bonuses: vec![
+ SpecBonus { req: Colours { red: 2, green: 2, blue: 0 }, bonus: 10 },
+ SpecBonus { req: Colours { red: 5, green: 5, blue: 0 }, bonus: 15 },
+ SpecBonus { req: Colours { red: 10, green: 10, blue: 0 }, bonus: 30 }
+ ],
+ },
+
+ Spec::PowerGBI => SpecValues {
+ colour: ItemColour::GB,
+ base: 5,
+ shape: Shape::Circle,
+ bonuses: vec![
+ SpecBonus { req: Colours { red: 0, green: 2, blue: 2 }, bonus: 10 },
+ SpecBonus { req: Colours { red: 0, green: 5, blue: 5 }, bonus: 15 },
+ SpecBonus { req: Colours { red: 0, green: 10, blue: 10 }, bonus: 30 }
+ ],
+ },
+
+ Spec::PowerRBI => SpecValues {
+ colour: ItemColour::RB,
+ base: 5,
+ shape: Shape::Circle,
+ bonuses: vec![
+ SpecBonus { req: Colours { red: 2, green: 0, blue: 2 }, bonus: 10 },
+ SpecBonus { req: Colours { red: 5, green: 0, blue: 5 }, bonus: 15 },
+ SpecBonus { req: Colours { red: 10, green: 0, blue: 10 }, bonus: 30 }
+ ],
+ },
+
+ Spec::Speed => SpecValues {
+ colour: ItemColour::W,
+ base: 5,
+ shape: Shape::Triangle,
+ bonuses: vec![]
+ },
+
+ Spec::SpeedRRI => SpecValues {
+ colour: ItemColour::RR,
+ base: 10,
+ shape: Shape::Triangle,
+ bonuses: vec![
+ SpecBonus { req: Colours { red: 5, green: 0, blue: 0 }, bonus: 10 },
+ SpecBonus { req: Colours { red: 10, green: 0, blue: 0 }, bonus: 20 },
+ SpecBonus { req: Colours { red: 20, green: 0, blue: 0 }, bonus: 40 }
+ ],
+ },
+
+ Spec::SpeedGGI => SpecValues {
+ colour: ItemColour::GG,
+ base: 10,
+ shape: Shape::Triangle,
+ bonuses: vec![
+ SpecBonus { req: Colours { red: 0, green: 5, blue: 0 }, bonus: 10 },
+ SpecBonus { req: Colours { red: 0, green: 10, blue: 0 }, bonus: 20 },
+ SpecBonus { req: Colours { red: 0, green: 20, blue: 0 }, bonus: 40 }
+ ],
+ },
+
+ Spec::SpeedBBI => SpecValues {
+ colour: ItemColour::BB,
+ base: 10,
+ shape: Shape::Triangle,
+ bonuses: vec![
+ SpecBonus { req: Colours { red: 0, green: 0, blue: 5 }, bonus: 10 },
+ SpecBonus { req: Colours { red: 0, green: 0, blue: 10 }, bonus: 20 },
+ SpecBonus { req: Colours { red: 0, green: 0, blue: 20 }, bonus: 40 }
+ ],
+ },
+
+ Spec::SpeedRGI => SpecValues {
+ colour: ItemColour::RG,
+ base: 5,
+ shape: Shape::Triangle,
+ bonuses: vec![
+ SpecBonus { req: Colours { red: 2, green: 2, blue: 0 }, bonus: 10 },
+ SpecBonus { req: Colours { red: 5, green: 5, blue: 0 }, bonus: 15 },
+ SpecBonus { req: Colours { red: 10, green: 10, blue: 0 }, bonus: 30 }
+ ],
+ },
+
+ Spec::SpeedGBI => SpecValues {
+ colour: ItemColour::GB,
+ base: 5,
+ shape: Shape::Triangle,
+ bonuses: vec![
+ SpecBonus { req: Colours { red: 0, green: 2, blue: 2 }, bonus: 10 },
+ SpecBonus { req: Colours { red: 0, green: 5, blue: 5 }, bonus: 15 },
+ SpecBonus { req: Colours { red: 0, green: 10, blue: 10 }, bonus: 30 }
+ ],
+ },
+
+ Spec::SpeedRBI => SpecValues {
+ colour: ItemColour::RB,
+ base: 5,
+ shape: Shape::Triangle,
+ bonuses: vec![
+ SpecBonus { req: Colours { red: 2, green: 0, blue: 2 }, bonus: 10 },
+ SpecBonus { req: Colours { red: 5, green: 0, blue: 5 }, bonus: 15 },
+ SpecBonus { req: Colours { red: 10, green: 0, blue: 10 }, bonus: 30 }
+ ],
+ },
+
+ Spec::Life => SpecValues {
+ colour: ItemColour::W,
+ base: 5,
+ shape: Shape::Square,
+ bonuses: vec![]},
+
+ Spec::LifeRRI => SpecValues {
+ colour: ItemColour::RR,
+ base: 10,
+ shape: Shape::Square,
+ bonuses: vec![
+ SpecBonus { req: Colours { red: 5, green: 0, blue: 0 }, bonus: 10 },
+ SpecBonus { req: Colours { red: 10, green: 0, blue: 0 }, bonus: 20 },
+ SpecBonus { req: Colours { red: 20, green: 0, blue: 0 }, bonus: 40 }
+ ],
+ },
+
+ Spec::LifeGGI => SpecValues {
+ colour: ItemColour::GG,
+ base: 10,
+ shape: Shape::Square,
+ bonuses: vec![
+ SpecBonus { req: Colours { red: 0, green: 5, blue: 0 }, bonus: 10 },
+ SpecBonus { req: Colours { red: 0, green: 10, blue: 0 }, bonus: 20 },
+ SpecBonus { req: Colours { red: 0, green: 20, blue: 0 }, bonus: 40 }
+ ],
+ },
+
+ Spec::LifeBBI => SpecValues {
+ colour: ItemColour::BB,
+ base: 10,
+ shape: Shape::Square,
+ bonuses: vec![
+ SpecBonus { req: Colours { red: 0, green: 0, blue: 5 }, bonus: 10 },
+ SpecBonus { req: Colours { red: 0, green: 0, blue: 10 }, bonus: 20 },
+ SpecBonus { req: Colours { red: 0, green: 0, blue: 20 }, bonus: 40 }
+ ],
+ },
+
+ Spec::LifeRGI => SpecValues {
+ colour: ItemColour::RG,
+ base: 5,
+ shape: Shape::Square,
+ bonuses: vec![
+ SpecBonus { req: Colours { red: 2, green: 2, blue: 0 }, bonus: 10 },
+ SpecBonus { req: Colours { red: 5, green: 5, blue: 0 }, bonus: 15 },
+ SpecBonus { req: Colours { red: 10, green: 10, blue: 0 }, bonus: 30 }
+ ],
+ },
- Spec::PowerGBI => SpecData {base: 5, bonuses: vec![
- SpecBonus { req: Colours {red: 0, green: 2, blue: 2}, bonus: 10},
- SpecBonus { req: Colours {red: 0, green: 5, blue: 5}, bonus: 15},
- SpecBonus { req: Colours {red: 0, green: 10, blue: 10}, bonus: 30}]},
+ Spec::LifeGBI => SpecValues {
+ colour: ItemColour::GB,
+ base: 5,
+ shape: Shape::Square,
+ bonuses: vec![
+ SpecBonus { req: Colours { red: 0, green: 2, blue: 2 }, bonus: 10 },
+ SpecBonus { req: Colours { red: 0, green: 5, blue: 5 }, bonus: 15 },
+ SpecBonus { req: Colours { red: 0, green: 10, blue: 10 }, bonus: 30 }
+ ],
+ },
- Spec::PowerRBI => SpecData {base: 5, bonuses: vec![
- SpecBonus { req: Colours {red: 2, green: 0, blue: 2}, bonus: 10},
- SpecBonus { req: Colours {red: 5, green: 0, blue: 5}, bonus: 15},
- SpecBonus { req: Colours {red: 10, green: 0, blue: 10}, bonus: 30}]},
-
- Spec::Speed => SpecData { base: 5, bonuses: vec![]},
-
- Spec::SpeedRRI => SpecData {base: 10, bonuses: vec![
- SpecBonus { req: Colours {red: 5, green: 0, blue: 0}, bonus: 10},
- SpecBonus { req: Colours {red: 10, green: 0, blue: 0}, bonus: 20},
- SpecBonus { req: Colours {red: 20, green: 0, blue: 0}, bonus: 40}]},
-
- Spec::SpeedGGI => SpecData {base: 10, bonuses: vec![
- SpecBonus { req: Colours {red: 0, green: 5, blue: 0}, bonus: 10},
- SpecBonus { req: Colours {red: 0, green: 10, blue: 0}, bonus: 20},
- SpecBonus { req: Colours {red: 0, green: 20, blue: 0}, bonus: 40}]},
-
- Spec::SpeedBBI => SpecData {base: 10, bonuses: vec![
- SpecBonus { req: Colours {red: 0, green: 0, blue: 5}, bonus: 10},
- SpecBonus { req: Colours {red: 0, green: 0, blue: 10}, bonus: 20},
- SpecBonus { req: Colours {red: 0, green: 0, blue: 20}, bonus: 40}]},
-
- Spec::SpeedGRI => SpecData {base: 5, bonuses: vec![
- SpecBonus { req: Colours {red: 2, green: 2, blue: 0}, bonus: 10},
- SpecBonus { req: Colours {red: 5, green: 5, blue: 0}, bonus: 15},
- SpecBonus { req: Colours {red: 10, green: 10, blue: 0}, bonus: 30}]},
-
- Spec::SpeedGBI => SpecData {base: 5, bonuses: vec![
- SpecBonus { req: Colours {red: 0, green: 2, blue: 2}, bonus: 10},
- SpecBonus { req: Colours {red: 0, green: 5, blue: 5}, bonus: 15},
- SpecBonus { req: Colours {red: 0, green: 10, blue: 10}, bonus: 30}]},
-
- Spec::SpeedRBI => SpecData {base: 5, bonuses: vec![
- SpecBonus { req: Colours {red: 2, green: 0, blue: 2}, bonus: 10},
- SpecBonus { req: Colours {red: 5, green: 0, blue: 5}, bonus: 15},
- SpecBonus { req: Colours {red: 10, green: 0, blue: 10}, bonus: 30}]},
-
- Spec::Life => SpecData { base: 5, bonuses: vec![]},
-
- Spec::LifeRRI => SpecData {base: 10, bonuses: vec![
- SpecBonus { req: Colours {red: 5, green: 0, blue: 0}, bonus: 10},
- SpecBonus { req: Colours {red: 10, green: 0, blue: 0}, bonus: 20},
- SpecBonus { req: Colours {red: 20, green: 0, blue: 0}, bonus: 40}]},
-
- Spec::LifeGGI => SpecData {base: 10, bonuses: vec![
- SpecBonus { req: Colours {red: 0, green: 5, blue: 0}, bonus: 10},
- SpecBonus { req: Colours {red: 0, green: 10, blue: 0}, bonus: 20},
- SpecBonus { req: Colours {red: 0, green: 20, blue: 0}, bonus: 40}]},
-
- Spec::LifeBBI => SpecData {base: 10, bonuses: vec![
- SpecBonus { req: Colours {red: 0, green: 0, blue: 5}, bonus: 10},
- SpecBonus { req: Colours {red: 0, green: 0, blue: 10}, bonus: 20},
- SpecBonus { req: Colours {red: 0, green: 0, blue: 20}, bonus: 40}]},
-
- Spec::LifeGRI => SpecData {base: 5, bonuses: vec![
- SpecBonus { req: Colours {red: 2, green: 2, blue: 0}, bonus: 10},
- SpecBonus { req: Colours {red: 5, green: 5, blue: 0}, bonus: 15},
- SpecBonus { req: Colours {red: 10, green: 10, blue: 0}, bonus: 30}]},
-
-
- Spec::LifeGBI => SpecData {base: 5, bonuses: vec![
- SpecBonus { req: Colours {red: 0, green: 2, blue: 2}, bonus: 10},
- SpecBonus { req: Colours {red: 0, green: 5, blue: 5}, bonus: 15},
- SpecBonus { req: Colours {red: 0, green: 10, blue: 10}, bonus: 30}]},
-
- Spec::LifeRBI => SpecData {base: 5, bonuses: vec![
- SpecBonus { req: Colours {red: 2, green: 0, blue: 2}, bonus: 10},
- SpecBonus { req: Colours {red: 5, green: 0, blue: 5}, bonus: 15},
- SpecBonus { req: Colours {red: 10, green: 0, blue: 10}, bonus: 30}]},
+ Spec::LifeRBI => SpecValues {
+ colour: ItemColour::RB,
+ base: 5,
+ shape: Shape::Square,
+ bonuses: vec![
+ SpecBonus { req: Colours { red: 2, green: 0, blue: 2 }, bonus: 10 },
+ SpecBonus { req: Colours { red: 5, green: 0, blue: 5 }, bonus: 15 },
+ SpecBonus { req: Colours { red: 10, green: 0, blue: 10 }, bonus: 30 }
+ ],
+ },
}
}
@@ -191,31 +315,31 @@ impl Spec {
Spec::PowerRRI |
Spec::PowerGGI |
Spec::PowerBBI |
- Spec::PowerGRI |
+ Spec::PowerRGI |
Spec::PowerGBI |
Spec::PowerRBI |
Spec::Speed |
Spec::SpeedRRI |
Spec::SpeedGGI |
Spec::SpeedBBI |
- Spec::SpeedGRI |
+ Spec::SpeedRGI |
Spec::SpeedGBI |
Spec::SpeedRBI => modified + {
- let spec_data = self.data();
- base.pct(spec_data.bonuses.iter()
- .fold(spec_data.base, |acc, s| acc + s.get_bonus(player_colours)))
+ let spec_values = self.values();
+ base.pct(spec_values.bonuses.iter()
+ .fold(spec_values.base, |acc, s| acc + s.get_bonus(player_colours)))
},
Spec::Life |
Spec::LifeRRI |
Spec::LifeGGI |
Spec::LifeBBI |
- Spec::LifeGRI |
+ Spec::LifeRGI |
Spec::LifeGBI |
Spec::LifeRBI => modified + {
- let spec_data = self.data();
- construct_colour_total * (spec_data.bonuses.iter()
- .fold(spec_data.base, |acc, s| acc + s.get_bonus(player_colours)))
+ let spec_values = self.values();
+ construct_colour_total * (spec_values.bonuses.iter()
+ .fold(spec_values.base, |acc, s| acc + s.get_bonus(player_colours)))
},
}
}