diff --git a/src/step.wgsl b/src/step.wgsl index 515aa78..f4ba49a 100644 --- a/src/step.wgsl +++ b/src/step.wgsl @@ -34,10 +34,23 @@ fn on_fragment(in: Varying) -> @location(0) vec4u { } } n -= state; - return vec4(rule(state.x, n.x), rule(state.y, n.y), rule(state.z, n.z), rule(state.w, n.w)); + + let z = daynight(state.z, n.z); + let px = life(state.x, n.x); + let nx = 1u - life(1u - state.x, 8u - n.x); + let x = z * px + (1u - z) * nx; + return vec4(x, 0, z, 0u); } -fn rule(state: u32, n: u32) -> u32{ +fn life(state: u32, n: u32) -> u32{ + switch (n) { + case 2u: { return state; } + case 3u: { return 1u; } + default: { return 0u; } + } +} + +fn daynight(state: u32, n: u32) -> u32{ switch (n) { case 3u: { return 1u; } case 4u: { return state; }