// Missile Val{ engine(default=0,min=-5000,max=5000,step=0) brake(default=100,min=0,max=100,step=0) handle(default=0,min=-30,max=30,step=5) msjet(default=0,min=0,max=200000,step=0) msrd1(default=0,min=-45,max=45,step=0) msrd2(default=0,min=-45,max=45,step=0) msrd3(default=0,min=-45,max=45,step=0) msrd4(default=0,min=-45,max=45,step=0) msrd11(default=0,min=-45,max=45,step=0) msrd22(default=0,min=-45,max=45,step=0) msrd33(default=0,min=-45,max=45,step=0) msrd44(default=0,min=-45,max=45,step=0) mode(default=0,min=0,max=2,step=0) ballx(default=0,min=-1000000,max=1000000,step=0) bally(default=0,min=-1000000,max=1000000,step=0) ballz(default=0,min=-1000000,max=1000000,step=0) tgtx(default=0,min=-1000000,max=1000000,step=0) tgty(default=0,min=-1000000,max=1000000,step=0) tgtz(default=0,min=-1000000,max=1000000,step=0) } Key{ 0:engine(step=500) 1:engine(step=-500) 2:handle(step=-3) 3:handle(step=3) } Body{ core(name=c_1){ n:chip(){ n:chip(){ n:chip(){ w:chip(){ w:rudder(angle=handle){ w:wheel(angle=-90,option=2,power=engine,brake=brake){ } } } e:chip(){ e:rudder(angle=handle){ e:wheel(angle=-90,option=2,power=-engine,brake=brake){ } } } } } } s:chip(){ s:chip(){ s:chip(){ w:chip(){ w:chip(){ w:wheel(angle=-90,option=2,power=engine,brake=brake){ } } } e:chip(){ e:chip(){ e:wheel(angle=-90,option=2,power=-engine,brake=brake){ } } } } } } n:frame(angle=-155){ /////////////////////////////////////////////////////////////////////////////// n:chip(name=c_2,angle=90){ n:chip(){ n:weight(){ n:cowl(name=m_1,option=5,color=#0000FF){ } } s:frame(name=drd,angle=30){ s:jet(angle=-120,power=msjet,effect=1){ } } s:frame(name=urd,angle=-30){ s:jet(angle=120,power=-msjet){ } } } w:trim(angle=msrd1,color=#0000FF){ } e:trim(angle=msrd2,color=#0000FF){ } n:trim(angle=90){ s:chip(){ w:trim(angle=msrd3,color=#0000FF){ } e:trim(angle=msrd4,color=#0000FF){ } } n:weight(){ n:cowl(option=5,color=#0000FF){ } } s:frame(angle=30){ } s:frame(angle=-30){ } } } /////////////////////////////////////////////////////////////////////////////// } } } Script{ // 時間表示 // sec=_mod(_ticks()/30,60) hmin=_int(_ticks()/86400)+_mod(_int(_ticks()/1800),60)/100 // _az(c_2)の補正 azs=_y(urd)-_y(drd) az=_az(c_2) if(azs<0){az=_sgn(az)*_pi()-az} // ブレーキ if(_key(6)>0){ brake=100 engine=0 } // 前後進時ブレーキ解除 if(engine<>0){ brake=0 } // ミサイル発射 if(_key(4)>0){ t=_split(c_2) msjet=50000 } if(msjet==0){ goto fin // ミサイル発射前なら終わり } // ボールが動いているかチェック bx=ballx-_ox() by=bally-_oy() bz=ballz-_oz() ball=_len3(bx,by,bz) if(_y(c_2)>600){ mode=2 // 下降モード } if(ball>10){ mode=0 // 上昇モード } // ボール座標の保存 ballx=_ox() bally=_oy() ballz=_oz() // ターゲット座標を求める if(mode==0){ // 上昇モードのとき親機とボールの中間点上空 tgtx=(ballx+_x(c_1))/2 tgty=600 tgtz=(ballz+_z(c_1))/2 c=_torad(_rnd()*360) tgtx=tgtx+600*_cos(c) tgtz=tgtz+600*_sin(c) mode=1 } if(mode==2){ // 下降モードのときボール tgtx=ballx tgty=bally+5 tgtz=ballz } // ターゲットの相対座標 lx=tgtx-_x(c_2) ly=tgty-_y(c_2) lz=tgtz-_z(c_2) dst=_len3(lx,ly,lz) if(dst<10)|((_h(c_2)>=0)&(_h(c_2)<=3)){ mode=0 // 上昇モード } // c_2を基準としたローカル平面上のターゲットローカル座標を求める // c_2のY軸回転を差し引く(-AYだけ回転させる) z=lz*_cos(_ay(c_2))+lx*_sin(_ay(c_2)) x=lx*_cos(_ay(c_2))-lz*_sin(_ay(c_2)) lz=z lx=x // c_2のX軸回転を差し引く(-AXだけ回転させる) z=lz*_cos(_ax(c_2))-ly*_sin(_ax(c_2)) y=ly*_cos(_ax(c_2))+lz*_sin(_ax(c_2)) lz=z ly=y // c_2のZ軸回転を差し引く(-AZだけ回転させる) y=ly*_cos(az)+lx*_sin(az) x=lx*_cos(az)-ly*_sin(az) ly=y lx=x // 舵制御 t=15 r=_len2(lx,lz)*_sgn(lz) a=_atan2(ly*_vz(c_2)*_vz(c_2)*2,-r)*t msrd11= a msrd22=-a r=_len2(ly,lz)*_sgn(lz) a=_atan2(-lx*_vz(c_2)*_vz(c_2)*2,-r)*t msrd33= a msrd44=-a t=1 a=msrd11-msrd1 if(a<-t){a=-t} if(a> t){a= t} msrd1=msrd1+a a=msrd22-msrd2 if(a<-t){a=-t} if(a> t){a= t} msrd2=msrd2+a a=msrd33-msrd3 if(a<-t){a=-t} if(a> t){a= t} msrd3=msrd3+a a=msrd44-msrd4 if(a<-t){a=-t} if(a> t){a= t} msrd4=msrd4+a label fin print 0,"Vel=",_vel(c_2),", Speed=",_vel(c_2)*3.6," print 1,"x=",_x(c_2),", y=",_y(c_2),", z=",_z(c_2) print 2,"ax=",_todeg(_ax(c_2)),", ay=",_todeg(_ay(c_2)),", az=",_todeg(az),", azs=",azs print 3,"vx=",_vx(c_2),", vy=",_vy(c_2),", vz=",_vz(c_2) print 4,"wx=",_wx(c_2),", wy=",_wy(c_2),", wz=",_wz(c_2) print 5,"lx=",lx,", ly=",ly,", lz=",lz,", d=",dst if(sec<10){print 6,"Time=",hmin,".0",sec,", FPS=",_fps()} if(sec>=10){print 6,"Time=",hmin,".",sec,", FPS=",_fps()} }