com.gamemaker.gameworld.GameRenderer.java Source code

Java tutorial

Introduction

Here is the source code for com.gamemaker.gameworld.GameRenderer.java

Source

/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

package com.gamemaker.gameworld;

import com.badlogic.gdx.Game;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.g2d.*;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType;
import com.gamemaker.ERhelpers.AssetLoader;
import com.gamemaker.GameObjects.Obstacles;
import com.gamemaker.GameObjects.*;
import com.gamemaker.ERhelpers.Button;

public class GameRenderer {
    protected Game game;
    protected GameWorld myWorld;
    protected OrthographicCamera cam;
    protected ShapeRenderer shapeRenderer;
    protected SpriteBatch batcher;//this is for drawing pictures for u
    protected int gameHeight;
    protected TextureRegion bg1, bg2, bg3, bgFin1, bgFin2, bgFin3, bgFin4, tree_image, wh, watericon, water25,
            water50, water75, water100, HP25, HP50, HP75, HP100, HPicon, idle, Bag, rockimage, digstick,
            bushOnionImage, monster, billycanImage, cokeCanImage, batteryImage, cigarettesImage, meatpieImage,
            phoneImage, wheelBraceImage, grubsImage, phrase1Active, phrase1Pressed, phrase2Active, phrase2Pressed,
            phrase3Active, phrase3Pressed, phrase4Active, phrase4Pressed, antTrapImage, fallStoneImage, saltLakewh;
    protected Animation playerAnimation1, playerAnimation2;
    protected ScrollHandler scroller;
    protected Background background1, background2, background3, backgroundFin1, backgroundFin2, backgroundFin3,
            backgroundFin4;
    protected Waterhole waterhole;
    protected Player player;
    protected BitmapFont font, font2, font3, font4;
    protected Items rock, digStick, bushOnion, billycan, cokecan, battery, cigarettes, meatpie, phone, wheelbrace,
            grubs;
    protected Backpack backpack;
    protected Obstacles tree;
    protected Animation monsterAnimation, kingAnimation;
    protected AntTrap[] antTrap;
    protected FallStone[] fallStone;
    protected SmallAnimals[] rabbit;
    protected Animation rabbAnimation;
    private TextureRegion warndimissStand, warnhelpStand, playerDeathFinal;
    private TextureRegion warnStand;
    private Animation warnAnimation;
    private Animation warnidle1Animation, warnidle2Animation, warnhelpAnimation, warndismissAnimation,
            shadowAnimation, kingStand, playerDeath;
    private Boolean startSoundPlay = false, rockSoundPlay = false, waterSoundPlay = false, bushSoundPlay = false,
            monsterSoundPlay = false, billycanSoundPlay = false, swipeAudioPlay = false;
    private boolean flagHelp = true, flagDeath = true, deathSoundPlay = true;
    private float[] shadowRuntime;
    GlyphLayout layout = new GlyphLayout();

    private float tempRunTimeGameOver = 0, tempRunTimeLevelFinal = 0;
    public float mapLoadTime = 0;
    public TextureRegion restartButton_on, restartButton_off;
    public Button restartBtn;

    public TextureRegion mapStateBg, mapLine1, mapLine2, mapLine3, mapLine4, mapLine5, mapLine6, mapLine7,
            mapColor1, mapColor2, mapColor3, mapColor4;

    private float angle = 360f;

