kraft
Version:
A mysterious command line game with lots of secrets
48 lines (31 loc) • 1.79 kB
JavaScript
const Lenses = require(__base+'helpers/Lenses');
const Flow = require(__base+'helpers/Flow');
const Output = require(__base+'helpers/Output');
const Items = require(__base+'model/data/Items');
const P = require(__base+'model/player/PlayerModel');
const getCurrentMillis = () => new Date().getTime();
const updateJobForBuilding = (building) => {
const item = P.buildingActionArguments(P.location.view(), building).view();
const interval = getCurrentMillis() - P.buildingActionStart(P.location.view(), building).view();
const time = Math.floor(interval / Items[item].requires.time);
const resources = R.head(R.keys(Items[item].requires.resources)
.map((resource) => Math.floor(P.buildingResource(P.location.view(), building, resource).view(0) / Items[item].requires.resources[resource]))
.sort((a,b) => a - b));
// The amount of products made
const amount = R.min(time, resources);
// Remove the resources from the player
R.keys(Items[item].requires.resources).forEach((resource) => {
P.buildingResource(P.location.view(), building, resource).min(amount * Items[item].requires.resources[resource]);
});
// Add the items to the building
P.buildingResource(P.location.view(), building, item).add(amount);
// Restart the job
P.buildingActionStart(P.location.view(), building).set(getCurrentMillis());
};
exports.checkCurrentJobs = () => {
const buildings = P.locationBuildings(P.location.view()).view() || [];
const filtered = R.keys(buildings).filter((building) => P.buildingActionType(P.location.view(), building).view() === 'job');
filtered.forEach(updateJobForBuilding);
// Save but show no output
Output.saveWithoutOutput(Lenses.config());
};