From 8f281fbdf9c17af948280397e19c10e60b29d2e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Norman=20K=C3=B6hring?= Date: Mon, 17 Mar 2025 21:56:45 +0100 Subject: [PATCH] fancy background is back! --- src/App.vue | 27 ++++---- src/Background.vue | 9 ++- src/assets/field.css | 6 +- src/assets/mask.png | Bin 73717 -> 0 bytes src/util/useBackground.ts | 59 +++++++++++++---- src/util/{useLightMap.ts => useLightMask.ts} | 27 ++++++-- src/util/useTime.test.ts | 58 +++++++++++++++++ src/util/useTime.ts | 65 ++++++++++++++----- 8 files changed, 194 insertions(+), 57 deletions(-) delete mode 100644 src/assets/mask.png rename src/util/{useLightMap.ts => useLightMask.ts} (83%) create mode 100644 src/util/useTime.test.ts diff --git a/src/App.vue b/src/App.vue index 788cd73..fe1ad38 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,8 +1,9 @@ diff --git a/src/assets/field.css b/src/assets/field.css index ea85618..f824ed2 100644 --- a/src/assets/field.css +++ b/src/assets/field.css @@ -155,12 +155,14 @@ flex-flow: row wrap; } -#light-mask { +#parallax, #background, #light-mask { position: absolute; top: calc(var(--block-size) * -1); left: calc(var(--block-size) * -1); width: calc(100% + var(--block-size) * 2); height: calc(100% + var(--block-size) * 2); - mix-blend-mode: multiply; pointer-events: none; } +#light-mask { + mix-blend-mode: multiply; +} diff --git a/src/assets/mask.png b/src/assets/mask.png deleted file mode 100644 index 9a04caff0edc126af8a478eda0f6ed220ea652c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73717 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%0AYExn^`*138*Q#6+QLu%5u3|@ck(&8V^2|Dd9 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 -30) emissionStrength -= Math.max((30 + sunY) / 5, 0.0) else if (sunY < -60) emissionStrength += Math.min(1 + (60 + sunY) / 5, 0.0) - emissionGradient.addColorStop(.1, hsl(30, 50, 3.1 * emissionStrength)) // pixels in radius 0 to 4.4 (44 * .1). - emissionGradient.addColorStop(.2, hsl(12, 71, 1.4 * emissionStrength)) // pixels in radius 0 to 4.4 (44 * .1). - // Now paint the gradient all over our godrays canvas. + // pixels in radius 0 to 4.4 (44 * .1) + emissionGradient.addColorStop(.1, hsl(30, 50, 3.1 * emissionStrength)) + emissionGradient.addColorStop(.2, hsl(12, 71, 1.4 * emissionStrength)) + + // Now paint the gradient all over our godrays canvas ctx.fillRect(0, 0, w, h) - // And set the fillstyle to black, we'll use it to paint our occlusion (mountains). + + // And set the fillstyle to black, we'll use it to paint our occlusion (mountains) ctx.fillStyle = '#000' return emissionStrength @@ -51,8 +60,12 @@ function renderGodrays(ctx: CanvasRenderingContext2D, cx: number, cy: number, su * Mountains are made by summing up sine waves with varying frequencies and amplitudes * The frequencies are prime, to avoid extra repetitions */ -function calcMountainHeight(pos: number, roughness: number, frequencies = [1721, 947, 547, 233, 73, 31, 7]) { - return frequencies.reduce((height, freq) => height * roughness - Math.cos(freq * pos), 0) +function calcMountainHeight( + pos: number, + roughness: number, + freqs = [1721, 947, 547, 233, 73, 31, 7], +) { + return freqs.reduce((height, freq) => height * roughness - Math.cos(freq * pos), 0) } /** @@ -64,7 +77,14 @@ function calcMountainHeight(pos: number, roughness: number, frequencies = [1721, * @param layers: number - amount of mountain layers for parallax effect * @param emissionStrength: number - intensity of the godrays */ -function renderMountains(ctx: CanvasRenderingContext2D, grCtx: CanvasRenderingContext2D, frame: number, sunY: number, layers: number, emissionStrength: number) { +function renderMountains( + ctx: CanvasRenderingContext2D, + grCtx: CanvasRenderingContext2D, + frame: number, + sunY: number, + layers: number, + emissionStrength: number, +) { const w = ctx.canvas.width const h = ctx.canvas.height const grDiv = w / grCtx.canvas.width @@ -127,19 +147,27 @@ function renderSky(ctx: CanvasRenderingContext2D, sunY: number) { * @param rayQuality: number [8] - The quality of the sunrays (divides the resolution, so higher value means lower quality) * @param mountainLayers: number [4] - How many layers of mountains are used for parallax effect? */ -export default function useBackground (canvasEl: HTMLCanvasElement, w: number, h: number, rayQuality = 8, mountainLayers = 4) { +export default function useBackground( + canvasEl: HTMLCanvasElement, + w: number, + h: number, + rayQuality = 8, + mountainLayers = 4, +) { canvasEl.width = w canvasEl.height = h const grW = w / rayQuality const grH = h / rayQuality - const ctx = canvasEl.getContext('2d') - if (ctx === null) return () => {} // like, how old is your browser? - const grCanvasEl = document.createElement('canvas') + + const ctx = canvasEl.getContext('2d') const grCtx = grCanvasEl.getContext('2d') - if (grCtx === null) return () => {} // for real, how old is it? + if (ctx === null || grCtx === null) { + console.error('BACKGROUND CANVAS ERROR: Failed to set up canvas?!') + return () => {} // for real, how old is it? + } grCanvasEl.width = grW grCanvasEl.height = grH @@ -153,7 +181,10 @@ export default function useBackground (canvasEl: HTMLCanvasElement, w: number, h * @param sunY: number - the position (height) of the sun in the sky */ return function drawFrame (frame: number, sunY: number) { - console.log('drawing frame', frame, sunY) + ctx.globalCompositeOperation = grCtx.globalCompositeOperation = 'source-over' + ctx.clearRect(0, 0, w, h) + grCtx.clearRect(0, 0, grW, grH) + const emissionStrength = renderGodrays(grCtx, sunCenterX, sunCenterY, sunY) renderSky(ctx, sunY) renderMountains(ctx, grCtx, frame, sunY, mountainLayers, emissionStrength) diff --git a/src/util/useLightMap.ts b/src/util/useLightMask.ts similarity index 83% rename from src/util/useLightMap.ts rename to src/util/useLightMask.ts index 16bcf15..4c3a23e 100644 --- a/src/util/useLightMap.ts +++ b/src/util/useLightMask.ts @@ -3,7 +3,7 @@ import { BLOCK_SIZE, STAGE_WIDTH, STAGE_HEIGHT } from '../level/def' type RefOrComputed = Ref | ComputedRef -export default function useLightMap( +export default function useLightMask( ctx: CanvasRenderingContext2D, x: RefOrComputed, y: RefOrComputed, @@ -43,16 +43,29 @@ export default function useLightMap( } function drawPlayerLight(sizeMul:number) { + const t = time.value + const playerLight = ctx.createRadialGradient( playerX - tx.value, playerY - ty.value, 0, playerX - tx.value, playerY - ty.value, playerLightSize * sizeMul ) - // Add color stops: white in the center to transparent white - playerLight.addColorStop(0.0, "#FFFF"); - playerLight.addColorStop(0.4, "#FFFF"); - playerLight.addColorStop(0.7, "#FFFA"); - playerLight.addColorStop(1, "#FFF1"); + // Add color stops for a light around the player + // Night time, lets tone down the light a bit + if (t > 900 || t < 100) { + playerLight.addColorStop(0.7, "#AA7A"); + playerLight.addColorStop(1, "#AA70"); + + // Morning + } else if (t < 150) { + playerLight.addColorStop(0.7, "#CCAA"); + playerLight.addColorStop(1, "#CCA0"); + + // Day (neutral white) + } else { + playerLight.addColorStop(0.7, "#FFFA"); + playerLight.addColorStop(1, "#FFF0"); + } // Set the fill style and draw a rectangle ctx.fillStyle = playerLight; @@ -93,7 +106,7 @@ export default function useLightMap( return function update() { // first, throw the world in complete darkness - ctx.fillStyle = '#000' + ctx.fillStyle = '#000000' ctx.fillRect(0, 0, W, H) // second, find and bring light into the world diff --git a/src/util/useTime.test.ts b/src/util/useTime.test.ts new file mode 100644 index 0000000..a2e05ee --- /dev/null +++ b/src/util/useTime.test.ts @@ -0,0 +1,58 @@ +import { describe, it, expect } from 'vitest' +import { calcTimeOfDay, renderClock, calcSunAngle } from './useTime' + +describe('useTime composable', () => { + describe('clock', () => { + it('renders 2:00 at tick 0', () => { + expect(renderClock(0)).toEqual('2:00') + }) + it('renders 14:00 at tick 500', () => { + expect(renderClock(500)).toEqual('14:00') + }) + it('does not break on meanless values', () => { + expect(renderClock(9500)).toBeDefined() + expect(renderClock(-500)).toBeDefined() + }) + }) + describe('time of day', () => { + it('sets the correct time of day', () => { + expect(calcTimeOfDay(0)).toEqual('night') + expect(calcTimeOfDay(900)).toEqual('night') + expect(calcTimeOfDay(100)).toEqual('morning0') + expect(calcTimeOfDay(145)).toEqual('morning1') + expect(calcTimeOfDay(200)).toEqual('morning2') + expect(calcTimeOfDay(700)).toEqual('evening0') + expect(calcTimeOfDay(800)).toEqual('evening1') + expect(calcTimeOfDay(850)).toEqual('evening2') + expect(calcTimeOfDay(300)).toEqual('day') + expect(calcTimeOfDay(400)).toEqual('day') + expect(calcTimeOfDay(555)).toEqual('day') + }) + }) + describe('sun angle', () => { + it('returns -10 degrees over night', () => { + expect(calcSunAngle(900)).toEqual(-10) + expect(calcSunAngle(945)).toEqual(-10) + expect(calcSunAngle(0)).toEqual(-10) + expect(calcSunAngle(57)).toEqual(-10) + }) + it('returns -90 degrees over day', () => { + expect(calcSunAngle(250)).toEqual(-90) + expect(calcSunAngle(300)).toEqual(-90) + expect(calcSunAngle(557)).toEqual(-90) + expect(Math.round(calcSunAngle(699))).toEqual(-90) + }) + it('raises in the morning', () => { + expect(calcSunAngle(100)).toEqual(-20) + expect(calcSunAngle(150)).toEqual(-45) + expect(calcSunAngle(200)).toEqual(-70) + expect(calcSunAngle(240)).toEqual(-90) + }) + it('sinks in the evening', () => { + expect(calcSunAngle(700)).toEqual(-90) + expect(calcSunAngle(750)).toEqual(-70) + expect(calcSunAngle(800)).toEqual(-50) + expect(Math.round(calcSunAngle(899))).toEqual(-10) + }) + }) +}) diff --git a/src/util/useTime.ts b/src/util/useTime.ts index b817fc3..70c94cc 100644 --- a/src/util/useTime.ts +++ b/src/util/useTime.ts @@ -1,30 +1,59 @@ import { ref, computed } from 'vue' +type TimeOfDay = +| 'day' +| 'night' +| 'morning0' +| 'morning1' +| 'morning2' +| 'evening0' +| 'evening1' +| 'evening2' + +export function calcTimeOfDay(tick: number): TimeOfDay { + if (tick >= 900 || tick < 80) return 'night' + if (tick >= 80 && tick < 120) return 'morning0' + if (tick >= 120 && tick < 150) return 'morning1' + if (tick >= 150 && tick < 240) return 'morning2' + if (tick >= 700 && tick < 800) return 'evening0' + if (tick >= 800 && tick < 850) return 'evening1' + if (tick >= 850 && tick < 900) return 'evening2' + return 'day' +} + +export function renderClock(tick: number): string { + const t = tick * 86.4 // 1000 ticks to 86400 seconds (per day) + const h = ~~(t / 3600.0) + const m = ~~((t / 3600.0 - h) * 60.0) + return `${(h + 2) % 24}:${m < 10 ? '0' : ''}${m}` +} + +function calcProgress(tick: number, start: number, end: number, span: number): number { + return (tick - start) / (end - start) * span +} + +// calculates the suns angle from -90 (top, at noon), to 0 (at midnight) +export function calcSunAngle(tick: number): number { + // night time: -10 degrees fixed + if (tick >= 900 || tick < 80) return -10 + // sunrise: gradually move from -10 to -90, by mapping 80 -> 240 to -10 -> -90 + if (tick >= 80 && tick < 240) return -10 - calcProgress(tick, 80, 240, 80) + // sundawn: gradually move from -90 to -10, by mapping 700 -> 900 to -90 -> -10 + if (tick >= 700 && tick < 900) return -90 + calcProgress(tick, 700, 900, 80) + // day time: -90 degrees fixed + return -90 +} + export default function useTime() { // the day is split in 1000 parts, so we start in the morning - const time = ref(230) + const time = ref(250) function updateTime() { time.value = (time.value + 0.1) % 1000 } - const timeOfDay = computed(() => { - if (time.value >= 900 || time.value < 80) return 'night' - if (time.value >= 80 && time.value < 120) return 'morning0' - if (time.value >= 120 && time.value < 150) return 'morning1' - if (time.value >= 150 && time.value < 240) return 'morning2' - if (time.value >= 700 && time.value < 800) return 'evening0' - if (time.value >= 800 && time.value < 850) return 'evening1' - if (time.value >= 850 && time.value < 900) return 'evening2' - return 'day' - }) - - const clock = computed(() => { - const t = time.value * 86.4 // 1000 ticks to 86400 seconds (per day) - const h = ~~(t / 3600.0) - const m = ~~((t / 3600.0 - h) * 60.0) - return `${(h + 2) % 24}:${m < 10 ? '0' : ''}${m}` - }) + const timeOfDay = computed(() => calcTimeOfDay(time.value)) + const clock = computed(() => renderClock(time.value)) return { time, updateTime, timeOfDay, clock } }