    public GameRenderer(GameWorld world, int gameHeight) {
        myWorld = world;
        this.gameHeight = gameHeight;
        cam = new OrthographicCamera();
        cam.setToOrtho(true, 1280, 720);
        batcher = new SpriteBatch();
        batcher.setProjectionMatrix(cam.combined);
        shapeRenderer = new ShapeRenderer();
        shapeRenderer.setProjectionMatrix(cam.combined);

        //button
        restartButton_on = AssetLoader.restartBtn_on;
        restartButton_off = AssetLoader.restartBtn_off;
        restartBtn = new Button(530, 300, 150, 100, restartButton_on, restartButton_off);

        //watericon and hp icon
        water25 = AssetLoader.water25;
        water50 = AssetLoader.water50;
        water75 = AssetLoader.water75;
        water100 = AssetLoader.water100;
        HP25 = AssetLoader.HP25;
        HP50 = AssetLoader.HP50;
        HP75 = AssetLoader.HP75;
        HP100 = AssetLoader.HP100;
        //map
        mapStateBg = AssetLoader.mapStateBg;
        mapLine1 = AssetLoader.mapLine1;
        mapLine2 = AssetLoader.mapLine2;
        mapLine3 = AssetLoader.mapLine3;
        mapLine4 = AssetLoader.mapLine4;
        mapLine5 = AssetLoader.mapLine5;
        mapLine6 = AssetLoader.mapLine6;
        mapLine7 = AssetLoader.mapLine7;
        mapColor1 = AssetLoader.mapColor1;
        mapColor2 = AssetLoader.mapColor2;
        mapColor3 = AssetLoader.mapColor3;

        //background and waterhole
        bg1 = AssetLoader.bg1;
        bg2 = AssetLoader.bg2;
        bg3 = AssetLoader.bg3;
        bgFin1 = AssetLoader.bgFin1;
        bgFin2 = AssetLoader.bgFin2;
        bgFin3 = AssetLoader.bgFin3;
        bgFin4 = AssetLoader.bgFin4;
        wh = AssetLoader.waterhole;
        saltLakewh = AssetLoader.saltLakewh;

        //icons
        watericon = AssetLoader.watericon;
        HPicon = AssetLoader.HP;

        //items
        rockimage = AssetLoader.rock;
        digstick = AssetLoader.digstick;
        bushOnionImage = AssetLoader.bushOnion;
        billycanImage = AssetLoader.billyCan;
        cokeCanImage = AssetLoader.cokeCan;
        batteryImage = AssetLoader.battery;
        cigarettesImage = AssetLoader.cigarettes;
        meatpieImage = AssetLoader.meatpie;
        phoneImage = AssetLoader.phone;
        wheelBraceImage = AssetLoader.wheelBrace;
        grubsImage = AssetLoader.grubs;

        //obstacles
        tree_image = AssetLoader.obstacle_tree;
        antTrapImage = AssetLoader.antTrap;
        fallStoneImage = AssetLoader.fallStone;

        Bag = AssetLoader.backpack;

        //player frames
        playerAnimation1 = AssetLoader.playerAnimation1;
        playerAnimation2 = AssetLoader.playerAnimation2;
        idle = AssetLoader.idle;

        monsterAnimation = AssetLoader.monsterAnimation;

        scroller = world.getScroller();
        background1 = scroller.getBackground1();
        background2 = scroller.getBackground2();
        background3 = scroller.getBackground3();
        backgroundFin1 = scroller.getBackgroundFin1();
        backgroundFin2 = scroller.getBackgroundFin2();
        backgroundFin3 = scroller.getBackgroundFin3();
        backgroundFin4 = scroller.getBackgroundFin4();
        waterhole = scroller.getWaterhole();
        player = world.getPlayer();
        rock = scroller.getRock();
        digStick = scroller.getDigStick();
        bushOnion = scroller.getBushOnion();
        billycan = scroller.getBillyCan();
        cokecan = scroller.getCokeCan();
        battery = scroller.getBattery();
        cigarettes = scroller.getCigarettes();
        meatpie = scroller.getMeatpie();
        phone = scroller.getPhone();
        wheelbrace = scroller.getWheelBrace();
        grubs = scroller.getGrubs();
        tree = scroller.getObstacle();
        antTrap = new AntTrap[scroller.getAntAmount() + 1];
        for (int i = 1; i <= scroller.getAntAmount(); i++) {
            antTrap[i] = scroller.getAntTrap(i);
        }

        fallStone = new FallStone[scroller.getStoneAmount() + 1];
        for (int i = 1; i <= scroller.getStoneAmount(); i++) {
            fallStone[i] = scroller.getFallStone(i);
        }

        rabbit = new SmallAnimals[scroller.getRabbitAmount() + 1];
        for (int i = 1; i <= scroller.getRabbitAmount(); i++) {
            rabbit[i] = scroller.getRabbit(i);
        }
        backpack = world.getBackpack();

        //font
        font = new BitmapFont(Gdx.files.internal("font/numFont.fnt"));
        font.getData().setScale(1f, -1f);
        font2 = new BitmapFont(Gdx.files.internal("font/timerFont.fnt"));
        font2.getData().setScale(0.8f, -0.8f);
        font3 = new BitmapFont(Gdx.files.internal("font/timerFont.fnt"));
        font3.getData().setScale(1f, -1f);
        font4 = new BitmapFont(Gdx.files.internal("font/ComicSansMS.fnt"));
        font4.getData().setScale(1f, -1f);

        monster = AssetLoader.monster1;
        //monsterAnimation = AssetLoader.monsterAnimation;
        kingStand = AssetLoader.kingbrownStandAnimation;
        kingAnimation = AssetLoader.kingbrownAnimation;
        warnidle1Animation = AssetLoader.warnIdle1Animation;
        warnidle2Animation = AssetLoader.warnIdle2Animation;
        warnhelpAnimation = AssetLoader.warnHelpAnimation;
        warndismissAnimation = AssetLoader.warnDismissAnimation;
        warndimissStand = AssetLoader.wdismiss6;
        warnhelpStand = AssetLoader.whelp11;
        shadowAnimation = AssetLoader.shadowAnimation;

        warnStand = AssetLoader.warnampi1;
        warnAnimation = AssetLoader.warnampiAnimation;
        rabbAnimation = AssetLoader.rabbitAnimation;

        //phrases

        phrase1Active = AssetLoader.phrase1Active;
        phrase1Pressed = AssetLoader.phrase1Pressed;
        phrase2Active = AssetLoader.phrase2Active;
        phrase2Pressed = AssetLoader.phrase2Pressed;
        phrase3Active = AssetLoader.phrase3Active;
        phrase3Pressed = AssetLoader.phrase3Pressed;
        phrase4Active = AssetLoader.phrase4Active;
        phrase4Pressed = AssetLoader.phrase4Pressed;

        playerDeathFinal = AssetLoader.death3;
        playerDeath = AssetLoader.deathAnimation;

        shadowRuntime = new float[scroller.getStoneAmount() + 1];
        for (int i = 1; i <= scroller.getStoneAmount(); i++) {
            shadowRuntime[i] = 0;
        }
    }

