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, } 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 { 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() }