Advertisement
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 = "STATE_OFF"; //animation state
- let f = 0; //frame count (60fps)
- let ar = GetAllEnemyID;
- 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,texture);
- ObjLaser_SetLength(obj,600);
- ObjLaser_SetIntersectionWidth(obj,16);
- ObjStLaser_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);
- task log(){ //changing the collision test from a while loop to a task makes no difference it seems
- if(ObjCol_IsIntersected(obj)) {
- WriteLog("collision");
- yield;
- }
- }
- while(!Obj_IsDeleted(op_obj)) {
- if(animPhase == "STATE_OFF") {
- if(GetVirtualKeyState(VK_SHOT) % 2 == 1 && GetPlayerState() != STATE_DOWN){
- animPhase = "STATE_ON";
- }
- //yield;
- }
- if(animPhase == "STATE_ON") { //while animPhase is not 1 (exit phase) and key pressed
- log();
- ObjMove_SetPosition(obj,ObjRender_GetX(op_obj),ObjRender_GetY(op_obj)-16);
- ObjRender_SetPosition(playerShot,ObjRender_GetX(op_obj),ObjRender_GetY(op_obj)-16,1);
- 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);}
- if(GetVirtualKeyState(VK_SHOT) % 2 == 0) { //if shot key is pulled, initiate exit animation
- animPhase = "STATE_COOL";
- ObjShot_SetIntersectionEnable(obj,false);
- f = 0;
- }
- //yield;
- }
- if(animPhase == "STATE_COOL") { //exit animation phase
- ObjMove_SetPosition(obj,ObjRender_GetX(op_obj),ObjRender_GetY(op_obj)-16);
- ObjRender_SetPosition(playerShot,ObjRender_GetX(op_obj),ObjRender_GetY(op_obj)-16,1);
- if(f < fRate*3) {
- f++;
- 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);}
- }
- ObjLaser_SetRenderWidth(obj,0);
- //yield;
- if(GetVirtualKeyState(VK_SHOT) % 2 == 1) { //if shot key is pulled, initiate exit animation
- animPhase = "STATE_ON";
- f = 0;
- }
- }
- ObjShot_SetIntersectionEnable(obj,true); //seems like I need this block of code or else it won't render
- ObjLaser_SetRenderWidth(obj,16);
- ObjRender_SetAngleZ(playerShot,dir);
- ObjRender_SetScaleXYZ(obj,1,1,1);
- ObjRender_SetAlpha(playerShot,255);
- ObjRender_SetScaleXYZ(playerShot,1,1,1);
- ObjShot_SetDamage(obj,dmg);
- yield;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement