Guest User

Danmakufu animated laser finish

a guest
Oct 23rd, 2016
257
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.88 KB | None | 0 0
  1. task CreateNoodleLaser(op_obj,dir,dmg) { //(parent player object, direction of laser, damage output)
  2. let texture = CSD ~ "img/PlayerShotsSheet.png";
  3. let getX;
  4. let getY;
  5. let animPhase = "STATE_OFF"; //animation state
  6. let f = 0; //frame count (60fps)
  7. let fRate = 4; //framerate for animation (format: fRate*x, x = frame #)
  8.  
  9. let obj = ObjShot_Create(OBJ_STRAIGHT_LASER); //Create laser shot object
  10. ObjShot_Regist(obj);
  11. ObjShot_SetDamage(obj,dmg);
  12. ObjShot_SetGraphic(obj,1);
  13. ObjShot_SetIntersectionEnable(obj,false);
  14. ObjLaser_SetLength(obj,600);
  15. ObjLaser_SetIntersectionWidth(obj,16);
  16. ObjStLaser_SetAngle(obj,dir+90);
  17.  
  18. let playerShot = ObjPrim_Create(OBJ_SPRITE_2D); //Create prim object for texture
  19. ObjPrim_SetTexture(playerShot,texture);
  20. ObjSprite2D_SetSourceRect(playerShot,1,1,32,512);
  21. ObjSprite2D_SetDestRect(playerShot,-12,-12,12,600); //Currenclty trying out thinner, more numerous lasers
  22. ObjRender_SetAngleZ(playerShot,dir);
  23. Obj_SetRenderPriorityI(playerShot,47);
  24. ObjRender_SetPosition(playerShot,-64,-64,1); //My laser was appearing in the top left corner initially before firing, hence this
  25.  
  26. while(!Obj_IsDeleted(op_obj)) {
  27. if(animPhase == "STATE_OFF") {
  28. if(GetVirtualKeyState(VK_SHOT) % 2 == 1 && GetPlayerState() != STATE_DOWN) {
  29. ObjShot_SetIntersectionEnable(obj,true);
  30. animPhase = "STATE_ON";
  31. }
  32. }
  33.  
  34. if(animPhase == "STATE_ON") { //while animPhase is not 1 (exit phase) and key pressed
  35. ObjMove_SetPosition(obj,ObjRender_GetX(op_obj),ObjRender_GetY(op_obj)-16);
  36. ObjRender_SetPosition(playerShot,ObjRender_GetX(op_obj),ObjRender_GetY(op_obj)-16,1);
  37. f++; //frame increment
  38. if(f >= fRate*6) {f = fRate*3;} // Loop animation to frame 12 (start of loop animation)
  39. if(f >= fRate*0 && f < fRate*1) {ObjSprite2D_SetSourceRect(playerShot,256,1,288,512);} //start at noodle appearance
  40. if(f >= fRate*1 && f < fRate*2) {ObjSprite2D_SetSourceRect(playerShot,224,1,256,512);}
  41. if(f >= fRate*2 && f < fRate*3) {ObjSprite2D_SetSourceRect(playerShot,192,1,224,512);}
  42. if(f >= fRate*3 && f < fRate*4) {ObjSprite2D_SetSourceRect(playerShot,1,1,32,512);} //looping portion
  43. if(f >= fRate*4 && f < fRate*5) {ObjSprite2D_SetSourceRect(playerShot,32,1,64,512);}
  44. if(f >= fRate*5 && f < fRate*6) {ObjSprite2D_SetSourceRect(playerShot,64,1,96,512);}
  45.  
  46. if(GetVirtualKeyState(VK_SHOT) % 2 == 0) { //if shot key is pulled, initiate exit animation
  47. animPhase = "STATE_COOL";
  48. ObjShot_SetIntersectionEnable(obj,false);
  49. f = 0;
  50. }
  51. }
  52.  
  53. if(animPhase == "STATE_COOL") { //exit animation phase
  54. ObjMove_SetPosition(obj,ObjRender_GetX(op_obj),ObjRender_GetY(op_obj)-16);
  55. ObjRender_SetPosition(playerShot,ObjRender_GetX(op_obj),ObjRender_GetY(op_obj)-16,1);
  56. if(f < fRate*3) {
  57. f++;
  58. if(f >= fRate*0 && f < fRate*1) {ObjSprite2D_SetSourceRect(playerShot,160,1,192,512);} //exit animation
  59. if(f >= fRate*1 && f < fRate*2) {ObjSprite2D_SetSourceRect(playerShot,128,1,160,512);}
  60. if(f >= fRate*2 && f < fRate*3) {ObjSprite2D_SetSourceRect(playerShot,96,1,128,512);}
  61. } else {ObjSprite2D_SetSourceRect(playerShot,450,1,451,512);}
  62.  
  63. if(GetVirtualKeyState(VK_SHOT) % 2 == 1) { //if shot key is pulled, initiate exit animation
  64. animPhase = "STATE_ON";
  65. ObjShot_SetIntersectionEnable(obj,true);
  66. f = 0;
  67. }
  68. }
  69.  
  70. ObjRender_SetAlpha(playerShot,255);
  71. ObjRender_SetScaleXYZ(playerShot,1,1,1);
  72. yield;
  73. }
  74. }
Advertisement
Add Comment
Please, Sign In to add comment