    public void render(float runTime, float delta) {
        Gdx.app.log("GameRenderer", "render");
        Gdx.gl.glClearColor(0, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);

        if (myWorld.isGameOver()) {
            drawGameOver(delta);
        } else if (myWorld.isMap1()) {
            drawMap1(runTime);
        } else if (myWorld.isMap6()) {
            drawMap6(runTime);
        } else if (myWorld.isLevel1()) {
            drawLevel1(runTime);
        } else {
            drawLevelFin(runTime, delta);
        }
    }

    public void drawMap1(float delta) {
        mapLoadTime = 0;

        batcher.begin();

        mapLoadTime += delta;
        if (mapLoadTime > 2) {
            batcher.draw(mapStateBg, 0, 0, 1280, 720);
            batcher.draw(mapLine1, 50, -20, 400, 300);
            batcher.draw(mapColor1, 50, -20, 400, 300);
            batcher.draw(mapLine5, 440, -20, 400, 300);
            batcher.draw(mapLine6, 820, -20, 400, 300);
            batcher.draw(mapLine3, 50, 440, 400, 300);
            batcher.draw(mapLine2, 440, 440, 400, 300);
            batcher.draw(mapLine4, 840, 220, 400, 260);
            batcher.draw(mapLine7, 260, 200, 400, 300);
        } else {
            batcher.draw(mapStateBg, 0, 0, 1280, 720);
            batcher.draw(mapLine1, 50, -20, 400, 300);
            batcher.draw(mapLine5, 440, -20, 400, 300);
            batcher.draw(mapLine6, 820, -20, 400, 300);
            batcher.draw(mapLine3, 50, 440, 400, 300);
            batcher.draw(mapLine2, 440, 440, 400, 300);
            batcher.draw(mapLine4, 840, 220, 400, 260);
            batcher.draw(mapLine7, 260, 200, 400, 300);
        }
        batcher.end();

    }

    public void drawMap6(float delta) {
        mapLoadTime = 0;

        batcher.begin();

        mapLoadTime += delta;
        if (mapLoadTime > 2) {
            batcher.draw(mapStateBg, 0, 0, 1280, 720);
            batcher.draw(mapLine1, 50, -20, 400, 300);
            batcher.draw(mapColor1, 50, -20, 400, 300);
            batcher.draw(mapLine5, 440, -20, 400, 300);
            batcher.draw(mapLine6, 820, -20, 400, 300);
            batcher.draw(mapLine3, 50, 440, 400, 300);
            batcher.draw(mapLine2, 440, 440, 400, 300);
            batcher.draw(mapLine4, 840, 220, 400, 260);
            batcher.draw(mapLine7, 260, 200, 400, 300);
            batcher.draw(mapColor2, 840, 220, 400, 260);
        } else {
            batcher.draw(mapStateBg, 0, 0, 1280, 720);
            batcher.draw(mapLine1, 50, -20, 400, 300);
            batcher.draw(mapColor1, 50, -20, 400, 300);
            batcher.draw(mapLine5, 440, -20, 400, 300);
            batcher.draw(mapLine6, 820, -20, 400, 300);
            batcher.draw(mapLine3, 50, 440, 400, 300);
            batcher.draw(mapLine2, 440, 440, 400, 300);
            batcher.draw(mapLine4, 840, 220, 400, 260);
            batcher.draw(mapLine7, 260, 200, 400, 300);
        }
        batcher.end();

    }

    public void drawGameOver(float delta) {
        AssetLoader.backgroundMusic.stop();
        AssetLoader.monsterMusic.stop();
        AssetLoader.yell.stop();
        AssetLoader.dangerous.stop();
        AssetLoader.monsterSound.stop();
        AssetLoader.startSound.stop();
        AssetLoader.billycanSound.stop();
        AssetLoader.waterSound.stop();
        AssetLoader.bushonionSound.stop();
        AssetLoader.rockSound1.stop();
        AssetLoader.rockSound2.stop();
        AssetLoader.backgroundMusicLev2.stop();
        tempRunTimeGameOver += delta;
        shapeRenderer.begin(ShapeType.Filled);
        shapeRenderer.setColor(Color.GRAY);
        shapeRenderer.rect(0, 0, 1280, 720);
        shapeRenderer.end();
        batcher.begin();
        font.getData().setScale(5f, -5f);
        font.setColor(Color.WHITE);

        //if (myWorld.getMonster().getMonsterGo() == 1 || myWorld.getKingbrown1().collides(myWorld.getPlayer()) || myWorld.getKingbrown2().collides(myWorld.getPlayer()) || myWorld.getWater() <= 0 || myWorld.collideStone()) {
        if (deathSoundPlay) {
            AssetLoader.die.play();
            deathSoundPlay = false;
        }
        layout.setText(font4, "Ngarlpu wiyarringu");
        font4.draw(batcher, layout, 280, 120);
        if (playerDeath.getKeyFrameIndex(tempRunTimeGameOver) == 2) {
            flagDeath = false;
        }
        if (flagDeath) {
            batcher.draw(playerDeath.getKeyFrame(tempRunTimeGameOver), 500, 400);
        } else {
            batcher.draw(AssetLoader.death3, 500, 550);
        }
        Gdx.app.log("drawGameOver", "called");
        //}
        /*else if (myWorld.getMonster().getMonsterGo() == 2) {
        font.draw(batcher, "You Win", 554, 250);
        font.draw(batcher, "Touch The Screen", 370, 380);
        }*/
        font.getData().setScale(1f, -1f);

        drawButton();

        batcher.end();
    }

