Two teams try and fill in any horizontal, vertical, or diagonal line on a bingo board by playing maps on osu! osu.bingo
osu
at main 96 lines 2.6 kB view raw
1<script lang="ts"> 2 import { backInOut, circInOut } from 'svelte/easing'; 3 import { tweened } from 'svelte/motion'; 4 5 export let size = 100; 6 export let duration = 300; 7 8 const slide = tweened(0, { 9 easing: circInOut, 10 duration 11 }); 12 const rotate = tweened(90, { 13 easing: backInOut, 14 duration 15 }); 16 17 const animate = async () => { 18 const sleep = async (t: number) => await new Promise((r) => setTimeout(r, t)); 19 rotate.set(0, { duration: 0 }); 20 slide.set(0, { duration: 0 }); 21 slide.set(1); 22 await sleep(duration); 23 rotate.set(90, { duration: 0 }); 24 slide.set(0, { duration: 0 }); 25 slide.set(1); 26 await sleep(duration); 27 rotate.set(90 * 2, { duration: 0 }); 28 slide.set(0, { duration: 0 }); 29 slide.set(1); 30 await sleep(duration); 31 rotate.set(90 * 3, { duration: 0 }); 32 slide.set(0, { duration: 0 }); 33 slide.set(1); 34 await sleep(duration); 35 rotate.set(90 * 5, { duration: duration * 3 }); 36 }; 37 38 setInterval(animate, duration * 7.5); 39 animate(); 40</script> 41 42<div 43 style="--s: {size / 3}px; --s3: {size}px; --r: {$rotate}deg; --b: {size / 50}px" 44 class="size-[var(--s3)] rotate-[var(--r)]" 45> 46 <div class="relative h-[var(--s)] w-[var(--s3)] overflow-hidden"> 47 <div style="--x: calc(-100% + {$slide} * 100%); --y: 0%" class="squarebox"> 48 <div class="square bg-pink-300"></div> 49 </div> 50 <div style="--x: calc({$slide} * 100%); --y: 0%" class="squarebox"> 51 <div class="square bg-pink-300"></div> 52 </div> 53 <div style="--x: calc(100% + {$slide} * 100%); --y: 0%" class="squarebox"> 54 <div class="square bg-pink-300"></div> 55 </div> 56 <div style="--x: calc(200% + {$slide} * 100%); --y: 0%" class="squarebox"> 57 <div class="square bg-pink-300"></div> 58 </div> 59 </div> 60 <div style="--x: 0%; --y: 0%" class="squarebox"> 61 <div class="square bg-pink-300"></div> 62 </div> 63 <div style="--x: 100%; --y: 0%" class="squarebox"> 64 <div class="square bg-white"></div> 65 </div> 66 <div style="--x: 200%; --y: 0%" class="squarebox"> 67 <div class="square bg-pink-300"></div> 68 </div> 69 <div style="--x: 0%; --y: 0%" class="squarebox"> 70 <div class="square bg-pink-300"></div> 71 </div> 72 <div style="--x: 0%; --y: 100%" class="squarebox"> 73 <div class="square bg-pink-300"></div> 74 </div> 75 <div style="--x: 100%; --y: 100%" class="squarebox"> 76 <div class="square bg-pink-300"></div> 77 </div> 78 <div style="--x: 200%; --y: 100%" class="squarebox"> 79 <div class="square bg-pink-300"></div> 80 </div> 81</div> 82 83<style> 84 .squarebox { 85 position: absolute; 86 width: var(--s); 87 height: var(--s); 88 padding: var(--b); 89 transform: translate(var(--x), var(--y)); 90 } 91 .square { 92 width: 100%; 93 height: 100%; 94 border-radius: calc(2 * var(--b)); 95 } 96</style>