feat: make some shit more prettier

This commit is contained in:
max_richter 2024-03-06 19:44:37 +01:00
parent 3512f4b8c4
commit c355d0c955
7 changed files with 77 additions and 28 deletions

View File

@ -42,6 +42,10 @@ float circle_grid(float x, float y, float divisions, float circleRadius) {
return circle; return circle;
} }
float lerp(float a, float b,float t) {
return a * (1.0 - t) + b * t;
}
void main(void) { void main(void) {
float divisions = 0.1/cz; float divisions = 0.1/cz;
float thickness = 0.05/cz; float thickness = 0.05/cz;
@ -52,23 +56,35 @@ void main(void) {
float ux = (vUv.x-0.5) * width + cx*cz; float ux = (vUv.x-0.5) * width + cx*cz;
float uy = (vUv.y-0.5) * height - cy*cz; float uy = (vUv.y-0.5) * height - cy*cz;
float c1 = grid(ux, uy, divisions, thickness) * 0.1;
//extra small grid
float m1 = grid(ux, uy, divisions*4.0, thickness*4.0) * 0.1;
float m2 = grid(ux, uy, divisions*16.0, thickness*16.0) * 0.03;
float xsmall = max(m1, m2);
float s3 = circle_grid(ux, uy, cz/1.6, 1.0) * 0.2;
xsmall = max(xsmall, s3);
// small grid
float c1 = grid(ux, uy, divisions, thickness) * 0.2;
float c2 = grid(ux, uy, divisions*2.0, thickness) * 0.1; float c2 = grid(ux, uy, divisions*2.0, thickness) * 0.1;
float small = max(c1, c2); float small = max(c1, c2);
float s1 = circle_grid(ux, uy, cz*10.0, 2.0) * 0.2; float s1 = circle_grid(ux, uy, cz*10.0, 2.0) * 0.2;
small = max(small, s1); small = max(small, s1);
// large grid
float c3 = grid(ux, uy, divisions/8.0, thickness/8.0) * 0.1;
float c4 = grid(ux, uy, divisions/2.0, thickness/4.0) * 0.05;
float large = max(c3, c4);
float c3 = grid(ux, uy, divisions, thickness) * 0.1; float s2 = circle_grid(ux, uy, cz*20.0, 1.0) * 0.2;
float c4 = grid(ux, uy, divisions*2.0, thickness) * 0.1;
float large = max(c1, c2);
float s2 = circle_grid(ux, uy, cz*10.0, 2.0) * 0.2;
large = max(large, s2); large = max(large, s2);
float c = large; float c = mix(large, small, min(nz*2.0+0.05, 1.0));
c = mix(c, xsmall, max(min((nz-0.3)/0.7, 1.0), 0.0));
//c = xsmall;
gl_FragColor = vec4(c, c, c, 1.0); gl_FragColor = vec4(c, c, c, 1.0);
} }

View File

@ -41,10 +41,10 @@
cz: { cz: {
value: 30, value: 30,
}, },
minz: { minZ: {
value: minZoom, value: minZoom,
}, },
maxz: { maxZ: {
value: maxZoom, value: maxZoom,
}, },
height: { height: {

View File

@ -17,6 +17,7 @@
position[0] = camera.position.x; position[0] = camera.position.x;
position[1] = camera.position.z; position[1] = camera.position.z;
position[2] = camera.zoom; position[2] = camera.zoom;
saveControls(); saveControls();
} }

View File

@ -7,7 +7,7 @@
export let from: Node; export let from: Node;
export let to: Node; export let to: Node;
let samples = 20; let samples = 25;
const curve = new CubicBezierCurve( const curve = new CubicBezierCurve(
new Vector2(from.position.x + 20, from.position.y), new Vector2(from.position.x + 20, from.position.y),
@ -31,10 +31,10 @@
last_from_x = new_x; last_from_x = new_x;
last_from_y = new_y; last_from_y = new_y;
} }
curve.v0.set(from.position.x + 5, from.position.y + 5 / 8); curve.v0.set(from.position.x + 5, from.position.y + 0.67);
curve.v1.set(from.position.x + 7, from.position.y + 5 / 8); curve.v1.set(from.position.x + 7, from.position.y + 0.67);
curve.v2.set(to.position.x - 2, to.position.y + 2.55); curve.v2.set(to.position.x - 2, to.position.y + 2.55);
curve.v3.set(to.position.x + 0.2, to.position.y + 2.55); curve.v3.set(to.position.x, to.position.y + 2.55);
points = curve.getPoints(samples).map((p) => new Vector3(p.x, 0, p.y)); points = curve.getPoints(samples).map((p) => new Vector3(p.x, 0, p.y));
} }
@ -44,7 +44,27 @@
} }
</script> </script>
<T.Mesh> <T.Mesh
<MeshLineGeometry {points} /> position.x={from.position.x + 5}
<MeshLineMaterial width={1} attenuate={false} color={0xffffff} /> position.z={from.position.y + 0.67}
position.y={0.8}
rotation.x={-Math.PI / 2}
>
<T.CircleGeometry args={[0.1, 32]} />
<T.MeshBasicMaterial color={0xffffff} />
</T.Mesh>
<T.Mesh
position.x={to.position.x}
position.z={to.position.y + 2.55}
position.y={0.8}
rotation.x={-Math.PI / 2}
>
<T.CircleGeometry args={[0.1, 32]} />
<T.MeshBasicMaterial color={0xffffff} />
</T.Mesh>
<T.Mesh position.y={0.5}>
<MeshLineGeometry {points} />
<MeshLineMaterial width={1} attenuate={false} color={0x555555} />
</T.Mesh> </T.Mesh>