    public void drawLevel1(float runTime) {
        batcher.begin();
        batcher.disableBlending();
        batcher.draw(bg1, background1.getX(), background1.getY(), 1280, 720);
        batcher.draw(bg2, background2.getX(), background2.getY(), 1280, 720);
        batcher.draw(bg3, background3.getX(), background3.getY(), 1280, 720);
        batcher.enableBlending();

        //  batcher.draw(watericon, 0, 0, 120, 120);
        //  batcher.draw(HPicon, 120, 0, 120, 120);

        drawicons();

        font.draw(batcher, (int) myWorld.getWater() + "", 40, 50);
        font.draw(batcher, myWorld.getHP() + "", 150, 50);
        drawTimer();

        drawWaterhole();
        drawItems();

        for (int i = 1; i <= scroller.getRabbitAmount(); i++) {
            if (rabbit[i].getVisble() && rabbit[i].getRunning()) {
                batcher.draw(rabbAnimation.getKeyFrame(runTime), rabbit[i].getX(), rabbit[i].getY(),
                        rabbit[i].getWidth(), rabbit[i].getHeight());
            }
        }

        drawAntTraps();
        drawObstacles();

        if (myWorld.getMonster().getMonsterAppear() == 1 && myWorld.getMonster().getMonsterGo() == 0
                || myWorld.getMonster().getMonsterGo() == 2
                        && myWorld.getMonster().getY() + myWorld.getMonster().getHeight() < 400) {
            batcher.draw(monster, myWorld.getMonster().getX(), myWorld.getMonster().getY(),
                    myWorld.getMonster().getWidth(), myWorld.getMonster().getHeight());
            //font2.draw(batcher, "Kutjupa-kutjupatjun\n kanyira?", myWorld.getMonster().getX(), myWorld.getMonster().getY() + 100);
            if (monsterSoundPlay == false) {
                AssetLoader.monsterSound.play();
                monsterSoundPlay = true;
            }
        } else if (myWorld.getMonster().getMonsterGo() == 1) {
            batcher.draw(monsterAnimation.getKeyFrame(runTime), myWorld.getMonster().getX(),
                    myWorld.getMonster().getY(), myWorld.getMonster().getWidth(), myWorld.getMonster().getHeight());
        } else if (myWorld.getMonster().getMonsterGo() == 2
                && myWorld.getMonster().getY() + myWorld.getMonster().getHeight() >= 400) {
            batcher.draw(monsterAnimation.getKeyFrame(runTime), myWorld.getMonster().getX(),
                    myWorld.getMonster().getY(), myWorld.getMonster().getWidth(), myWorld.getMonster().getHeight());
        }

        if (myWorld.getChoice().getVisible()) {
            drawChoice();
        }

        if (!player.getIsRunning() && background1.getDistance() == 0) {
            //font2.draw(batcher, "Parlila kukurraltjaku", player.getX(), player.getY() - 15);
            if (startSoundPlay == false) {
                AssetLoader.startSound.play();
                startSoundPlay = true;
            }
        }

        batcher.draw(Bag, 0, 180, 100, 360);
        drawBackpack();//draw items in the backpack

        drawPlayer(runTime);

        batcher.end();
    }

