sum

Adds an arbitrary amount of ledgers together.

sum
Parameters
ledgers (Array<immutable.Map>)
Returns
immutable.Map: a ledger combining all values
Example
const wallet = Map({GOLD: 0});
const expensesLedger = Map({GOLD: -5});
const profitsLedger = Map({GOLD: 10, Silver: 3 });

const total = sum(wallet, expensesLedger, profitsLedger);
total.get("GOLD");   // 5
total.get("SILVER"); // 3
const ledgers = [wallet, expenses, profits];
const total = sum(...ledgers);

scale

Multiplies all currency values in a ledger by the scale. This is quite useful for when you want to multiply the effects of an item by the amount of that item.

scale
Parameters
ledger (immutable.Map)
scale (Number)
Returns
immutable.Map: the updated ledger
Example
const incomeFromSalesfolk = Map({GOLD: 2, INFLUENCE: 5});
const newIncome = scale(incomeFromSalesFolk, state.numOfSalesfolk);

newIncome.get("GOLD");     // 2 * state.numOfSalesfolk
newIncome.get("INFLUENCE") // 5 * state.numOfSalesfolk

inTheBlack

Returns true if all items in the ledger are positive.

inTheBlack
Parameters
ledger (immutable.Map)
Returns
Boolean:

inTheRed

Returns true if all items in the ledger are negative.

inTheRed
Parameters
ledger (immutable.Map)
Returns
Boolean:

currencies

Returns all unique currencies defined in several ledgers

currencies
Parameters
ledgers (...any)
ledger (Array<immutable.Map>)
Returns
immutable.List:

totalOf

Gets the currency value of a particular currency given several ledgers. This is useful for finding the cost of something spread over several different ledgers.

totalOf
Parameters
currency (String)
ledgers (Array<immutable.Map>)
Example
const materialCost = Map({GOLD: -5, SILVER: -2});
const transportCost = Map({GOLD: -2});
const goldCost = totalOf("GOLD", materialCost, transportCost); // -7

cost

Given an item, run it's cost function and return the result.

cost
Parameters
item (Object)
state (Object = {})
Returns
immutable.Map: a ledger

allCosts

Given a bunch of items, figure out all their costs and return it as an immutable Map

allCosts
Parameters
items ((immutable.Map | Object))
state (Object = {})
Returns
immutable.Map: a Map of ledgers where the key is the item.type

buy

Buy returns a new wallet after an item is purchased. If the item is free, it just returns the same wallet.

buy
Parameters
item (Object) has at least a "cost" that returns a ledger.
wallet (immutable.Map) the current sum of ledgers
state (Object = {}) a state object that will be passed to the cost to determine the type
Example
const MagicSword = {
  type: "MagicSword",
  cost: state => Map({ GOLD: -(5 + state.marketPrice) })
}

const wallet = new Map({ GOLD: 10 });
const state = { marketPrice : 1 };

const newWallet = buy(MagicSword, wallet, state); // Gold => 4
const canBuy = inTheBlack(newWallet); // true

add

Adds an item to the wallet

add
Parameters
item (Object)
wallet (immutable.Map)
amount (Number = 1)
Example
const MagicSword = {
  type: "MagicSword"
}
const wallet = new Map({GOLD: 10})

add(MagicSword, wallet);    // Map({GOLD: 10, MagicSword: 1})
add(MagicSword, wallet, 3); // Map({GOLD: 10, MagicSword: 3})

effects

For a collection of items, combines their "effect" functions into one big ledger. This is useful for caching the onUpdate effects to your wallet rather than computing them every time.

effects
Parameters
items (Array<Object>)
wallet (immutable.Map)
state (Object = {})
Example
const pouch = {
  MagicSword: {
    type: "MagicSword",
    effect: state => doSomething(state)
  },
  // ...
}

const ledger = effects(pouch, wallet, state);