Subversion Repositories AndroidProjects

Rev

Rev 886 | Rev 894 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

package com.gebauz.burutaru.game;

import com.badlogic.gdx.graphics.Texture.TextureFilter;
import com.gebauz.bauzoid.game.Game;
import com.gebauz.bauzoid.game.GameObject;
import com.gebauz.bauzoid.game.entities.EntityManager;
import com.gebauz.bauzoid.graphics.sprite.Sprite;
import com.gebauz.bauzoid.math.Vector2;
import com.gebauz.burutaru.GameConsts;
import com.gebauz.burutaru.game.entities.BlobEnemies;
import com.gebauz.burutaru.game.entities.Explosions;
import com.gebauz.burutaru.game.entities.PlasmaShots;
import com.gebauz.burutaru.game.entities.PowerUpMissile;
import com.gebauz.burutaru.game.entities.PowerUps;
import com.gebauz.burutaru.game.entities.Ship;
import com.gebauz.burutaru.game.entities.VirtualPad;

public class GameLogic extends GameObject
{


        // Constants========================================================================================
       
       
        public static final float SPAWN_INTERVAL_MIN = 0.2f;
        public static final float SPAWN_INTERVAL_MAX = 1.5f;

        // Embedded Types===================================================================================

        // Fields===========================================================================================
       
        private EntityManager mEntities = new EntityManager();
       
        private Ship mShip = null;
        private ShipController mShipController = null;
        private ShipParameters mShipParameters = null;
       
        private PlasmaShots mPlasmaShots = null;
       
        private BlobEnemies mBlobEnemies = null;
       
        private Explosions mExplosions = null;
       
        private VirtualPad mVirtualPad = null;
       
        private PowerUps mPowerUps = null;
        private PowerUpMissile mPowerUpMissile = null;

        // TEMP:
        private Sprite mBackground = null;
        private float mSpawnTimer = 0.0f;

        // Methods==========================================================================================
       
        public GameLogic(Game game)
        {
                super(game);
               
                // TEMP:
                mBackground = new Sprite(getGraphics(), "data/textures/background.png");
        }
       
        public void createEntities()
        {
                mShip = mEntities.addEntity(new Ship(this));
                mPlasmaShots = mEntities.addEntity(new PlasmaShots(this));
                mBlobEnemies = mEntities.addEntity(new BlobEnemies(this));
                mExplosions = mEntities.addEntity(new Explosions(this));
                mVirtualPad = mEntities.addEntity(new VirtualPad(this));
                mPowerUps = mEntities.addEntity(new PowerUps(this));
                mPowerUpMissile = mEntities.addEntity(new PowerUpMissile(this));
        }
       
        public void initAsync()
        {
                createEntities();
               
                mEntities.initAsync();
               
                // TEMP:
                mBackground.initAsync();
        }
       
        public void init()
        {
                mEntities.init();
               
                // TEMP:
                mBackground.init();
                mBackground.getTexture().setFilter(TextureFilter.Linear, TextureFilter.Linear);
               
                mShipController = new ShipController(this);
                mShipParameters = new ShipParameters(this);
        }
       
        public void exit()
        {
                mShipController = null;
                mShipParameters = null;
               
                mEntities.exit();
        }
       
        public void update(float deltaTime)
        {
                mShipController.handleInput(deltaTime);
               
                mShip.update(deltaTime);
                mPlasmaShots.update(deltaTime);
                mBlobEnemies.update(deltaTime);
                mExplosions.update(deltaTime);
                mPowerUps.update(deltaTime);
                mPowerUpMissile.update(deltaTime);
               
                // TEMP:
                mSpawnTimer -= deltaTime;
                if (mSpawnTimer < 0.0f)
                {
                        mBlobEnemies.spawn(GameConsts.VIRTUAL_SCREEN_WIDTH + 100.0f, getGame().getRandomFloat(100.0f, GameConsts.VIRTUAL_SCREEN_HEIGHT - 100.0f));
                        mSpawnTimer = getGame().getRandomFloat(SPAWN_INTERVAL_MIN, SPAWN_INTERVAL_MAX);
                }
        }
       
        public void render()
        {      
                // TEMP:
                mBackground.x = 0;
                mBackground.y = 0;
                mBackground.w = GameConsts.VIRTUAL_SCREEN_WIDTH;
                mBackground.h = GameConsts.VIRTUAL_SCREEN_HEIGHT;
                mBackground.pivotX = 0;
                mBackground.pivotY = 0;
                mBackground.render();
               
                // render powerups
                mPowerUps.render();
               
                // render weapons
                mPlasmaShots.render();
                mPowerUpMissile.render();
               
                // render enemies
                mBlobEnemies.render();

                // render ships
                mShip.render();
               
                // render effects
                mExplosions.render();
               
                // render UI
                mVirtualPad.render();
        }
       
        public boolean checkForHit(float x, float y, float w, float h)
        {
                boolean result = false;
               
                if (mBlobEnemies.checkForHit(x, y, w, h))
                        result = true;
               
                // TODO: more enemy types here:
               
                return result;
        }
       
        // TODO: maybe it's time to generalize an Enemy interface
        public boolean getNearestEnemyPosition(float x, float y, Vector2 result)
        {
                boolean found = mBlobEnemies.getNearestEnemy(x, y, result);
                return found;
        }
       
        // Getters/Setters==================================================================================

        public final Ship getShip() { return mShip; }
        public final PlasmaShots getPlasmaShots() { return mPlasmaShots; }
        public final Explosions getExplosions() { return mExplosions; }
        public final VirtualPad getVirtualPad() { return mVirtualPad; }
        public final PowerUps getPowerUps() { return mPowerUps; }
        public final PowerUpMissile getPowerUpMissile() { return mPowerUpMissile; }
        public final ShipParameters getShipParameters() { return mShipParameters; }
       
       
}