    public void drawLevelFin(float runTime, float delta) {
        batcher.begin();
        //batcher.disableBlending();
        batcher.draw(bgFin1, backgroundFin1.getX(), backgroundFin1.getY(), 1280, 720);
        batcher.draw(bgFin2, backgroundFin2.getX(), backgroundFin2.getY(), 1280, 720);
        if (myWorld.getScroller().getBackground1().getDistance() < 10000) {
            batcher.draw(bgFin3, backgroundFin3.getX(), backgroundFin3.getY(), 1280, 720);
        } else {
            batcher.draw(bgFin4, backgroundFin3.getX(), backgroundFin3.getY(), 1280, 720);
        }
        //batcher.draw(bgFin4, backgroundFin4.getX(), backgroundFin4.getY(), 1280, 720); -- don't delete!
        //batcher.draw(watericon, 0, 0, 120, 120);
        //batcher.draw(HPicon, 120, 0, 120, 120);

        drawicons();

        font.draw(batcher, (int) myWorld.getWater() + "", 40, 50);
        font.draw(batcher, myWorld.getHP() + "", 150, 50);
        drawTimer();
        drawItems();
        drawEagle();
        // drawAntTraps();
        // drawObstacles();
        drawWaterHoleFin();
        for (int i = 1; i <= scroller.getRabbitAmount(); i++) {
            if (rabbit[i].getVisble() && rabbit[i].getRunning()) {
                batcher.draw(rabbAnimation.getKeyFrame(runTime), rabbit[i].getX(), rabbit[i].getY(),
                        rabbit[i].getWidth(), rabbit[i].getHeight());
            }
        }

        if (myWorld.getPlayer().getY() < 356) {
            drawFallStones1(delta);
        } else if (myWorld.getPlayer().getY() >= 356) {
            drawFallStones1(delta);
            drawFallStones2(delta);
        }

        if (myWorld.getWarnampi().getMonsterStop()
                && (myWorld.getWarnampi().getX() + myWorld.getWarnampi().getWidth() < 0)
                && myWorld.getWarnampi().getMonsterGo() != 1) {
            //do nothing
        } else {
            if (myWorld.getWarnampi().getMonsterGo() == 2 && myWorld.getWarnampi().getMonsterStop() == true) {
                batcher.draw(kingStand.getKeyFrame(runTime), myWorld.getKingbrown1().getX(),
                        myWorld.getKingbrown1().getY(), myWorld.getKingbrown1().getWidth(),
                        myWorld.getKingbrown1().getHeight());
                batcher.draw(kingStand.getKeyFrame(runTime), myWorld.getKingbrown2().getX(),
                        myWorld.getKingbrown2().getY(), myWorld.getKingbrown2().getWidth(),
                        myWorld.getKingbrown2().getHeight());
            } else {
                batcher.draw(kingAnimation.getKeyFrame(runTime), myWorld.getKingbrown1().getX(),
                        myWorld.getKingbrown1().getY(), myWorld.getKingbrown1().getWidth(),
                        myWorld.getKingbrown1().getHeight());
                batcher.draw(kingAnimation.getKeyFrame(runTime), myWorld.getKingbrown2().getX(),
                        myWorld.getKingbrown2().getY(), myWorld.getKingbrown2().getWidth(),
                        myWorld.getKingbrown2().getHeight());
            }

            if (myWorld.getWarnampi().getMonsterAppear() == 1 && myWorld.getWarnampi().getMonsterGo() == 0) {
                batcher.draw(warnidle1Animation.getKeyFrame(runTime), myWorld.getWarnampi().getX(),
                        myWorld.getWarnampi().getY());
            } else if (myWorld.getWarnampi().getMonsterGo() == 2
                    && myWorld.getWarnampi().getMonsterStop() == false) {
                tempRunTimeLevelFinal += delta;
                if (warnhelpAnimation.getKeyFrameIndex(tempRunTimeLevelFinal) == 11) {
                    flagHelp = false;
                }
                if (flagHelp == true) {
                    batcher.draw(warnhelpAnimation.getKeyFrame(tempRunTimeLevelFinal),
                            myWorld.getWarnampi().getX() - 270, myWorld.getWarnampi().getY() - 180);
                } else if (flagHelp == false) {
                    batcher.draw(warnidle2Animation.getKeyFrame(runTime), myWorld.getWarnampi().getX() - 300,
                            myWorld.getWarnampi().getY() - 290);
                }
            } else if (myWorld.getWarnampi().getMonsterGo() == 1) {
                tempRunTimeLevelFinal += delta;
                batcher.draw(warndismissAnimation.getKeyFrame(tempRunTimeLevelFinal), myWorld.getWarnampi().getX(),
                        myWorld.getWarnampi().getY());

            } else if (myWorld.getWarnampi().getMonsterGo() == 2 && myWorld.getWarnampi().getMonsterStop()) {
                batcher.draw(warnidle2Animation.getKeyFrame(runTime), myWorld.getWarnampi().getX() - 300,
                        myWorld.getWarnampi().getY() - 290);
            }
        }

        if (myWorld.getChoice().getVisible()) {
            drawChoice();
        }

        drawPlayer(runTime);

        if (myWorld.getPlayer().getY() < 356) {
            drawFallStones2(delta);
            drawFallStones3(delta);
        } else if (myWorld.getPlayer().getY() >= 356) {
            drawFallStones3(delta);
        }

        batcher.draw(Bag, 0, 180, 100, 360);
        drawBackpack();//draw items in the backpack

        batcher.end();
    }

    public void drawPlayer(float runTime) {
        if (player.getUpOrDown() != 0 && !player.getIsRunning()) {
            batcher.draw(playerAnimation1.getKeyFrame(runTime), player.getX(), player.getY(), 150, 200);
        } else if (player.getIsRunning() && player.getUpOrDown() == 0) {
            //playerAnimation.setFrameDuration(0.2f + background1.getVelocity() * 0.001f);
            if (background1.getVelocityX() < -50) {
                batcher.draw(playerAnimation1.getKeyFrame(runTime), player.getX(), player.getY(), 150, 200);
            } else if (Math.abs(background1.getVelocityX()) >= -50) {
                batcher.draw(playerAnimation2.getKeyFrame(runTime), player.getX(), player.getY(), 150, 200);
            }
        } else if (player.getIsRunning() && player.getUpOrDown() != 0) {
            batcher.draw(playerAnimation1.getKeyFrame(runTime), player.getX(), player.getY(), 150, 200);
        } else {
            batcher.draw(idle, player.getX(), player.getY(), 150, 200);
        }
    }

