package hello;

import javax.microedition.lcdui.Graphics;

public class GamePlay
{

    private GoodGuy Soldier;
    private BadGuy Hipsters;
    private Weapon[] Bullets;
    private Building gameBuildings;
    private int bullet = 0;
    private int counter = 0;
    private int next = 0;
    private boolean turningChecked = false;

    public GamePlay()
    {
        Soldier = new GoodGuy();
        Hipsters = new BadGuy(10);
        Bullets = new Weapon[15];

        for (int i = 0; i < Hipsters.getNoOfBadGuys(); i++)
        {
            Hipsters.getSprite(i).setActive();
        }

        Soldier.getSprite().setActive();
       // Soldier.getSprite().setVelocity(3, 3);
    }

    public void runGamePlay(Canvas c, Graphics g)
    {
        if(!turningChecked)
        {
            Hipsters.getTurningPoints(c);
            turningChecked = true;
        }

        if (gameBuildings == null)
        {
            gameBuildings = new Building(c, g);
        //    System.out.println("Game buildings created");
        }

        checkKeyStates(c);

        for(int i = 0; i < gameBuildings.getNoOfBuildings(); i++)
        {
            if(Soldier.getSprite().collision(gameBuildings.getBuildingSprite(i), false))
            {
                if(Soldier.getSprite().getPosx() < gameBuildings.getBuildingSprite(i).getPosx())
                {
                    Soldier.getSprite().move(-4, 0);
                }
                else if(Soldier.getSprite().getPosx() > (gameBuildings.getBuildingSprite(i).getPosx() + (gameBuildings.getBuildingSprite(i).getWidth()/2)))
                {
                    Soldier.getSprite().move(4, 0);
                }
                else if(Soldier.getSprite().getPosy() < gameBuildings.getBuildingSprite(i).getPosy())
                {
                    Soldier.getSprite().move(0, -4);
                }
                else if(Soldier.getSprite().getPosy() > (gameBuildings.getBuildingSprite(i).getPosy() + ((gameBuildings.getBuildingSprite(i).getHeight()/6)*5)))
                {
                    Soldier.getSprite().move(0, 4);
                }
            }
        }

        Soldier.update(c);

        for (int i = 0; i < bullet; i++)
        {
            if (Bullets[i] != null)
            {
                Bullets[i].getSprite().update(c);
                Bullets[i].fire(0);
                Bullets[i].update(c);
                Bullets[i].draw(g);
            }
        }

        for (int i = 0; i < Hipsters.getNoOfBadGuys(); i++)
        {
            Hipsters.update(c);

           // if(Hipsters.doAI(i))
            //{
                if(Hipsters.getDistanceY(Soldier, i) > Hipsters.getDistanceX(Soldier, i))
                {
                    if(Hipsters.getSprite(i).getPosy() > Soldier.getSprite().getPosy())
                    {
                        Hipsters.findPath(3);
                    }
                    else if(Hipsters.getSprite(i).getPosy() > Soldier.getSprite().getPosy())
                    {
                        Hipsters.findPath(2);
                    }
                }
                else if(Hipsters.getDistanceX(Soldier, i) > Hipsters.getDistanceY(Soldier, i))
                {
                    if(Hipsters.getSprite(i).getPosx() < Soldier.getSprite().getPosx())
                    {
                        Hipsters.findPath(0);
                    }
                    else if(Hipsters.getSprite(i).getPosx() > Soldier.getSprite().getPosx())
                    {
                        Hipsters.findPath(1);
                    }
                }
           // }
        }

        for (int j = 0; j < c.getBackground().getMapLength(); j++)
        {
            Hipsters.draw(g, j);
        }

        gameBuildings.draw(g, Soldier.getSprite());
        Soldier.draw(g);
        gameBuildings.drawRemainder(g);
    }


