cursor adventure: ending done, weird order ik
This commit is contained in:
parent
cd939b56d9
commit
a0d5deed75
6 changed files with 153 additions and 53 deletions
22
html/cursor-adventure.tsx
Normal file
22
html/cursor-adventure.tsx
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
import { JSX } from "preact/jsx-runtime";
|
||||||
|
import { Main, render_and_copy } from "./common.tsx";
|
||||||
|
import { ComponentChild, ComponentChildren, toChildArray } from "preact";
|
||||||
|
|
||||||
|
// i could also have the circle spin and the cursor stay in place :O
|
||||||
|
// but that would lose the interactive aspect D:
|
||||||
|
// one-time ease-in could be a nice effect
|
||||||
|
// maze thing with cursors
|
||||||
|
// something like loz statue pointing
|
||||||
|
|
||||||
|
// gonna need to plan this out for it to be fun
|
||||||
|
// (no real order)
|
||||||
|
// 1. grid layout (will pay dividends)
|
||||||
|
// 2. obvious start location
|
||||||
|
// 3. say sorry to mobile users in title (switching to a different device is so good for engagement this will be great for quarterly metrics)
|
||||||
|
// 4. choices!
|
||||||
|
// 5. maybe generate a decent-sized set of arrows (like box-drawing characters)
|
||||||
|
// 6. easter eggs with stuff you couldn't get to on the main path
|
||||||
|
// 7. LINK AS THE FINAL DESTINATION
|
||||||
|
// 8. RESIST (FAIL?) THE TEMPTATION TO MAKE THAT LINK A RICK ROLL
|
||||||
|
// 9. this exists? https://www.cursor.cc/?action=icon&file_id=54078
|
||||||
|
render_and_copy(<Main style={{ width: "100%", aspectRatio: "1" }}></Main>);
|
|
@ -1,53 +0,0 @@
|
||||||
import { JSX } from "preact/jsx-runtime";
|
|
||||||
import { Main, render_and_copy } from "./common.tsx";
|
|
||||||
import { ComponentChild, ComponentChildren, toChildArray } from "preact";
|
|
||||||
|
|
||||||
const Circle = ({
|
|
||||||
style,
|
|
||||||
children,
|
|
||||||
}: {
|
|
||||||
style?: JSX.CSSProperties;
|
|
||||||
children?: ComponentChildren;
|
|
||||||
}) => {
|
|
||||||
let children_: ComponentChild[] = toChildArray(children);
|
|
||||||
if (children_.length > 0) {
|
|
||||||
const turn_per_child = 1 / children_.length;
|
|
||||||
children_ = children_.map((c, i) => (
|
|
||||||
<div
|
|
||||||
style={{
|
|
||||||
transform: `translate(50%, 50%) rotate(${
|
|
||||||
turn_per_child * i
|
|
||||||
}turn)`,
|
|
||||||
width: "fit-content",
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
{c}
|
|
||||||
</div>
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
return (
|
|
||||||
<div
|
|
||||||
style={{
|
|
||||||
aspectRatio: "1",
|
|
||||||
borderRadius: "413413px",
|
|
||||||
marginLeft: "auto",
|
|
||||||
marginRight: "auto",
|
|
||||||
...style,
|
|
||||||
}}
|
|
||||||
children={children_}
|
|
||||||
></div>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
render_and_copy(
|
|
||||||
<Main style={{ width: "100%", aspectRatio: "1" }}>
|
|
||||||
<Circle style={{ backgroundColor: "red" }}>
|
|
||||||
<div>hello</div>
|
|
||||||
<div>hello</div>
|
|
||||||
<div>hello</div>
|
|
||||||
<div>hello</div>
|
|
||||||
<div>hello</div>
|
|
||||||
</Circle>
|
|
||||||
</Main>
|
|
||||||
);
|
|
131
static/cursor-fun-end/index.html
Normal file
131
static/cursor-fun-end/index.html
Normal file
|
@ -0,0 +1,131 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>RICK ROLL OF COURSE</title>
|
||||||
|
<style>
|
||||||
|
* {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
width: 100vw;
|
||||||
|
height: 100vh;
|
||||||
|
background-color: #a4a3ae;
|
||||||
|
transition: 1s background-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
.absolute-center {
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.initially-hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#lemonsnout {
|
||||||
|
animation: explode 3s ease-in;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes explode {
|
||||||
|
0% {
|
||||||
|
transform: scale(0%);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
transform: scale(100%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script>
|
||||||
|
function sleep(ms) {
|
||||||
|
return new Promise(resolve => setTimeout(resolve, ms));
|
||||||
|
}
|
||||||
|
|
||||||
|
function hide(id) {
|
||||||
|
document.getElementById(id).style.display = "none";
|
||||||
|
}
|
||||||
|
|
||||||
|
function show(id) {
|
||||||
|
document.getElementById(id).style.display = "block";
|
||||||
|
}
|
||||||
|
|
||||||
|
function set_bg(color) {
|
||||||
|
document.body.style.backgroundColor = color;
|
||||||
|
}
|
||||||
|
function set_title(title) {
|
||||||
|
document.title = title;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function main() {
|
||||||
|
await sleep(3500);
|
||||||
|
hide("rickroll");
|
||||||
|
show("psyche");
|
||||||
|
set_title("PSYCHE");
|
||||||
|
set_bg("#136602");
|
||||||
|
|
||||||
|
await sleep(3000);
|
||||||
|
hide("psyche");
|
||||||
|
show("shill");
|
||||||
|
set_title("i like it a lot :]");
|
||||||
|
set_bg("#5ae93d");
|
||||||
|
|
||||||
|
await sleep(10000);
|
||||||
|
hide("shill");
|
||||||
|
show("2x-psyche");
|
||||||
|
set_title("OHHHHHHH YOU JUST GOT GOT");
|
||||||
|
set_bg("#b57fc4");
|
||||||
|
|
||||||
|
await sleep(1000);
|
||||||
|
show("lemonsnout-container");
|
||||||
|
set_title("oh hi lemonsnout :D");
|
||||||
|
|
||||||
|
await sleep(3200);
|
||||||
|
window.location.replace(
|
||||||
|
"https://www.youtube.com/watch?v=dQw4w9WgXcQ"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
window.onload = main;
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<img
|
||||||
|
id="rickroll"
|
||||||
|
class="absolute-center"
|
||||||
|
src="https://media.tenor.com/x8v1oNUOmg4AAAAd/rickroll-roll.gif"
|
||||||
|
alt="young rick astley from the famous rick roll dancing"
|
||||||
|
/>
|
||||||
|
<img
|
||||||
|
id="psyche"
|
||||||
|
class="absolute-center initially-hidden"
|
||||||
|
src="./psyche.png"
|
||||||
|
alt="large, green, pixelated text that says PSYCHE"
|
||||||
|
/>
|
||||||
|
<div id="shill" class="absolute-center initially-hidden">
|
||||||
|
<p>i just want you to read homestuck :]</p>
|
||||||
|
<a href="https://bambosh.dev/unofficial-homestuck-collection"
|
||||||
|
>offline (best)</a
|
||||||
|
>
|
||||||
|
<a href="https://homestuck.giovanh.com"
|
||||||
|
>online (easier, also really cool)</a
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
<img
|
||||||
|
id="2x-psyche"
|
||||||
|
class="absolute-center initially-hidden"
|
||||||
|
src="./x2-double-psycheout-combo.png"
|
||||||
|
alt="large, yellow and purple, pixelated text that says x2 DOUBLE PSYCHEOUT COMBO!!"
|
||||||
|
/>
|
||||||
|
<div class="absolute-center initially-hidden" id="lemonsnout-container">
|
||||||
|
<img
|
||||||
|
id="lemonsnout"
|
||||||
|
src="./large-lemonsnout.png"
|
||||||
|
alt="a very close pic of lemonsnout's head"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
BIN
static/cursor-fun-end/large-lemonsnout.png
Normal file
BIN
static/cursor-fun-end/large-lemonsnout.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.6 KiB |
BIN
static/cursor-fun-end/psyche.png
Normal file
BIN
static/cursor-fun-end/psyche.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 968 B |
BIN
static/cursor-fun-end/x2-double-psycheout-combo.png
Normal file
BIN
static/cursor-fun-end/x2-double-psycheout-combo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.9 KiB |
Loading…
Reference in a new issue