Everything is a bit better
This commit is contained in:
@ -1,3 +1,6 @@
|
||||
import type { TileState } from '../types/tiles'
|
||||
import { createTileState } from './tileState'
|
||||
|
||||
interface Template {
|
||||
pattern: string
|
||||
weight: number
|
||||
@ -216,4 +219,17 @@ export function generateFormulaGrid(rows: number, cols: number, complexity: numb
|
||||
grid.push(row)
|
||||
}
|
||||
return grid
|
||||
}
|
||||
|
||||
export function generateTileGrid(rows: number, cols: number, complexity: number = 1): TileState[][] {
|
||||
const grid: TileState[][] = []
|
||||
for (let i = 0; i < rows; i++) {
|
||||
const row: TileState[] = []
|
||||
for (let j = 0; j < cols; j++) {
|
||||
const formula = generateRandomFormula(complexity)
|
||||
row.push(createTileState(formula))
|
||||
}
|
||||
grid.push(row)
|
||||
}
|
||||
return grid
|
||||
}
|
||||
46
src/utils/tileState.ts
Normal file
46
src/utils/tileState.ts
Normal file
@ -0,0 +1,46 @@
|
||||
import type { TileState } from '../types/tiles'
|
||||
import { engineSettings, effectSettings } from '../stores/settings'
|
||||
import { getDefaultEngineValues, getDefaultEffectValues } from '../config/effects'
|
||||
|
||||
export function createTileState(
|
||||
formula: string,
|
||||
engineParams?: Record<string, number>,
|
||||
effectParams?: Record<string, number | boolean | string>
|
||||
): TileState {
|
||||
return {
|
||||
formula,
|
||||
engineParams: engineParams ?? { ...getDefaultEngineValues() },
|
||||
effectParams: effectParams ?? { ...getDefaultEffectValues(), masterVolume: 75 }
|
||||
}
|
||||
}
|
||||
|
||||
export function createTileStateFromCurrent(formula: string): TileState {
|
||||
return {
|
||||
formula,
|
||||
engineParams: { ...engineSettings.get() },
|
||||
effectParams: { ...effectSettings.get() }
|
||||
}
|
||||
}
|
||||
|
||||
export function loadTileParams(tile: TileState): void {
|
||||
Object.entries(tile.engineParams).forEach(([key, value]) => {
|
||||
engineSettings.setKey(key as any, value)
|
||||
})
|
||||
|
||||
Object.entries(tile.effectParams).forEach(([key, value]) => {
|
||||
effectSettings.setKey(key as any, value as any)
|
||||
})
|
||||
}
|
||||
|
||||
export function saveTileParams(tile: TileState): void {
|
||||
tile.engineParams = { ...engineSettings.get() }
|
||||
tile.effectParams = { ...effectSettings.get() }
|
||||
}
|
||||
|
||||
export function cloneTileState(tile: TileState): TileState {
|
||||
return {
|
||||
formula: tile.formula,
|
||||
engineParams: { ...tile.engineParams },
|
||||
effectParams: { ...tile.effectParams }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user