Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- task CreateNoodleLaser(op_obj,dir,dmg) { //(parent player object, direction of laser, damage output)
- let texture = CSD ~ "img/PlayerShotsSheet.png";
- let getX;
- let getY;
- let animPhase = 0; //looping animation or exiting
- let f = 0; //frame count (60fps)
- let fRate = 4; //framerate for animation (format: fRate*x, x = frame #)
- let obj = ObjShot_Create(OBJ_STRAIGHT_LASER); //Create laser shot object
- ObjShot_Regist(obj);
- ObjShot_SetDamage(obj,dmg);
- ObjShot_SetGraphic(obj,1);
- ObjLaser_SetLength(obj,600);
- ObjLaser_SetIntersectionWidth(obj,16);
- ObjMove_SetAngle(obj,dir);
- let playerShot = ObjPrim_Create(OBJ_SPRITE_2D); //Create prim object for texture
- ObjPrim_SetTexture(playerShot,texture);
- ObjSprite2D_SetSourceRect(playerShot,1,1,32,512);
- ObjSprite2D_SetDestRect(playerShot,-32,-32,32,600);
- ObjRender_SetBlendType(playerShot,BLEND_ALPHA);
- ObjRender_SetAlpha(playerShot,0);
- ObjRender_SetAngleZ(playerShot,dir);
- Obj_SetRenderPriorityI(playerShot,47);
- ObjRender_SetScaleXYZ(playerShot,1,1,1);
- while(!Obj_IsDeleted(op_obj)) {
- while(ObjCol_IsIntersected(obj)) { //checks if collision is occuring, which it isn't for some reason
- WriteLog("collision");
- yield;
- }
- while(GetVirtualKeyState(VK_SHOT) == KEY_HOLD && animPhase == 0) { //while animPhase is not 1 (exit phase) and key pressed
- getX = ObjRender_GetX(op_obj);
- getY = ObjRender_GetY(op_obj);
- ObjRender_SetAngleZ(playerShot,dir);
- ObjRender_SetScaleXYZ(obj,1,1,1);
- ObjMove_SetPosition(obj,round(getX),round(getY)-16);
- ObjRender_SetAlpha(playerShot,255);
- ObjRender_SetPosition(playerShot,round(getX),round(getY)-16,1);
- ObjRender_SetScaleXYZ(playerShot,1,1,1);
- ObjShot_SetDamage(obj,dmg);
- f++; //frame increment
- if(f >= fRate*6) {f = fRate*3;} // Loop animation to frame 12 (start of loop animation)
- if(f >= fRate*0 && f < fRate*1) {ObjSprite2D_SetSourceRect(playerShot,256,1,288,512);} //start at noodle appearance
- if(f >= fRate*1 && f < fRate*2) {ObjSprite2D_SetSourceRect(playerShot,224,1,256,512);}
- if(f >= fRate*2 && f < fRate*3) {ObjSprite2D_SetSourceRect(playerShot,192,1,224,512);}
- if(f >= fRate*3 && f < fRate*4) {ObjSprite2D_SetSourceRect(playerShot,1,1,32,512);} //looping portion
- if(f >= fRate*4 && f < fRate*5) {ObjSprite2D_SetSourceRect(playerShot,32,1,64,512);}
- if(f >= fRate*5 && f < fRate*6) {ObjSprite2D_SetSourceRect(playerShot,64,1,96,512);}
- yield;
- }
- if(GetVirtualKeyState(VK_SHOT) == KEY_PULL) { //if shot key is pulled, initiate exit animation
- animPhase = 1;
- f = 0;
- }
- while(animPhase == 1) { //exit animation phase
- f++;
- getX = ObjRender_GetX(op_obj);
- getY = ObjRender_GetY(op_obj);
- ObjMove_SetPosition(obj,getX,getY-16);
- ObjRender_SetPosition(playerShot,round(getX),round(getY)-16,1);
- if(f >= fRate*3) { //end animation, laser is effectively gone (scale and dmg = 0)
- ObjRender_SetScaleXYZ(playerShot,0,0,1);
- ObjShot_SetDamage(obj,0);
- f = 0;
- animPhase = 0;
- }
- if(f >= fRate*0 && f < fRate*1) {ObjSprite2D_SetSourceRect(playerShot,160,1,192,512);} //exit animation
- if(f >= fRate*1 && f < fRate*2) {ObjSprite2D_SetSourceRect(playerShot,128,1,160,512);}
- if(f >= fRate*2 && f < fRate*3) {ObjSprite2D_SetSourceRect(playerShot,96,1,128,512);}
- yield;
- }
- yield;
- }
- }
Add Comment
Please, Sign In to add comment