import {createCanvas, drawRect, clipCanvas} from './gfx.js'; import {coords2index} from './math.js'; let cachedImageData; function cacheImageData(ctx) { const {width, height} = ctx.canvas; cachedImageData = ctx.getImageData(0, 0, width, height); } export function createTerrain(width, height) { const terrain = createCanvas(width, height); generateTerrain(terrain); return terrain; } export function generateTerrain(ctx) { const {width, height} = ctx.canvas; for (let x=0; x 0) land++; } ctx.clearRect(left+x, 0, 1, height); drawRect(ctx, left+x, height-land, 1, land, 'burlywood'); } cacheImageData(ctx); } export function isTerrain(ctx, x, y) { const index = coords2index(ctx.canvas.width, x, y) * 4; return cachedImageData.data[index+3] > 0; } export function closestLand(ctx, x, y) { const {width, height} = ctx.canvas; for (let i=y; i=0; i--) { const index = coords2index(width, x, i) * 4; if (cachedImageData.data[index+3] === 0) return i; } } export function clipTerrain(ctx, fn) { clipCanvas(ctx, fn); cacheImageData(ctx); }