Advertisement
Guest User

Gap Functions

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