Subversion Repositories AndroidProjects

Rev

Rev 145 | Blame | Compare with Previous | Last modification | View Log | RSS feed

package com.gebauz.pingK.common.game.gamestates;

import java.util.Vector;

import javax.microedition.khronos.opengles.GL10;

import com.gebauz.pingK.common.R;
import com.gebauz.pingK.common.framework.GLUtil;
import com.gebauz.pingK.common.framework.ResourceManager;
import com.gebauz.pingK.common.game.Font;
import com.gebauz.pingK.common.game.GameConsts;
import com.gebauz.pingK.common.game.GameServices;
import com.gebauz.pingK.common.game.MultitouchInput;
import com.gebauz.pingK.common.game.MultitouchInput.Finger;

public class CreditsState extends BaseGameState
{
        static public final float ITEM_FADE_TIME = 3.0f;
        static public final float ITEM_DISPLAY_TIME = 5.0f;
       
        public class CreditsItem
        {
                private String mText;
                private float mSize;
                private float mPosX;
                private final float mTargetX;
                private final float mEndTargetX;
                private final float mWidth;
                private float mPosY;
                private float mLifeTime = 0.0f;
               
                public CreditsItem(String text, float size, float startPosX, float positionY)
                {
                        mText = text;
                        mSize = size;
                        mPosY = positionY;
                        mPosX = startPosX;
                        mWidth = (Font.CHARACTER_SIZE * text.length() * mSize);
                        mTargetX = (GameConsts.VIRTUAL_SCREEN_WIDTH - mWidth) / 2.0f;
                        mEndTargetX = (GameConsts.VIRTUAL_SCREEN_WIDTH + mWidth);
                }
               
                public void update(float deltaTime)
                {
                        mLifeTime += deltaTime;
                       
                        if (mLifeTime < ITEM_FADE_TIME)
                        {
                                float diff = mTargetX - mPosX;
                                mPosX += diff * deltaTime * 3.0f;
                        }
                        else
                        {
                                if (mPosX < mEndTargetX)
                                        mPosX += deltaTime * mLifeTime * GameConsts.VIRTUAL_SCREEN_WIDTH;
                                else
                                        mPosX = mEndTargetX;
                        }
                }
               
                public void render()
                {
                        GameServices.getFont().drawText(mText, mPosX, mPosY, mSize);
                }
               
                public boolean isDone()
                {
                        return (mLifeTime > ITEM_DISPLAY_TIME);
                }
        }
       
        public class CreditsPage
        {
                private Vector<CreditsItem> mItems = new Vector<CreditsItem>();
               
                private boolean mIsDone = false;
               
                public CreditsPage()
                {
                }
               
                public void update(float deltaTime)
                {
                        boolean isDone = true;
                        for (int i = 0; i < mItems.size(); i++)
                        {
                                CreditsItem item = mItems.get(i);
                               
                                item.update(deltaTime);
                               
                                isDone = isDone && item.isDone();                                      
                        }
                       
                        if (isDone)
                                mIsDone = true;
                }
               
                public void render()
                {
                        for (int i = 0; i < mItems.size(); i++)
                        {
                                mItems.get(i).render();
                        }                      
                }
               
                public void addItem(String text, float size, float initialX, float posY)
                {
                        mItems.add(new CreditsItem(text, size, initialX, posY));
                }
               
                public boolean isDone()
                {
                        return mIsDone;
                }
        }
       
        private Vector<CreditsPage> mCredits = new Vector<CreditsPage>();
        private int mCurrentPage = 0;
       
        public CreditsState()
        {
        }
       
