58 lines
1.8 KiB
JavaScript
58 lines
1.8 KiB
JavaScript
#include animate.js
|
|
#include rng.js
|
|
|
|
const MamiYouAreAnIdiot = function() {
|
|
const html = <div class="youare">
|
|
<div class="youare-content">
|
|
<div class="youare-text">
|
|
<div class="youare-big">you are an idiot</div>
|
|
<div class="youare-small">!</div>
|
|
</div>
|
|
<div class="youare-smiles">
|
|
<div class="youare-smile">☺</div>
|
|
<div class="youare-smile">☺</div>
|
|
<div class="youare-smile">☺</div>
|
|
</div>
|
|
</div>
|
|
</div>;
|
|
|
|
const rng = new MamiRNG;
|
|
let soundSrc;
|
|
|
|
const pub = {
|
|
getElement: () => html,
|
|
onViewPush: async () => {
|
|
try {
|
|
soundSrc = await mami.sound.library.loadSource('misc:youare');
|
|
soundSrc.setMuted(true);
|
|
soundSrc.setLoop(true, 0.21, 5);
|
|
soundSrc.play();
|
|
} catch(ex) {
|
|
console.error(ex);
|
|
}
|
|
},
|
|
onViewForeground: async () => {
|
|
if(soundSrc !== undefined)
|
|
soundSrc.setMuted(false);
|
|
},
|
|
onViewBackground: async () => {
|
|
if(soundSrc !== undefined)
|
|
soundSrc.setMuted(true);
|
|
},
|
|
onViewPop: async () => {
|
|
if(soundSrc !== undefined)
|
|
soundSrc.stop();
|
|
soundSrc = undefined;
|
|
},
|
|
pushOn: async views => views.push(pub, ctx => MamiAnimate({
|
|
async: true,
|
|
duration: rng.next(1500, 15001),
|
|
easing: 'outBounce',
|
|
start: () => ctx.toElem.style.top = '-100%',
|
|
update: t => ctx.toElem.style.top = `${-100 + (t * 100)}%`,
|
|
end: () => ctx.toElem.style.top = null,
|
|
})),
|
|
};
|
|
|
|
return pub;
|
|
};
|