<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;