celebration
This commit is contained in:
parent
3d58a0663a
commit
da0284f294
3 changed files with 46 additions and 5 deletions
43
src/App.css
43
src/App.css
|
@ -72,7 +72,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.puzzle {
|
.puzzle {
|
||||||
--unit: min(0.5rem, 1.15vw);
|
--unit: min(0.5rem, 1vw);
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
gap: calc(1 * var(--unit));
|
gap: calc(1 * var(--unit));
|
||||||
|
@ -101,7 +101,7 @@
|
||||||
.puzzle-row {
|
.puzzle-row {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
height: calc(15 * var(--unit));
|
height: calc(12 * var(--unit));
|
||||||
gap: calc(1 * var(--unit));
|
gap: calc(1 * var(--unit));
|
||||||
}
|
}
|
||||||
.puzzle-item {
|
.puzzle-item {
|
||||||
|
@ -213,3 +213,42 @@ button:focus-visible, button:hover {
|
||||||
button:active {
|
button:active {
|
||||||
box-shadow: 0 0 3em -1.5em inset var(--color-foreground)
|
box-shadow: 0 0 3em -1.5em inset var(--color-foreground)
|
||||||
}
|
}
|
||||||
|
@keyframes spin {
|
||||||
|
from { transform: scale(1.5) rotate(-10deg) }
|
||||||
|
to { transform: scale(1.5) rotate(10deg) }
|
||||||
|
}
|
||||||
|
.celebration {
|
||||||
|
z-index: -1;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
&:before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
background-image: repeating-conic-gradient(
|
||||||
|
var(--group-yellow) 0deg 5deg,
|
||||||
|
var(--group-green) 5deg 10deg,
|
||||||
|
var(--group-blue) 10deg 15deg,
|
||||||
|
var(--group-purple) 15deg 20deg
|
||||||
|
);
|
||||||
|
animation: spin 2s linear infinite;
|
||||||
|
}
|
||||||
|
&:after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: 2rem;
|
||||||
|
right: 2rem;
|
||||||
|
bottom: 2rem;
|
||||||
|
left: 2rem;
|
||||||
|
background-color: var(--color-background);
|
||||||
|
box-shadow: 0 0 1rem 1rem var(--color-background);
|
||||||
|
border-radius: 1rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -133,6 +133,7 @@ function App() {
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
{ store.solvedGroups.length === 4 && <div class="celebration" /> }
|
||||||
</main>
|
</main>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,7 +64,8 @@ export default function useAppModel() {
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleGuess = () => {
|
const handleGuess = () => {
|
||||||
const selectedAnswers = store.selected.map((x) => getFromPuzzle(x));
|
const selected = store.puzzle.length === 4 ? [0, 1, 2, 3] : store.selected
|
||||||
|
const selectedAnswers = selected.map((x) => getFromPuzzle(x));
|
||||||
const { level } = selectedAnswers[0];
|
const { level } = selectedAnswers[0];
|
||||||
const isCorrect = selectedAnswers.every((x) => x.level === level);
|
const isCorrect = selectedAnswers.every((x) => x.level === level);
|
||||||
if (!isCorrect) {
|
if (!isCorrect) {
|
||||||
|
@ -72,14 +73,14 @@ export default function useAppModel() {
|
||||||
alert("wrong");
|
alert("wrong");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const selectedPinnedCount = store.selected.reduce(
|
const selectedPinnedCount = selected.reduce(
|
||||||
(acc, cur) => acc + (cur < store.pinnedCount ? 1 : 0),
|
(acc, cur) => acc + (cur < store.pinnedCount ? 1 : 0),
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
setStore({
|
setStore({
|
||||||
pinnedCount: store.pinnedCount - selectedPinnedCount,
|
pinnedCount: store.pinnedCount - selectedPinnedCount,
|
||||||
puzzle: store.puzzle.filter((x) =>
|
puzzle: store.puzzle.filter((x) =>
|
||||||
store.selected.every((s) => store.puzzle[s] !== x)
|
selected.every((s) => store.puzzle[s] !== x)
|
||||||
),
|
),
|
||||||
selected: [],
|
selected: [],
|
||||||
});
|
});
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue