//plane val{ pitch(default=0,min=-10,max=10,step=0) pitch1(default=0,min=-10,max=10,step=1,disp=0) roll(default=0,min=-10,max=10,step=0) roll1(default=0,min=-10,max=10,step=0.5,disp=0) yaw(default=0,min=-10,max=10,step=0) yaw1(default=0,min=-10,max=10,step=1,disp=0) jet(default=0,min=0,max=500000,step=0) jet1(default=0,min=0,max=500000,step=0,disp=0) abrake(default=0,min=0,max=90,step=0) abrake1(default=0,min=0,max=90,step=0,disp=0) gear(default=80,min=80,max=170,step=0,disp=0) gbrake(default=0,min=0,max=10,step=0,disp=0) height(default=0,min=-10000,max=10000,step=0) tgt_x(default=0,min=-100000,max=100000,step=0) tgt_y(default=0,min=-100000,max=100000,step=0) tgt_z(default=0,min=-100000,max=100000,step=0) auto(default=0,min=0,max=1,step=0,disp=0) auto1(default=0,min=0,max=1,step=0,disp=0) bal(default=0,min=0,max=1,step=0,disp=0) bal1(default=0,min=0,max=1,step=0,disp=0) prt(default=0,min=0,max=1,step=0,disp=0) prt1(default=0,min=0,max=1,step=0,disp=0) colb(default=0,min=0,max=255,step=0,disp=0) colg(default=0,min=0,max=255,step=0,disp=0) colr(default=0,min=0,max=255,step=0,disp=0) colbs(default=0,min=-64,max=64,step=0,disp=0) colgs(default=0,min=-64,max=64,step=0,disp=0) colrs(default=0,min=-64,max=64,step=0,disp=0) col(default=0,min=0,max=16777215,step=0,disp=0) col1(default=0,min=0,max=16777215,step=0,disp=0) col2(default=0,min=0,max=16777215,step=0,disp=0) col3(default=0,min=0,max=16777215,step=0,disp=0) col4(default=0,min=0,max=16777215,step=0,disp=0) col5(default=0,min=0,max=16777215,step=0,disp=0) light(default=0,min=0,max=16777215,step=0,disp=0) } key{ 0:pitch1(step=-1) 1:pitch1(step=1) 2:roll1(step=0.5) 3:roll1(step=-0.5) 4:yaw1(step=-1) 6:yaw1(step=1) 5:jet(step=100000) 9:jet(step=-100000) } body{ core(color=col){ n:frame(angle=-20,color=col1){ n:rlw(angle=110,power=jet,color=col2){ n:trim(angle=-55){ } w:trim(angle=-55){ } s:trim(angle=-55){ } e:trim(angle=-55){ } } n:rlw(angle=110,power=-jet,color=col2){ n:trim(angle=55){ } w:trim(angle=55){ } s:trim(angle=55){ } e:trim(angle=55){ } } n:frame(angle=-140,color=col2){ n:cowl(angle=-20,option=0,color=light,name=roof){ } } } w:chip(color=col1){ w:trim(angle=roll,color=col2){ w:chip(color=col3){ w:cowl(option=4,color=light){ } } } } e:chip(color=col1){ e:trim(angle=roll,color=col2){ e:chip(color=col3){ e:cowl(option=3,color=light){ } } } } s:chip(color=col1){ s:chip(color=col2){ s:chip(color=col3){ w:chip(angle=-90,color=col4){ s:chip(angle=-yaw,color=col5){ } } e:chip(angle=-90,color=col4){ s:chip(angle=yaw,color=col5){ } } s:chip(color=col4){ w:trim(angle=pitch,color=col5){ } e:trim(angle=-pitch,color=col5){ } } } } } w:frame(angle=10,color=col1){ w:wheel(angle=gear,brake=gbrake,color=col2){ } } e:frame(angle=10,color=col1){ e:wheel(angle=gear,brake=gbrake,color=col2){ } } s:chip(angle=abrake,color=col1){ } s:chip(angle=-abrake,color=col1){ } } } script{ // 時間表示 // sec=_mod(_ticks()/30,60) min=_mod(_int(_ticks()/1800),60) hour=_int(_ticks()/86400) print 9,hour,":",min,":",sec t=_rnd() // _az(0)の補正 az=_az(0) azs=_y(roof)-_y(0) if(azs<0){az=_sgn(az)*_pi()-az} // autoフラグ if(_key(7)>0){auto=1-auto1} if(_key(7)=0){auto1=auto} // balフラグ if(_key(8)>0){bal=1-bal1} if(_key(8)=0){bal1=bal} // prtフラグ if(_key(4)>0)&(_key(6)>0){prt=1-prt1} if(_key(4)=0)|(_key(6)=0){prt1=prt} // 手動制御ならジャンプ if(auto=0){goto manual} // 相対座標(回転前)を求める lx=tgt_x-_x(0) ly=tgt_y-_y(0) lz=tgt_z-_z(0) dst=_len3(lx,ly,lz) // ターゲット座標の更新 if(sec=0)|(dst<200)|(tgt_y<50){ tgt_x=_int(_rnd()*2000-1000) tgt_y=_int(_rnd()*300+200) tgt_z=_int(_rnd()*2000-1000) lx=tgt_x-_x(0) ly=tgt_y-_y(0) lz=tgt_z-_z(0) dst=_len3(lx,ly,lz) } // 自機を基準としたローカル平面上のターゲットローカル座標を求める // 自機のY軸回転を差し引く(-AYだけ回転させる) lz=-lz lx=-lx z=lz*_cos(_ay(0))+lx*_sin(_ay(0)) x=lx*_cos(_ay(0))-lz*_sin(_ay(0)) lz=-z lx=-x // 自機のX軸回転を差し引く(-AXだけ回転させる) lz=-lz z=lz*_cos(_ax(0))+ly*_sin(_ax(0)) y=ly*_cos(_ax(0))-lz*_sin(_ax(0)) lz=-z ly=y // 自機のZ軸回転を差し引く(-AZだけ回転させる) y=ly*_cos(az)+lx*_sin(az) x=lx*_cos(az)-ly*_sin(az) ly=y lx=x // 障害物回避 t=4 if(_ccd(32,32)=0){goto skip} if(_ccd(32,32)<>26527){goto kaihi} if(_ccd(t,t)<>26527){goto kaihi} if(_ccd(t,63-t)<>26527){goto kaihi} if(_ccd(63-t,t)<>26527){goto kaihi} if(_ccd(63-t,63-t)<>26527){goto kaihi} label skip if(_ccd(32,32)=0)&((_y(0)<20)|(_h(0)>=0)){ cp=30 goto joushou } cr=_atan2(lx,ly) cp=_atan2(ly,-lz)+_atan(_vy(0)/_vz(0)) if(cp<-_pi()){cp=cp+2*_pi()} if(cp>_pi()){cp=cp-2*_pi()} cy=_atan2(-lx,-lz) cpp=0 goto seigyo label kaihi // 回避ロール角を求める cr=0 if(_ccd(t,t)<>26527){cr=cr-135} if(_ccd(t,63-t)<>26527){cr=cr-45} if(_ccd(63-t,t)<>26527){cr=cr+135} if(_ccd(63-t,63-t)<>26527){cr=cr+45} cr=_torad(cr) if(cr=0){cr=-az} // 回避ピッチ角を求める cp=0 if(_abs(cr)<_pi()/2){cp=_pi()/2*_cos(cr)} if(_ccd(32,32)<>26527){cp=_pi()*_sgn(cp)} // 回避ヨー角を求める cy=_pi()*_sin(-cr) cpp=0 goto seigyo label joushou // ピッチ角=cp、ロール角=0で固定 cr=-az cp=_atan(_vy(0)/_vz(0))-_ax(0)+_torad(cp) if(cp<-_pi()){cp=cp+2*_pi()} if(cp>_pi()){cp=cp-2*_pi()} cy=0 cpp=0 goto seigyo label manual if(bal>0){ // 水平戻し cr=-az cp=_atan(_vy(0)/_vz(0))-_ax(0) if(cp<-_pi()){cp=cp+2*_pi()} if(cp>_pi()){cp=cp-2*_pi()} cy=0 // 無操作且つほぼ水平飛行の場合、現在高度を保存(更新しない) if(_abs(az)>0.1)|(_abs(_ax(0))>0.1){height=_y(0)} if(pitch1<>0)|(roll1<>0)|(yaw1<>0){height=_y(0)} // 目標高度のズレを補正 cpp=(height+2-_y(0))/10 } if(bal=0){ // こっちのIF文を後に書かないとcpp=0にならない。何故? cr=0 cp=0 cy=0 cpp=0 } label seigyo roll2=100*cr/(_abs(_vz(0))+1) pitch2=1000*cp/(_abs(_vz(0))+1)+cpp yaw2=1000*cy/(_abs(_vz(0))+1) p=pitch1+pitch2 r=roll1+roll2 y=yaw1+yaw2 p=p-pitch r=r-roll y=y-yaw t=2 if(_abs(p)>t){p=_sgn(p)*t} if(_abs(r)>t){r=_sgn(r)*t} if(_abs(y)>t){y=_sgn(y)*t} pitch=pitch+p roll=roll+r yaw=yaw+y // ギア if(_h(0)<0){ gear=gear+2 gbrake=100 } if(_h(0)>=0){ gear=gear-10 gbrake=0 } // リミッタ abrake1=0 if(auto=1){ t=80 // リミット速度 jet1=t*500000*(1-_vz(0)*_vz(0)/t/t) jet=jet1 abrake1=(-_vz(0)-t)*5*t } abrake=abrake+_sgn(abrake1-abrake) // 色変え if(colb=0){colbs=_int(_rnd()*63)+1} if(colb=255){colbs=-_int(_rnd()*63)-1} colb=colb+colbs if(colb<0){colb=0} if(colb>255){colb=255} if(colg=0){colgs=_int(_rnd()*63)+1} if(colg=255){colgs=-_int(_rnd()*63)-1} colg=colg+colgs if(colg<0){colg=0} if(colg>255){colg=255} if(colr=0){colrs=_int(_rnd()*63)+1} if(colr=255){colrs=-_int(_rnd()*63)-1} colr=colr+colrs if(colr<0){colr=0} if(colr>255){colr=255} col5=col4 col4=col3 col3=col2 col2=col1 col1=col col=colb+colg*256+colr*65536 t=_mod(sec,2) if(t<1){light=255*256+255*65536} if(t>=1){light=15*256+15*65536} // 表示 if(prt=0){ print 0,"Up/Down:Pitch, Left/Right:Roll, Z/C:Yaw, X:Jet-On, D:Jet-Off } if(prt=0)&(auto=1)&(bal=1){ print 1,"A:Auto-Pilot[ON], S:Balance[ON], Z+C:Print[On/Off] } if(prt=0)&(auto=1)&(bal=0){ print 1,"A:Auto-Pilot[ON], S:Balance[OFF], Z+C:Print[On/Off] } if(prt=0)&(auto=0)&(bal=1){ print 1,"A:Auto-Pilot[OFF], S:Balance[ON], Z+C:Print[On/Off] } if(prt=0)&(auto=0)&(bal=0){ print 1,"A:Auto-Pilot[OFF], S:Balance[OFF], Z+C:Print[On/Off] } if(prt=0){ print 2,"Vel=",_vel(0)*3.6,", Distance=",dst print 3,"x=",_x(0),", y=",_y(0),", z=",_z(0) // print 4,"ax=",_todeg(_ax(0)),", ay=",_todeg(_ay(0)),", az=",_todeg(_az(0)),", az=",_todeg(az),", azs=",_sgn(azs) print 4,"ax=",_ax(0),", ay=",_ay(0),", az=",_az(0),", az=",az,", azs=",_sgn(azs) print 5,"vx=",_vx(0),", vy=",_vy(0),", vz=",_vz(0) print 6,"lx=",lx,", ly=",ly,", lz=",lz print 7,"cr=",cr,", cp=",cp,", cy=",cy // print 8,"CCD=",_ccd(32,32),", R=",_red(32,32),", G=",_green(32,32),", B=",_blue(32,32) } }