import { useGameStore } from '../store' import { BUILDINGS } from '../../game/data/buildings' import { useMemo } from 'react' export default function TerritoryPanel() { const world = useGameStore((s) => s.world) const bump = useGameStore((s) => s.bump) const revision = useGameStore((s) => s.revision) void revision if (!world) return null const fam = world.state.family const ids = useMemo(() => Object.keys(BUILDINGS), []) const levelLabel = (l: number) => '·'.repeat(l) + '。'.repeat(5 - l) return (
族产经营:建造建筑后每月自动产出;坊市、丹房等基础设施可解锁功能。 灵石与灵矿不足则无法建造或升级。
{ids.map((id) => { const def = BUILDINGS[id] if (!def) return null const level = fam.buildings[id] ?? 0 const built = level > 0 const cost = built && level >= def.maxLevel ? null : def.upgradeCost(built ? level + 1 : 1) const produce = def.produceTable ? def.produceTable(built ? level : 1) : null const canUpgrade = !!cost && fam.stones >= cost.stones && fam.inventory['lingkuang'] >= cost.lingkuang return (
{def.icon}
{def.name}
{def.kind === 'produce' ? '产出' : '功效'}
{built ? `${level}级` : ''}
{def.desc}
{produce && Object.keys(produce).length > 0 && (
{Object.entries(produce) .filter(([k]) => k !== 'beastcore' || (built && level >= 3)) .map(([k, v]) => `${itemLabel(k)} ×${v}`) .join(' / ')} /月
)}
{built ? ( <> {level < def.maxLevel ? ( ) : ( 已臻极致 )} {id === 'zongci' && ( )} {levelLabel(level)} ) : ( )}
) })}
) } function MonumentList() { const world = useGameStore((s) => s.world) const revision = useGameStore((s) => s.revision) void revision if (!world) return null const monuments = world.state.chronicle.filter((e) => e.text.startsWith('功德碑')).slice().reverse() if (monuments.length === 0) return null return (
宗祠碑录
{monuments.slice(0, 4).map((m) => (
{m.year}年 {m.text.slice(3)}
))}
) } function itemLabel(k: string): string { const map: Record = { stone: '灵石', lingcao: '灵草', lingkuang: '灵矿', beastcore: '兽核' } return map[k] ?? k }