implement brush cost gauges

they're a little ugly at the moment, and can be a little useless for most simple brushes, but whatever we'll make them better later
This commit is contained in:
りき萌 2024-10-25 21:38:18 +02:00
parent 43e6951f7d
commit 913d65b0a8
19 changed files with 378 additions and 65 deletions

View file

@ -15,7 +15,7 @@ main {
height: 100%;
position: relative;
&>.fullscreen {
& > .fullscreen {
width: 100%;
height: 100%;
max-width: 100%;
@ -25,23 +25,26 @@ main {
top: 0;
}
&>.panels {
& > .panels {
--right-width: 384px; /* Overridden by JavaScript */
box-sizing: border-box;
padding: 16px;
display: grid;
grid-template-columns: [left] 1fr [right-resize] auto [right] minmax(0, var(--right-width));
grid-template-columns: [left] 1fr [right-resize] auto [right] minmax(
0,
var(--right-width)
);
/* Pass all events through. Children may receive events as normal. */
pointer-events: none;
&>* {
& > * {
pointer-events: all;
}
&>.right {
& > .right {
grid-column: right / right;
min-height: 0;
@ -53,29 +56,41 @@ main {
pointer-events: none;
&>* {
& > * {
min-width: 0;
min-height: 0;
}
&>rkgk-resize-handle {
& > rkgk-resize-handle {
pointer-events: auto;
}
&>.docked>rkgk-brush-editor {
& > .docked > rkgk-brush-editor {
max-height: 100%;
pointer-events: auto;
}
&>.floating>rkgk-brush-preview {
width: 128px;
height: 128px;
pointer-events: auto;
& > .floating {
display: flex;
flex-direction: column;
gap: 12px;
& > rkgk-brush-preview {
width: 128px;
height: 128px;
pointer-events: auto;
}
& > rkgk-brush-cost-gauges {
width: 100%;
pointer-events: auto;
}
}
}
}
&>rkgk-canvas-renderer {
& > rkgk-canvas-renderer {
width: 100%;
height: 100%;
position: absolute;
@ -83,7 +98,7 @@ main {
top: 0;
}
&>rkgk-reticle-renderer {
& > rkgk-reticle-renderer {
width: 100%;
height: 100%;
position: absolute;
@ -92,7 +107,7 @@ main {
overflow: hidden;
}
&>#js-loading {
& > #js-loading {
background-color: var(--color-panel-background);
display: flex;
@ -111,7 +126,7 @@ rkgk-resize-handle {
cursor: col-resize;
&>.visual {
& > .visual {
width: 2px;
height: 100%;
background-color: var(--color-brand-blue);
@ -119,7 +134,8 @@ rkgk-resize-handle {
opacity: 0%;
}
&:hover>.visual, &.dragging>.visual {
&:hover > .visual,
&.dragging > .visual {
opacity: 100%;
}
}
@ -130,7 +146,7 @@ rkgk-resize-handle {
rkgk-canvas-renderer {
display: block;
&>canvas {
& > canvas {
display: block;
}
}
@ -142,7 +158,7 @@ rkgk-reticle-renderer {
pointer-events: none;
&>.reticles {
& > .reticles {
position: relative;
}
}
@ -153,15 +169,15 @@ rkgk-reticle-cursor {
position: absolute;
display: block;
&>.container {
&>.arrow {
& > .container {
& > .arrow {
width: 24px;
height: 24px;
background-color: var(--color);
clip-path: path("M 0,0 L 13,13 L 6,13 L 0,19 Z");
}
&>.nickname {
& > .nickname {
position: absolute;
top: 20px;
left: 8px;
@ -188,7 +204,7 @@ rkgk-code-editor {
overflow: auto;
&>.layer {
& > .layer {
position: absolute;
left: 0;
top: 0;
@ -203,7 +219,7 @@ rkgk-code-editor {
display: flex;
flex-direction: column;
&>.line {
& > .line {
flex-shrink: 0;
white-space: pre-wrap;
@ -211,14 +227,14 @@ rkgk-code-editor {
}
}
&>.layer-gutter {
& > .layer-gutter {
user-select: none;
counter-reset: line;
color: transparent;
&>.line {
& > .line {
display: flex;
flex-direction: row;
@ -241,27 +257,27 @@ rkgk-code-editor {
}
}
&>.layer:not(.layer-gutter) {
& > .layer:not(.layer-gutter) {
margin-left: var(--gutter-width);
width: calc(100% - var(--gutter-width));
}
&>.layer-error-squiggles {
& > .layer-error-squiggles {
color: transparent;
&>.line {
&>.squiggle {
& > .line {
& > .squiggle {
text-decoration: underline wavy black;
text-decoration-skip-ink: none;
}
&>.squiggle-error {
& > .squiggle-error {
text-decoration-color: var(--color-error);
}
}
}
&>textarea {
& > textarea {
display: block;
width: calc(100% - var(--gutter-width));
margin: 0;
@ -294,8 +310,8 @@ rkgk-brush-editor.rkgk-panel {
gap: 4px;
position: relative;
&>.text-area {
& > .text-area {
display: block;
width: 100%;
margin: 0;
@ -306,18 +322,19 @@ rkgk-brush-editor.rkgk-panel {
box-sizing: border-box;
}
&>.errors:empty, &>.error-header:empty {
& > .errors:empty,
& > .error-header:empty {
display: none;
}
&>.error-header {
& > .error-header {
margin: 0;
margin-top: 0.5em;
font-size: 1rem;
color: var(--color-error);
}
&>.errors {
& > .errors {
margin: 0;
color: var(--color-error);
white-space: pre-wrap;
@ -334,13 +351,19 @@ rkgk-brush-preview {
display: block;
position: relative;
background:
repeating-conic-gradient(var(--checkerboard-light) 0% 25%, var(--checkerboard-dark) 0% 50%)
background: repeating-conic-gradient(
var(--checkerboard-light) 0% 25%,
var(--checkerboard-dark) 0% 50%
)
50% 50% / var(--checkerboard-size) var(--checkerboard-size);
border-radius: 4px;
& > canvas {
border-radius: 4px;
}
&.error {
&>canvas {
& > canvas {
display: none;
}
@ -354,10 +377,53 @@ rkgk-brush-preview {
}
}
/* Brush cost gauges */
rkgk-brush-cost-gauges,
rkgk-brush-cost-gauges.rkgk-panel {
--gauge-size: 20px;
height: var(--gauge-size);
border-radius: 4px;
display: flex;
flex-direction: row;
overflow: clip; /* clip corners */
& > rkgk-brush-cost-gauge {
display: block;
height: var(--gauge-size);
flex-grow: 1;
& > .full {
width: 100%;
height: 100%;
clip-path: xywh(0 0 var(--progress) 100%);
background-color: var(--gauge-color);
}
&.code-size {
--gauge-color: var(--color-brand-blue);
}
&.fuel {
--gauge-color: #f44096;
}
&.objects {
--gauge-color: #fd9916;
}
&.memory {
--gauge-color: #5aca40;
}
}
}
/* Welcome screen */
rkgk-welcome {
&>dialog {
& > dialog {
h3 {
margin: 0.5rem 0;
font-size: 2rem;
@ -369,7 +435,8 @@ rkgk-welcome {
/* Connection status dialogs */
rkgk-connection-status {
&>dialog[name='logging-in-dialog'][open], &>dialog[name='disconnected-dialog'][open] {
& > dialog[name="logging-in-dialog"][open],
& > dialog[name="disconnected-dialog"][open] {
border: none;
outline: none;
background: none;
@ -379,8 +446,8 @@ rkgk-connection-status {
align-items: center;
}
&>dialog[name='error-dialog'][open] {
& textarea[name='error-text'] {
& > dialog[name="error-dialog"][open] {
& textarea[name="error-text"] {
box-sizing: border-box;
width: 100%;
resize: none;
@ -394,7 +461,7 @@ rkgk-connection-status {
.menu-bar {
--border-radius: 4px;
display: flex;
align-items: center;
box-sizing: border-box;
@ -403,9 +470,9 @@ rkgk-connection-status {
height: 24px;
border-radius: var(--border-radius);
&>a {
& > a {
display: block;
color: var(--color-text);
padding: 4px 8px;
text-decoration: none;
@ -432,11 +499,10 @@ rkgk-connection-status {
}
}
&>hr {
& > hr {
height: 100%;
margin: 0;
border: none;
border-right: 1px solid var(--color-panel-border);
}
}