Zelda64Recomp/assets/scss/styles/components/InputConfig.scss

348 lines
6.2 KiB
SCSS

@use 'sass:math';
// Probably will need to adjust for other langs...
$mapping-min-width: 80 * 8;
$visual-max-width: $base-modal-max-width - $mapping-min-width - $scrollbar-width;
.input-config {
padding: 0;
}
.input-config__horizontal-split {
display: flex;
position: relative;
flex-direction: row;
height: 100%;
}
.input-config__mappings {
display: block;
flex: 1 1 auto;
min-width: space($mapping-min-width);
height: 100%;
}
.input-config__mappings-scroll {
display: block;
width: 100%;
max-height: 100%;
overflow-y: auto;
}
.input-config__mappings-wrapper {
padding: space(8);
}
.input-config__visual-wrapper {
display: block;
flex: 1 1 100%;
width: auto;
max-width: space($visual-max-width);
height: auto;
max-height: space(math.div($visual-max-width, 4) * 3);
margin: auto 0;
}
.input-config__visual-aspect {
position: relative;
width: 100%;
margin: auto 0;
padding-bottom: 75%;
background-color: $color-bg-shadow;
}
.input-config__visual {
display: flex;
position: absolute;
top: space(16);
right: space(16);
bottom: space(16);
left: space(16);
flex-direction: column;
border-radius: space(108);
background-color: $color-white-a5;
}
.input-config__visual-half {
display: flex;
position: relative;
flex: 1 1 100%;
flex-direction: row;
padding: 6%;
&--bottom {
align-items: flex-end;
justify-content: space-between;
}
}
.input-config__visual-quarter-left {
display: flex;
flex: 1 1 50%;
align-items: flex-start;
justify-content: flex-start;
width: auto;
}
.input-config__visual-quarter-right {
display: flex;
flex: 1 1 100%;
align-items: flex-start;
justify-content: flex-end;
}
.input-config__visual-stick-wrapper {
display: flex;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
align-items: center;
justify-content: center;
}
.input-viz {
@include trans-colors-opa;
display: flex;
position: relative;
align-items: center;
justify-content: center;
> svg:not(.input-viz__dpad-arrow) {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
}
&__mappings div {
@extend %prompt-font-sm;
}
}
$all-inputs: A,
B,
Z,
START,
DPAD_UP,
DPAD_DOWN,
DPAD_LEFT,
DPAD_RIGHT,
L,
R,
C_UP,
C_DOWN,
C_LEFT,
C_RIGHT,
X_AXIS_NEG,
X_AXIS_POS,
Y_AXIS_NEG,
Y_AXIS_POS;
// Show default state while no inputs are active
[cur-input="NONE"] .input-viz[visual-input] {
opacity: 1;
}
@each $inp in $all-inputs {
.input-viz[visual-input~="#{$inp}"] {
opacity: 0.25;
[cur-input="#{$inp}"] & {
opacity: 1.0;
}
}
}
@mixin set-sizes($sz) {
width: space($sz);
height: space($sz);
> svg {
width: space($sz);
height: space($sz);
}
}
.input-viz__button {
@include set-color($color-text);
&--sm {
@include set-sizes(64);
}
&--md {
@include set-sizes(76);
}
&--lg {
@include set-sizes(84);
}
&--C {
@include set-svgs-color($color-warning);
}
&--A {
@include set-svgs-color($color-a);
margin-top: auto;
}
&--B {
@include set-svgs-color($color-success);
}
&--Start {
@include set-svgs-color($color-error);
}
}
.input-viz__Z {
@include set-svgs-color($color-warning);
@include set-sizes(136);
}
$dpad-size: 192;
.input-viz.input-viz__dpad {
@include set-svgs-color($color-text);
@include set-sizes($dpad-size);
position: relative;
}
$stick-size: 200;
.input-config__visual-stick {
display: flex;
position: relative;
align-items: center;
justify-content: center;
width: space($stick-size);
height: space($stick-size);
border-radius: space(math.div($stick-size, 2));
background-color: $color-white-a5;
}
.input-viz__dpad-split,
.input-viz__stick-split {
@include inset-block(0);
display: flex;
width: 100%;
height: 100%;
&--vertical {
flex-direction: column;
align-items: center;
justify-content: space-between;
}
&--horizontal {
flex-direction: row;
align-items: center;
justify-content: space-between;
}
> div {
display: flex;
flex: 1 1 100%;
flex-direction: row;
align-items: center;
justify-content: center;
}
}
.input-viz__dpad-split > div {
width: space(math.div($dpad-size, 3));
height: space(math.div($dpad-size, 3));
}
.input-viz__stick-split > div {
width: space(math.div($stick-size, 3));
height: space(math.div($stick-size, 3));
}
.input-viz__dpad-arrow {
$edge-dist: space(4);
position: absolute;
width: space(60);
height: space(60);
&--up {
top: $edge-dist;
margin: 0 auto;
}
&--down {
bottom: $edge-dist;
margin: 0 auto;
transform: rotate(180deg);
}
&--left {
left: $edge-dist;
margin: auto 0;
transform: rotate(-90deg);
}
&--right {
right: $edge-dist;
margin: auto 0;
transform: rotate(90deg);
}
}
.input-viz__R {
@include set-svgs-color($color-white);
@include set-sizes(96);
}
.input-viz__L {
@include set-svgs-color($color-secondary);
@include set-sizes(136);
}
.input-config__c-buttons {
position: relative;
width: space(76 + 76 + 56);
height: space(76 + 56);
&-lr, &-du {
display: flex;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
}
&-lr {
flex-direction: row;
align-items: flex-start;
justify-content: space-between;
}
&-du {
flex-direction: column-reverse;
align-items: center;
justify-content: space-between;
}
.input-viz {
&[visual-input="C_UP"] {
margin-top: space(-32);
}
}
}
.input-config__main-buttons {
display: flex;
position: relative;
flex-direction: row;
justify-content: space-between;
width: space(268);
height: space(128);
margin-right: space(10);
}