View File

@ -47,8 +47,12 @@
(event.clientY - mouseDownY) / cameraPosition[2]; (event.clientY - mouseDownY) / cameraPosition[2];
if (event.ctrlKey) { if (event.ctrlKey) {
newX = snapToGrid(newX, 2.5); const targets = [1, 2, 4, 8];
newY = snapToGrid(newY, 2.5); const index = Math.floor(
((cameraPosition[2] - 4) / (150 - 4)) * targets.length * 0.999,
);
newX = snapToGrid(newX, 5 / targets[index]);
newY = snapToGrid(newY, 5 / targets[index]);
} }
node.position.x = newX; node.position.x = newX;
node.position.y = newY; node.position.y = newY;

View File

@ -42,7 +42,7 @@
height="100" height="100"
preserveAspectRatio="none" preserveAspectRatio="none"
style={` style={`
--path: path("${createPath({ depth: 3, height: 15 })}"); --path: path("${createPath({ depth: 5, height: 27 })}");
--hover-path: path("${createPath({ depth: 8, height: 24 })}"); --hover-path: path("${createPath({ depth: 8, height: 24 })}");
`} `}
> >
@ -80,6 +80,8 @@
stroke-width: 0.2px; stroke-width: 0.2px;
transition: 0.2s; transition: 0.2s;
fill: #060606; fill: #060606;
stroke: #777;
stroke-width: 0.1;
d: var(--path); d: var(--path);
} }
@ -87,7 +89,7 @@
font-size: 0.5em; font-size: 0.5em;
display: flex; display: flex;
align-items: center; align-items: center;
padding-left: 2px; padding-left: 5px;
height: 100%; height: 100%;
} }

View File

@ -45,7 +45,7 @@
<div class="content"> <div class="content">
<label>{label}</label> <label>{label}</label>
<input type="number" bind:value /> <div class="input">input</div>
</div> </div>
<svg <svg
@ -59,12 +59,7 @@
--hover-path: path("${createPath({ depth: 8, height: 24 })}"); --hover-path: path("${createPath({ depth: 8, height: 24 })}");
`} `}
> >
<path <path vector-effect="non-scaling-stroke"></path>
vector-effect="non-scaling-stroke"
fill="none"
stroke="white"
stroke-width="0.1"
></path>
</svg> </svg>
</div> </div>
@ -91,6 +86,15 @@
box-sizing: border-box; box-sizing: border-box;
} }
.input {
width: 100%;
box-sizing: border-box;
border-radius: 2px;
font-size: 0.5em;
padding: 2px 2px;
background: #111;
}
label { label {
font-size: 0.5em; font-size: 0.5em;
} }
@ -111,6 +115,8 @@
stroke-width: 0.2px; stroke-width: 0.2px;
transition: 0.2s; transition: 0.2s;
fill: #060606; fill: #060606;
stroke: #777;
stroke-width: 0.1;
d: var(--path); d: var(--path);
} }