Advertisement
Guest User

Gap Functions

a guest
Jan 9th, 2018
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.36 KB | None | 0 0
  1.  
  2. let GAP_IN = 999901; let GAP_OUT = 999902; let GAP_HOLD = 999903; let GAP_VOID = 999904;
  3.  
  4. function CreateGapA1(x,y,opening,width,angle,dur,  type, outgap)    {
  5.    
  6.     let gap = ObjPrim_Create(OBJ_SPRITE_2D);
  7.     Obj_SetValue(gap,"Type",type);
  8.    
  9.     //let x0 = rotate(x-width/2,angle); let x1 = rotate(x+width/2,angle);
  10.     //let y0 = rotate(y-width/2,angle); let y1 = rotate(y+width/2,angle);
  11.     //Obj_SetValue(gap,"Endpoints",[x0,y0,x1,y1]);
  12.    
  13.     let midx = x; let midy = y;
  14.     let endpoints = rotate(x-width/2,y-opening/2,x-width/2,y,angle) ~ rotate(x,y+opening/2+1,x,y,angle);
  15.     let x0=endpoints[0]; let y0=endpoints[1]; let x1=endpoints[2]; let y1=endpoints[3];
  16.     Obj_SetValue(gap,"Endpoints",[x0,y0,x1,y1]);
  17.    
  18.     //DebugWarnShot(x0,y0);DebugWarnShot(x1,y1);
  19.    
  20.     //since outgaps don't need a reference to another gap, use the parameter for delay instead
  21.     //this way an ingap can be created "before" the corresponding outgap if desired
  22.     let del = tern(type==GAP_OUT, outgap, 0);
  23.     RenderGap(gap,x,y, width/44,opening/114, angle, dur, del);
  24.    
  25.     if(type==GAP_IN){ TInGap(gap,outgap); }
  26.    
  27.     return gap;
  28.    
  29.     task RenderGap(gap,Xpos,Ypos,xscale,yscale,angle,duration,delay){
  30.         wait(delay);
  31.        
  32.         let Yangle = 90;
  33.        
  34.         SE_Play(se_gap,120);
  35.         ObjPrim_SetTexture(gap, CSD~"../img/gap.png");
  36.         ObjSprite2D_SetSourceRect(gap,0, 0, 44, 114);
  37.         ObjRender_SetScaleXYZ(gap,xscale,yscale,1);
  38.         Obj_SetRenderPriorityI(gap,30);
  39.         ObjSprite2D_SetDestCenter(gap);
  40.         ObjRender_SetBlendType(gap,BLEND_ALPHA);
  41.         ObjRender_SetPosition(gap,Xpos,Ypos,0);
  42.         ObjRender_SetAngleXYZ(gap,0,Yangle,angle);
  43.         loop(15){
  44.             Yangle-=6;
  45.             ObjRender_SetAngleXYZ(gap,0,Yangle,angle);
  46.             yield;
  47.         }
  48.         //wait(duration);
  49.         let glowdel = 15;
  50.         loop(floor(duration/glowdel)){
  51.             RenderGapOutline(gap,Xpos,Ypos,xscale,yscale,angle,40,128,type);
  52.             wait(glowdel);
  53.         }
  54.         wait(remainder(duration,glowdel));
  55.         loop(15){
  56.             Yangle+=6;
  57.             ObjRender_SetAngleXYZ(gap,0,Yangle,angle);
  58.             yield;
  59.         }
  60.         Obj_Delete(gap);
  61.     }
  62.     task RenderGapOutline(gap,Xpos,Ypos,xscale0,yscale0,angle,duration,alpha0,type){
  63.         let glow = ObjPrim_Create(OBJ_SPRITE_2D);
  64.         ObjPrim_SetTexture(glow, CSD~"../img/gap_outline.png");
  65.         ObjSprite2D_SetSourceRect(glow,0, 0, 44, 114);
  66.         Obj_SetRenderPriorityI(glow,30);
  67.         ObjSprite2D_SetDestCenter(glow);
  68.         ObjRender_SetBlendType(glow,BLEND_ADD_ARGB);
  69.         ObjRender_SetPosition(glow,Xpos,Ypos,0);
  70.         ObjRender_SetAngleXYZ(glow,0,0,angle);
  71.        
  72.         //let alpha0=255;
  73.         let dA = -alpha0/duration;
  74.         let xscale = xscale0; let yscale = yscale0;
  75.         let xscaleincr = 0.01*xscale0; //xscale / (xscale+yscale)/2;
  76.         let yscaleincr = 0.01*yscale0; //yscale / (xscale+yscale)/2;
  77.         if(type==GAP_IN){
  78.             xscale = xscale + xscaleincr*duration;
  79.             yscale = yscale + yscaleincr*duration;
  80.             xscaleincr*=-1; yscaleincr*=-1;
  81.             alpha0 = 0; dA*=-1;
  82.         }
  83.         ObjRender_SetScaleXYZ(glow,xscale,yscale,1);
  84.        
  85.         alternative(type)
  86.         case(GAP_IN){  ObjRender_SetColor(glow,128,128,255); }
  87.         case(GAP_OUT){ ObjRender_SetColor(glow,255,130,128); }
  88.        
  89.         ascent(i in 0..duration) {
  90.             ObjRender_SetAlpha(glow,alpha0+dA*i);
  91.             ObjRender_SetScaleXYZ(glow,xscale+xscaleincr*i,yscale+yscaleincr*i,1);
  92.             yield;
  93.         }
  94.         Obj_Delete(glow);
  95.     }
  96.    
  97.    
  98.    
  99.     task TInGap(gap,outgap) {
  100.  
  101.         let intersectwidth = max(width-20,15); //max(width/3,15)
  102.         let shots;
  103.         let x; let y; let t; let k; let a;
  104.        
  105.         while(!Obj_IsDeleted(gap)){
  106.        
  107.        
  108.             shots = GetShotIdInCircleA2(midx,midy,opening/2,TARGET_ALL);
  109.             ascent(i in 0..length(shots)){
  110.                 if(Obj_GetValueD(shots[i],"CanGap",true) && IsIntersected_Line_Circle(x0,y1,x1,y0,intersectwidth, ObjMove_GetX(shots[i]),ObjMove_GetY(shots[i]),1)) {
  111.                    
  112.                     x=ObjMove_GetX(shots[i]); y=ObjMove_GetY(shots[i]);
  113.                    
  114.                     t = (((x0-x)^2 + (y0-y)^2)^0.5)/opening;
  115.                     k = GetDistanceToLine(x0,y1,x1,y0, x,y)/width;
  116.                     a = ObjMove_GetAngle(shots[i]) - angle;
  117.                    
  118.                     if( k < intersectwidth*sin(1.579*114*t)/width) {
  119.                         GapWarp(shots[i],t,k,a,outgap);
  120.                     }
  121.                     //WriteLog("GAP:     " ~ ToString(GetDistanceToLine(x0,y0,x1,y1, x,y)) ~ " < " ~ ToString( intersectwidth*sin(1.579*114*t)) ~ "   " ~ ToString(GetDistanceToLine(x0,y0,x1,y1, x,y) < intersectwidth*sin(1.579*114*t)) );
  122.                    
  123.                     //Obj_SetValue(outgap,"Inbox", Obj_GetValue(outgap,"Inbox") ~ [[shots[i],t/opening]])
  124.                 }
  125.             }
  126.             yield;
  127.         }
  128.        
  129.     }
  130.    
  131.    
  132.    
  133.    
  134.     function GapWarp(shot,t,k,a,outgap) {
  135.        
  136.         //pseudocode for "holding" shots and moving them to the gap after a delay
  137.         //if(hold){setx(-1000);wait;}set(pos,angle);
  138.        
  139.     //  let midx = ObjRender_GetX(outgap); let midy = ObjRender_GetY(outgap);
  140.         let opening = ObjRender_GetScaleY(outgap)*114;
  141.         let width   = ObjRender_GetScaleX(outgap)*44;
  142.         let angle = ObjRender_GetAngleZ(outgap);
  143.         let endpoints = Obj_GetValueD(outgap,"Endpoints",[0,0,0,0]);
  144.     //  let x0=endpoints[0]; let y0=endpoints[1]; let x1=endpoints[2]; let y1=endpoints[3];
  145.         let outpos = rotate( width*k,opening*t, 0,0, angle);
  146.     //  if(Obj_IsDeleted(shot)){WriteLog("GAP: Tried to warp deleted shot! ~~~~~~~~~~~~~~~~~~~~~~~~~~~");return;}
  147.         Obj_SetValue(shot,"CanGap",false);
  148.         ObjMove_SetAngle(shot,angle+a);
  149.         ObjMove_SetPosition(shot,endpoints[0]+outpos[0],endpoints[3]-outpos[1]);
  150.        
  151.     //  DebugWarnShot(midx+outpos[0],midy+outpos[1]);
  152.        
  153.         //WriteLog("GAP:    Warped shot to " ~ IntToString(midx+outpos[0]) ~ ", " ~ IntToString(midy+outpos[1]) ~ ", gap " ~ IntToString(midx) ~ ", " ~ IntToString(midy)  );
  154.        
  155.        
  156.        
  157.     }
  158.    
  159.    
  160.  
  161.    
  162. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement