unique block ids, better running, remove deprecated tree parts

This commit is contained in:
Norman Köhring 2025-03-16 18:01:08 +01:00
parent 9929d21fa1
commit 7098bffd25
6 changed files with 61 additions and 68 deletions

View file

@ -21,9 +21,9 @@ const level = createLevel(STAGE_WIDTH + 2, STAGE_HEIGHT + 2)
const lightMapEl = ref<HTMLCanvasElement | undefined>(undefined)
let updateLightMap: ReturnType<typeof useLightMap>
pocket({ name: 'Wooden Shovel', type: 'tool', icon: 'shovel', quality: 'wood' })
pocket({ name: 'Wooden Sword', type: 'tool', icon: 'sword', quality: 'wood' })
pocket({ name: 'Wooden Pick Axe', type: 'tool', icon: 'pick', quality: 'wood' })
pocket(getItem('tool_shovel_wood'))
pocket(getItem('tool_sword_wood'))
pocket(getItem('tool_pickaxe_wood'))
let animationFrame = 0
let lastTick = 0
@ -126,7 +126,7 @@ function build(blockX: number, blockY: number, block: InventoryItem) {
}
function interactWith(blockX: number, blockY: number, block: Block) {
console.log('interact with', blockX, blockY, block.type)
if (debug) console.debug('interact with', blockX, blockY, block.type)
// § 4 ArbZG
if (paused.value) return
@ -235,7 +235,11 @@ onMounted(() => {
</div>
<div id="player"
:class="[direction, { walking, running, sitting: paused }]"
:class="[direction, {
walking,
running: walking && running,
sitting: paused
}]"
@click="inventory = !inventory"
>
<div class="head"></div>

View file

@ -99,6 +99,10 @@
background-image: url(/Tiles/brick_grey.png);
}
#field {
user-select: none;
}
#field .block:hover,
#field .block.block.highlight {
filter: brightness(1.2) saturate(1.2);

View file

