// Fannel val{ jphn_1(default=0,min=-10000000,max=10000000,step=0,disp=0) jphs_1(default=0,min=-10000000,max=10000000,step=0,disp=0) jphw_1(default=0,min=-10000000,max=10000000,step=0,disp=0) jphe_1(default=0,min=-10000000,max=10000000,step=0,disp=0) jpvn_1(default=0,min=-10000000,max=10000000,step=0,disp=0) jpvs_1(default=0,min=-10000000,max=10000000,step=0,disp=0) jpvw_1(default=0,min=-10000000,max=10000000,step=0,disp=0) jpve_1(default=0,min=-10000000,max=10000000,step=0,disp=0) beam_1(default=0,min=-10000000,max=10000000,step=1000000,disp=0) col_1(default=#0000FF,step=0,disp=0) dmp_1(default=0.99,disp=0) spr_1(default=0.99,disp=0) jphn_2(default=0,min=-10000000,max=10000000,step=0,disp=0) jphs_2(default=0,min=-10000000,max=10000000,step=0,disp=0) jphw_2(default=0,min=-10000000,max=10000000,step=0,disp=0) jphe_2(default=0,min=-10000000,max=10000000,step=0,disp=0) jpvn_2(default=0,min=-10000000,max=10000000,step=0,disp=0) jpvs_2(default=0,min=-10000000,max=10000000,step=0,disp=0) jpvw_2(default=0,min=-10000000,max=10000000,step=0,disp=0) jpve_2(default=0,min=-10000000,max=10000000,step=0,disp=0) beam_2(default=0,min=-10000000,max=10000000,step=1000000,disp=0) col_2(default=#FF0000,step=0,disp=0) dmp_2(default=0.99,disp=0) spr_2(default=0.99,disp=0) jpowu_3(default=0,min=-10000000,max=10000000,step=0,disp=0) jpowf_3(default=0,min=-10000000,max=10000000,step=0,disp=0) jpowl_3(default=0,min=-10000000,max=10000000,step=0,disp=0) col_3(default=#00FF00,disp=0) dmp_3(default=0.99,disp=0) spr_3(default=0.99,disp=0) auto(default=0,min=0,max=2,step=2,disp=0) } key{ 7:auto(step=1) } body{ core(name=c_1,color=col_1){ n:jet(power=jphn_1,spring=spr_1,damper=dmp_1,color=col_1){ s:trimf(angle=90,spring=spr_1,damper=dmp_1,color=col_1){ n:jet(power=jpvn_1,spring=spr_1,damper=dmp_1,color=col_1){ } s:jet(power=jpvs_1,spring=spr_1,damper=dmp_1,color=col_1){ } } } s:jet(power=jphs_1,spring=spr_1,damper=dmp_1,color=col_1){ } w:jet(power=jphw_1,spring=spr_1,damper=dmp_1,color=col_1){ e:trimf(angle=90,spring=spr_1,damper=dmp_1,color=col_1){ w:jet(power=jpvw_1,spring=spr_1,damper=dmp_1,color=col_1){ } e:jet(power=jpve_1,spring=spr_1,damper=dmp_1,color=col_1){ } n:jet(angle=180,power=-beam_1,effect=1,spring=spr_1,damper=dmp_1,color=col_1){ } s:jet(angle=180,power=beam_1,spring=spr_1,damper=dmp_1,color=col_1){ } } } e:jet(power=jphe_1,spring=spr_1,damper=dmp_1,color=col_1){ } n:chip(name=c_2,color=col_2){ n:jet(power=jphn_2,color=#FFFF00,spring=spr_2,damper=dmp_2,color=col_2){ s:trimf(angle=90,spring=spr_2,damper=dmp_2,color=col_2){ n:jet(power=jpvn_2,spring=spr_2,damper=dmp_2,color=col_2){ } s:jet(power=jpvs_2,spring=spr_2,damper=dmp_2,color=col_2){ } } } s:jet(power=jphs_2,spring=spr_2,damper=dmp_2,color=col_2){ } w:jet(power=jphw_2,spring=spr_2,damper=dmp_2,color=col_2){ e:trimf(angle=90,spring=spr_2,damper=dmp_2,color=col_2){ w:jet(power=jpvw_2,spring=spr_2,damper=dmp_2,color=col_2){ } e:jet(power=jpve_2,spring=spr_2,damper=dmp_2,color=col_2){ } n:jet(angle=180,power=-beam_2,effect=1,spring=spr_2,damper=dmp_2,color=col_2){ } s:jet(angle=180,power=beam_2,spring=spr_2,damper=dmp_2,color=col_2){ } } } e:jet(power=jphe_2,spring=spr_2,damper=dmp_2,color=col_2){ } } s:jet(name=c_3,power=jpowu_3,color=col_3){ n:jet(angle=90,power=jpowf_3,color=col_3,spring=spr_3,damper=dmp_3){ } w:jet(angle=90,power=jpowl_3,color=col_3,spring=spr_3,damper=dmp_3){ } e:jet(angle=90,power=-jpowl_3,color=col_3,spring=spr_3,damper=dmp_3){ } s:jet(angle=90,power=-jpowf_3,color=col_3,spring=spr_3,damper=dmp_3){ s:jet(angle=90,power=-jpowu_3,color=col_3,spring=spr_3,damper=dmp_3){ } } } } } /////////////////////////////////////////////////////////////////////////////// Lua{ c_0=0 c_1=0 c_2=13 c_3=26 tgtx={} tgty={} tgtz={} tgtx[c_1]=0 tgty[c_1]=0 tgtz[c_1]=0 tgtx[c_2]=0 tgty[c_2]=0 tgtz[c_2]=0 tgtx[c_3]=_X(c_3) tgty[c_3]=_Y(c_3) tgtz[c_3]=_Z(c_3) tgtx0={} tgty0={} tgtz0={} tgtx0[c_3]=tgtx[c_3] tgty0[c_3]=tgty[c_3] tgtz0[c_3]=tgtz[c_3] tvelx,tvely,tvelz=0,0,0 baseh=_Y(c_3) mode=0 -- 重心位置 -------------------------------------------------------------------- function gpos2(cn) local gx,gy,gz=0,0,0 local c for i=0,5,1 do c=cn+i gx=gx+_X(c) gy=gy+_Y(c) gz=gz+_Z(c) end gx=gx/6 gy=gy/6 gz=gz/6 return gx,gy,gz end -- ターゲット座標設定 ---------------------------------------------------------- function target2(cn) local lx,ly,lz,dst local gx,gy,gz gx,gy,gz=gpos2(cn) lx=tgtx[cn]-gx ly=tgty[cn]-gy lz=tgtz[cn]-gz dst=math.sqrt(lx^2+ly^2+lz^2) if(dst<10)or(math.mod(_TICKS(),151)==0) then tgtx[cn]=math.floor(math.random(81))-40 tgty[cn]=math.floor(math.random(81))+10+baseh tgtz[cn]=math.floor(math.random(81))-40 end lx=tgtx[cn]-gx ly=tgty[cn]-gy lz=tgtz[cn]-gz --[[ lx=-gx ly=0 lz=-gz ]] return lx,ly,lz end -- ジェット出力 ---------------------------------------------------------------- function jet_power2(cn) local lx,ly,lz,dst,pow local jpowu,jpowf,jpowl=0,0,0 local r,c lx,ly,lz=target2(cn) lx,ly,lz=getlpos(lx,ly,lz,cn) dst=math.sqrt(lx^2+ly^2+lz^2) pow=5000 r=math.sqrt(lx*lx+lz*lz) c=math.atan2(r,ly) jpowu= pow*math.cos(c) r=math.sqrt(lx*lx+ly*ly) c=math.atan2(r,lz) jpowf=-pow*math.cos(c) r=math.sqrt(ly*ly+lz*lz) c=math.atan2(r,lx) jpowl= pow*math.cos(c) -- 重力補正 lx,ly,lz=getlpos(0,1,0,cn) pow=gp r=math.sqrt(lx*lx+lz*lz) c=math.atan2(r,ly) jpowu=jpowu+pow*math.cos(c) r=math.sqrt(lx*lx+ly*ly) c=math.atan2(r,lz) jpowf=jpowf-pow*math.cos(c) r=math.sqrt(ly*ly+lz*lz) c=math.atan2(r,lx) jpowl=jpowl+pow*math.cos(c) return jpowu,jpowf,jpowl end -- len3 ----------------------------------------------------------------------- function math.len3(x,y,z,cn) local d x=x-_X(cn) y=y-_Y(cn) z=z-_Z(cn) d=math.sqrt(x^2+y^2+z^2) return d end -- 角度補正 ------------------------------------------------------------------- function angle_hosei(a) while a>math.pi do a=a-math.pi*2 end while a<-math.pi do a=a+math.pi*2 end return a end -- GETLPOS -------------------------------------------------------------------- function getlpos(lx,ly,lz,cn) local x,y,z -- Y軸回転を差し引く(-AYだけ回転させる) z=lz*math.cos(_AY(cn))+lx*math.sin(_AY(cn)) x=lx*math.cos(_AY(cn))-lz*math.sin(_AY(cn)) lz=z lx=x -- X軸回転を差し引く(-AXだけ回転させる) z=lz*math.cos(_AX(cn))-ly*math.sin(_AX(cn)) y=ly*math.cos(_AX(cn))+lz*math.sin(_AX(cn)) lz=z ly=y -- Z軸回転を差し引く(-AZだけ回転させる) y=ly*math.cos(_EZ(cn))-lx*math.sin(_EZ(cn)) x=lx*math.cos(_EZ(cn))+ly*math.sin(_EZ(cn)) ly=y lx=x return lx,ly,lz end -- 出力リミッタ --------------------------------------------------------------- function limiter(jp,limit) jp=math.min(limit,math.max(-limit,jp)) return jp end -- ジェット出力並進制御 ------------------------------------------------------- function jetlshift(lx,ly,lz,cn) local jp={0,0,0,0,0,0,0,0} local p=5000 local q=p*2 local br=0 lx,ly,lz=getlpos(lx,ly,lz,cn) if math.abs(ly)<15 then br=0.5 else br=0 end for i=1,4,1 do jp[i]=p*(ly-_VY(cn)*br) end if math.abs(lx)<15 then br=0.5 else br=0 end for i=5,6,1 do jp[i]=q*(lx-_VX(cn)*br) end if math.abs(lz)<15 then br=0.5 else br=0 end for i=7,8,1 do jp[i]=q*(lz-_VZ(cn)*br) end for i=1,4,1 do jp[i]=limiter(jp[i], 80000) end for i=5,8,1 do jp[i]=limiter(jp[i],160000) end return jp[1],jp[2],jp[3],jp[4],jp[5],jp[6],jp[7],jp[8] end -- ジェット出力回転制御 ------------------------------------------------------- function jetlroll(rx,ry,rz,cn) local jp={0,0,0,0,0,0,0,0} local p=20000 local q=p*2 local br=0.1 jp[1]=q*(rx-_WX(cn)*br) jp[2]=-jp[1] jp[3]=q*(rz-_WZ(cn)*br) jp[4]=-jp[3] jp[5]=-p*(ry-_WY(cn)*br) jp[6]=-jp[5] jp[7]=-jp[6] jp[8]=-jp[7] for i=1,4,1 do jp[i]=limiter(jp[i],50000) end for i=5,8,1 do jp[i]=limiter(jp[i],25000) end return jp[1],jp[2],jp[3],jp[4],jp[5],jp[6],jp[7],jp[8] end -- 重力補正 ------------------------------------------------------------------- function gravity_hosei(cn) local jp={} jp[1],jp[2],jp[3],jp[4],jp[5],jp[6],jp[7],jp[8]=jetlshift(0,g,0,cn) return jp[1],jp[2],jp[3],jp[4],jp[5],jp[6],jp[7],jp[8] end -- 並進目標 ----------------------------------------------------------------- function target_p(cx,cy,cz,r,h,cn) local lx,ly,lz local k=1 lx=tgtx[cn]+cx+tvelx*k if(tgty[cn]+cy+tvely*k=0)and(_H(cn)<0.5))or(math.mod(_TICKS(),150)==0) then tgtx[cn]=math.random(2*r)-r tgty[cn]=math.random(2*h)-h tgtz[cn]=math.random(2*r)-r lx=tgtx[cn]+cx+tvelx*k if(tgty[cn]+cy+tvely*k0)and(_H(c_1)>0.5) then g=g-vyy else g=g+math.abs(vyy) end y0=_Y(c_1) ]] if(init==nil) then _SPLIT(c_2) _SPLIT(c_3) init=0 end if(AUTO==1) then mode=math.mod(mode+1,2) end if(_OY()==-1000000) then mode=0 end if(mode==0) then tvelx,tvely,tvelz=target_vel(c_3) str="Chase Target-Cube Mode" gp=gp-tvely*0.1 else tvelx,tvely,tvelz=0,0,0 str="Chase Target-Ball Mode" end JPHN_1,JPHS_1,JPHW_1,JPHE_1,JPVN_1,JPVS_1,JPVW_1,JPVE_1,BEAM_1=jet_power(c_1) JPHN_2,JPHS_2,JPHW_2,JPHE_2,JPVN_2,JPVS_2,JPVW_2,JPVE_2,BEAM_2=jet_power(c_2) JPOWU_3,JPOWF_3,JPOWL_3=jet_power2(c_3) vel=math.sqrt(_VX(c_1)^2+_VY(c_1)^2+_VZ(c_1)^2) out(0,"FPS=",_FPS(),", SPEED=",vel*3.6,"km/h",", WEIGHT=",_WEIGHT(),"kg") out(1,str) out(2,"A:Target Change (Cube/Ball)") --[[ out(3,"X=",_X(c_1),", Y=",_Y(c_1),", Z=",_Z(c_1)) out(4,"AX=",math.deg(_AX(c_1)),", AY=",math.deg(_AY(c_1)),", EZ=",math.deg(_EZ(c_1))) out(5,"VX=",_VX(c_1),", VY=",_VY(c_1),", VZ=",_VZ(c_1)) out(6,"WX=",_WX(c_1),", WY=",_WY(c_1),", WZ=",_WZ(c_1)) out(7,"TVX=",tvelx,", TVY=",tvely,", TVZ=",tvelz) out(8,"g=",g,", 1000g=",g*1000,", gp=",gp) out(9,"baseh=",baseh) ]] end }