mirror of
https://github.com/direct-img/vibegif.direct-img.link.git
synced 2026-10-29 11:44:51 +00:00
21 lines
1.2 KiB
JavaScript
21 lines
1.2 KiB
JavaScript
// dumbo octopus paddling: it flaps its ear fins, its webbed skirt puffs open and shut, it bobs and blinks
|
|
const{sin,PI}=Math,T=2*PI
|
|
export const frames=24,delay=80,rim=3,rimColor='#111'
|
|
export default(c,t)=>{
|
|
const w=sin(T*t*2),p=sin(T*t*2-1.2),bl=t>.4&&t<.46
|
|
c.fillStyle=c.strokeStyle='#fff';c.lineWidth=6
|
|
const shape=f=>{c.beginPath();f();c.fill();c.stroke()}
|
|
c.translate(0,-7*sin(T*t*2-2))
|
|
for(const d of[-1,1]){c.save();c.translate(128+d*44,96);c.scale(d,1);c.rotate(-.45*w);shape(()=>c.ellipse(24,-6,28,15,-.3,0,T));c.restore()}
|
|
const W=52+10*p,Y=198-6*p,X=[0,1,2,3,4,5].map(k=>128-W+k*W*2/5),Yk=X.map(x=>Y-14*((x-128)/W)**2)
|
|
shape(()=>{c.moveTo(82,128);c.quadraticCurveTo(70,170,X[0],Yk[0])
|
|
for(let k=1;k<6;k++)c.quadraticCurveTo((X[k-1]+X[k])/2,Y-22,X[k],Yk[k])
|
|
c.quadraticCurveTo(186,170,174,128)})
|
|
shape(()=>c.ellipse(128,110,52,50,0,0,T))
|
|
c.fillStyle=c.strokeStyle='#111';c.lineWidth=3
|
|
for(const k of[1,2,3,4])c.beginPath(),c.moveTo(128+(X[k]-128)*.5,160),c.lineTo(X[k],Yk[k]-8),c.stroke()
|
|
for(const d of[-1,1])if(bl)c.lineWidth=3.5,c.beginPath(),c.arc(128+d*20,120,6.5,.15*PI,.85*PI),c.stroke()
|
|
else c.beginPath(),c.arc(128+d*20,122,6.5,0,T),c.fill()
|
|
c.lineWidth=3;c.beginPath();c.arc(128,134,6,.2*PI,.8*PI);c.stroke()
|
|
}
|