2023-12-02 22:35:52 -05:00
|
|
|
import { render_and_copy } from "./common.tsx";
|
|
|
|
|
|
|
|
const msg = `nice argument dweebus however i have already
|
|
|
|
used cohost's css capabilities to make an
|
|
|
|
animation of your post getting hit by a truck and
|
|
|
|
scattering letters everywhr`.split("\n");
|
|
|
|
|
|
|
|
// i like the freezing effect, but it's probably not right here;
|
2023-12-02 23:06:31 -05:00
|
|
|
const explode_transform = (): [string, string] => {
|
2023-12-02 23:29:11 -05:00
|
|
|
const [x, y, turns] = [
|
|
|
|
Math.random() * 20 + 35,
|
|
|
|
(Math.random() - 0.5) * 10,
|
|
|
|
Math.random() * 10,
|
2023-12-02 23:06:31 -05:00
|
|
|
];
|
|
|
|
|
|
|
|
return [
|
2023-12-02 23:29:11 -05:00
|
|
|
`translate(${x.toFixed(2)}rem, ${y.toFixed(
|
2023-12-02 23:06:31 -05:00
|
|
|
2
|
2023-12-02 23:29:11 -05:00
|
|
|
)}rem) rotate(${turns.toFixed(2)}turn)`,
|
|
|
|
`rotate(${-turns.toFixed(2)}turn) translate(${-x.toFixed(
|
2023-12-02 23:06:31 -05:00
|
|
|
2
|
2023-12-02 23:29:11 -05:00
|
|
|
)}rem, ${-y.toFixed(2)}rem)`,
|
2023-12-02 23:06:31 -05:00
|
|
|
];
|
|
|
|
};
|
2023-12-02 22:35:52 -05:00
|
|
|
|
|
|
|
const Line = ({
|
|
|
|
children,
|
|
|
|
width_ratio,
|
|
|
|
length_s,
|
|
|
|
delay_s,
|
|
|
|
}: {
|
|
|
|
children: string;
|
|
|
|
width_ratio: number;
|
|
|
|
length_s: number;
|
|
|
|
delay_s: number;
|
|
|
|
}) => (
|
2023-12-02 23:06:31 -05:00
|
|
|
<div style={{ whiteSpace: "pre", perspective: "3cm" }}>
|
2023-12-02 22:35:52 -05:00
|
|
|
{...(() => {
|
|
|
|
// we're pretending that everything is the same length (we'll see if this works)
|
2023-12-02 23:29:11 -05:00
|
|
|
const delay_per = length_s / 160;
|
|
|
|
const all_delay = (length_s * (1 - width_ratio)) / 3 - 0.2;
|
2023-12-02 23:06:31 -05:00
|
|
|
console.log(delay_per, all_delay);
|
2023-12-02 22:35:52 -05:00
|
|
|
|
2023-12-02 23:06:31 -05:00
|
|
|
return [...children].map((c, i) => {
|
|
|
|
const [trans, inv_trans] = explode_transform();
|
|
|
|
return (
|
|
|
|
<span
|
|
|
|
style={{
|
2023-12-02 23:29:11 -05:00
|
|
|
transform: trans,
|
2023-12-02 23:06:31 -05:00
|
|
|
display: "inline-block",
|
2023-12-02 23:29:11 -05:00
|
|
|
animation: `spin 0.5s ${(
|
|
|
|
delay_per * (children.length - i) +
|
|
|
|
delay_s +
|
|
|
|
all_delay
|
|
|
|
).toFixed(2)}s linear both`,
|
2023-12-02 23:06:31 -05:00
|
|
|
}}
|
|
|
|
>
|
2023-12-02 23:29:11 -05:00
|
|
|
{c}
|
2023-12-02 23:06:31 -05:00
|
|
|
</span>
|
|
|
|
);
|
|
|
|
});
|
2023-12-02 22:35:52 -05:00
|
|
|
})()}
|
|
|
|
</div>
|
|
|
|
);
|
|
|
|
|
|
|
|
const Crash = ({
|
|
|
|
vehicle,
|
|
|
|
msg,
|
|
|
|
length_s = 2,
|
|
|
|
delay_s = 0,
|
|
|
|
}: {
|
|
|
|
vehicle: string;
|
|
|
|
msg: string[];
|
|
|
|
length_s?: number;
|
|
|
|
delay_s?: number;
|
|
|
|
}) => (
|
2023-12-02 23:06:31 -05:00
|
|
|
<div style={{ display: "flex", alignItems: "center" }}>
|
2023-12-02 22:35:52 -05:00
|
|
|
<div>
|
|
|
|
<Line
|
|
|
|
length_s={length_s}
|
|
|
|
delay_s={delay_s}
|
|
|
|
width_ratio={331.033 / 338.767}
|
|
|
|
>
|
|
|
|
{msg[0]}
|
|
|
|
</Line>
|
|
|
|
<Line
|
|
|
|
length_s={length_s}
|
|
|
|
delay_s={delay_s}
|
|
|
|
width_ratio={291.15 / 338.767}
|
|
|
|
>
|
|
|
|
{msg[1]}
|
|
|
|
</Line>
|
|
|
|
<Line
|
|
|
|
length_s={length_s}
|
|
|
|
delay_s={delay_s}
|
|
|
|
width_ratio={338.767 / 338.767}
|
|
|
|
>
|
|
|
|
{msg[2]}
|
|
|
|
</Line>
|
|
|
|
<Line
|
|
|
|
length_s={length_s}
|
|
|
|
delay_s={delay_s}
|
|
|
|
width_ratio={185.283 / 338.767}
|
|
|
|
>
|
|
|
|
{msg[3]}
|
|
|
|
</Line>
|
|
|
|
</div>
|
|
|
|
<div
|
|
|
|
style={{
|
|
|
|
transform: "translateX(-100rem)",
|
2023-12-02 23:29:11 -05:00
|
|
|
animation: `spin ${length_s}s ${delay_s}s linear reverse forwards`,
|
2023-12-02 22:35:52 -05:00
|
|
|
fontSize: "5rem",
|
|
|
|
}}
|
|
|
|
>
|
|
|
|
{vehicle}
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
);
|
|
|
|
|
2023-12-02 23:29:11 -05:00
|
|
|
render_and_copy(<Crash vehicle="🛻" msg={msg} length_s={3} delay_s={1} />);
|