Subversion Repositories AndroidProjects

Rev

Blame | Last modification | View Log | RSS feed

package com.gebauz.burutaru.game.entities;

import java.util.HashMap;
import java.util.Map;

import com.gebauz.bauzoid.graphics.sprite.SpriteInstance;
import com.gebauz.bauzoid.math.Vector2;
import com.gebauz.bauzoid.math.Vector3;
import com.gebauz.burutaru.GameConsts;
import com.gebauz.burutaru.game.GameLogic;

public class LightManager extends Entity
{

        // Constants========================================================================================

        public static final int NUM_LIGHTS = 10;
        public static final float DEFAULT_LIGHT_Z = 1.4f;

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


        // Fields===========================================================================================
       
        private Vector3 mLightPos = new Vector3();
        private Vector3 mTargetLightPos = new Vector3();
       
        private Vector3[] mLights = new Vector3[NUM_LIGHTS];
        private boolean[] mLightActive = new boolean[NUM_LIGHTS];
       
        private int mNumLightsActive = 0;
       
        private Vector2 mTempVector = new Vector2();

        // Methods==========================================================================================
       
        public LightManager(GameLogic gameLogic)
        {
                super(gameLogic);
        }

        @Override
        public void initAsync()
        {
        }

        @Override
        public void init()
        {
                for (int i = 0; i < NUM_LIGHTS; i++)
                {
                        mLights[i] = new Vector3();
                        mLightActive[i] = false;
                }
               
                mLightPos.set(GameConsts.VIRTUAL_SCREEN_WIDTH/2, GameConsts.VIRTUAL_SCREEN_HEIGHT/3, 1.4f);
        }

        @Override
        public void exit()
        {
        }
       
        @Override
        public void update(float deltaTime)
        {
                /*mTargetLightPos.x = GameConsts.VIRTUAL_SCREEN_WIDTH/2;
                mTargetLightPos.y = GameConsts.VIRTUAL_SCREEN_WIDTH/3;
                mTargetLightPos.z = DEFAULT_LIGHT_Z;
                mNumLightsActive = 1;
                for (int i = 0; i < NUM_LIGHTS; i++)
                {
                        if (mLightActive[i])
                        {
                                mTargetLightPos.x += mLights[i].x;
                                mTargetLightPos.y += mLights[i].y;
                                mTargetLightPos.z += mLights[i].z;
                                mNumLightsActive++;
                        }
                }
               
                if (mNumLightsActive > 0)
                {
                        mTargetLightPos.x /= mNumLightsActive;
                        mTargetLightPos.y /= mNumLightsActive;
                        mTargetLightPos.z /= mNumLightsActive;
                }*/

               
                //mLightPos.set(mTargetLightPos.x, mTargetLightPos.y, mTargetLightPos.z);
               
                //mLightPos.x = getGameLogic().getLevel().getCurrentScrollVelocity
               
                mLightPos.set(GameConsts.VIRTUAL_SCREEN_WIDTH*2/3, -100, 1.4f);
                               
                /*mLightPos.x -= getGameLogic().getLevel().getCurrentScrollVelocity().x;
                mLightPos.y -= getGameLogic().getLevel().getCurrentScrollVelocity().y;
               
                if (getGameLogic().getLevel().getCurrentScrollVelocity().x > 0)
                {
                        if (mLightPos.x < 0)
                                mLightPos.x = GameConsts.VIRTUAL_SCREEN_WIDTH;
                }
                else
                {
                        if (mLightPos.x > GameConsts.VIRTUAL_SCREEN_WIDTH)
                                mLightPos.x = 0;
                }
               
                if (getGameLogic().getLevel().getCurrentScrollVelocity().y > 0)
                {
                        if (mLightPos.y < 0)
                                mLightPos.y = GameConsts.VIRTUAL_SCREEN_HEIGHT;
                }
                else
                {
                        if (mLightPos.y > GameConsts.VIRTUAL_SCREEN_HEIGHT)
                                mLightPos.y = 0;
                }
                */


               
        }
       

        @Override
        public void render()
        {
        }
       
        public void clearLightSources()
        {
                for (int i = 0; i < NUM_LIGHTS; i++)
                {
                        mLightActive[i] = false;
                }
        }
       
        public void addLightSource(float x, float y, float z)
        {
                for (int i = 0; i < NUM_LIGHTS; i++)
                {
                        if (!mLightActive[i])
                        {
                                mLightActive[i] = true;
                                mLights[i].set(x,  y,  z);
                                break;
                        }
                }
        }
       
       
        // Getters/Setters==================================================================================

        public final Vector3 getLightPos()
        {
                return mLightPos;
        }
       
        public final int getNumLightsActive()
        {
                return mNumLightsActive;
        }
       
        public final void setLightPosTo(SpriteInstance sprite)
        {
                float lightPosX = mLightPos.x;
                float lightPosY = mLightPos.y;
               
                sprite.transform.worldToSprite(lightPosX, lightPosY, mTempVector);
               
                //mTempVector.x = lightPosX - sprite.transform.x + sprite.transform.pivotX;
                //mTempVector.y = lightPosY - sprite.transform.y + sprite.transform.pivotY;
               
                mTempVector.x /= sprite.transform.w;
                mTempVector.y /= sprite.transform.h;

                sprite.setLightPos(mTempVector.x, mTempVector.y, mLightPos.z);
        }
       
}