Up until now technologies could directly be marked as researched witout any material or time cost for the player.
For now I added the new Material
ResearchToken
that has to be spent for researching:
pub enum Material {
Ore(Ore),
Plate(Plate),
...
ResearchToken,
}
With individual Tech
nologies having a research cost:
impl Tech {
...
pub fn research_cost(&self) -> u32 {
match self {
Self::BetterBelts => 3000,
}
}
}
I also added a new type Research
that tracks each Tech
‘s research progress, allows setting the active research and spending of tokens to move research forward:
pub enum ResearchError {
AlreadyResearched,
CantResearch,
PayingTooMuch,
NoActiveResearch,
}
type ResearchResult<T> = std::result::Result<T, ResearchError>;
pub struct Research {
current: Option<Tech>,
tech_tree: TechTree,
progress: BTreeMap<Tech, u32>,
}
impl Research {
pub fn set_active_research(&mut self, tech: Tech) -> ResearchResult<()> {
...
}
pub fn stop_research(&mut self) {
...
}
pub fn pay(&mut self, amount: u32) -> ResearchResult<()> {
...
}
...
}
The event was renamed from MarkResearched(Tech)
to StartResearch(Tech)
to reflect the change in behavior.
To invest ResearchToken
from within the game I added the new Structure
Lab
.
I’m now also rendering the currently active research and its progress in the bottom left corner: