@jeremyckahn/farmhand
Version:
A farming game
87 lines (70 loc) • 2.22 kB
text/typescript
// Must be invoked with babel: https://stackoverflow.com/a/51532127/470685
import markdownTable from 'markdown-table'
import { levels } from '../data/levels.js'
import { itemsMap } from '../data/maps.js'
import { moneyString } from '../utils/moneyString.js'
const getDaysToMature = (seedItem: farmhand.item) => {
return seedItem.cropTimeline
? seedItem.cropTimeline.reduce((days: number, acc: number) => days + acc, 0)
: 0
}
function getCropImage(
seedItem: farmhand.item,
cropItem: farmhand.item | farmhand.cropVariety
) {
if (Array.isArray(seedItem.growsInto)) {
return `
.imageId || cropItem.id}.png)`
} else {
return ``
}
}
function getSeedImage(seedItem: farmhand.item) {
return ``
}
const headers = [
'Crop',
'Seed',
'Unlocked at level',
'Base value',
'Days to mature',
'Tier',
]
const rows: (string | number)[][] = []
const getCropRow = (
level: number,
seedItem: farmhand.item,
cropItem: farmhand.item
) => {
return [
`${getCropImage(seedItem, cropItem)} ${cropItem.name}`,
`${getSeedImage(seedItem)} ${seedItem.name}`,
level,
moneyString(seedItem.value),
getDaysToMature(seedItem),
seedItem.tier ?? '',
]
}
for (const level of levels) {
const { id, unlocksShopItem } = level
if (unlocksShopItem) {
const item = itemsMap[unlocksShopItem]
const { growsInto } = item
if (growsInto) {
const seedItem = item
if (Array.isArray(growsInto)) {
for (const cropItemId of growsInto) {
const cropItem = itemsMap[cropItemId]
rows.push(getCropRow(id!, seedItem!, cropItem!))
}
} else {
const cropItem = itemsMap[growsInto]
rows.push(getCropRow(id!, seedItem!, cropItem!))
}
}
}
}
const table = markdownTable([headers, ...rows.map(row => row.map(String))])
console.log(table)