123 lines
3.3 KiB
Rust
123 lines
3.3 KiB
Rust
use crate::Currency;
|
|
use crate::game::Game;
|
|
use std::collections::VecDeque;
|
|
use std::fmt::{Debug, Formatter, Write};
|
|
|
|
pub(crate) struct Upgrade {
|
|
pub(crate) name: &'static str,
|
|
pub(crate) cost: Currency,
|
|
pub(crate) apply: Box<dyn Fn(&mut Game)>,
|
|
}
|
|
|
|
impl Debug for Upgrade {
|
|
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
|
|
f.write_fmt(format_args!(
|
|
"Upgrade {{ name: {:?}, cost: {:?} }}",
|
|
self.name, self.cost
|
|
))
|
|
}
|
|
}
|
|
|
|
pub(crate) fn get_upgrades() -> VecDeque<Upgrade> {
|
|
vec![
|
|
Upgrade {
|
|
name: "Start Powering infrastructure",
|
|
cost: 0f64,
|
|
apply: Box::new(|game| {
|
|
game.bars[0].enabled = true;
|
|
}),
|
|
},
|
|
Upgrade {
|
|
name: "More power",
|
|
cost: 10f64,
|
|
apply: Box::new(|game| {
|
|
game.bars[0].productivity *= 2.0;
|
|
}),
|
|
},
|
|
Upgrade {
|
|
name: "",
|
|
cost: 23f64,
|
|
apply: Box::new(|game| {
|
|
game.global_productivity *= 1.1;
|
|
}),
|
|
},
|
|
Upgrade {
|
|
name: "The answer",
|
|
cost: 42f64,
|
|
apply: Box::new(|game| {
|
|
game.global_speed *= 1.1;
|
|
}),
|
|
},
|
|
Upgrade {
|
|
name: "Start Dusting ServicePoint",
|
|
cost: 64f64,
|
|
apply: Box::new(|game| {
|
|
game.bars[1].enabled = true;
|
|
}),
|
|
},
|
|
Upgrade {
|
|
name: "Start Activating colorful lights",
|
|
cost: 256f64,
|
|
apply: Box::new(|game| {
|
|
game.bars[2].enabled = true;
|
|
}),
|
|
},
|
|
Upgrade {
|
|
name: "Start Dimming darkroom",
|
|
cost: 1024f64,
|
|
apply: Box::new(|game| {
|
|
game.bars[3].enabled = true;
|
|
}),
|
|
},
|
|
Upgrade {
|
|
name: "Start Refilling Matemat",
|
|
cost: 4096f64,
|
|
apply: Box::new(|game| {
|
|
game.bars[4].enabled = true;
|
|
}),
|
|
},
|
|
Upgrade {
|
|
name: "Start Pre-heating convectiomat",
|
|
cost: 16384f64,
|
|
apply: Box::new(|game| {
|
|
game.bars[5].enabled = true;
|
|
}),
|
|
},
|
|
Upgrade {
|
|
name: "Start Resetting chair heights",
|
|
cost: 65536f64,
|
|
apply: Box::new(|game| {
|
|
game.bars[6].enabled = true;
|
|
}),
|
|
},
|
|
Upgrade {
|
|
name: "Start Untangling 'block chain'",
|
|
cost: 262144f64,
|
|
apply: Box::new(|game| {
|
|
game.bars[7].enabled = true;
|
|
}),
|
|
},
|
|
Upgrade {
|
|
name: "Start Refilling sticker box",
|
|
cost: 1048576f64,
|
|
apply: Box::new(|game| {
|
|
game.bars[8].enabled = true;
|
|
}),
|
|
},
|
|
Upgrade {
|
|
name: "Start Setting room to public",
|
|
cost: 4194304f64,
|
|
apply: Box::new(|game| {
|
|
game.bars[9].enabled = true;
|
|
}),
|
|
},
|
|
Upgrade {
|
|
name: "Start Welcoming creatures",
|
|
cost: 16777216f64,
|
|
apply: Box::new(|game| {
|
|
game.bars[10].enabled = true;
|
|
}),
|
|
},
|
|
]
|
|
.into()
|
|
}
|