    public void checkKeyStates(Canvas c)
    {
        int keyState = c.getKeyStates();

        if ((keyState & c.UP_PRESSED) != 0 && c.getBackground().getY() < 0 && Soldier.getSprite().getPosy() < c.getHeight() / 2)
        {
            c.getBackground().move(0, 4);
            gameBuildings.move(0, 4);
            Hipsters.moveTurningPoint(false, true, 4);
            for(int i = 0; i < Hipsters.getNoOfBadGuys(); i++)
            {
                Hipsters.getSprite(i).move(0, 4);
            }
            //Soldier.getSprite().setRotation(0);
        }
        else if ((keyState & c.UP_PRESSED) != 0 && (Soldier.getSprite().getPosy() - Soldier.getSprite().getHeight()) > 0)
        {
            Soldier.getSprite().move(0, -4);
            //Soldier.getSprite().setRotation(0);
        }
        else if ((keyState & c.DOWN_PRESSED) != 0 && c.getBackground().getY() > -144 && Soldier.getSprite().getPosy() > c.getHeight() / 2)
        {
            // Soldier.getSprite().setRotation(180);
            c.getBackground().move(0, -4);
            gameBuildings.move(0, -4);
            Hipsters.moveTurningPoint(false, true, -4);
            for(int i = 0; i < Hipsters.getNoOfBadGuys(); i++)
            {
                Hipsters.getSprite(i).move(0, -4);
            }
        }
        else if ((keyState & c.DOWN_PRESSED) != 0 && Soldier.getSprite().getPosy() < 500)
        {
            Soldier.getSprite().move(0, 4);
            // Soldier.getSprite().setRotation(180);
        }
        else if ((keyState & c.RIGHT_PRESSED) != 0 && c.getBackground().getX() > -110 && Soldier.getSprite().getPosx() > c.getWidth() / 2)
        {
            c.getBackground().move(-4, 0);
            // Soldier.getSprite().setRotation(90);
            gameBuildings.move(-4, 0);
             Hipsters.moveTurningPoint(true, false, -4);
             for(int i = 0; i < Hipsters.getNoOfBadGuys(); i++)
            {
                Hipsters.getSprite(i).move(-4, 0);
            }
        }
        else if ((keyState & c.RIGHT_PRESSED) != 0 && Soldier.getSprite().getPosx() + (Soldier.getSprite().getWidth() / 2) < 272)
        {
            Soldier.getSprite().move(4, 0);
            //Soldier.getSprite().setRotation(90);
        }
        else if ((keyState & c.LEFT_PRESSED) != 0 && c.getBackground().getX() < 0 && Soldier.getSprite().getPosx() < c.getWidth() / 2)
        {
            c.getBackground().move(4, 0);
            gameBuildings.move(4, 0);
             Hipsters.moveTurningPoint(true, false, 4);
            for(int i = 0; i < Hipsters.getNoOfBadGuys(); i++)
            {
                Hipsters.getSprite(i).move(4, 0);
            }
            // Soldier.getSprite().setRotation(270);
        }
        else if ((keyState & c.LEFT_PRESSED) != 0 && Soldier.getSprite().getPosx() - (Soldier.getSprite().getWidth() / 2) > 0)
        {
            Soldier.getSprite().move(-4, 0);
            // Soldier.getSprite().setRotation(270);
        }
        else if ((keyState & c.FIRE_PRESSED) != 0)
        {
            if (counter == 0)
            {
                if (bullet < 15)
                {
                    if(Bullets[bullet] == null)
                        Bullets[bullet] = new Weapon(0);

                    Bullets[bullet].getSprite().setActive();
                    Soldier.getSprite().setRefPix(12, 0);
                    Bullets[bullet].getSprite().setLocation(Soldier.getSprite().getPosx(), Soldier.getSprite().getPosy());
                    Soldier.getSprite().setRefPix(12, 44);
                    Bullets[bullet].setFireBool(true);
                    bullet++;
                    if(bullet == 15)
                        bullet = 0;

                    System.out.println(bullet);
                    counter = 800;
                }
            }
            else
            {
                while (counter > 0)
                {
                    counter--;
                }
            }

        }
    }
}
