Files
postcardForCodeOnTheNapkin/script.js
2025-12-29 12:31:50 +03:00

2238 lines
86 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
'use strict'
let canvas=document.querySelector('canvas'),
ctx = canvas.getContext('2d'),
height=canvas.height, width=canvas.width;
let k=400, k0=5; // настройки искожения проекции
function getX(l,deg){return Math.cos(rad(deg))*l}
function getY(l,deg){return Math.sin(rad(deg))*l}
function rad(deg){return deg*Math.PI/180}
function rnd(min, max){return Math.ceil(Math.random()*(max-min)+min)}
//печать проекции фигуры 3d в 2d
function print(obj, ctx){
let {catalog, path}=obj;
ctx.beginPath();
for (let {line, point,f} of path){
let x=catalog[point].x-width/2,
y=catalog[point].y-height/2,
z=catalog[point].z;
x=(x*k0)/(k0+z*(1/k))+width/2;
y=(y*k0)/(k0+z*(1/k))+height/2
if (line && line!=='bezier') {ctx.lineTo(x,y)}
else if(line==='bezier'){
ctx.bezierCurveTo(
catalog[point].cp0x,
catalog[point].cp0y,
catalog[point].cp1x,
catalog[point].cp1y,
x,y
)}
else {ctx.moveTo(x,y)}
if (f) {
ctx.fillStyle=f;
ctx.fill();
ctx.stroke();
ctx.beginPath();
}
}
ctx.stroke();
}
//получение реальных координат поворотных точек
function realFigure(obj){
let {catalog, real, path}=obj,
{xReal, yReal, zReal, degXY, degXZ, degYZ}=real,
res={catalog:[], path:[], real:{}};
for (let {x, y, z, cp0x, cp0y, cp1x, cp1y} of catalog){
// XY
let lXY = Math.sqrt(x**2+y**2),
csXY = x/lXY,
degXY0 = !isNaN(csXY)? Math.acos(csXY):0,
DXY= y<0? degXY-degXY0 : degXY+degXY0;
x=Math.cos(DXY)*lXY; y=Math.sin(DXY)*lXY;
// XZ
let lXZ=Math.sqrt(x**2+z**2),
csXZ = x/lXZ,
degXZ0 = !isNaN(csXZ)? Math.acos(csXZ):0,
DXZ = z<0? degXZ-degXZ0 : degXZ + degXZ0;
x=Math.cos(DXZ)*lXZ; z=Math.sin(DXZ)*lXZ;
// YZ
let lYZ=Math.sqrt(y**2+z**2),
csYZ = z/lYZ,
degYZ0 = !isNaN(csYZ)? Math.acos(csYZ):0,
DYZ = y<0? degYZ-degYZ0 : degYZ + degYZ0;
z=Math.cos(DYZ)*lYZ; y=Math.sin(DYZ)*lYZ;
// results
x=x+xReal;y=y+yReal;z=z+zReal;
res.catalog.push({x, y, z, cp0x, cp0y, cp1x, cp1y})
}
res.path=path;
return res;
}
function generateSnow(n=1){
let obj={};
let z=rnd(1,100)*100;
let CY=-1*height/2;
let CX=-1*width/2;
let Xmin=(CX*(k0+z*(1/k))/k0)-CX;
let Xmax=(k0*width-CX*z*(1/k))/k0;
let x=rnd(Xmin,Xmax)
let y=(CY*(k0+z*(1/k))/k0)-CY-rnd(1,200);
obj.catalog=[];obj.path=[];
let l1=rnd(10,30); let h1=rnd(0,25);
let l2=rnd(10,30); let h2=rnd(25,50);
let l3=rnd(10,30); let h3=rnd(50,75);
let l4=rnd(5,20); let h4=rnd(75,100);
let sig = rnd(-1,1); sig=sig===0? 1:sig;
let catalog=[
{x:0, y:0, z:0},
{x:0, y:100*n, z:0},
{x:0, y:h1*n, z:0},
{x:l1*n*sig, y:(h1+l1)*n, z:0},
{x:0, y:h2*n, z:0},
{x:-l2*n*sig, y:(h2+l2)*n, z:0},
{x:0, y:h3*n, z:0},
{x:l3*n*sig, y:(h3+l3)*n, z:0},
{x:0, y:h4*n, z:0},
{x:-l4*n*sig, y:(h4+l4)*n, z:0},
]
for (let i=0; i<360; i+=45){
obj.catalog.push(...catalog.map(({x,y,z})=>{
let rot=rad(i),
lXY = Math.sqrt(x**2+y**2),
csXY = x/lXY,
degXY0 = !isNaN(csXY)? Math.acos(csXY):0,
DXY= y<0? rot-degXY0 : rot+degXY0;
x=Math.cos(DXY)*lXY; y=Math.sin(DXY)*lXY;
return {x,y,z}
}))
}
for (let i=0;i<80;i+=2){
obj.path.push({point:i,line:false}, {point:i+1, line:true})
}
obj.real={xReal:x, yReal:y, zReal:z, degXY:0, degXZ:0, degYZ:0};
obj.behavior={vx:rnd(-5,5)/5, vy:4, vz:rnd(-5,-10), DXY:rad(rnd(-3,3)), DXZ:rad(rnd(-10,20)/10), DYZ:rad(0.0)};
obj.nextStep = function(width,height){
this.real.xReal=this.real.xReal+this.behavior.vx;
this.real.yReal=this.real.yReal+this.behavior.vy;
this.real.zReal=this.real.zReal+this.behavior.vz;
this.real.degXY=this.real.degXY+this.behavior.DXY;
this.real.degXZ=this.real.degXZ+this.behavior.DXZ;
this.real.degYZ=this.real.degYZ+this.behavior.DYZ;
let CX=-1*width/2;
let Xmin=(CX*(k0+this.real.zReal*(1/k))/k0)-CX;
let Xmax=(k0*width-CX*this.real.zReal*(1/k))/k0;
if (this.real.xReal>Xmax || this.real.xReal<Xmin) this.kill();
if (this.real.yReal>height) this.kill();
}
obj.kill = function(){collection=collection.filter(obj=>obj!==this)}
return obj
}
function render(collection, ctx){
kadr++;
if(kadr==100 && collection.length<1500){
kadr=0;
addSnow();
}
ctx.strokeStyle='#baf7ffff';
ctx.fillStyle='#07082bff';
ctx.fillRect(0,0,width,height);
for (let object of collection){
print(realFigure(object),ctx);
object.nextStep(width,height);
}
}
//________________надпись Код на салфетке
let fs=width/1870;
let symWdt=1;
let hs=1 //height/919
let symbLy=height-100;
let Symb_K={
catalog:[
//front
{x:0*fs, y:0, z:0, yCopy:0},//0
{x:30*fs, y:0, z:0, yCopy:0},//1
{x:30*fs, y:-75*fs, z:0, yCopy:-75*fs},//2
{x:75*fs, y:0, z:0, yCopy:0},//3
{x:100*fs, y:0, z:0, yCopy:0},//4
{x:50*fs, y:-100*fs, z:0, yCopy:-100*fs},//5
{x:100*fs, y:-200*fs, z:0, yCopy:-200*fs},//6
{x:75*fs, y:-200*fs, z:0, yCopy:-200*fs},//7
{x:30*fs, y:-125*fs, z:0, yCopy:-125*fs},//8
{x:30*fs, y:-200*fs, z:0, yCopy:-200*fs},//9
{x:0*fs, y:-200*fs, z:0, yCopy:-200*fs},//10
// Back
{x:0*fs, y:0, z:50*fs, yCopy:0},//11
{x:30*fs, y:0, z:50*fs, yCopy:0},//12
{x:30*fs, y:-75*fs, z:50*fs, yCopy:-75*fs},//13
{x:75*fs, y:0, z:50*fs, yCopy:0},//14
{x:100*fs, y:0, z:50*fs, yCopy:0},//15
{x:50*fs, y:-100*fs, z:50*fs, yCopy:-100*fs},//16
{x:100*fs, y:-200*fs, z:50*fs, yCopy:-200*fs},//17
{x:75*fs, y:-200*fs, z:50*fs, yCopy:-200*fs},//18
{x:30*fs, y:-125*fs, z:50*fs, yCopy:-125*fs},//19
{x:30*fs, y:-200*fs, z:50*fs, yCopy:-200*fs},//20
{x:0*fs, y:-200*fs, z:50*fs, yCopy:-200*fs},//21
],
path:[
//front
{point:0, line:false},
{point:1, line:true},
{point:2, line:true},
{point:3, line:true},
{point:4, line:true},
{point:5, line:true},
{point:6, line:true},
{point:7, line:true},
{point:8, line:true},
{point:9, line:true},
{point:10, line:true},
{point:0, line:true},
//back
{point:11, line:false},
{point:12, line:true},
{point:13, line:true},
{point:14, line:true},
{point:15, line:true},
{point:16, line:true},
{point:17, line:true},
{point:18, line:true},
{point:19, line:true},
{point:20, line:true},
{point:21, line:true},
{point:11, line:true},
// //
{point:0, line:true}, {point:1, line:false},
{point:12, line:true}, {point:2, line:false},
{point:13, line:true}, {point:3, line:false},
{point:14, line:true}, {point:4, line:false},
{point:15, line:true}, {point:5, line:false},
{point:16, line:true}, {point:6, line:false},
{point:17, line:true}, {point:7, line:false},
{point:18, line:true}, {point:8, line:false},
{point:19, line:true}, {point:9, line:false},
{point:20, line:true}, {point:10, line:false},
{point:21, line:true}, {point:11, line:false},
{point:0, line:false},
{point:0, line:true, f:"#4d4dff"},
],
real:{
xReal:width/2-900*fs,
yReal:symbLy,
zReal:200*fs,
degXY:0,
degXZ:0,
degYZ:0},
behavior:{
vx:0,
vy:0,
vz:0,
DXY:0,
DXZ:rad(rnd(-20,-10)/10),
DYZ:0, kadr:0,
dy:0.2,
isJump:false,
time:rnd(50,200)
},
nextStep: function(){
if(!this.behavior.isJump)this.behavior.kadr++;
this.real.xReal=this.real.xReal+this.behavior.vx;
this.real.yReal=this.real.yReal+this.behavior.vy;
this.real.zReal=this.real.zReal+this.behavior.vz;
this.real.degXY=this.real.degXY+this.behavior.DXY;
this.real.degXZ=this.real.degXZ+this.behavior.DXZ;
this.real.degYZ=this.real.degYZ+this.behavior.DYZ;
if(this.behavior.kadr>this.behavior.time-10){
for(let i=0; i<this.catalog.length; i++){
this.catalog[i].y=this.behavior.time===this.behavior.kadr?
this.catalog[i].yCopy:this.catalog[i].y*0.97
}
}
if(this.behavior.kadr>this.behavior.time){
this.behavior.kadr=0;
this.behavior.isJump=true;
let jump=rnd(-20*hs,-7*hs);
let somersaults=180/(jump/0.2)
this.behavior.vy=jump;
if(jump<-12*hs) this.behavior.DXY=rad(somersaults);
}
if(this.real.yReal<=symbLy && this.behavior.isJump){
this.behavior.vy+=this.behavior.dy
} else {
this.behavior.vy=0;
this.real.yReal=symbLy;
this.behavior.isJump=false;
this.behavior.DXY=0;
this.real.degXY=0;
}
}
}
let Symb_o={
catalog:[
//front in
{x:getX(50*fs,0), y:getY(50*fs,0)-50*fs, z:0, yCopy:getY(50*fs,0)-50*fs},//0
{x:getX(50*fs,45), y:getY(50*fs,45)-50*fs, z:0, yCopy:getY(50*fs,45)-50*fs},//1
{x:getX(50*fs,90), y:getY(50*fs,90)-50*fs, z:0, yCopy:getY(50*fs,90)-50*fs},//2
{x:getX(50*fs,135), y:getY(50*fs,135)-50*fs, z:0, yCopy:getY(50*fs,135)-50*fs},//3
{x:getX(50*fs,180), y:getY(50*fs,180)-50*fs, z:0, yCopy:getY(50*fs,180)-50*fs},//4
{x:getX(50*fs,180), y:getY(50*fs,180)-100*fs, z:0, yCopy:getY(50*fs,180)-100*fs},//5
{x:getX(50*fs,225), y:getY(50*fs,225)-100*fs, z:0, yCopy:getY(50*fs,225)-100*fs},//6
{x:getX(50*fs,270), y:getY(50*fs,270)-100*fs, z:0, yCopy:getY(50*fs,270)-100*fs},//7
{x:getX(50*fs,315), y:getY(50*fs,315)-100*fs, z:0, yCopy:getY(50*fs,315)-100*fs},//8
{x:getX(50*fs,0), y:getY(50*fs,0)-100*fs, z:0, yCopy:getY(50*fs,0)-100*fs},//9
//front out
{x:getX(10*fs,0), y:getY(10*fs,0)-50*fs, z:0, yCopy:getY(10*fs,0)-50*fs},//10
{x:getX(10*fs,45), y:getY(10*fs,45)-50*fs, z:0, yCopy:getY(10*fs,45)-50*fs},//11
{x:getX(10*fs,90), y:getY(10*fs,90)-50*fs, z:0, yCopy:getY(10*fs,90)-50*fs},//12
{x:getX(10*fs,135), y:getY(10*fs,135)-50*fs, z:0, yCopy:getY(10*fs,135)-50*fs},//13
{x:getX(10*fs,180), y:getY(10*fs,180)-50*fs, z:0, yCopy:getY(10*fs,180)-50*fs},//14
{x:getX(10*fs,180), y:getY(10*fs,180)-100*fs, z:0, yCopy:getY(10*fs,180)-100*fs},//15
{x:getX(10*fs,225), y:getY(10*fs,225)-100*fs, z:0, yCopy:getY(10*fs,225)-100*fs},//16
{x:getX(10*fs,270), y:getY(10*fs,270)-100*fs, z:0, yCopy:getY(10*fs,270)-100*fs},//17
{x:getX(10*fs,315), y:getY(10*fs,315)-100*fs, z:0, yCopy:getY(10*fs,315)-100*fs},//18
{x:getX(10*fs,0), y:getY(10*fs,0)-100*fs, z:0, yCopy:getY(10*fs,0)-100*fs},//19
// Back
{x:getX(50*fs,0), y:getY(50*fs,0)-50*fs, z:50*fs, yCopy:getY(50*fs,0)-50*fs},//20
{x:getX(50*fs,45), y:getY(50*fs,45)-50*fs, z:50*fs, yCopy:getY(50*fs,45)-50*fs},//21
{x:getX(50*fs,90), y:getY(50*fs,90)-50*fs, z:50*fs, yCopy:getY(50*fs,90)-50*fs},//22
{x:getX(50*fs,135), y:getY(50*fs,135)-50*fs, z:50*fs, yCopy:getY(50*fs,135)-50*fs},//23
{x:getX(50*fs,180), y:getY(50*fs,180)-50*fs, z:50*fs, yCopy:getY(50*fs,180)-50*fs},//24
{x:getX(50*fs,180), y:getY(50*fs,180)-100*fs, z:50*fs, yCopy:getY(50*fs,180)-100*fs},//25
{x:getX(50*fs,225), y:getY(50*fs,225)-100*fs, z:50*fs, yCopy:getY(50*fs,225)-100*fs},//26
{x:getX(50*fs,270), y:getY(50*fs,270)-100*fs, z:50*fs, yCopy:getY(50*fs,270)-100*fs},//27
{x:getX(50*fs,315), y:getY(50*fs,315)-100*fs, z:50*fs, yCopy:getY(50*fs,315)-100*fs},//28
{x:getX(50*fs,0), y:getY(50*fs,0)-100*fs, z:50*fs, yCopy:getY(50*fs,0)-100*fs},//29
{x:getX(10*fs,0), y:getY(10*fs,0)-50*fs, z:50*fs, yCopy:getY(10*fs,0)-50*fs},//30
{x:getX(10*fs,45), y:getY(10*fs,45)-50*fs, z:50*fs, yCopy:getY(10*fs,45)-50*fs},//31
{x:getX(10*fs,90), y:getY(10*fs,90)-50*fs, z:50*fs, yCopy:getY(10*fs,90)-50*fs},//32
{x:getX(10*fs,135), y:getY(10*fs,135)-50*fs, z:50*fs, yCopy:getY(10*fs,135)-50*fs},//33
{x:getX(10*fs,180), y:getY(10*fs,180)-50*fs, z:50*fs, yCopy:getY(10*fs,180)-50*fs},//34
{x:getX(10*fs,180), y:getY(10*fs,180)-100*fs, z:50*fs, yCopy:getY(10*fs,180)-100*fs},//35
{x:getX(10*fs,225), y:getY(10*fs,225)-100*fs, z:50*fs, yCopy:getY(10*fs,225)-100*fs},//36
{x:getX(10*fs,270), y:getY(10*fs,270)-100*fs, z:50*fs, yCopy:getY(10*fs,270)-100*fs},//37
{x:getX(10*fs,315), y:getY(10*fs,315)-100*fs, z:50*fs, yCopy:getY(10*fs,315)-100*fs},//38
{x:getX(10*fs,0), y:getY(10*fs,0)-100*fs, z:50*fs, yCopy:getY(10*fs,0)-100*fs},//39
],
path:[
//front in
{point:0, line:false},
{point:1, line:true},
{point:2, line:true},
{point:3, line:true},
{point:4, line:true},
{point:5, line:true},
{point:6, line:true},
{point:7, line:true},
{point:8, line:true},
{point:9, line:true},
{point:0, line:true, /*f:"#4d4dff"*/},
//front out
{point:10, line:false},
{point:11, line:true},
{point:12, line:true},
{point:13, line:true},
{point:14, line:true},
{point:15, line:true},
{point:16, line:true},
{point:17, line:true},
{point:18, line:true},
{point:19, line:true},
{point:10, line:true, /*f:'#07082bff'*/},
//back
{point:20, line:false},
{point:21, line:true},
{point:22, line:true},
{point:23, line:true},
{point:24, line:true},
{point:25, line:true},
{point:26, line:true},
{point:27, line:true},
{point:28, line:true},
{point:29, line:true},
{point:20, line:true},
{point:30, line:false},
{point:31, line:true},
{point:32, line:true},
{point:33, line:true},
{point:34, line:true},
{point:35, line:true},
{point:36, line:true},
{point:37, line:true},
{point:38, line:true},
{point:39, line:true},
{point:30, line:true},
{point:0, line:false}, {point:20, line:true},
{point:1, line:false}, {point:21, line:true},
{point:2, line:false}, {point:22, line:true},
{point:3, line:false}, {point:23, line:true},
{point:4, line:false}, {point:24, line:true},
{point:5, line:false}, {point:25, line:true},
{point:6, line:false}, {point:26, line:true},
{point:7, line:false}, {point:27, line:true},
{point:8, line:false}, {point:28, line:true},
{point:9, line:false}, {point:29, line:true},
{point:10, line:false}, {point:30, line:true},
{point:11, line:false}, {point:31, line:true},
{point:12, line:false}, {point:32, line:true},
{point:13, line:false}, {point:33, line:true},
{point:14, line:false}, {point:34, line:true},
{point:15, line:false}, {point:35, line:true},
{point:16, line:false}, {point:36, line:true},
{point:17, line:false}, {point:37, line:true},
{point:18, line:false}, {point:38, line:true},
{point:19, line:false}, {point:39, line:true},
{point:0, line:false},
{point:1, line:true},
{point:2, line:true},
{point:3, line:true},
{point:4, line:true},
{point:5, line:true},
{point:6, line:true},
{point:7, line:true},
{point:8, line:true},
{point:9, line:true},
{point:0, line:true, f:"#4d4dff"},
//front out
{point:10, line:false},
{point:11, line:true},
{point:12, line:true},
{point:13, line:true},
{point:14, line:true},
{point:15, line:true},
{point:16, line:true},
{point:17, line:true},
{point:18, line:true},
{point:19, line:true},
{point:10, line:true, f:'#07082bff'},
],
real:{
xReal:width/2-730*fs,
yReal:symbLy,
zReal:200*fs,
degXY:0,
degXZ:0,
degYZ:0},
behavior:{
vx:0,
vy:0,
vz:0,
DXY:0,
DXZ:rad(rnd(-20,-10)/10),
DYZ:0, kadr:0,
dy:0.2,
isJump:false,
time:rnd(50,200)
},
nextStep: function(){
if(!this.behavior.isJump)this.behavior.kadr++;
this.real.xReal=this.real.xReal+this.behavior.vx;
this.real.yReal=this.real.yReal+this.behavior.vy;
this.real.zReal=this.real.zReal+this.behavior.vz;
this.real.degXY=this.real.degXY+this.behavior.DXY;
this.real.degXZ=this.real.degXZ+this.behavior.DXZ;
this.real.degYZ=this.real.degYZ+this.behavior.DYZ;
if(this.behavior.kadr>this.behavior.time-10){
for(let i=0; i<this.catalog.length; i++){
this.catalog[i].y=this.behavior.time===this.behavior.kadr?
this.catalog[i].yCopy:this.catalog[i].y*0.97
}
}
if(this.behavior.kadr>this.behavior.time){
this.behavior.kadr=0;
this.behavior.isJump=true;
let jump=rnd(-20*hs,-7*hs);
let somersaults=180/(jump/0.2)
this.behavior.vy=jump;
if(jump<-12*hs) this.behavior.DYZ=rad(somersaults);
}
if(this.real.yReal<=symbLy && this.behavior.isJump){
this.behavior.vy+=this.behavior.dy
} else {
this.behavior.vy=0;
this.real.yReal=symbLy;
this.behavior.isJump=false;
this.behavior.DYZ=0;
this.real.degYZ=0;
}
}
}
let Symb_d={
catalog:[
//front
{x:0*fs, y:20*fs, z:0, yCopy:20*fs},//0
{x:20*fs, y:20*fs, z:0, yCopy:20*fs},//1
{x:20*fs, y:0, z:0, yCopy:0},//2
{x:80*fs, y:0, z:0, yCopy:0},//3
{x:80*fs, y:20*fs, z:0, yCopy:20*fs},//4
{x:100*fs, y:20*fs, z:0, yCopy:20*fs},//5
{x:100*fs, y:-20*fs, z:0, yCopy:-20*fs},//6
{x:80*fs, y:-20*fs, z:0, yCopy:-20*fs},//7
{x:80*fs, y:-150*fs, z:0, yCopy:-150*fs},//8
{x:30*fs, y:-150*fs, z:0, yCopy:-150*fs},//9
{x:10*fs, y:-20*fs, z:0, yCopy:-20*fs},//10
{x:0, y:-20*fs, z:0, yCopy:-20*fs},//11
{x:30*fs, y:-20*fs, z:0, yCopy:-20*fs},//12
{x:45*fs, y:-125*fs, z:0, yCopy:-125*fs},//13
{x:60*fs, y:-125*fs, z:0, yCopy:-125*fs},//14
{x:60*fs, y:-20*fs, z:0, yCopy:-20*fs},//15
// Back
{x:0*fs, y:20*fs, z:50*fs, yCopy:20*fs},//16
{x:20*fs, y:20*fs, z:50*fs, yCopy:20*fs},//17
{x:20*fs, y:0, z:50*fs, yCopy:0},//18
{x:80*fs, y:0, z:50*fs, yCopy:0},//19
{x:80*fs, y:20*fs, z:50*fs, yCopy:20*fs},//20
{x:100*fs, y:20*fs, z:50*fs, yCopy:20*fs},//21
{x:100*fs, y:-20*fs, z:50*fs, yCopy:-20*fs},//22
{x:80*fs, y:-20*fs, z:50*fs, yCopy:-20*fs},//23
{x:80*fs, y:-150*fs, z:50*fs, yCopy:-150*fs},//24
{x:30*fs, y:-150*fs, z:50*fs, yCopy:-150*fs},//25
{x:10*fs, y:-20*fs, z:50*fs, yCopy:-20*fs},//26
{x:0, y:-20*fs, z:50*fs, yCopy:-20*fs},//27
{x:30*fs, y:-20*fs, z:50*fs, yCopy:-20*fs},//28
{x:45*fs, y:-125*fs, z:50*fs, yCopy:-125*fs},//29
{x:60*fs, y:-125*fs, z:50*fs, yCopy:-125*fs},//30
{x:60*fs, y:-20*fs, z:50*fs, yCopy:-20*fs},//31
],
path:[
//front
{point:0, line:false},
{point:1, line:true},
{point:2, line:true},
{point:3, line:true},
{point:4, line:true},
{point:5, line:true},
{point:6, line:true},
{point:7, line:true},
{point:8, line:true},
{point:9, line:true},
{point:10, line:true},
{point:11, line:true},
{point:0, line:true, /*f:"#4d4dff"*/},
{point:12, line:false},
{point:13, line:true},
{point:14, line:true},
{point:15, line:true},
{point:12, line:true, /*f:'#07082bff'*/},
//back
{point:16, line:false},
{point:17, line:true},
{point:18, line:true},
{point:19, line:true},
{point:20, line:true},
{point:21, line:true},
{point:22, line:true},
{point:23, line:true},
{point:24, line:true},
{point:25, line:true},
{point:26, line:true},
{point:27, line:true},
{point:16, line:true},
{point:28, line:false},
{point:29, line:true},
{point:30, line:true},
{point:31, line:true},
{point:28, line:true},
//
{point:0, line:false}, {point:16, line:true},
{point:1, line:false}, {point:17, line:true},
{point:2, line:false}, {point:18, line:true},
{point:3, line:false}, {point:19, line:true},
{point:4, line:false}, {point:20, line:true},
{point:5, line:false}, {point:21, line:true},
{point:6, line:false}, {point:22, line:true},
{point:7, line:false}, {point:23, line:true},
{point:8, line:false}, {point:24, line:true},
{point:9, line:false}, {point:25, line:true},
{point:10, line:false}, {point:26, line:true},
{point:11, line:false}, {point:27, line:true},
{point:12, line:false}, {point:28, line:true},
{point:13, line:false}, {point:29, line:true},
{point:14, line:false}, {point:30, line:true},
{point:15, line:false}, {point:31, line:true},
{point:0, line:false},
{point:0, line:true, f:"#4d4dff"},
],
real:{
xCopy:width/2-650*fs,
xReal:width/2-650*fs,
yReal:symbLy,
zReal:200*fs,
degXY:0,
degXZ:0,
degYZ:0},
setDirect: function(x0,y0,z0){
this.real.xReal=this.real.xReal-this.behavior.vx;
this.real.yReal=this.real.yReal-this.behavior.vy;
this.real.zReal=this.real.zReal-this.behavior.vz;
this.real.degXY=this.real.degXY-this.behavior.DXY;
this.real.degXZ=this.real.degXZ-this.behavior.DXZ;
this.real.degYZ=this.real.degYZ-this.behavior.DYZ;
let catalog=[{x:x0,y:y0,z:z0}];
let path=[{point:0, line:false}];
let real=this.real;
let obj=realFigure({catalog,path,real});
this.real.xReal=obj.catalog[0].x;
this.real.yReal=obj.catalog[0].y;
this.real.zReal=obj.catalog[0].z;
this.catalog=this.catalog.map(({x,y,z,yCopy})=>{
x-=x0; y-=y0; z-=z0; yCopy-=y0;
return {x,y,z,yCopy}
})
},
behavior:{
vx:0,
vy:0,
vz:0,
DXY:0,
DXZ:0,
DYZ:0,
kadr:0,
dy:0.2,
stepper:0,
scene:0,
isAction:false,
time:rnd(50,100)
},
isTime: function(t=0){
return this.behavior.kadr>this.behavior.time-t
},
nextStep: function(){
if(!this.behavior.isAction)this.behavior.kadr++;
this.real.xReal=this.real.xReal+this.behavior.vx;
this.real.yReal=this.real.yReal+this.behavior.vy;
this.real.zReal=this.real.zReal+this.behavior.vz;
this.real.degXY=this.real.degXY+this.behavior.DXY;
this.real.degXZ=this.real.degXZ+this.behavior.DXZ;
this.real.degYZ=this.real.degYZ+this.behavior.DYZ;
const sault = ()=>{
if(this.isTime()){
this.behavior.kadr=0;
this.behavior.isAction=true;
let jump=rnd(-20*hs,-7*hs);
let somersaults=180/(jump/0.2);
this.behavior.vx=-(this.real.xCopy-this.real.xReal)/(jump/0.2);
this.behavior.vz=(this.real.zReal-200*fs)/(jump/0.2);
this.behavior.vy=jump;
if(jump<-12*hs) this.behavior.DYZ=rad(somersaults);
}
if(this.real.yReal<=symbLy && this.behavior.isAction){
this.behavior.vy+=this.behavior.dy;
} else if(this.real.yReal>symbLy && this.behavior.isAction) {
this.behavior.vx=0;
this.behavior.vy=0;
this.behavior.vz=0;
this.real.yReal=symbLy;
this.behavior.isAction=false;
this.behavior.DYZ=0;
this.real.degYZ=0;
this.behavior.stepper++;
}
if(this.isTime(10)){
for(let i=0; i<this.catalog.length; i++){
this.catalog[i].y=this.behavior.time===this.behavior.kadr?
this.catalog[i].yCopy:this.catalog[i].y*0.97
}
}
}
switch (this.behavior.stepper){
case 0:
if (this.isTime()){
this.behavior.kadr=0;
this.behavior.stepper++;
this.behavior.isAction=true;
this.behavior.DXY=rad(-2);
}
break;
case 1:
if (this.real.degXY<=rad(-30)){
this.behavior.DXY=0;
this.behavior.DXZ=rad(2);
this.behavior.stepper++;
}
break;
case 2:
if(this.real.degXZ>=rad(30)){
this.behavior.DXZ=0;
this.behavior.DXY=rad(2);
this.behavior.stepper++;
}
break;
case 3:
if(this.real.degXY>=0){
this.setDirect(100*fs,0,0);
this.behavior.stepper++;
}
break;
case 4:
if(this.real.degXY>rad(30)){
this.behavior.DXY=0;
this.behavior.DXZ=rad(-2);
this.behavior.stepper++;
}
break;
case 5:
if(this.real.degXZ<=rad(0)){
this.behavior.DXZ=0;
this.behavior.DXY=rad(-2);
this.behavior.stepper++;
}
break;
case 6:
if(this.real.degXY<=0){
this.real.degXY=0;
this.behavior.DXY=0;
this.setDirect(-100*fs,0,0);
this.behavior.isAction=false;
this.behavior.stepper++;
}
break;
case 7:
sault();
break;
case 8:
this.behavior.stepper=0;
}
}
}
let Symb_n={
catalog:[
//front
{x:0, y:0, z:0, yCopy:0},//0
{x:0, y:-150*fs, z:0, yCopy:-150*fs},//1
{x:30*fs, y:-150*fs, z:0, yCopy:-150*fs},//2
{x:30*fs, y:-85*fs, z:0, yCopy:-85*fs},//3
{x:70*fs, y:-85*fs, z:0, yCopy:-85*fs},//4
{x:70*fs, y:-150*fs, z:0, yCopy:-150*fs},//5
{x:100*fs, y:-150*fs, z:0, yCopy:-150*fs},//6
{x:100*fs, y:0, z:0, yCopy:0},//7
{x:70*fs, y:0, z:0, yCopy:0},//8
{x:70*fs, y:-65*fs, z:0, yCopy:-65*fs},//9
{x:30*fs, y:-65*fs, z:0, yCopy:-65*fs},//10
{x:30*fs, y:0, z:0, yCopy:0},//11
// Back
{x:0, y:0, z:50*fs, yCopy:0},//12
{x:0, y:-150*fs, z:50*fs, yCopy:-150*fs},//13
{x:30*fs, y:-150*fs, z:50*fs, yCopy:-150*fs},//14
{x:30*fs, y:-85*fs, z:50*fs, yCopy:-85*fs},//15
{x:70*fs, y:-85*fs, z:50*fs, yCopy:-85*fs},//16
{x:70*fs, y:-150*fs, z:50*fs, yCopy:-150*fs},//17
{x:100*fs, y:-150*fs, z:50*fs, yCopy:-150*fs},//18
{x:100*fs, y:0, z:50*fs, yCopy:0},//19
{x:70*fs, y:0, z:50*fs, yCopy:0},//20
{x:70*fs, y:-65*fs, z:50*fs, yCopy:-65*fs},//21
{x:30*fs, y:-65*fs, z:50*fs, yCopy:-65*fs},//22
{x:30*fs, y:0, z:50*fs, yCopy:0},//23
],
path:[
//front
{point:0, line:false},
{point:1, line:true},
{point:2, line:true},
{point:3, line:true},
{point:4, line:true},
{point:5, line:true},
{point:6, line:true},
{point:7, line:true},
{point:8, line:true},
{point:9, line:true},
{point:10, line:true},
{point:11, line:true},
{point:0, line:true,},
// //back
{point:12, line:false},
{point:13, line:true},
{point:14, line:true},
{point:15, line:true},
{point:16, line:true},
{point:17, line:true},
{point:18, line:true},
{point:19, line:true},
{point:20, line:true},
{point:21, line:true},
{point:22, line:true},
{point:23, line:true},
{point:12, line:true},
// //
{point:0, line:false}, {point:12, line:true},
{point:1, line:false}, {point:13, line:true},
{point:2, line:false}, {point:14, line:true},
{point:3, line:false}, {point:15, line:true},
{point:4, line:false}, {point:16, line:true},
{point:5, line:false}, {point:17, line:true},
{point:6, line:false}, {point:18, line:true},
{point:7, line:false}, {point:19, line:true},
{point:8, line:false}, {point:20, line:true},
{point:9, line:false}, {point:21, line:true},
{point:10, line:false}, {point:22, line:true},
{point:11, line:false}, {point:23, line:true},
{point:0, line:false},
{point:0, line:true, f:"#4d4dff"},
],
real:{
xCopy:width/2-410*fs,
xReal:width/2-410*fs,
yReal:symbLy,
zReal:200*fs,
degXY:0,
degXZ:0,
degYZ:0},
setDirect: function(x0,y0,z0){
this.real.xReal=this.real.xReal-this.behavior.vx;
this.real.yReal=this.real.yReal-this.behavior.vy;
this.real.zReal=this.real.zReal-this.behavior.vz;
this.real.degXY=this.real.degXY-this.behavior.DXY;
this.real.degXZ=this.real.degXZ-this.behavior.DXZ;
this.real.degYZ=this.real.degYZ-this.behavior.DYZ;
let catalog=[{x:x0,y:y0,z:z0}];
let path=[{point:0, line:false}];
let real=this.real;
let obj=realFigure({catalog,path,real});
this.real.xReal=obj.catalog[0].x;
this.real.yReal=obj.catalog[0].y;
this.real.zReal=obj.catalog[0].z;
this.catalog=this.catalog.map(({x,y,z,yCopy})=>{
x-=x0; y-=y0; z-=z0; yCopy-=y0;
return {x,y,z,yCopy}
})
},
behavior:{
vx:0,
vy:0,
vz:0,
DXY:0,
DXZ:0,
DYZ:0,
kadr:0,
dy:0.2,
stepper:0,
scene:0,
isAction:false,
time:rnd(50,100)
},
isTime: function(t=0){
return this.behavior.kadr>this.behavior.time-t
},
nextStep: function(){
if(!this.behavior.isAction)this.behavior.kadr++;
this.real.xReal=this.real.xReal+this.behavior.vx;
this.real.yReal=this.real.yReal+this.behavior.vy;
this.real.zReal=this.real.zReal+this.behavior.vz;
this.real.degXY=this.real.degXY+this.behavior.DXY;
this.real.degXZ=this.real.degXZ+this.behavior.DXZ;
this.real.degYZ=this.real.degYZ+this.behavior.DYZ;
const sault = ()=>{
if(this.isTime()){
this.behavior.kadr=0;
this.behavior.isAction=true;
let jump=rnd(-20*hs,-7*hs);
let somersaults=180/(jump/0.2);
this.behavior.vx=-(this.real.xCopy-this.real.xReal)/(jump/0.2);
this.behavior.vz=(this.real.zReal-200*fs)/(jump/0.2);
this.behavior.vy=jump;
if(jump<-12*hs) this.behavior.DYZ=rad(somersaults);
}
if(this.real.yReal<=symbLy && this.behavior.isAction){
this.behavior.vy+=this.behavior.dy;
} else if(this.real.yReal>symbLy && this.behavior.isAction) {
this.behavior.vx=0;
this.behavior.vy=0;
this.behavior.vz=0;
this.real.yReal=symbLy;
this.behavior.isAction=false;
this.behavior.DYZ=0;
this.real.degYZ=0;
this.behavior.stepper++;
}
if(this.isTime(10)){
for(let i=0; i<this.catalog.length; i++){
this.catalog[i].y=this.behavior.time===this.behavior.kadr?
this.catalog[i].yCopy:this.catalog[i].y*0.97
}
}
}
switch (this.behavior.stepper){
case 0:
if (this.isTime()){
this.behavior.kadr=0;
this.behavior.stepper++;
this.behavior.isAction=true;
this.behavior.DXY=rad(-2);
}
break;
case 1:
if (this.real.degXY<=rad(-30)){
this.behavior.DXY=0;
this.behavior.DXZ=rad(2);
this.behavior.stepper++;
}
break;
case 2:
if(this.real.degXZ>=rad(30)){
this.behavior.DXZ=0;
this.behavior.DXY=rad(2);
this.behavior.stepper++;
}
break;
case 3:
if(this.real.degXY>=0){
this.setDirect(100*fs,0,0);
this.behavior.stepper++;
}
break;
case 4:
if(this.real.degXY>rad(30)){
this.behavior.DXY=0;
this.behavior.DXZ=rad(-2);
this.behavior.stepper++;
}
break;
case 5:
if(this.real.degXZ<=rad(0)){
this.behavior.DXZ=0;
this.behavior.DXY=rad(-2);
this.behavior.stepper++;
}
break;
case 6:
if(this.real.degXY<=0){
this.real.degXY=0;
this.behavior.DXY=0;
this.setDirect(-100*fs,0,0);
this.behavior.isAction=false;
this.behavior.stepper++;
}
break;
case 7:
sault();
break;
case 8:
this.behavior.stepper=0;
}
}
}
let Symb_a1={
catalog:[
//front in
{x:50*fs, y:0, z:0, yCopy:0},//0
{x:40*fs, y:-10*fs, z:0, yCopy:-10*fs},//1
{x:40*fs, y:-100*fs, z:0, yCopy:-100*fs},//2
{x:0, y:-150*fs, z:0, yCopy:-150*fs},//3
{x:-40*fs, y:-150*fs, z:0, yCopy:-150*fs},//4
{x:-40*fs, y:-120*fs, z:0, yCopy:-120*fs},//5
{x:-20*fs, y:-120*fs, z:0, yCopy:-120*fs},//6
{x:0*fs, y:-90*fs, z:0, yCopy:-90*fs},//7
{x:getX(50*fs,-110), y:getY(50*fs,-110)-50*fs, z:0,yCopy:getY(50*fs,-110)-50*fs},//8
{x:getX(50*fs,-135), y:getY(50*fs,-135)-50*fs, z:0,yCopy:getY(50*fs,-135)-50*fs},//9
{x:getX(50*fs,-180), y:getY(50*fs,-180)-50*fs, z:0,yCopy:getY(50*fs,-180)-50*fs},//10
{x:getX(50*fs,-225), y:getY(50*fs,-225)-50*fs, z:0, yCopy:getY(50*fs,-225)-50*fs},//11
{x:getX(50*fs,-270), y:getY(50*fs,-270)-50*fs, z:0, yCopy:getY(50*fs,-270)-50*fs},//12
{x:getX(50*fs,-290), y:getY(50*fs,-290)-50*fs, z:0, yCopy:getY(50*fs,-290)-50*fs},//13
{x:30*fs, y:0, z:0, yCopy:0},//14
{x:getX(20*fs,0), y:getY(20*fs,0)-50*fs, z:0,yCopy:getY(20*fs,0)-50*fs},//15
{x:getX(20*fs,45), y:getY(20*fs,45)-50*fs, z:0,yCopy:getY(20*fs,45)-50*fs},//16
{x:getX(20*fs,90), y:getY(20*fs,90)-50*fs, z:0,yCopy:getY(20*fs,90)-50*fs},//17
{x:getX(20*fs,135), y:getY(20*fs,135)-50*fs, z:0,yCopy:getY(20*fs,135)-50*fs},//18
{x:getX(20*fs,180), y:getY(20*fs,180)-50*fs, z:0,yCopy:getY(20*fs,180)-50*fs},//19
{x:getX(20*fs,225), y:getY(20*fs,225)-50*fs, z:0,yCopy:getY(20*fs,225)-50*fs},//20
{x:getX(20*fs,270), y:getY(20*fs,270)-50*fs, z:0,yCopy:getY(20*fs,270)-50*fs},//21
{x:getX(20*fs,315), y:getY(20*fs,315)-50*fs, z:0,yCopy:getY(20*fs,315)-50*fs},//22
// Back
{x:50*fs, y:0, z:50*fs, yCopy:0},//23
{x:40*fs, y:-10*fs, z:50*fs, yCopy:-10*fs},//24
{x:40*fs, y:-100*fs, z:50*fs, yCopy:-100*fs},//25
{x:0, y:-150*fs, z:50*fs, yCopy:-150*fs},//26
{x:-40*fs, y:-150*fs, z:50*fs, yCopy:-150*fs},//27
{x:-40*fs, y:-120*fs, z:50*fs, yCopy:-120*fs},//28
{x:-20*fs, y:-120*fs, z:50*fs, yCopy:-120*fs},//29
{x:0*fs, y:-90*fs, z:50*fs, yCopy:-90*fs},//30
{x:getX(50*fs,-110), y:getY(50*fs,-110)-50*fs, z:50*fs, yCopy:getY(50*fs,-110)-50*fs},//31
{x:getX(50*fs,-135), y:getY(50*fs,-135)-50*fs, z:50*fs, yCopy:getY(50*fs,-135)-50*fs},//32
{x:getX(50*fs,-180), y:getY(50*fs,-180)-50*fs, z:50*fs, yCopy:getY(50*fs,-180)-50*fs},//33
{x:getX(50*fs,-225), y:getY(50*fs,-225)-50*fs, z:50*fs, yCopy:getY(50*fs,-225)-50*fs},//34
{x:getX(50*fs,-270), y:getY(50*fs,-270)-50*fs, z:50*fs, yCopy:getY(50*fs,-270)-50*fs},//35
{x:getX(50*fs,-290), y:getY(50*fs,-290)-50*fs, z:50*fs, yCopy:getY(50*fs,-290)-50*fs},//36
{x:30*fs, y:0, z:50*fs, yCopy:0},//37
{x:getX(20*fs,0), y:getY(20*fs,0)-50*fs, z:50*fs, yCopy:getY(20*fs,0)-50*fs},//38
{x:getX(20*fs,45), y:getY(20*fs,45)-50*fs, z:50*fs, yCopy:getY(20*fs,45)-50*fs},//39
{x:getX(20*fs,90), y:getY(20*fs,90)-50*fs, z:50*fs, yCopy:getY(20*fs,90)-50*fs},//40
{x:getX(20*fs,135), y:getY(20*fs,135)-50*fs, z:50*fs, yCopy:getY(20*fs,135)-50*fs},//41
{x:getX(20*fs,180), y:getY(20*fs,180)-50*fs, z:50*fs, yCopy:getY(20*fs,180)-50*fs},//42
{x:getX(20*fs,225), y:getY(20*fs,225)-50*fs, z:50*fs, yCopy:getY(20*fs,225)-50*fs},//43
{x:getX(20*fs,270), y:getY(20*fs,270)-50*fs, z:50*fs, yCopy:getY(20*fs,270)-50*fs},//44
{x:getX(20*fs,315), y:getY(20*fs,315)-50*fs, z:50*fs, yCopy:getY(20*fs,315)-50*fs},//45
],
path:[
//front in
{point:0, line:false},
{point:1, line:true},
{point:2, line:true},
{point:3, line:true},
{point:4, line:true},
{point:5, line:true},
{point:6, line:true},
{point:7, line:true},
{point:8, line:true},
{point:9, line:true},
{point:10, line:true},
{point:11, line:true},
{point:12, line:true},
{point:13, line:true},
{point:14, line:true},
{point:0, line:true},
//
{point:15, line:false},
{point:16, line:true},
{point:17, line:true},
{point:18, line:true},
{point:19, line:true},
{point:20, line:true},
{point:21, line:true},
{point:22, line:true},
{point:15, line:true,},
{point:23, line:false},
{point:24, line:true},
{point:25, line:true},
{point:26, line:true},
{point:27, line:true},
{point:28, line:true},
{point:29, line:true},
{point:30, line:true},
{point:31, line:true},
{point:32, line:true},
{point:33, line:true},
{point:34, line:true},
{point:35, line:true},
{point:36, line:true},
{point:37, line:true},
{point:23, line:true},
//
{point:38, line:false},
{point:39, line:true},
{point:40, line:true},
{point:41, line:true},
{point:42, line:true},
{point:43, line:true},
{point:44, line:true},
{point:45, line:true},
{point:38, line:true},
{point:0, line:false}, {point:23, line:true},
{point:1, line:false}, {point:24, line:true},
{point:2, line:false}, {point:25, line:true},
{point:3, line:false}, {point:26, line:true},
{point:4, line:false}, {point:27, line:true},
{point:5, line:false}, {point:28, line:true},
{point:6, line:false}, {point:29, line:true},
{point:7, line:false}, {point:30, line:true},
{point:8, line:false}, {point:31, line:true},
{point:9, line:false}, {point:32, line:true},
{point:10, line:false}, {point:33, line:true},
{point:11, line:false}, {point:34, line:true},
{point:12, line:false}, {point:35, line:true},
{point:13, line:false}, {point:36, line:true},
{point:14, line:false}, {point:37, line:true},
{point:15, line:false}, {point:38, line:true},
{point:16, line:false}, {point:39, line:true},
{point:17, line:false}, {point:40, line:true},
{point:18, line:false}, {point:41, line:true},
{point:19, line:false}, {point:42, line:true},
{point:20, line:false}, {point:43, line:true},
{point:21, line:false}, {point:44, line:true},
{point:22, line:false}, {point:45, line:true},
{point:0, line:false},
{point:0, line:true, f:"#4d4dff"},
],
real:{
xReal:width/2-220*fs,
yReal:symbLy,
zReal:200*fs,
degXY:0,
degXZ:0,
degYZ:0},
behavior:{
vx:0,
vy:0,
vz:0,
DXY:0,
DXZ:rad(rnd(-20,-10)/10),
DYZ:0, kadr:0,
dy:0.2,
isJump:false,
time:rnd(50,200)
},
nextStep: function(){
if(!this.behavior.isJump)this.behavior.kadr++;
this.real.xReal=this.real.xReal+this.behavior.vx;
this.real.yReal=this.real.yReal+this.behavior.vy;
this.real.zReal=this.real.zReal+this.behavior.vz;
this.real.degXY=this.real.degXY+this.behavior.DXY;
this.real.degXZ=this.real.degXZ+this.behavior.DXZ;
this.real.degYZ=this.real.degYZ+this.behavior.DYZ;
if (this.real.degXZ>rad(80) || this.real.degXZ<rad(-80)) this.behavior.DXZ*=-1;
if(this.behavior.kadr>this.behavior.time-10){
for(let i=0; i<this.catalog.length; i++){
this.catalog[i].y=this.behavior.time===this.behavior.kadr?
this.catalog[i].yCopy:this.catalog[i].y*0.97
}
}
if(this.behavior.kadr>this.behavior.time){
this.behavior.kadr=0;
this.behavior.isJump=true;
let jump=rnd(-20*hs,-7*hs);
let somersaults=180/(jump/0.2)
this.behavior.vy=jump;
if(jump<-12*hs) this.behavior.DYZ=rad(somersaults);
}
if(this.real.yReal<=symbLy && this.behavior.isJump){
this.behavior.vy+=this.behavior.dy
} else {
this.behavior.vy=0;
this.real.yReal=symbLy;
this.behavior.isJump=false;
this.behavior.DYZ=0;
this.real.degYZ=0;
}
}
}
let Symb_с={
catalog:[
//front in
{x:getX(50*fs,0), y:getY(50*fs,0)-50*fs, z:0, yCopy:getY(50*fs,0)-50*fs},//0
{x:getX(50*fs,45), y:getY(50*fs,45)-50*fs, z:0, yCopy:getY(50*fs,45)-50*fs},//1
{x:getX(50*fs,90), y:getY(50*fs,90)-50*fs, z:0, yCopy:getY(50*fs,90)-50*fs},//2
{x:getX(50*fs,135), y:getY(50*fs,135)-50*fs, z:0, yCopy:getY(50*fs,135)-50*fs},//3
{x:getX(50*fs,180), y:getY(50*fs,180)-50*fs, z:0, yCopy:getY(50*fs,180)-50*fs},//4
{x:getX(50*fs,180), y:getY(50*fs,180)-100*fs, z:0, yCopy:getY(50*fs,180)-100*fs},//5
{x:getX(50*fs,225), y:getY(50*fs,225)-100*fs, z:0, yCopy:getY(50*fs,225)-100*fs},//6
{x:getX(50*fs,270), y:getY(50*fs,270)-100*fs, z:0, yCopy:getY(50*fs,270)-100*fs},//7
{x:getX(50*fs,315), y:getY(50*fs,315)-100*fs, z:0, yCopy:getY(50*fs,315)-100*fs},//8
{x:getX(50*fs,0), y:getY(50*fs,0)-100*fs, z:0, yCopy:getY(50*fs,0)-100*fs},//9
{x:getX(10*fs,0), y:getY(10*fs,0)-100*fs, z:0, yCopy:getY(10*fs,0)-100*fs},//10
{x:getX(10*fs,-45), y:getY(10*fs,-45)-100*fs, z:0, yCopy:getY(10*fs,-45)-100*fs},//11
{x:getX(10*fs,-90), y:getY(10*fs,-90)-100*fs, z:0, yCopy:getY(10*fs,-90)-100*fs},//12
{x:getX(10*fs,-135), y:getY(10*fs,-135)-100*fs, z:0, yCopy:getY(10*fs,-135)-100*fs},//13
{x:getX(10*fs,-180), y:getY(10*fs,-180)-100*fs, z:0, yCopy:getY(10*fs,-180)-100*fs},//14
{x:getX(10*fs,-180), y:getY(10*fs,-180)-50*fs, z:0, yCopy:getY(10*fs,-180)-50*fs},//15
{x:getX(10*fs,-225), y:getY(10*fs,-225)-50*fs, z:0, yCopy:getY(10*fs,-225)-50*fs},//16
{x:getX(10*fs,-270), y:getY(10*fs,-270)-50*fs, z:0, yCopy:getY(10*fs,-270)-50*fs},//17
{x:getX(10*fs,-315), y:getY(10*fs,-315)-50*fs, z:0, yCopy:getY(10*fs,-315)-50*fs},//18
{x:getX(10*fs,0), y:getY(10*fs,0)-50*fs, z:0, yCopy:getY(10*fs,0)-50*fs},//19
// Back
{x:getX(50*fs,0), y:getY(50*fs,0)-50*fs, z:50*fs, yCopy:getY(50*fs,0)-50*fs},//20
{x:getX(50*fs,45), y:getY(50*fs,45)-50*fs, z:50*fs, yCopy:getY(50*fs,45)-50*fs},//21
{x:getX(50*fs,90), y:getY(50*fs,90)-50*fs, z:50*fs, yCopy:getY(50*fs,90)-50*fs},//22
{x:getX(50*fs,135), y:getY(50*fs,135)-50*fs, z:50*fs, yCopy:getY(50*fs,135)-50*fs},//23
{x:getX(50*fs,180), y:getY(50*fs,180)-50*fs, z:50*fs, yCopy:getY(50*fs,180)-50*fs},//24
{x:getX(50*fs,180), y:getY(50*fs,180)-100*fs, z:50*fs, yCopy:getY(50*fs,180)-100*fs},//25
{x:getX(50*fs,225), y:getY(50*fs,225)-100*fs, z:50*fs, yCopy:getY(50*fs,225)-100*fs},//26
{x:getX(50*fs,270), y:getY(50*fs,270)-100*fs, z:50*fs, yCopy:getY(50*fs,270)-100*fs},//27
{x:getX(50*fs,315), y:getY(50*fs,315)-100*fs, z:50*fs, yCopy:getY(50*fs,315)-100*fs},//28
{x:getX(50*fs,0), y:getY(50*fs,0)-100*fs, z:50*fs, yCopy:getY(50*fs,0)-100*fs},//29
{x:getX(10*fs,0), y:getY(10*fs,0)-100*fs, z:50*fs, yCopy:getY(10*fs,0)-100*fs},//30
{x:getX(10*fs,-45), y:getY(10*fs,-45)-100*fs, z:50*fs, yCopy:getY(10*fs,-45)-100*fs},//31
{x:getX(10*fs,-90), y:getY(10*fs,-90)-100*fs, z:50*fs, yCopy:getY(10*fs,-90)-100*fs},//32
{x:getX(10*fs,-135), y:getY(10*fs,-135)-100*fs, z:50*fs, yCopy:getY(10*fs,-135)-100*fs},//33
{x:getX(10*fs,-180), y:getY(10*fs,-180)-100*fs, z:50*fs, yCopy:getY(10*fs,-180)-100*fs},//34
{x:getX(10*fs,-180), y:getY(10*fs,-180)-50*fs, z:50*fs, yCopy:getY(10*fs,-180)-50*fs},//35
{x:getX(10*fs,-225), y:getY(10*fs,-225)-50*fs, z:50*fs, yCopy:getY(10*fs,-225)-50*fs},//36
{x:getX(10*fs,-270), y:getY(10*fs,-270)-50*fs, z:50*fs, yCopy:getY(10*fs,-270)-50*fs},//37
{x:getX(10*fs,-315), y:getY(10*fs,-315)-50*fs, z:50*fs, yCopy:getY(10*fs,-315)-50*fs},//38
{x:getX(10*fs,0), y:getY(10*fs,0)-50*fs, z:50*fs, yCopy:getY(10*fs,0)-50*fs},//39
],
path:[
//front in
{point:0, line:false},
{point:1, line:true},
{point:2, line:true},
{point:3, line:true},
{point:4, line:true},
{point:5, line:true},
{point:6, line:true},
{point:7, line:true},
{point:8, line:true},
{point:9, line:true},
{point:10, line:true},
{point:11, line:true},
{point:12, line:true},
{point:13, line:true},
{point:14, line:true},
{point:15, line:true},
{point:16, line:true},
{point:17, line:true},
{point:18, line:true},
{point:19, line:true},
{point:0, line:true},
// //back
{point:20, line:false},
{point:21, line:true},
{point:22, line:true},
{point:23, line:true},
{point:24, line:true},
{point:25, line:true},
{point:26, line:true},
{point:27, line:true},
{point:28, line:true},
{point:29, line:true},
{point:30, line:true},
{point:31, line:true},
{point:32, line:true},
{point:33, line:true},
{point:34, line:true},
{point:35, line:true},
{point:36, line:true},
{point:37, line:true},
{point:38, line:true},
{point:39, line:true},
{point:20, line:true},
{point:0, line:false}, {point:20, line:true},
{point:1, line:false}, {point:21, line:true},
{point:2, line:false}, {point:22, line:true},
{point:3, line:false}, {point:23, line:true},
{point:4, line:false}, {point:24, line:true},
{point:5, line:false}, {point:25, line:true},
{point:6, line:false}, {point:26, line:true},
{point:7, line:false}, {point:27, line:true},
{point:8, line:false}, {point:28, line:true},
{point:9, line:false}, {point:29, line:true},
{point:10, line:false}, {point:30, line:true},
{point:11, line:false}, {point:31, line:true},
{point:12, line:false}, {point:32, line:true},
{point:13, line:false}, {point:33, line:true},
{point:14, line:false}, {point:34, line:true},
{point:15, line:false}, {point:35, line:true},
{point:16, line:false}, {point:36, line:true},
{point:17, line:false}, {point:37, line:true},
{point:18, line:false}, {point:38, line:true},
{point:19, line:false}, {point:39, line:true},
{point:0, line:false},
{point:0, line:true, f:"#4d4dff"},
],
real:{
xReal:width/2-30*fs,
yReal:symbLy,
zReal:200*fs,
degXY:0,
degXZ:0,
degYZ:0},
behavior:{
vx:0,
vy:0,
vz:0,
DXY:0,
DXZ:rad(rnd(-20,-10)/10),
DYZ:0, kadr:0,
dy:0.2,
isJump:false,
time:rnd(50,200)
},
nextStep: function(){
if(!this.behavior.isJump)this.behavior.kadr++;
this.real.xReal=this.real.xReal+this.behavior.vx;
this.real.yReal=this.real.yReal+this.behavior.vy;
this.real.zReal=this.real.zReal+this.behavior.vz;
this.real.degXY=this.real.degXY+this.behavior.DXY;
this.real.degXZ=this.real.degXZ+this.behavior.DXZ;
this.real.degYZ=this.real.degYZ+this.behavior.DYZ;
if(this.behavior.kadr>this.behavior.time-10){
for(let i=0; i<this.catalog.length; i++){
this.catalog[i].y=this.behavior.time===this.behavior.kadr?
this.catalog[i].yCopy:this.catalog[i].y*0.97
}
}
if(this.behavior.kadr>this.behavior.time){
this.behavior.kadr=0;
this.behavior.isJump=true;
let jump=rnd(-20*hs,-7*hs);
let somersaults=180/(jump/0.2)
this.behavior.vy=jump;
if(jump<-12*hs) this.behavior.DYZ=rad(somersaults);
}
if(this.real.yReal<=symbLy && this.behavior.isJump){
this.behavior.vy+=this.behavior.dy
} else {
this.behavior.vy=0;
this.real.yReal=symbLy;
this.behavior.isJump=false;
this.behavior.DYZ=0;
this.real.degYZ=0;
}
}
}
let Symb_a2={}
Symb_a2.catalog=Symb_a1.catalog.map(({x,y,z,yCopy})=>{return {x,y,z,yCopy}});
Symb_a2.path=Symb_a1.path.map(({point,line,f})=>{return{point,line,f}});
Symb_a2.real={xReal:width/2+120*fs, yReal:symbLy, zReal:200*fs, degXY:0, degXZ:0, degYZ:0};
Symb_a2.behavior={vx:0, vy:0, vz:0, DXY:0, DXZ:rad(rnd(-10,20)/10), DYZ:0, kadr:0, dy:0.2, isJump:false, time:rnd(50,200)}
Symb_a2.nextStep=Symb_a1.nextStep
let Symb_l={
catalog:[
//front
{x:10*fs, y:-20*fs, z:0, yCopy:-20*fs},//0
{x:20*fs, y:-10*fs, z:0, yCopy:-10*fs},//1
{x:30*fs, y:-30*fs, z:0, yCopy:-30*fs},//2
{x:40*fs, y:-150*fs, z:0, yCopy:-150*fs},//3
{x:100*fs, y:-150*fs, z:0, yCopy:-150*fs},//4
{x:100*fs, y:0, z:0, yCopy:0},//5
{x:80*fs, y:0, z:0, yCopy:0},//6
{x:80*fs, y:-130*fs, z:0, yCopy:-130*fs},//7
{x:60*fs, y:-130*fs, z:0, yCopy:-130*fs},//8
{x:50*fs, y:-20*fs, z:0, yCopy:-20*fs},//9
{x:40*fs, y:0, z:0, yCopy:0},//10
{x:20*fs, y:0, z:0, yCopy:0},//11
{x:10, y:-10*fs, z:0, yCopy:-10*fs},//12
{x:10*fs, y:-20*fs, z:50*fs, yCopy:-20*fs},//13
{x:20*fs, y:-10*fs, z:50*fs, yCopy:-10*fs},//14
{x:30*fs, y:-30*fs, z:50*fs, yCopy:-30*fs},//15
{x:40*fs, y:-150*fs, z:50*fs, yCopy:-150*fs},//16
{x:100*fs, y:-150*fs, z:50*fs, yCopy:-150*fs},//17
{x:100*fs, y:0, z:50*fs, yCopy:0},//18
{x:80*fs, y:0, z:50*fs, yCopy:0},//19
{x:80*fs, y:-130*fs, z:50*fs, yCopy:-130*fs},//20
{x:60*fs, y:-130*fs, z:50*fs, yCopy:-130*fs},//21
{x:50*fs, y:-20*fs, z:50*fs, yCopy:-20*fs},//22
{x:40*fs, y:0, z:50*fs, yCopy:0},//23
{x:20*fs, y:0, z:50*fs, yCopy:0},//24
{x:10, y:-10*fs, z:50*fs, yCopy:-10*fs},//25
],
path:[
//front
{point:0, line:false},
{point:1, line:true},
{point:2, line:true},
{point:3, line:true},
{point:4, line:true},
{point:5, line:true},
{point:6, line:true},
{point:7, line:true},
{point:8, line:true},
{point:9, line:true},
{point:10, line:true},
{point:11, line:true},
{point:12, line:true},
{point:0, line:true},
{point:13, line:false},
{point:14, line:true},
{point:15, line:true},
{point:16, line:true},
{point:17, line:true},
{point:18, line:true},
{point:19, line:true},
{point:20, line:true},
{point:21, line:true},
{point:22, line:true},
{point:23, line:true},
{point:24, line:true},
{point:25, line:true},
{point:0, line:false}, {point:13, line:true},
{point:1, line:false}, {point:14, line:true},
{point:2, line:false}, {point:15, line:true},
{point:3, line:false}, {point:16, line:true},
{point:4, line:false}, {point:17, line:true},
{point:5, line:false}, {point:18, line:true},
{point:6, line:false}, {point:19, line:true},
{point:7, line:false}, {point:20, line:true},
{point:8, line:false}, {point:21, line:true},
{point:9, line:false}, {point:22, line:true},
{point:10, line:false}, {point:23, line:true},
{point:11, line:false}, {point:24, line:true},
{point:12, line:false}, {point:25, line:true},
{point:0, line:false},
{point:0, line:true, f:"#4d4dff"},
],
real:{
xReal:width/2+190*fs,
yReal:symbLy,
zReal:200*fs,
degXY:0,
degXZ:0,
degYZ:0},
behavior:{
vx:0,
vy:0,
vz:0,
DXY:0,
DXZ:rad(rnd(-20,20)/10),
DYZ:0, kadr:0,
dy:0.2,
isJump:false,
time:rnd(50,200),
},
nextStep: function(){
if(!this.behavior.isJump)this.behavior.kadr++;
this.real.xReal=this.real.xReal+this.behavior.vx;
this.real.yReal=this.real.yReal+this.behavior.vy;
this.real.zReal=this.real.zReal+this.behavior.vz;
this.real.degXY=this.real.degXY+this.behavior.DXY;
this.real.degXZ=this.real.degXZ+this.behavior.DXZ;
this.real.degYZ=this.real.degYZ+this.behavior.DYZ;
if (this.real.degXZ>rad(80) || this.real.degXZ<rad(-80)) this.behavior.DXZ*=-1;
if(this.behavior.kadr>this.behavior.time-10){
for(let i=0; i<this.catalog.length; i++){
this.catalog[i].y=this.behavior.time===this.behavior.kadr?
this.catalog[i].yCopy:this.catalog[i].y*0.97
}
}
if(this.behavior.kadr>this.behavior.time){
this.behavior.kadr=0;
this.behavior.isJump=true;
let jump=rnd(-20*hs,-7*hs);
let somersaults=180/(jump/0.2)
this.behavior.vy=jump;
if(jump<-12*hs) this.behavior.DXY=rad(somersaults);
}
if(this.real.yReal<=symbLy && this.behavior.isJump){
this.behavior.vy+=this.behavior.dy
} else {
this.behavior.vy=0;
this.real.yReal=symbLy;
this.behavior.isJump=false;
this.behavior.DXY=0;
this.real.degXY=0;
}
}
}
let Symb_f={
catalog:[
//front in
{x:getX(40*fs,90)-10*fs, y:getY(40*fs,90)-80*fs, z:0, yCopy:getY(40*fs,90)-80*fs},//0
{x:getX(40*fs,135)-10*fs, y:getY(40*fs,135)-80*fs, z:0, yCopy:getY(40*fs,135)-80*fs},//1
{x:getX(40*fs,180)-10*fs, y:getY(40*fs,180)-80*fs, z:0, yCopy:getY(40*fs,180)-80*fs},//2
{x:getX(40*fs,225)-10*fs, y:getY(40*fs,225)-80*fs, z:0, yCopy:getY(40*fs,225)-80*fs},//3
{x:getX(40*fs,270)-10*fs, y:getY(40*fs,270)-80*fs, z:0, yCopy:getY(40*fs,270)-80*fs},//4
{x:-10*fs, y:-200*fs, z:0, yCopy:-200*fs},//5
{x:10*fs, y:-200*fs, z:0, yCopy:-200*fs},//6
{x:getX(40*fs,-90)+10*fs, y:getY(40*fs,-90)-80*fs, z:0, yCopy:getY(40*fs,-90)-80*fs},//7
{x:getX(40*fs,-45)+10*fs, y:getY(40*fs,-45)-80*fs, z:0, yCopy:getY(40*fs,-45)-80*fs},//8
{x:getX(40*fs, 0)+10*fs, y:getY(40*fs, 0)-80*fs, z:0, yCopy:getY(40*fs, 0)-80*fs},//9
{x:getX(40*fs, 45)+10*fs, y:getY(40*fs, 45)-80*fs, z:0, yCopy:getY(40*fs, 45)-80*fs},//10
{x:getX(40*fs, 90)+10*fs, y:getY(40*fs, 90)-80*fs, z:0, yCopy:getY(40*fs, 90)-80*fs},//11
{x:10*fs, y:20*fs, z:0, yCopy:20*fs},//12
{x:-10*fs, y:20*fs, z:0, yCopy:20*fs},//13
{x:getX(10*fs,90)-10*fs, y:getY(10*fs,90)-80*fs, z:0, yCopy:getY(10*fs,90)-80*fs},//14
{x:getX(10*fs,135)-10*fs, y:getY(10*fs,135)-80*fs, z:0, yCopy:getY(10*fs,135)-80*fs},//15
{x:getX(10*fs,180)-10*fs, y:getY(10*fs,180)-80*fs, z:0, yCopy:getY(10*fs,180)-80*fs},//16
{x:getX(10*fs,225)-10*fs, y:getY(10*fs,225)-80*fs, z:0, yCopy:getY(10*fs,225)-80*fs},//17
{x:getX(10*fs,270)-10*fs, y:getY(10*fs,270)-80*fs, z:0, yCopy:getY(10*fs,270)-80*fs},//18
{x:getX(10*fs,315)-10*fs, y:getY(10*fs,315)-80*fs, z:0, yCopy:getY(10*fs,315)-80*fs},//19
{x:getX(10*fs,0)-10*fs, y:getY(10*fs,0)-80*fs, z:0, yCopy:getY(10*fs,0)-80*fs},//20
{x:getX(10*fs,45)-10*fs, y:getY(10*fs,45)-80*fs, z:0, yCopy:getY(10*fs,45)-80*fs},//21
{x:getX(10*fs,90)+10*fs, y:getY(10*fs,90)-80*fs, z:0, yCopy:getY(10*fs,90)-80*fs},//22
{x:getX(10*fs,135)+10*fs, y:getY(10*fs,135)-80*fs, z:0, yCopy:getY(10*fs,135)-80*fs},//23
{x:getX(10*fs,180)+10*fs, y:getY(10*fs,180)-80*fs, z:0, yCopy:getY(10*fs,180)-80*fs},//24
{x:getX(10*fs,225)+10*fs, y:getY(10*fs,225)-80*fs, z:0, yCopy:getY(10*fs,225)-80*fs},//25
{x:getX(10*fs,270)+10*fs, y:getY(10*fs,270)-80*fs, z:0, yCopy:getY(10*fs,270)-80*fs},//26
{x:getX(10*fs,315)+10*fs, y:getY(10*fs,315)-80*fs, z:0, yCopy:getY(10*fs,315)-80*fs},//27
{x:getX(10*fs,0)+10*fs, y:getY(10*fs,0)-80*fs, z:0, yCopy:getY(10*fs,0)-80*fs},//28
{x:getX(10*fs,45)+10*fs, y:getY(10*fs,45)-80*fs, z:0, yCopy:getY(10*fs,45)-80*fs},//29
// back
{x:getX(40*fs,90)-10*fs, y:getY(40*fs,90)-80*fs, z:50*fs, yCopy:getY(40*fs,90)-80*fs},//30
{x:getX(40*fs,135)-10*fs, y:getY(40*fs,135)-80*fs, z:50*fs, yCopy:getY(40*fs,135)-80*fs},//31
{x:getX(40*fs,180)-10*fs, y:getY(40*fs,180)-80*fs, z:50*fs, yCopy:getY(40*fs,180)-80*fs},//32
{x:getX(40*fs,225)-10*fs, y:getY(40*fs,225)-80*fs, z:50*fs, yCopy:getY(40*fs,225)-80*fs},//33
{x:getX(40*fs,270)-10*fs, y:getY(40*fs,270)-80*fs, z:50*fs, yCopy:getY(40*fs,270)-80*fs},//34
{x:-10*fs, y:-200*fs, z:50*fs, yCopy:-200*fs},//35
{x:10*fs, y:-200*fs, z:50*fs, yCopy:-200*fs},//36
{x:getX(40*fs,-90)+10*fs, y:getY(40*fs,-90)-80*fs, z:50*fs, yCopy:getY(40*fs,-90)-80*fs},//37
{x:getX(40*fs,-45)+10*fs, y:getY(40*fs,-45)-80*fs, z:50*fs, yCopy:getY(40*fs,-45)-80*fs},//38
{x:getX(40*fs, 0)+10*fs, y:getY(40*fs, 0)-80*fs, z:50*fs, yCopy:getY(40*fs, 0)-80*fs},//39
{x:getX(40*fs, 45)+10*fs, y:getY(40*fs, 45)-80*fs, z:50*fs, yCopy:getY(40*fs, 45)-80*fs},//40
{x:getX(40*fs, 90)+10*fs, y:getY(40*fs, 90)-80*fs, z:50*fs, yCopy:getY(40*fs, 90)-80*fs},//41
{x:10*fs, y:20*fs, z:50*fs, yCopy:20*fs},//42
{x:-10*fs, y:20*fs, z:50*fs, yCopy:20*fs},//43
{x:getX(10*fs,90)-10*fs, y:getY(10*fs,90)-80*fs, z:50*fs, yCopy:getY(10*fs,90)-80*fs},//44
{x:getX(10*fs,135)-10*fs, y:getY(10*fs,135)-80*fs, z:50*fs, yCopy:getY(10*fs,135)-80*fs},//45
{x:getX(10*fs,180)-10*fs, y:getY(10*fs,180)-80*fs, z:50*fs, yCopy:getY(10*fs,180)-80*fs},//46
{x:getX(10*fs,225)-10*fs, y:getY(10*fs,225)-80*fs, z:50*fs, yCopy:getY(10*fs,225)-80*fs},//47
{x:getX(10*fs,270)-10*fs, y:getY(10*fs,270)-80*fs, z:50*fs, yCopy:getY(10*fs,270)-80*fs},//48
{x:getX(10*fs,315)-10*fs, y:getY(10*fs,315)-80*fs, z:50*fs, yCopy:getY(10*fs,315)-80*fs},//49
{x:getX(10*fs,0)-10*fs, y:getY(10*fs,0)-80*fs, z:50*fs, yCopy:getY(10*fs,0)-80*fs},//50
{x:getX(10*fs,45)-10*fs, y:getY(10*fs,45)-80*fs, z:50*fs, yCopy:getY(10*fs,45)-80*fs},//51
{x:getX(10*fs,90)+10*fs, y:getY(10*fs,90)-80*fs, z:50*fs, yCopy:getY(10*fs,90)-80*fs},//52
{x:getX(10*fs,135)+10*fs, y:getY(10*fs,135)-80*fs, z:50*fs, yCopy:getY(10*fs,135)-80*fs},//53
{x:getX(10*fs,180)+10*fs, y:getY(10*fs,180)-80*fs, z:50*fs, yCopy:getY(10*fs,180)-80*fs},//54
{x:getX(10*fs,225)+10*fs, y:getY(10*fs,225)-80*fs, z:50*fs, yCopy:getY(10*fs,225)-80*fs},//55
{x:getX(10*fs,270)+10*fs, y:getY(10*fs,270)-80*fs, z:50*fs, yCopy:getY(10*fs,270)-80*fs},//56
{x:getX(10*fs,315)+10*fs, y:getY(10*fs,315)-80*fs, z:50*fs, yCopy:getY(10*fs,315)-80*fs},//57
{x:getX(10*fs,0)+10*fs, y:getY(10*fs,0)-80*fs, z:50*fs, yCopy:getY(10*fs,0)-80*fs},//58
{x:getX(10*fs,45)+10*fs, y:getY(10*fs,45)-80*fs, z:50*fs, yCopy:getY(10*fs,45)-80*fs},//59
// Back
],
path:[
//front
{point:0, line:false},
{point:1, line:true},
{point:2, line:true},
{point:3, line:true},
{point:4, line:true},
{point:5, line:true},
{point:6, line:true},
{point:7, line:true},
{point:8, line:true},
{point:9, line:true},
{point:10, line:true},
{point:11, line:true},
{point:12, line:true},
{point:13, line:true},
{point:0, line:true},
//
{point:14, line:false},
{point:15, line:true},
{point:16, line:true},
{point:17, line:true},
{point:18, line:true},
{point:19, line:true},
{point:20, line:true},
{point:21, line:true},
{point:14, line:true},
{point:22, line:false},
{point:23, line:true},
{point:24, line:true},
{point:25, line:true},
{point:26, line:true},
{point:27, line:true},
{point:28, line:true},
{point:29, line:true},
{point:22, line:true},
// back
{point:30, line:false},
{point:31, line:true},
{point:32, line:true},
{point:33, line:true},
{point:34, line:true},
{point:35, line:true},
{point:36, line:true},
{point:37, line:true},
{point:38, line:true},
{point:39, line:true},
{point:40, line:true},
{point:41, line:true},
{point:42, line:true},
{point:43, line:true},
{point:30, line:true},
{point:44, line:false},
{point:45, line:true},
{point:46, line:true},
{point:47, line:true},
{point:48, line:true},
{point:49, line:true},
{point:50, line:true},
{point:51, line:true},
{point:44, line:true},
{point:52, line:false},
{point:53, line:true},
{point:54, line:true},
{point:55, line:true},
{point:56, line:true},
{point:57, line:true},
{point:58, line:true},
{point:59, line:true},
{point:52, line:true},
{point:0, line:false}, {point:30, line:true},
{point:1, line:false}, {point:31, line:true},
{point:2, line:false}, {point:32, line:true},
{point:3, line:false}, {point:33, line:true},
{point:4, line:false}, {point:34, line:true},
{point:5, line:false}, {point:35, line:true},
{point:6, line:false}, {point:36, line:true},
{point:7, line:false}, {point:37, line:true},
{point:8, line:false}, {point:38, line:true},
{point:9, line:false}, {point:39, line:true},
{point:10, line:false}, {point:40, line:true},
{point:11, line:false}, {point:41, line:true},
{point:12, line:false}, {point:42, line:true},
{point:13, line:false}, {point:43, line:true},
{point:14, line:false}, {point:44, line:true},
{point:15, line:false}, {point:45, line:true},
{point:16, line:false}, {point:46, line:true},
{point:17, line:false}, {point:47, line:true},
{point:18, line:false}, {point:48, line:true},
{point:19, line:false}, {point:49, line:true},
{point:20, line:false}, {point:50, line:true},
{point:21, line:false}, {point:51, line:true},
{point:22, line:false}, {point:52, line:true},
{point:23, line:false}, {point:53, line:true},
{point:24, line:false}, {point:54, line:true},
{point:25, line:false}, {point:55, line:true},
{point:26, line:false}, {point:56, line:true},
{point:27, line:false}, {point:57, line:true},
{point:28, line:false}, {point:58, line:true},
{point:29, line:false}, {point:59, line:true},
{point:0, line:false},
{point:1, line:true},
{point:2, line:true},
{point:3, line:true},
{point:4, line:true},
{point:5, line:true},
{point:6, line:true},
{point:7, line:true},
{point:8, line:true},
{point:9, line:true},
{point:10, line:true},
{point:11, line:true},
{point:12, line:true},
{point:13, line:true},
{point:0, line:true, f:"#4d4dff"},
{point:14, line:false},
{point:15, line:true},
{point:16, line:true},
{point:17, line:true},
{point:18, line:true},
{point:19, line:true},
{point:20, line:true},
{point:21, line:true},
{point:14, line:true, f:'#07082bff'},
{point:22, line:false},
{point:23, line:true},
{point:24, line:true},
{point:25, line:true},
{point:26, line:true},
{point:27, line:true},
{point:28, line:true},
{point:29, line:true},
{point:22, line:true, f:'#07082bff'},
],
real:{
xReal:width/2+330*fs,
yReal:symbLy,
zReal:200*fs,
degXY:rad(-4),
degXZ:0,
degYZ:0},
behavior:{
vx:0,
vy:0,
vz:0,
DXY:0,
DXZ:0,
DYZ:0, kadr:0,
dy:0.2,
isJump:false,
time:rnd(50,200),
boost:rad(rnd(2,5)/100)
},
nextStep: function(){
if(!this.behavior.isJump)this.behavior.kadr++;
this.real.xReal=this.real.xReal+this.behavior.vx;
this.real.yReal=this.real.yReal+this.behavior.vy;
this.real.zReal=this.real.zReal+this.behavior.vz;
this.real.degXY=this.real.degXY+this.behavior.DXY;
this.real.degXZ=this.real.degXZ+this.behavior.DXZ;
this.real.degYZ=this.real.degYZ+this.behavior.DYZ;
this.behavior.DXZ+=this.behavior.boost;
if (Math.abs(this.behavior.DXZ)>rad(20)){console.log(this.behavior.DXZ) ;this.behavior.boost*=-1};
if(this.behavior.kadr>this.behavior.time-10){
for(let i=0; i<this.catalog.length; i++){
this.catalog[i].y=this.behavior.time===this.behavior.kadr?
this.catalog[i].yCopy:this.catalog[i].y*0.97
}
}
if(this.behavior.kadr>this.behavior.time){
this.behavior.kadr=0;
this.behavior.isJump=true;
let jump=rnd(-20*hs,-7*hs);
let somersaults=180/(jump/0.2)
this.behavior.vy=jump;
if(jump<-12*hs) this.behavior.DYZ=rad(somersaults);
}
if(this.real.yReal<=symbLy && this.behavior.isJump){
this.behavior.vy+=this.behavior.dy
} else {
this.behavior.vy=0;
this.real.yReal=symbLy;
this.behavior.isJump=false;
this.behavior.DYZ=0;
this.real.degYZ=0;
}
}
}
let Symb_e1={
catalog:[
//front in
{x:getX(50*fs,0), y:getY(50*fs,0)-50*fs, z:0, yCopy:getY(50*fs,0)-50*fs},//0
{x:getX(50*fs,45), y:getY(50*fs,45)-50*fs, z:0, yCopy:getY(50*fs,45)-50*fs},//1
{x:getX(50*fs,90), y:getY(50*fs,90)-50*fs, z:0, yCopy:getY(50*fs,90)-50*fs},//2
{x:getX(50*fs,135), y:getY(50*fs,135)-50*fs, z:0, yCopy:getY(50*fs,135)-50*fs},//3
{x:getX(50*fs,180), y:getY(50*fs,180)-50*fs, z:0, yCopy:getY(50*fs,180)-50*fs},//4
{x:getX(50*fs,180), y:getY(50*fs,180)-100*fs, z:0, yCopy:getY(50*fs,180)-100*fs},//5
{x:getX(50*fs,225), y:getY(50*fs,225)-100*fs, z:0, yCopy:getY(50*fs,225)-100*fs},//6
{x:getX(50*fs,270), y:getY(50*fs,270)-100*fs, z:0, yCopy:getY(50*fs,270)-100*fs},//7
{x:getX(50*fs,315), y:getY(50*fs,315)-100*fs, z:0, yCopy:getY(50*fs,315)-100*fs},//8
{x:getX(50*fs,0), y:getY(50*fs,0)-100*fs, z:0, yCopy:getY(50*fs,0)-100*fs},//9
{x:50*fs, y:-75*fs, z:0, yCopy:-75*fs},//10
{x:-10*fs, y:-75*fs, z:0, yCopy:-75*fs},//11
{x:getX(10*fs,180), y:getY(10*fs,180)-100*fs, z:0, yCopy:getY(10*fs,180)-100*fs},//12
{x:getX(10*fs,225), y:getY(10*fs,225)-100*fs, z:0, yCopy:getY(10*fs,225)-100*fs},//13
{x:getX(10*fs,270), y:getY(10*fs,270)-100*fs, z:0, yCopy:getY(10*fs,270)-100*fs},//14
{x:getX(10*fs,315), y:getY(10*fs,315)-100*fs, z:0, yCopy:getY(10*fs,315)-100*fs},//15
{x:getX(10*fs,0), y:getY(10*fs,0)-100*fs, z:0, yCopy:getY(10*fs,0)-100*fs},//16
{x:getX(10*fs,45), y:getY(10*fs,45)-100*fs, z:0, yCopy:getY(10*fs,45)-100*fs},//17
{x:getX(10*fs,90), y:getY(10*fs,90)-100*fs, z:0, yCopy:getY(10*fs,90)-100*fs},//18
{x:getX(10*fs,135), y:getY(10*fs,135)-100*fs, z:0, yCopy:getY(10*fs,135)-100*fs},//19
{x:getX(10*fs,180), y:getY(10*fs,180)-50*fs, z:0, yCopy:getY(10*fs,180)-50*fs},//20
{x:getX(10*fs,135), y:getY(10*fs,135)-50*fs, z:0, yCopy:getY(10*fs,135)-50*fs},//21
{x:getX(10*fs,90), y:getY(10*fs,90)-50*fs, z:0, yCopy:getY(10*fs,90)-50*fs},//22
{x:getX(10*fs,45), y:getY(10*fs,45)-50*fs, z:0, yCopy:getY(10*fs,45)-50*fs},//23
{x:getX(10*fs,0), y:getY(10*fs,0)-50*fs, z:0, yCopy:getY(10*fs,0)-50*fs},//24
// Back
{x:getX(50*fs,0), y:getY(50*fs,0)-50*fs, z:50*fs, yCopy:getY(50*fs,0)-50*fs},//25
{x:getX(50*fs,45), y:getY(50*fs,45)-50*fs, z:50*fs, yCopy:getY(50*fs,45)-50*fs},//26
{x:getX(50*fs,90), y:getY(50*fs,90)-50*fs, z:50*fs, yCopy:getY(50*fs,90)-50*fs},//27
{x:getX(50*fs,135), y:getY(50*fs,135)-50*fs, z:50*fs, yCopy:getY(50*fs,135)-50*fs},//28
{x:getX(50*fs,180), y:getY(50*fs,180)-50*fs, z:50*fs, yCopy:getY(50*fs,180)-50*fs},//29
{x:getX(50*fs,180), y:getY(50*fs,180)-100*fs, z:50*fs, yCopy:getY(50*fs,180)-100*fs},//30
{x:getX(50*fs,225), y:getY(50*fs,225)-100*fs, z:50*fs, yCopy:getY(50*fs,225)-100*fs},//31
{x:getX(50*fs,270), y:getY(50*fs,270)-100*fs, z:50*fs, yCopy:getY(50*fs,270)-100*fs},//32
{x:getX(50*fs,315), y:getY(50*fs,315)-100*fs, z:50*fs, yCopy:getY(50*fs,315)-100*fs},//33
{x:getX(50*fs,0), y:getY(50*fs,0)-100*fs, z:50*fs, yCopy:getY(50*fs,0)-100*fs},//34
{x:50*fs, y:-75*fs, z:50*fs, yCopy:-75*fs},//35
{x:-10*fs, y:-75*fs, z:50*fs, yCopy:-75*fs},//36
{x:getX(10*fs,180), y:getY(10*fs,180)-100*fs, z:50*fs, yCopy:getY(10*fs,180)-100*fs},//37
{x:getX(10*fs,225), y:getY(10*fs,225)-100*fs, z:50*fs, yCopy:getY(10*fs,225)-100*fs},//38
{x:getX(10*fs,270), y:getY(10*fs,270)-100*fs, z:50*fs, yCopy:getY(10*fs,270)-100*fs},//39
{x:getX(10*fs,315), y:getY(10*fs,315)-100*fs, z:50*fs, yCopy:getY(10*fs,315)-100*fs},//40
{x:getX(10*fs,0), y:getY(10*fs,0)-100*fs, z:50*fs, yCopy:getY(10*fs,0)-100*fs},//41
{x:getX(10*fs,45), y:getY(10*fs,45)-100*fs, z:50*fs, yCopy:getY(10*fs,45)-100*fs},//42
{x:getX(10*fs,90), y:getY(10*fs,90)-100*fs, z:50*fs, yCopy:getY(10*fs,90)-100*fs},//43
{x:getX(10*fs,135), y:getY(10*fs,135)-100*fs, z:50*fs, yCopy:getY(10*fs,135)-100*fs},//44
{x:getX(10*fs,180), y:getY(10*fs,180)-50*fs, z:50*fs, yCopy:getY(10*fs,180)-50*fs},//45
{x:getX(10*fs,135), y:getY(10*fs,135)-50*fs, z:50*fs, yCopy:getY(10*fs,135)-50*fs},//46
{x:getX(10*fs,90), y:getY(10*fs,90)-50*fs, z:50*fs, yCopy:getY(10*fs,90)-50*fs},//47
{x:getX(10*fs,45), y:getY(10*fs,45)-50*fs, z:50*fs, yCopy:getY(10*fs,45)-50*fs},//48
{x:getX(10*fs,0), y:getY(10*fs,0)-50*fs, z:50*fs, yCopy:getY(10*fs,0)-50*fs},//49
],
path:[
//front in
{point:0, line:false},
{point:1, line:true},
{point:2, line:true},
{point:3, line:true},
{point:4, line:true},
{point:5, line:true},
{point:6, line:true},
{point:7, line:true},
{point:8, line:true},
{point:9, line:true},
{point:10, line:true},
{point:11, line:true},
{point:12, line:true},
{point:13, line:true},
{point:14, line:true},
{point:15, line:true},
{point:16, line:true},
{point:17, line:true},
{point:18, line:true},
{point:19, line:true},
{point:12, line:true},
{point:20, line:true},
{point:21, line:true},
{point:22, line:true},
{point:23, line:true},
{point:24, line:true},
{point:0, line:true},
{point:25, line:false},
{point:26, line:true},
{point:27, line:true},
{point:28, line:true},
{point:29, line:true},
{point:30, line:true},
{point:31, line:true},
{point:32, line:true},
{point:33, line:true},
{point:34, line:true},
{point:35, line:true},
{point:36, line:true},
{point:37, line:true},
{point:38, line:true},
{point:39, line:true},
{point:40, line:true},
{point:41, line:true},
{point:42, line:true},
{point:43, line:true},
{point:44, line:true},
{point:37, line:true},
{point:45, line:true},
{point:46, line:true},
{point:47, line:true},
{point:48, line:true},
{point:49, line:true},
{point:25, line:true},
{point:0, line:false}, {point:25, line:true},
{point:1, line:false}, {point:26, line:true},
{point:2, line:false}, {point:27, line:true},
{point:3, line:false}, {point:28, line:true},
{point:4, line:false}, {point:29, line:true},
{point:5, line:false}, {point:30, line:true},
{point:6, line:false}, {point:31, line:true},
{point:7, line:false}, {point:32, line:true},
{point:8, line:false}, {point:33, line:true},
{point:9, line:false}, {point:34, line:true},
{point:10, line:false}, {point:35, line:true},
{point:11, line:false}, {point:36, line:true},
{point:12, line:false}, {point:37, line:true},
{point:13, line:false}, {point:38, line:true},
{point:14, line:false}, {point:39, line:true},
{point:15, line:false}, {point:40, line:true},
{point:16, line:false}, {point:41, line:true},
{point:17, line:false}, {point:42, line:true},
{point:18, line:false}, {point:43, line:true},
{point:19, line:false}, {point:44, line:true},
{point:20, line:false}, {point:45, line:true},
{point:21, line:false}, {point:46, line:true},
{point:22, line:false}, {point:47, line:true},
{point:23, line:false}, {point:48, line:true},
{point:24, line:false}, {point:49, line:true},
{point:0, line:false},
{point:0, line:true, f:"#4d4dff"},
{point:12, line:false},
{point:13, line:true},
{point:14, line:true},
{point:15, line:true},
{point:16, line:true},
{point:17, line:true},
{point:18, line:true},
{point:19, line:true},
{point:12, line:true, f:'#07082bff'},
],
real:{
xReal:width/2+450*fs,
yReal:symbLy,
zReal:200*fs,
degXY:0,
degXZ:0,
degYZ:0},
behavior:{
vx:0,
vy:0,
vz:0,
DXY:0,
DXZ:rad(rnd(-20,-10)/10),
DYZ:0, kadr:0,
dy:0.2,
isJump:false,
time:rnd(50,200)
},
nextStep: function(){
if(!this.behavior.isJump)this.behavior.kadr++;
this.real.xReal=this.real.xReal+this.behavior.vx;
this.real.yReal=this.real.yReal+this.behavior.vy;
this.real.zReal=this.real.zReal+this.behavior.vz;
this.real.degXY=this.real.degXY+this.behavior.DXY;
this.real.degXZ=this.real.degXZ+this.behavior.DXZ;
this.real.degYZ=this.real.degYZ+this.behavior.DYZ;
if(this.behavior.kadr>this.behavior.time-10){
for(let i=0; i<this.catalog.length; i++){
this.catalog[i].y=this.behavior.time===this.behavior.kadr?
this.catalog[i].yCopy:this.catalog[i].y*0.97
}
}
if(this.behavior.kadr>this.behavior.time){
this.behavior.kadr=0;
this.behavior.isJump=true;
let jump=rnd(-20*hs,-7*hs);
let somersaults=180/(jump/0.2)
this.behavior.vy=jump;
if(jump<-12*hs) this.behavior.DYZ=rad(somersaults);
}
if(this.real.yReal<=symbLy && this.behavior.isJump){
this.behavior.vy+=this.behavior.dy
} else {
this.behavior.vy=0;
this.real.yReal=symbLy;
this.behavior.isJump=false;
this.behavior.DYZ=0;
this.real.degYZ=0;
}
}
}
let Symb_t={
catalog:[
//front
{x:-10*fs, y:0, z:0, yCopy:0},//0
{x:-10*fs, y:-120*fs, z:0, yCopy:-120*fs},//1
{x:-40*fs, y:-120*fs, z:0, yCopy:-120*fs},//2
{x:-40*fs, y:-150*fs, z:0, yCopy:-150*fs},//3
{x:40*fs, y:-150*fs, z:0, yCopy:-150*fs},//4
{x:40*fs, y:-120*fs, z:0, yCopy:-120*fs},//5
{x:10*fs, y:-120*fs, z:0, yCopy:-120*fs},//6
{x:10*fs, y:0, z:0, yCopy:0},//7
// Back
{x:-10*fs, y:0, z:50*fs, yCopy:0},//8
{x:-10*fs, y:-120*fs, z:50*fs, yCopy:-120*fs},//9
{x:-40*fs, y:-120*fs, z:50*fs, yCopy:-120*fs},//10
{x:-40*fs, y:-150*fs, z:50*fs, yCopy:-150*fs},//11
{x:40*fs, y:-150*fs, z:50*fs, yCopy:-150*fs},//12
{x:40*fs, y:-120*fs, z:50*fs, yCopy:-120*fs},//13
{x:10*fs, y:-120*fs, z:50*fs, yCopy:-120*fs},//14
{x:10*fs, y:0, z:50*fs, yCopy:0},//15
],
path:[
//front
{point:0, line:false},
{point:1, line:true},
{point:2, line:true},
{point:3, line:true},
{point:4, line:true},
{point:5, line:true},
{point:6, line:true},
{point:7, line:true},
{point:0, line:true},
// back
{point:8, line:false},
{point:9, line:true},
{point:10, line:true},
{point:11, line:true},
{point:12, line:true},
{point:13, line:true},
{point:14, line:true},
{point:15, line:true},
{point:8, line:true},
{point:0, line:false}, {point:8, line:true},
{point:1, line:false}, {point:9, line:true},
{point:2, line:false}, {point:10, line:true},
{point:3, line:false}, {point:11, line:true},
{point:4, line:false}, {point:12, line:true},
{point:5, line:false}, {point:13, line:true},
{point:6, line:false}, {point:14, line:true},
{point:7, line:false}, {point:15, line:true},
{point:0, line:false},
{point:0, line:true, f:"#4d4dff"},
],
real:{
xReal:width/2+580*fs,
yReal:symbLy,
zReal:200*fs,
degXY:rad(-4),
degXZ:0,
degYZ:0},
behavior:{
vx:0,
vy:0,
vz:0,
DXY:0,
DXZ:0,
DYZ:0, kadr:0,
dy:0.2,
isJump:false,
time:rnd(50,200),
boost:rad(rnd(2,5)/100)
},
nextStep: function(){
if(!this.behavior.isJump)this.behavior.kadr++;
this.real.xReal=this.real.xReal+this.behavior.vx;
this.real.yReal=this.real.yReal+this.behavior.vy;
this.real.zReal=this.real.zReal+this.behavior.vz;
this.real.degXY=this.real.degXY+this.behavior.DXY;
this.real.degXZ=this.real.degXZ+this.behavior.DXZ;
this.real.degYZ=this.real.degYZ+this.behavior.DYZ;
this.behavior.DXZ+=this.behavior.boost;
if (Math.abs(this.behavior.DXZ)>rad(20)){console.log(this.behavior.DXZ) ;this.behavior.boost*=-1};
if(this.behavior.kadr>this.behavior.time-10){
for(let i=0; i<this.catalog.length; i++){
this.catalog[i].y=this.behavior.time===this.behavior.kadr?
this.catalog[i].yCopy:this.catalog[i].y*0.97
}
}
if(this.behavior.kadr>this.behavior.time){
this.behavior.kadr=0;
this.behavior.isJump=true;
let jump=rnd(-20*hs,-7*hs);
let somersaults=180/(jump/0.2)
this.behavior.vy=jump;
if(jump<-12*hs) this.behavior.DYZ=rad(somersaults);
}
if(this.real.yReal<=symbLy && this.behavior.isJump){
this.behavior.vy+=this.behavior.dy
} else {
this.behavior.vy=0;
this.real.yReal=symbLy;
this.behavior.isJump=false;
this.behavior.DYZ=0;
this.real.degYZ=0;
}
}
}
let Symb_k={
catalog:[
//front
{x:0*fs, y:0, z:0, yCopy:0},//0
{x:30*fs, y:0, z:0, yCopy:0},//1
{x:30*fs, y:-50*fs, z:0, yCopy:-50*fs},//2
{x:75*fs, y:0, z:0, yCopy:0},//3
{x:100*fs, y:0, z:0, yCopy:0},//4
{x:50*fs, y:-75*fs, z:0, yCopy:-75*fs},//5
{x:100*fs, y:-150*fs, z:0, yCopy:-150*fs},//6
{x:75*fs, y:-150*fs, z:0, yCopy:-150*fs},//7
{x:30*fs, y:-100*fs, z:0, yCopy:-100*fs},//8
{x:30*fs, y:-150*fs, z:0, yCopy:-150*fs},//9
{x:0*fs, y:-150*fs, z:0, yCopy:-150*fs},//10
// Back
{x:0*fs, y:0, z:50*fs, yCopy:0},//11
{x:30*fs, y:0, z:50*fs, yCopy:0},//12
{x:30*fs, y:-50*fs, z:50*fs, yCopy:-50*fs},//13
{x:75*fs, y:0, z:50*fs, yCopy:0},//14
{x:100*fs, y:0, z:50*fs, yCopy:0},//15
{x:50*fs, y:-75*fs, z:50*fs, yCopy:-75*fs},//16
{x:100*fs, y:-150*fs, z:50*fs, yCopy:-150*fs},//17
{x:75*fs, y:-150*fs, z:50*fs, yCopy:-150*fs},//18
{x:30*fs, y:-100*fs, z:50*fs, yCopy:-100*fs},//19
{x:30*fs, y:-150*fs, z:50*fs, yCopy:-150*fs},//20
{x:0*fs, y:-150*fs, z:50*fs, yCopy:-150*fs},//21
],
path:[
//front
{point:0, line:false},
{point:1, line:true},
{point:2, line:true},
{point:3, line:true},
{point:4, line:true},
{point:5, line:true},
{point:6, line:true},
{point:7, line:true},
{point:8, line:true},
{point:9, line:true},
{point:10, line:true},
{point:0, line:true},
//back
{point:11, line:false},
{point:12, line:true},
{point:13, line:true},
{point:14, line:true},
{point:15, line:true},
{point:16, line:true},
{point:17, line:true},
{point:18, line:true},
{point:19, line:true},
{point:20, line:true},
{point:21, line:true},
{point:11, line:true},
// //
{point:0, line:true}, {point:1, line:false},
{point:12, line:true}, {point:2, line:false},
{point:13, line:true}, {point:3, line:false},
{point:14, line:true}, {point:4, line:false},
{point:15, line:true}, {point:5, line:false},
{point:16, line:true}, {point:6, line:false},
{point:17, line:true}, {point:7, line:false},
{point:18, line:true}, {point:8, line:false},
{point:19, line:true}, {point:9, line:false},
{point:20, line:true}, {point:10, line:false},
{point:21, line:true}, {point:11, line:false},
{point:0, line:false},
{point:0, line:true, f:"#4d4dff"},
],
real:{
xReal:width/2+670*fs,
yReal:symbLy,
zReal:200*fs,
degXY:0,
degXZ:0,
degYZ:0},
behavior:{
vx:0,
vy:0,
vz:0,
DXY:0,
DXZ:rad(rnd(-20,-10)/10),
DYZ:0, kadr:0,
dy:0.2,
isJump:false,
time:rnd(50,200)
},
nextStep: function(){
if(!this.behavior.isJump)this.behavior.kadr++;
this.real.xReal=this.real.xReal+this.behavior.vx;
this.real.yReal=this.real.yReal+this.behavior.vy;
this.real.zReal=this.real.zReal+this.behavior.vz;
this.real.degXY=this.real.degXY+this.behavior.DXY;
this.real.degXZ=this.real.degXZ+this.behavior.DXZ;
this.real.degYZ=this.real.degYZ+this.behavior.DYZ;
if (this.real.degXZ>rad(80) || this.real.degXZ<rad(-80)) this.behavior.DXZ*=-1;
if(this.behavior.kadr>this.behavior.time-10){
for(let i=0; i<this.catalog.length; i++){
this.catalog[i].y=this.behavior.time===this.behavior.kadr?
this.catalog[i].yCopy:this.catalog[i].y*0.97
}
}
if(this.behavior.kadr>this.behavior.time){
this.behavior.kadr=0;
this.behavior.isJump=true;
let jump=rnd(-20*hs,-7*hs);
let somersaults=180/(jump/0.2)
this.behavior.vy=jump;
if(jump<-12*hs) this.behavior.DXY=rad(somersaults);
}
if(this.real.yReal<=symbLy && this.behavior.isJump){
this.behavior.vy+=this.behavior.dy
} else {
this.behavior.vy=0;
this.real.yReal=symbLy;
this.behavior.isJump=false;
this.behavior.DXY=0;
this.real.degXY=0;
}
}
}
let Symb_e2={};
Symb_e2.catalog=Symb_e1.catalog.map(({x,y,z,yCopy})=>{return {x,y,z,yCopy}});
Symb_e2.path=Symb_e1.path.map(({point,line,f})=>{return{point,line,f}});
Symb_e2.real={xReal:width/2+850*fs, yReal:symbLy, zReal:200*fs, degXY:0, degXZ:0, degYZ:0}
Symb_e2.behavior={vx:0, vy:0, vz:0, DXY:0, DXZ:rad(rnd(-20,20)/10), DYZ:0, kadr:0, dy:0.2, jy:rnd(-15,-10), isJump:false, time:rnd(100,300)}
Symb_e2.nextStep=Symb_e1.nextStep
//________________
let room={
catalog:[
{x:0, y:height-200*fs+rnd(-50,50), z:0},
{x:width, y:height-200*fs+rnd(-50,50), z:0,
cp0x:rnd(0, width/2),cp1x:rnd(width/2,width),
cp0y:rnd(height-600*fs, height+200*fs), cp1y:rnd(height-600*fs, height+200*fs)
},
{x:width, y:height, z:0},
{x:0,y:height, z:0}
],
path:[
{point:0, line:false},
{point:1, line:'bezier'},
{point:2, line:true},
{point:3, line:true, f:'#ffffff9a'}
],
real:{xReal:0, yReal:0, zReal:0, degXY:0, degXZ:0, degYZ:0},
nextStep:function(){return}
}
let collection=[
room,
Symb_K,
Symb_o,
Symb_d,
Symb_n,
Symb_a1,
Symb_с,
Symb_a2,
Symb_l,
Symb_f,
Symb_e1,
Symb_t,
Symb_k,
Symb_e2,
];
let kadr=0;
function addSnow(){
for(let i=1; i<100; i++){
collection.unshift(generateSnow(0.3*fs))
}
}
addSnow();
//запуск
setInterval(()=>render(collection,ctx), 20);