Sloped belts hold their load with moving cleats (t42); sloped filters are downhill shaking screens (t43)
The magic grip is gone: cleats every 8 face cells, 6 grains tall, carry pockets uphill (about 71 grains/s against 90 flat) and overflow rolls back. Sloped filters always run downhill; grains travel by gravity and a shake, and sorting stays exact. Drawing needs another pass. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -13,6 +13,7 @@ vec3 slopeCorner(vec2 p, vec2 a, float origin) {
|
||||
return vec3(radius - 1.85, origin + d.x, 2.0 + d.y);
|
||||
}
|
||||
vec3 slopeShape(vec2 p, vec2 worldOrigin, float grade, int joins) {
|
||||
if ((joins & 64) != 0) p.y -= 0.45;
|
||||
float sy = grade < 0.0 ? 4.0 : 0.0;
|
||||
vec2 a = vec2(-grade * 1.30814755, sy + 1.30814755), b = vec2(4.0 - grade * 1.30814755, 4.0 - sy + 1.30814755);
|
||||
if ((joins & 1) != 0) { a.y = sy + 2.0; a.x = (a.y - sy - 2.61629509) / grade; }
|
||||
@@ -52,11 +53,11 @@ const SM_SLOPE_DRAW = `
|
||||
vec2 local = floor(tag.gb * 255.0 + 0.5) - 8.0 + fract(w);
|
||||
vec3 shapePos = slopeShape(local, w - local, grade, joins);
|
||||
float sd = shapePos.x, axis = shapePos.y, depth = shapePos.z;
|
||||
float time = (joins & 16) != 0 ? uTime : 0.0;
|
||||
float time = !mesh && (joins & 16) != 0 ? uTime : 0.0;
|
||||
vec2 lb = vec2(axis, depth), alongWorld = vec2(axis, depth);
|
||||
float rg = step(0.72, fract((axis - dir * (depth < 2.0 ? 1.0 : -1.0) * time * 30.0) * 0.5));
|
||||
vec3 belt;
|
||||
if (-sd < 0.8) {
|
||||
if (-sd < (mesh ? 1.1 : 0.8)) {
|
||||
belt = bandColor(lb, rg);
|
||||
if (mesh && ((joins & 32) != 0) == (depth < 2.0) && dot(own.rgb, vec3(1)) > 0.01)
|
||||
belt = mix(belt, own.rgb * (depth < 2.0 ? 1.0 : 0.8), 0.75 * rg);
|
||||
|
||||
Reference in New Issue
Block a user