export type ItemQuality = 'wood' | 'iron' | 'diamond' export type ItemType = 'tool' | 'block' | 'ore' export type DropItem = | 'Wooden Shovel' | 'Iron Shovel' | 'Diamond Shovel' | 'Wooden Pick Axe' | 'Iron Pick Axe' | 'Diamond Pick Axe' | 'Wooden Sword' | 'Iron Sword' | 'Diamond Sword' | 'leaves' | 'dirt' | 'wood' | 'stone' | 'gravel' | 'coal' | 'iron' | 'silver' | 'gold' | 'ruby' | 'diamond' | 'emerald' export interface Item { name: DropItem type: ItemType icon: string quality?: ItemQuality builds?: BlockType } export interface ToolItem extends Item { type: 'tool' quality: ItemQuality } export interface BlockItem extends Item { type: 'block' builds: BlockType } export type BlockType = | 'air' | 'grass' | 'treeCrown' | 'treeLeaves' | 'treeTrunk' | 'treeRoot' | 'treeRootRight' | 'treeRootMiddle' | 'treeRootLeft' | 'soil' | 'soilGravel' | 'stone' | 'stoneGravel' | 'bedrock' | 'cave' | 'brickWall' export type Block = { type: BlockType, // what is it? hp: number, // how long do I need to hit it? walkable: boolean, // can I walk through it? climbable?: boolean, // can I climb it? transparent?: boolean, // can I see through it? illuminated?: boolean, // is it glowing? drops?: DropItem, // what do I get, when loot it? } // describes a changed block, eg digged or placed by the player type DamagedBlock = { change: 'damage' x: number y: number damage: number } type ChangedBlock = { change: 'exchange' x: number y: number newType: BlockType } type Change = DamagedBlock | ChangedBlock export interface InventoryItem extends Item { amount: number quality: ItemQuality | null } export interface Moveable { x: number // position on x-axis (fixed for the player) y: number // position on y-axis (fixed for the player) lastDir: number // store last face direction vx: number // velocity on the x-axis vy: number // velocity on the y-axis } export interface Npc extends Moveable { hostile: boolean inventory: InventoryItem[] } export interface Player extends Moveable { inventory: InventoryItem[] } export type Direction = 'at' | 'left' | 'right' | 'up' | 'down'