#include "sprites.h"

void Leonardo_attack(Co co){
    Let x = SCol(co,leonardo);
    Let y = SRow(co,leonardo);
    if (x == 0)
    if (y == 0)
    return;

    if (SAt(co,x,y+1) == ' ' &&
        SAt(co,x,y-1) == ' ' &&
        SAt(co,x-1,y) == ' ' &&
        SAt(co,x+1,y) == ' '){
        SPlot(co,leonardo,Ninja, x, y+1, BG);
    }
    else{
        Let state = Clock(co) %20;
        switch(state){
            case 0:
            break;
            case 1:
            case 20:
            break;
            case 2:
            case 19:
            break;
            case 3:
            case 18:
            break;
            case 17:
            case 4:
            break;
            case 16:
            case 5:
            break;
            case 15:
            case 6:
            break;
            case 14:
            case 7:
            case 8:
            case 9:
            case 11:
            case 12:
            case 13:
            break;
        };
        SPlot(co,leonardo,Ninja, x, y, BG);
    }
}

Let DiagonalLeft(Co co,Let x, Let y, Let max){
    Let j = 1;
    while(j < max && SAt(co,x-j,y-j) == ' ')j++;
    if (SAt(co,x-j,y-j+1) != ' ')
    return j-1;
    return 0;
}

Let DiagonalRight(Co co,Let x, Let y, Let max){
    Let j = 1;
    while(j < max && SAt(co,x+j,y-j) == ' ')j++;
    if (SAt(co,x+j,y-j+1) != ' ')
    return j-1;
    return 0;
}

Let HorizontalLeft(Co co,Let x, Let y, Let max){
    Let j = 1;
    while(j < max && SAt(co,x-j,y) == ' ')j++;
    return j-1;
}

Let HorizontalRight(Co co,Let x, Let y, Let max){
    Let j = 1;
    while(j < max && SAt(co,x+j,y) == ' ')j++;
    return j-1;
}

void Leonardo_right(Co co){
    Let x = SCol(co,leonardo);
    Let y = SRow(co,leonardo);
    Let brothers[] = {leonardo,0};
    //SMove(co,sword,x,y);
    //SMove(co,swordB,x,y);
    if (SAt(co,x+1,y) == ' '){
        if (SAt(co,x,y+1) != ' '){
            //Snake(co,brothers,x+1,y);
            //SSnake(co,leonardo,Ninja,x+1,y,BG,3);
        }
        else if (SAt(co,x-1,y) == ' '){
            //Snake(co,brothers,x,y+1);
            //SSnake(co,leonardo,Ninja,x-1,y,BG,3);
        }
    SStamp(co,leonardo,Ninja, BG);
    }/*
    else if (DiagonalLeft(co,x,y,6)){
        Let j = DiagonalLeft(co,x,y,6);
        Snake(co,brothers,x-j,y-j);
    }
    else if (HorizontalLeft(co,x,y,8)){
        Let j = HorizontalLeft(co,x,y,8);
        Snake(co,brothers,x-j,y);
    }*/
    else if (SAt(co,x,y+1) == ' ' &&
        SAt(co,x,y-1) == ' ' &&
        SAt(co,x-1,y) == ' ' &&
        SAt(co,x+1,y) == ' '){
        //Snake(co,brothers,x,y+1);
    SStamp(co,leonardo,Ninja, BG);
    }
    else {
        SPlot(co,leonardo,Ninja, x, y, BG);
    SStamp(co,leonardo,Ninja, BG);
    }
}

void Leonardo_left(Co co){
    Let x = SCol(co,leonardo);
    Let y = SRow(co,leonardo);
    Let brothers[] = {leonardo,  0};
    //SMove(co,sword,x,y);
    //SMove(co,swordB,x,y);
    // right is free
    if (SAt(co,x-1,y) == ' '){
        // nothing downside ?
        if (SAt(co,x,y+1) != ' '){
            //Snake(co,brothers,x-1,y);
        }
        //nothing on the right to grip?
        else if (SAt(co,x+1,y) == ' '){
            //Snake(co,brothers,x,y-1);
        }
    SStamp(co,leonardo,Ninja, BG);
    }/*
    // jump against the wall ?
    else if (DiagonalRight(co,x,y,6)){
        Let j = DiagonalRight(co,x,y,6);
        Snake(co,brothers,x+j,y-j);
    }
    // jump against the wall ?
    else if (HorizontalRight(co,x,y,8)){
        Let j = HorizontalRight(co,x,y,8);
        Snake(co,brothers,x+j,y);
    }*/
    // slide down the left wall ??
    else if (SAt(co,x,y+1) == ' ' &&
        SAt(co,x,y-1) == ' ' &&
        SAt(co,x-1,y) == ' ' &&
        SAt(co,x+1,y) == ' '){
        //Snake(co,brothers,x,y+1);
    SStamp(co,leonardo,Ninja, BG);
    }
    else {
        SPlot(co,leonardo,Ninja, x, y, BG);
    SStamp(co,leonardo,Ninja, BG);
    }
}

void Leonardo_idle(Co co){
     SStamp(co,leonardo,Ninja,BG);
}


void Leonardo(Co co){
    Let x = SCol(co,leonardo);
    Let y = SRow(co,leonardo);
    if (x == 0 && y == 0) return;
    if (leonardo == leonardo)
    {
        if (Pressed(co,'a'))
        Next(co,Leonardo_left);
        else if (Pressed(co,'d'))
        Next(co,Leonardo_right);
        else
        Next(co,Leonardo_idle);
        //leonardo is leading
    }
    else
    {
        Next(co,Leonardo_attack);
        // leonardo is following
    }
}