    public void drawBackpack() {
        if (backpack.getItemNum() > 0) {
            for (int i = 0; i < 4; i++) {
                if (backpack.getItems()[i] == 1) {
                    batcher.draw(rockimage, 0, 180 + i * 90, 100, 100);//this is just an example, should look up the item by itemId first
                } else if (backpack.getItems()[i] == 2) {
                    batcher.draw(digstick, 0, 180 + i * 90, 100, 100);
                } else if (backpack.getItems()[i] == 3) {
                    batcher.draw(bushOnionImage, 0, 180 + i * 90, 100, 100);
                } else if (backpack.getItems()[i] == 4) {
                    batcher.draw(billycanImage, 0, 180 + i * 90, 100, 100);
                } else if (backpack.getItems()[i] == 5) {
                    batcher.draw(cokeCanImage, 0, 180 + i * 90, 100, 100);
                } else if (backpack.getItems()[i] == 6) {
                    batcher.draw(batteryImage, 0, 180 + i * 90, 100, 100);
                } else if (backpack.getItems()[i] == 7) {
                    batcher.draw(cigarettesImage, 0, 180 + i * 90, 100, 100);
                } else if (backpack.getItems()[i] == 8) {
                    batcher.draw(meatpieImage, 0, 180 + i * 90, 100, 100);
                } else if (backpack.getItems()[i] == 9) {
                    batcher.draw(phoneImage, 0, 180 + i * 90, 100, 100);
                } else if (backpack.getItems()[i] == 10) {
                    batcher.draw(wheelBraceImage, 0, 180 + i * 90, 100, 100);
                } else if (backpack.getItems()[i] == 11) {
                    batcher.draw(grubsImage, 0, 180 + i * 90, 100, 100);
                }
            }
        }
    }

    public void drawItems() {
        if (rock.getVisble()) {
            if (rockSoundPlay == false) {
                if (myWorld.isLevel1()) {
                    AssetLoader.rockSound2.play();
                    rockSoundPlay = true;
                }
            }
            if (rock.getX() - player.getX() <= 200 && rock.getX() - player.getX() >= -100) {
                if (backpack.getItemNum() == 4) {
                    //font2.draw(batcher, "Yakutja katuwanarringu", player.getX(), player.getY() - 50);
                }
                //font2.draw(batcher, "Mukurringkula purli ngulaku mantjila, Purlingka ngarakati", rock.getX() - 80, rock.getY());
            }
            batcher.draw(rockimage, rock.getX(), rock.getY(), 100, 100);
        }
        if (digStick.getVisble()) {
            if (digStick.getX() - player.getX() <= 200 && digStick.getX() - player.getX() >= -100) {
                if (backpack.getItemNum() == 4) {
                    //font2.draw(batcher, "Yakutja katuwanarringu", player.getX() - 80, player.getY());
                }
            }

            if (digStick.getThrow()) {
                batcher.draw(digstick, digStick.getX(), digStick.getY(), digStick.getWidth() / 2,
                        digStick.getHeight() / 2, 100f, 100f, 1.0f, 1.0f, angle);
                if (angle < 0) {
                    angle = 360f;
                } else {
                    angle -= 600 * Gdx.graphics.getDeltaTime();
                }
            } else {
                batcher.draw(digstick, digStick.getX(), digStick.getY(), 100, 100);
            }
        }
        if (billycan.getVisble()) {
            batcher.draw(billycanImage, billycan.getX(), billycan.getY(), 100, 100);
            if (billycanSoundPlay == false) {
                if (myWorld.isLevel1()) {
                    AssetLoader.billycanSound.play();
                    billycanSoundPlay = true;
                }
            }
            if (billycan.getX() - player.getX() <= 200 && billycan.getX() - player.getX() >= -100) {
                if (backpack.getItemNum() == 4) {
                    //font2.draw(batcher, "Yakutja katuwanarringu", player.getX(), player.getY() - 80);
                }
                //font2.draw(batcher, "Wayatjarra mantjila", billycan.getX() - 40, billycan.getY())
            }
        }

        if (cokecan.getVisble()) {
            if (cokecan.getX() - player.getX() <= 200 && cokecan.getX() - player.getX() >= -100) {
                if (backpack.getItemNum() == 4) {
                    //font2.draw(batcher, "Yakutja katuwanarringu", player.getX(), player.getY() - 80);
                }
            }
            batcher.draw(cokeCanImage, cokecan.getX(), cokecan.getY(), 100, 100);
        }
        if (battery.getVisble()) {
            if (battery.getX() - player.getX() <= 200 && battery.getX() - player.getX() >= -100) {
                if (backpack.getItemNum() == 4) {
                    //font2.draw(batcher, "Yakutja katuwanarringu", player.getX(), player.getY() - 80);
                }
            }
            batcher.draw(batteryImage, battery.getX(), battery.getY(), 100, 100);
        }
        if (cigarettes.getVisble()) {
            if (cigarettes.getX() - player.getX() <= 200 && cigarettes.getX() - player.getX() >= -100) {
                if (backpack.getItemNum() == 4) {
                    //font2.draw(batcher, "Yakutja katuwanarringu", player.getX(), player.getY() - 80);
                }
            }
            batcher.draw(cigarettesImage, cigarettes.getX(), cigarettes.getY(), 100, 100);
        }
        if (meatpie.getVisble()) {
            if (meatpie.getX() - player.getX() <= 200 && meatpie.getX() - player.getX() >= -100) {
                if (backpack.getItemNum() == 4) {
                    //font2.draw(batcher, "Yakutja katuwanarringu", player.getX(), player.getY() - 80);
                }
            }
            batcher.draw(meatpieImage, meatpie.getX(), meatpie.getY(), 100, 100);
        }
        if (phone.getVisble()) {
            if (phone.getX() - player.getX() <= 200 && phone.getX() - player.getX() >= -100) {
                if (backpack.getItemNum() == 4) {
                    //font2.draw(batcher, "Yakutja katuwanarringu", player.getX(), player.getY() - 80);
                }
            }
            batcher.draw(phoneImage, phone.getX(), phone.getY(), 100, 100);
        }
        if (wheelbrace.getVisble()) {
            if (wheelbrace.getX() - player.getX() <= 200 && wheelbrace.getX() - player.getX() >= -100) {
                if (backpack.getItemNum() == 4) {
                    //font2.draw(batcher, "Yakutja katuwanarringu", player.getX(), player.getY() - 80);
                }
            }
            batcher.draw(wheelBraceImage, wheelbrace.getX(), wheelbrace.getY(), 100, 100);
        }

        if (bushOnion.getVisble()) {
            if (bushSoundPlay == false) {
                if (myWorld.isLevel1()) {
                    AssetLoader.bushonionSound.play();
                    bushSoundPlay = true;
                }
            }
            batcher.draw(bushOnionImage, bushOnion.getX(), bushOnion.getY(), 100, 100);

        }

        if (grubs.getVisble()) {
            if (grubs.getX() - player.getX() <= 200 && grubs.getX() - player.getX() >= -100) {
                if (backpack.getItemNum() == 4) {
                    font2.draw(batcher, "Yakutja katuwanarringu", player.getX(), player.getY() - 80);
                }
            }
            batcher.draw(grubsImage, grubs.getX(), grubs.getY(), 100, 100);
        }
    }