@ -2,8 +2,6 @@ import type { NoiseFunction2D } from 'simplex-noise'
import { blockTypes as T, level as L, probability as P } from './def'
import type { Block } from '../types.d'
const TREE_ROOT = [T.treeRootLeft, T.treeRootMiddle, T.treeRootRight]
function trees(r: number, i: number, row: Block[], previousRow: Block[]) {
const max = row.length - 1
const h = i - 1
@ -45,7 +43,8 @@ function ground(r: number, i: number, current: Block, above: Block) {
return current
}
function ground_(r: number, i: number, row: Block[], previousRow: Block[]) {
/*
function ground(r: number, i: number, row: Block[], previousRow: Block[]) {
const rootParts = [T.treeRootLeft, T.treeRootMiddle, T.treeRootRight]
const prevBlock = previousRow[i]
@ -56,6 +55,7 @@ function ground_(r: number, i: number, row: Block[], previousRow: Block[]) {
if (row[i] === T.soil) row[i] = T.grass
}
}
*/
function rock(r: number, i: number, current: Block, above: Block) {
if (above === T.soil && r < P.fray) return T.soil

View file

@ -14,22 +14,19 @@ export const blockTypes: Record<BlockType, Block> = {
air: { type: 'air', hp: Infinity, walkable: true, transparent: true },
cave: { type: 'cave', hp: Infinity, walkable: true, transparent: true },
// Tree Parts
treeCrown: { type: 'treeCrown', hp: 1, walkable: true, transparent: true, drops: 'leaves' },
treeLeaves: { type: 'treeLeaves', hp: 1, walkable: true, transparent: true, drops: 'leaves' },
treeTrunk: { type: 'treeTrunk', hp: 10, walkable: true, climbable: true, transparent: true, drops: 'wood' },
treeRoot: { type: 'treeRoot', hp: 10, walkable: true, climbable: true, drops: 'wood' },
treeRootLeft: { type: 'treeRootLeft', hp: 10, walkable: true, climbable: true, drops: 'wood' },
treeRootMiddle: { type: 'treeRootMiddle', hp: 10, walkable: true, climbable: true, drops: 'wood' },
treeRootRight: { type: 'treeRootRight', hp: 10, walkable: true, climbable: true, drops: 'wood' },
treeCrown: { type: 'treeCrown', hp: 1, walkable: true, transparent: true, drops: 'block_leaves' },
treeLeaves: { type: 'treeLeaves', hp: 1, walkable: true, transparent: true, drops: 'block_leaves' },
treeTrunk: { type: 'treeTrunk', hp: 10, walkable: true, climbable: true, transparent: true, drops: 'block_wood' },
treeRoot: { type: 'treeRoot', hp: 10, walkable: true, climbable: true, drops: 'block_wood' },
// Opaque Natural Blocks
grass: { type: 'grass', hp: 5, walkable: false, drops: 'dirt' },
soil: { type: 'soil', hp: 5, walkable: false, drops: 'dirt' },
soilGravel: { type: 'soilGravel', hp: 5, walkable: false, drops: 'gravel' },
stoneGravel: { type: 'stoneGravel', hp: 10, walkable: false, drops: 'gravel' },
stone: { type: 'stone', hp: 10, walkable: false, drops: 'stone' },
bedrock: { type: 'bedrock', hp: 25, walkable: false, drops: 'stone' },
grass: { type: 'grass', hp: 5, walkable: false, drops: 'block_dirt' },
soil: { type: 'soil', hp: 5, walkable: false, drops: 'block_dirt' },
soilGravel: { type: 'soilGravel', hp: 5, walkable: false, drops: 'block_gravel' },
stoneGravel: { type: 'stoneGravel', hp: 10, walkable: false, drops: 'block_gravel' },
stone: { type: 'stone', hp: 10, walkable: false, drops: 'block_stone' },
bedrock: { type: 'bedrock', hp: 25, walkable: false, drops: 'block_stone' },
// Built Blocks
brickWall: { type: 'brickWall', hp: 25, walkable: false, drops: 'stone' },
brickWall: { type: 'brickWall', hp: 25, walkable: false, drops: 'block_gravel' },
}
export const level = {

View file

@ -1,51 +1,43 @@
import type { ItemQuality, Item, InventoryItem } from '../types.d'
export const items: Item[] = [
{ name: 'Wooden Shovel', type: 'tool', icon: 'shovel', quality: 'wood' },
{ name: 'Wooden Pick Axe', type: 'tool', icon: 'pick', quality: 'wood' },
{ name: 'Wooden Sword', type: 'tool', icon: 'sword', quality: 'wood' },
export const items = {
tool_shovel_wood: { id: 'tool_shovel_wood', name: 'Wooden Shovel', type: 'tool', icon: 'shovel', quality: 'wood' } as Item,
tool_pickaxe_wood: { id: 'tool_pickaxe_wood', name: 'Wooden Pick Axe', type: 'tool', icon: 'pick', quality: 'wood' } as Item,
tool_sword_wood: { id: 'tool_sword_wood', name: 'Wooden Sword', type: 'tool', icon: 'sword', quality: 'wood' } as Item,
{ name: 'Iron Shovel', type: 'tool', icon: 'shovel', quality: 'iron' },
{ name: 'Iron Pick Axe', type: 'tool', icon: 'pick', quality: 'iron' },
{ name: 'Iron Sword', type: 'tool', icon: 'sword', quality: 'iron' },
tool_shovel_iron: { id: 'tool_shovel_iron', name: 'Iron Shovel', type: 'tool', icon: 'shovel', quality: 'iron' } as Item,
tool_pickaxe_iron: { id: 'tool_pickaxe_iron', name: 'Iron Pick Axe', type: 'tool', icon: 'pick', quality: 'iron' } as Item,
tool_sword_iron: { id: 'tool_sword_iron', name: 'Iron Sword', type: 'tool', icon: 'sword', quality: 'iron' } as Item,
{ name: 'Diamond Shovel', type: 'tool', icon: 'shovel', quality: 'diamond' },
{ name: 'Diamond Pick Axe', type: 'tool', icon: 'pick', quality: 'diamond' },
{ name: 'Diamond Sword', type: 'tool', icon: 'sword', quality: 'diamond' },
tool_shovel_diamond: { id: 'tool_shovel_diamond', name: 'Diamond Shovel', type: 'tool', icon: 'shovel', quality: 'diamond' } as Item,
tool_pickaxe_diamond: { id: 'tool_pickaxe_diamond', name: 'Diamond Pick Axe', type: 'tool', icon: 'pick', quality: 'diamond' } as Item,
tool_sword_diamond: { id: 'tool_sword_diamond', name: 'Diamond Sword', type: 'tool', icon: 'sword', quality: 'diamond' } as Item,
{ name: 'Wooden Shovel', type: 'tool', icon: 'shovel', quality: 'wood' },
{ name: 'Wooden Pick Axe', type: 'tool', icon: 'pick', quality: 'wood' },
{ name: 'Wooden Sword', type: 'tool', icon: 'sword', quality: 'wood' },
block_leaves: { id: 'block_leaves', name: 'leaves', type: 'block', icon: 'leaves', builds: 'treeLeaves' } as Item,
block_dirt: { id: 'block_dirt', name: 'dirt', type: 'block', icon: 'dirt', builds: 'soil' } as Item,
block_wood: { id: 'block_wood', name: 'wood', type: 'block', icon: 'wood', builds: 'treeTrunk' } as Item,
block_stone: { id: 'block_stone', name: 'stone', type: 'block', icon: 'stone', builds: 'brickWall' } as Item,
block_gravel: { id: 'block_gravel', name: 'gravel', type: 'block', icon: 'stone' /*, builds??? TODO */ } as Item,
{ name: 'leaves', type: 'block', icon: 'leaves', builds: 'treeLeaves' },
{ name: 'dirt', type: 'block', icon: 'dirt', builds: 'soil' },
{ name: 'wood', type: 'block', icon: 'wood', builds: 'treeTrunk' },
{ name: 'stone', type: 'block', icon: 'stone', builds: 'brickWall' },
{ name: 'gravel', type: 'block', icon: 'stone' }, // TODO
ore_coal: { id: 'ore_coal', name: 'coal', type: 'ore', icon: 'ore_coal' } as Item,
ore_iron: { id: 'ore_iron', name: 'iron', type: 'ore', icon: 'ore_iron' } as Item,
ore_silver: { id: 'ore_silver', name: 'silver', type: 'ore', icon: 'ore_silver' } as Item,
ore_gold: { id: 'ore_gold', name: 'gold', type: 'ore', icon: 'ore_gold' } as Item,
ore_ruby: { id: 'ore_ruby', name: 'ruby', type: 'ore', icon: 'ore_ruby' } as Item,
ore_diamond: { id: 'ore_diamond', name: 'diamond', type: 'ore', icon: 'ore_diamond' } as Item,
ore_emerald: { id: 'ore_emerald', name: 'emerald', type: 'ore', icon: 'ore_emerald' } as Item,
} as const
{ name: 'coal', type: 'ore', icon: 'ore_coal' },
{ name: 'iron', type: 'ore', icon: 'ore_iron' },
{ name: 'silver', type: 'ore', icon: 'ore_silver' },
{ name: 'gold', type: 'ore', icon: 'ore_gold' },
{ name: 'ruby', type: 'ore', icon: 'ore_ruby' },
{ name: 'diamond', type: 'ore', icon: 'ore_diamond' },
{ name: 'emerald', type: 'ore', icon: 'ore_emerald' },
]
export type ItemId = keyof typeof items
export const damage: Record<ItemQuality, number> = {
wood: 1,
iron: 3,
diamond: 5,
}
} as const
export function getItem(name: string, quality?: ItemQuality) {
const item = items.find(i => i.name === name)
if (item) {
return {
...item,
quality,
}
}
export function getItem(id: ItemId) {
return items[id]
}
export function getItemClass(item: InventoryItem) {

18
src/types.d.ts vendored
View file

@ -1,15 +1,10 @@
import type { ItemId } from './level/items'
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
id: string
name: string
type: ItemType
icon: string
quality?: ItemQuality
@ -28,8 +23,9 @@ export interface BlockItem extends Item {
export type BlockType =
| 'air' | 'grass'
| 'treeCrown' | 'treeLeaves' | 'treeTrunk' | 'treeRoot' | 'treeRootRight' | 'treeRootMiddle' | 'treeRootLeft'
| 'soil' | 'soilGravel' | 'stone' | 'stoneGravel'
| 'treeCrown' | 'treeLeaves' | 'treeTrunk' | 'treeRoot'
| 'soil' | 'soilGravel'
| 'stone' | 'stoneGravel'
| 'bedrock' | 'cave'
| 'brickWall'
@ -40,7 +36,7 @@ export type Block = {
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?
drops?: ItemId, // what do I get, when loot it?
}
// describes a changed block, eg digged or placed by the player