        @Override
        public void init()
        {
                GameServices.showAd(false);
               
                startCreditsPage();
                addCreditsItem(R.string.credits1_title, 2.0f, -200.0f, 200.0f);
                addCreditsItem(R.string.credits1_name1, 3.0f, -300.0f, 250.0f);

                startCreditsPage();
                addCreditsItem(R.string.credits2_title, 2.0f, -200.0f, 150.0f);
                addCreditsItem(R.string.credits2_name1, 3.0f, -300.0f, 200.0f);
                addCreditsItem(R.string.credits2_name2, 3.0f, -400.0f, 240.0f);
                addCreditsItem(R.string.credits2_name3, 3.0f, -500.0f, 280.0f);

                startCreditsPage();
                addCreditsItem(R.string.credits3_title, 2.0f, -200.0f, 200.0f);
                addCreditsItem(R.string.credits3_name1, 3.0f, -300.0f, 250.0f);

                startCreditsPage();
                addCreditsItem(R.string.credits4_title, 2.0f, -200.0f, 200.0f);
                addCreditsItem(R.string.credits4_name1, 3.0f, -300.0f, 250.0f);
               
                startCreditsPage();
                addCreditsItem(R.string.credits5_title, 2.0f, -200.0f, 150.0f);
                addCreditsItem(R.string.credits5_name1, 3.0f, -300.0f, 200.0f);        
                addCreditsItem(R.string.credits5_name2, 3.0f, -400.0f, 240.0f);
                addCreditsItem(R.string.credits5_name3, 3.0f, -500.0f, 280.0f);
               
                startCreditsPage();
                addCreditsItem(R.string.credits6_title, 2.0f, -200.0f, 200.0f);
                addCreditsItem(R.string.credits6_name1, 3.0f, -300.0f, 250.0f);        
               
                startCreditsPage();
                addCreditsItem(R.string.credits7_title, 2.0f, -200.0f, 180.0f);
                addCreditsItem(R.string.credits7_name1, 3.0f, -300.0f, 230.0f);        
                addCreditsItem(R.string.credits7_name2, 3.0f, -400.0f, 270.0f);
               
                startCreditsPage();
                addCreditsItem(R.string.credits8_title, 4.0f, -400.0f, 200.0f);
        }
       
        @Override
        public void exit()
        {
                mCredits.clear();
        }
       
        @Override
        public void onSurfaceChanged(int width, int height)
        {
                GLUtil.getGL().glViewport(0, 0, width, height);
        }
       
        @Override
        public void update(float deltaTime)
        {
                //for (int i = 0; i < mCredits.size(); i++)
                if (mCurrentPage < mCredits.size())
                {
                        CreditsPage page = mCredits.get(mCurrentPage);
                        page.update(deltaTime);
                       
                        if (page.isDone())
                                mCurrentPage++;
                       
                        if (mCurrentPage >= mCredits.size())
                        {
                                GameStateManager.getInstance().switchState("TitleState");
                        }
                }
               
                Finger finger = MultitouchInput.getInstance().getTouchPointInside(0.0f, 0.0f, GameConsts.VIRTUAL_SCREEN_WIDTH, GameConsts.VIRTUAL_SCREEN_HEIGHT);
                if (finger != null)
                {
                        // switch state
                        GameStateManager.getInstance().switchState("TitleState");
                }
        }
       
        @Override
        public void render()
        {
        GL10 gl = GLUtil.getGL();

        gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
        gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);

                gl.glMatrixMode(GL10.GL_PROJECTION);
                gl.glLoadIdentity();
        gl.glOrthof(0, GameConsts.VIRTUAL_SCREEN_WIDTH-1.0f, GameConsts.VIRTUAL_SCREEN_HEIGHT-1.0f, 0, 0, 1);
       
        gl.glMatrixMode(GL10.GL_MODELVIEW);
       
        if (mCurrentPage < mCredits.size())
                {
                        mCredits.get(mCurrentPage).render();
                }
        }
       
        @Override
        public boolean doFadeIn()
        {
                return true;
        }
       
        @Override
        public boolean doFadeOut()
        {
                return true;
        }
       
        public void startCreditsPage()
        {
                mCredits.add(new CreditsPage());
        }
       
        public void addCreditsItem(int id, float size, float initialX, float posY)
        {
                if (mCredits.size() == 0)
                        return;
               
                CreditsPage page = mCredits.get(mCredits.size()-1);
               
                page.addItem(ResourceManager.getResources().getString(id), size, initialX, posY);
        }

}