    public void drawObstacles() {

        if (tree.getVisble()) {
            if (!swipeAudioPlay) {
                AssetLoader.swipe.play();
                swipeAudioPlay = true;
            }
            if (tree.returnID() == 1) {
                batcher.draw(tree_image, tree.getX(), tree.getY(), 450, 300);
            } else {
                batcher.draw(tree_image, tree.getX(), tree.getY() + 150, 450, 300);
            }

        }

    }

    public void drawAntTraps() {
        for (int i = 1; i <= scroller.getAntAmount(); i++) {
            if (antTrap[i].getVisble()) {
                batcher.draw(antTrapImage, antTrap[i].getX(), antTrap[i].getY(), antTrap[i].getWidth(),
                        antTrap[i].getHeight());
            }
        }

    }

    public void drawFallStones1(float delta) {
        for (int i = 1; i <= scroller.getStoneAmount(); i++) {
            if (fallStone[i].getVisble() && scroller.getStoneY(i) == 380) {
                if (fallStone[i].getVelocityY() != 0) {
                    shadowRuntime[i] += delta;
                    batcher.draw(shadowAnimation.getKeyFrame(shadowRuntime[i]), fallStone[i].getX() - 50,
                            scroller.getStoneY(i), 323, 152);
                } else {
                    shadowRuntime[i] = 0;
                }
                batcher.draw(fallStoneImage, fallStone[i].getX(), fallStone[i].getY(), fallStone[i].getWidth(),
                        fallStone[i].getHeight());

            }
        }

    }

    public void drawFallStones2(float delta) {
        for (int i = 1; i <= scroller.getStoneAmount(); i++) {
            if (fallStone[i].getVisble() && scroller.getStoneY(i) == 490) {
                if (fallStone[i].getVelocityY() != 0) {
                    shadowRuntime[i] += delta;
                    batcher.draw(shadowAnimation.getKeyFrame(shadowRuntime[i]), fallStone[i].getX() - 50,
                            scroller.getStoneY(i), 323, 152);
                } else {
                    shadowRuntime[i] = 0;
                }
                batcher.draw(fallStoneImage, fallStone[i].getX(), fallStone[i].getY(), fallStone[i].getWidth(),
                        fallStone[i].getHeight());

            }
        }

    }

