<1>/* Graphics Not Rendered in HTML */ <2>/* Graphics Not Rendered in HTML */ <3>/* Graphics Not Rendered in HTML */ <4>/* Graphics Not Rendered in HTML */ <5>/* Graphics Not Rendered in HTML */ <6>/* Graphics Not Rendered in HTML */ I64 ArrowX=Fs->pix_width>>1; I64 ArrowY=Fs->pix_width>>1; I64 AnimAreaX=Fs->pix_width>>1-AnimationSize; I64 AnimAreaY=Fs->pix_height>>1/2; Bool Erase=FALSE; Bool PlayAnim=FALSE; Bool OnionSkin=FALSE; Bool Collision(F64 x1, F64 y1, F64 width1, F64 height1, F64 x2,F64 y2,F64 width2, F64 height2) { if(x1 + width1 >= x2 && x1 <= x2 + width2 && y1 + height1 >= y2 &&y1 <= y2 + height2) return TRUE; else return FALSE; } U0 Init() { U8 i,j,d; for(i=0;i<AnimationLength;i++){ for(j=0;j<AnimationSize;j++){ for(d=0;d<AnimationSize;d++){ if(j!=0&&j!=AnimationSize-1 && d!=0&&d!=AnimationSize-1){ Frames[i][j][d]=WHITE; }else{ Frames[i][j][d]=BLACK; } } } } } Bool CheckCollisions(I64 x, I64 y) { I64 i,j; for(i=0;i<AnimationSize;i++){ for(j=0;j<AnimationSize;j++){ if(Collision(AnimAreaX+j*2,AnimAreaY+i*2,2,2,x,y,2,2)){ XY.x=j; XY.y=i; return TRUE; } } } return FALSE; } U0 CheckWhereClick(I64 x,I64 y,Bool Hover,Bool Click) { if(Click){ //Make the arrows change frame if(Collision(ArrowX+15,ArrowY,23,19,x,y,20,20)&&Frame+1<AnimationLength){ Frame++; } if(Collision(ArrowX-20,ArrowY,23,19,x,y,20,20)&&Frame>0){ Frame--; } //Play the animation if(Collision(ArrowX,ArrowY+50,23,19,x,y,20,20)){ if(!PlayAnim) PlayAnim=TRUE; else PlayAnim=FALSE; } if(Collision(ArrowX,50,23,19,x,y,20,20)){ if(!OnionSkin) OnionSkin=TRUE; else OnionSkin=FALSE; } if(Collision(ArrowX+30,50,23,19,x,y,20,20)){ if(!Erase) Erase=TRUE; else Erase=FALSE; } //This code isnt ai generated lmao //Im just forgetful //Check if drawing if(Collision(AnimAreaX,AnimAreaY,AnimationSize*2,AnimationSize*2,x,y,20,20)) { U8 Col; if(!Erase) Col=BLACK; else Col=WHITE; GrPrint(gr.dc,15,15,"Drawing"); CheckCollisions(x,y); if(CheckCollisions(x,y)){ Frames[Frame][XY.y][XY.x]=Col; if(XY.x-1>0) Frames[Frame][XY.y][XY.x-1]=Col; if(XY.y-1>0) Frames[Frame][XY.y-1][XY.x]=Col; if(XY.x+1<AnimationSize) Frames[Frame][XY.y][XY.x+1]=Col; if(XY.y+1<AnimationSize) Frames[Frame][XY.y+1][XY.x]=Col; } }else{ DCFill; } } if(Hover){ if(Collision(AnimAreaX,AnimAreaY,AnimationSize*2,AnimationSize*2,x,y,20,20)) { GrPrint(gr.dc,15,15,"Drawing"); }else{ DCFill; } } } U0 DrawIt(CTask *task,CDC *dc) { U8 i,j; GrPrint(dc,50,50,"Frame: %d",Frame); GrPrint(dc,50,60,"%d, %d",AnimationSize,AnimationLength); GrPrint(dc,50,70,"%d, %d",ms.pos.x,ms.pos.y); Sprite3(dc,ArrowX-15,ArrowY,0,<4>); Sprite3(dc,ArrowX+20,ArrowY,0,<5>); Sprite3(dc,ArrowX,ArrowY+20,0,<6>); Sprite3(dc,ArrowX,50,0,<3>); Sprite3(dc,ArrowX+30,50,0,<2>); if(OnionSkin) GrPrint(dc,50,80,"OnionSkin"); if(Erase) GrPrint(dc,50,90,"Erase"); if(OnionSkin&&Frame) { for(i=0;i<AnimationSize;i++){ for(j=0;j<AnimationSize;j++){ if(Frames[Frame-1][i][j]!=WHITE){ dc->color=LTGRAY; GrRect(dc,AnimAreaX+j*2,AnimAreaY+i*2,2,2); } } } } for(i=0;i<AnimationSize;i++){ for(j=0;j<AnimationSize;j++){ dc->color=Frames[Frame][i][j]; if(Frames[Frame][i][j]!=WHITE) GrRect(dc,AnimAreaX+j*2,AnimAreaY+i*2,2,2); } } if(PlayAnim){ if(Frame<AnimationLength-1) { Sleep(35); Frame++; }else{ Frame=0; } } } U0 AnimationEditor() { // Fs->animate_task=Spawn(&AnimateTask,NULL,"Animate",,Fs); Init; Fs->draw_it=&DrawIt; Fs->win_inhibit|=WIF_SELF_MS_L|WIF_SELF_MS_R; I64 ch, sc, arg1, arg2, msg_code; WinMax; WinBorder; DocClear; SettingsPush; Bool Click=FALSE; try { do{ if(msg_code=ScanMsg(&arg1,&arg2,1<<MSG_KEY_DOWN|1<<MSG_MS_L_DOWN|1<<MSG_MS_L_UP |1<<MSG_MS_R_DOWN|1<<MSG_MS_R_D_DOWN|1<<MSG_MS_MOVE)) { sc=arg2; ch=arg1; if(msg_code==MSG_MS_L_DOWN&&Click==FALSE){ Click=TRUE; } if(msg_code==MSG_MS_L_UP){ Click=FALSE; } if(msg_code==MSG_MS_R_DOWN){ SaveAnim; } if(msg_code==MSG_MS_R_D_DOWN){ LoadAnim; } } if(Click==TRUE){ CheckWhereClick(ms.pos.x,ms.pos.y,FALSE,TRUE); Sleep(5); } if(msg_code==MSG_MS_MOVE) CheckWhereClick(ms.pos.x,ms.pos.y,TRUE,FALSE); Sleep(5); }while(ch!=CH_ESC&&ch!=CH_SHIFT_ESC); DCFill; } catch PutExcept; SettingsPop; } AnimationEditor;