    public void drawFallStones3(float delta) {
        for (int i = 1; i <= scroller.getStoneAmount(); i++) {
            if (fallStone[i].getVisble() && scroller.getStoneY(i) == 600) {
                if (fallStone[i].getVelocityY() != 0) {
                    shadowRuntime[i] += delta;
                    batcher.draw(shadowAnimation.getKeyFrame(shadowRuntime[i]), fallStone[i].getX() - 50,
                            scroller.getStoneY(i), 323, 152);
                } else {
                    shadowRuntime[i] = 0;
                }
                batcher.draw(fallStoneImage, fallStone[i].getX(), fallStone[i].getY(), fallStone[i].getWidth(),
                        fallStone[i].getHeight());

            }
        }

    }

    public void drawicons() {
        if (myWorld.getWater() <= 100 && myWorld.getWater() > 75) {
            batcher.draw(water100, 0, 0, 120, 120);
        } else if (myWorld.getWater() <= 75 && myWorld.getWater() > 50) {
            batcher.draw(water75, 0, 0, 120, 120);
        } else if (myWorld.getWater() <= 50 && myWorld.getWater() > 25) {
            batcher.draw(water50, 0, 0, 120, 120);
        } else {
            batcher.draw(water25, 0, 0, 120, 120);
        }

        if (myWorld.getHP() <= 200 && myWorld.getHP() > 150) {
            batcher.draw(HP100, 120, 0, 120, 120);
        }
        if (myWorld.getHP() <= 150 && myWorld.getHP() > 100) {
            batcher.draw(HP75, 120, 0, 120, 120);
        }
        if (myWorld.getHP() <= 100 && myWorld.getHP() > 50) {
            batcher.draw(HP50, 120, 0, 120, 120);
        } else {
            batcher.draw(HP25, 120, 0, 120, 120);
        }

    }

    public void drawTimer() {
        font3.draw(batcher, myWorld.getMinLeft() + " : " + myWorld.getSecLeft(), 250, 40);
    }

    public void drawEagle() {
        if (myWorld.getEagleVisible()) {
            batcher.draw(AssetLoader.eagleidle, 200, 200, 359, 193);
        }
    }

    public void drawChoice() {
        for (int i = 0; i < 4; i++) {
            if (myWorld.getChoice().getId() == i) {
                if (myWorld.getChoice().getPhrases()[i] == 0) {
                    batcher.draw(phrase1Pressed, 980, i * 120, 300, 100);
                } else if (myWorld.getChoice().getPhrases()[i] == 1) {
                    batcher.draw(phrase2Pressed, 980, i * 120, 300, 100);
                } else if (myWorld.getChoice().getPhrases()[i] == 2) {
                    batcher.draw(phrase3Pressed, 980, i * 120, 300, 100);
                } else {
                    batcher.draw(phrase4Pressed, 980, i * 120, 300, 100);
                }
            } else {
                if (myWorld.getChoice().getPhrases()[i] == 0) {
                    batcher.draw(phrase1Active, 980, i * 120, 300, 100);
                } else if (myWorld.getChoice().getPhrases()[i] == 1) {
                    batcher.draw(phrase2Active, 980, i * 120, 300, 100);
                } else if (myWorld.getChoice().getPhrases()[i] == 2) {
                    batcher.draw(phrase3Active, 980, i * 120, 300, 100);
                } else {
                    batcher.draw(phrase4Active, 980, i * 120, 300, 100);
                }

            }
        }
    }

    public void drawWaterhole() {
        if (waterhole.getVisble()) {
            if (waterhole.returnID() == 1) {
                if (waterSoundPlay == false) {
                    AssetLoader.waterSound.play();
                    waterSoundPlay = true;
                }
                batcher.draw(wh, waterhole.getX(), waterhole.getY(), 350, 250);
            } else if (waterhole.returnID() == 2) {
                if (waterhole.getX() - player.getX() <= 200 && waterhole.getX() - player.getX() >= -200) {
                    // font2.draw(batcher, "Mukurringkula kapingka, kapi marnmala", waterhole.getX(), waterhole.getY());
                    if (waterSoundPlay == false) {
                        AssetLoader.waterSound.play();
                        waterSoundPlay = true;
                    }
                }
                batcher.draw(wh, waterhole.getX(), waterhole.getY() + 100, 350, 250);
            }
        }
    }

    public void drawWaterHoleFin() {
        if (waterhole.getVisble()) {
            batcher.draw(saltLakewh, waterhole.getX(), waterhole.getY(), 750, 300);
        }
    }

    public void drawButton() {

        restartBtn.isTouchDown(Gdx.input.getX(), Gdx.input.getY());

        if (restartBtn.getIsPressed()) {
            batcher.draw(restartBtn.buttonDown, restartBtn.x, restartBtn.y, restartBtn.width, restartBtn.height);
            if (Gdx.input.justTouched()) {
                player.setrestart();
            }
        } else {
            batcher.draw(restartBtn.buttonUp, restartBtn.x, restartBtn.y, restartBtn.width, restartBtn.height);
        }

        restartBtn.isTouchUp(Gdx.input.getX(), Gdx.input.getY());

    }
}