Subversion Repositories AndroidProjects

Rev

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

package com.gebauz.burutaru.game.entities;

import com.gebauz.bauzoid.game.StateMachine;
import com.gebauz.bauzoid.math.MathUtil;
import com.gebauz.bauzoid.math.Vector4;
import com.gebauz.burutaru.BurutaruCustomServices;
import com.gebauz.burutaru.GameConsts;
import com.gebauz.burutaru.game.GameLogic;

public class IntroOutroTextDisplay extends Entity implements StateMachine.EventListener<IntroOutroTextDisplay.IntroState>
{

        // Constants========================================================================================
       
        public static final float INTRO_FADE_IN = 0.8f;
        public static final float INTRO_WAIT = 1.5f;
        public static final float INTRO_FADE_OUT = 0.8f;
        public static final float INTRO_TOTAL_DURATION = INTRO_FADE_IN + INTRO_WAIT + INTRO_FADE_OUT;
       
        public static final float OUTRO_FADE_IN = 0.8f;
       
        //public static final Vector4 INTRO_TEXT_COLOR = new Vector4(1, 1, 1, 1);
        public static final Vector4 STAGE_TEXT_COLOR = new Vector4(0.75f, 0.95f, 0.55f, 1);
        public static final Vector4 LEVEL_TEXT_COLOR = new Vector4(0.73f, 0.87f, 1, 1);
       
        public static final Vector4 OUTRO_FADE_TEXT_COLOR = new Vector4(0.73f, 0.87f, 1, 1);
        public static final Vector4 OUTRO_FADE_TEXT_COLOR_ALPHA = new Vector4(0.73f, 0.87f, 1, 0.5f);

        // Embedded Types===================================================================================
       
        public enum IntroState
        {
                FADE_IN,
                WAIT,
                FADE_OUT
        }

        // Fields===========================================================================================
       
        private boolean mIsIntroStarted = false;
        private StateMachine<IntroState> mIntroStates = null;
       
        private boolean mIsOutroStarted = false;
        private float mOutroTimer = 0.0f;
        private String mOutroText = "";
        private float mOutroW = 0.0f;
        private float mOutroH = 0.0f;
       
        private String mStageText = "";
        private float mStageTextStartX = 0.0f;
        private float mStageTextTargetX = 0.0f;
        private float mStageTextEndX = 0.0f;
        private float mStageTextPosY = 0.0f;
       
        private String mLevelText = "";
        private float mLevelTextStartX = 0.0f;
        private float mLevelTextTargetX = 0.0f;
        private float mLevelTextEndX = 0.0f;
        private float mLevelTextPosY = 0.0f;

        // Methods==========================================================================================

        public IntroOutroTextDisplay(GameLogic gameLogic)
        {
                super(gameLogic);
               
                mIntroStates = new StateMachine<IntroState>(IntroState.FADE_IN, this);
        }

        @Override
        public void initAsync()
        {

        }

        @Override
        public void init()
        {
        }

        @Override
        public void exit()
        {

        }

        @Override
        public void update(float deltaTime)
        {
                if (mIsIntroStarted)
                {
                        mIntroStates.update(deltaTime);
                }
               
                if (mIsOutroStarted)
                {
                        //BurutaruCustomServices s = (BurutaruCustomServices)getGame().getCustomServices();
                       
                        mOutroTimer += deltaTime;

                        /*float targetX = (GameConsts.VIRTUAL_SCREEN_WIDTH - mOutroW) * 0.5f;

                        float rightX = targetX;
                        float leftX = targetX;
                        float outroY = (GameConsts.VIRTUAL_SCREEN_HEIGHT - mOutroH) * 0.5f;
                       
                        if (mOutroTimer >= OUTRO_FADE_IN)
                        {
                                s.getPrettyFont().drawText(mOutroText, leftX, outroY, OUTRO_FADE_TEXT_COLOR);
                        }
                        else
                        {                      
                                float t = mOutroTimer / OUTRO_FADE_IN;
                               
                                float startLeftX = -2*mOutroW;
                                float startRightX = GameConsts.VIRTUAL_SCREEN_WIDTH + 2*mOutroW;
                               
                                float diffLeftX = targetX - startLeftX;
                                leftX = startLeftX + diffLeftX * MathUtil.easeInOut(t);
                               
                                float diffRightX = targetX - startRightX;
                                rightX = startRightX + diffRightX * MathUtil.easeInOut(t);
                               
                                s.getPrettyFont().drawText(mOutroText, leftX, outroY, OUTRO_FADE_TEXT_COLOR_ALPHA);
                                s.getPrettyFont().drawText(mOutroText, rightX, outroY, OUTRO_FADE_TEXT_COLOR_ALPHA);
                        }*/

                }
        }

        @Override
        public void render()
        {
                BurutaruCustomServices s = (BurutaruCustomServices)getGame().getCustomServices();
               
                if (mIsIntroStarted)
                {
                        float stageX = mStageTextStartX;
                        float levelX = mStageTextStartX;
                       
                        switch (mIntroStates.getState())
                        {
                        case FADE_IN:
                                {
                                        float diffX = mStageTextTargetX - mStageTextStartX;
                                        stageX = mStageTextStartX + diffX * MathUtil.easeInOut(mIntroStates.getStateTime() / INTRO_FADE_IN);
                                       
                                        diffX = mLevelTextTargetX - mLevelTextStartX;
                                        levelX = mLevelTextStartX + diffX * MathUtil.easeInOut(mIntroStates.getStateTime() / INTRO_FADE_IN);                                   
                                }
                                break;
                        case WAIT:
                                {
                                        stageX = mStageTextTargetX;
                                        levelX = mLevelTextTargetX;
                                }
                                break;
                        case FADE_OUT:
                                {
                                        float diffX = mStageTextEndX - mStageTextTargetX;
                                        stageX = mStageTextTargetX + diffX * MathUtil.easeInOut(mIntroStates.getStateTime() / INTRO_FADE_OUT);
                                       
                                        diffX = mLevelTextEndX - mLevelTextTargetX;
                                        levelX = mLevelTextTargetX + diffX * MathUtil.easeInOut(mIntroStates.getStateTime() / INTRO_FADE_OUT);
                                }
                                break;
                        }
                       
                        s.getPrettyFont().drawText(mStageText, stageX, mStageTextPosY, STAGE_TEXT_COLOR);
                        s.getPrettyFont().drawText(mLevelText, levelX, mLevelTextPosY, LEVEL_TEXT_COLOR);
                }
               
               
                if (mIsOutroStarted)
                {
                        float targetX = (GameConsts.VIRTUAL_SCREEN_WIDTH - mOutroW) * 0.5f;

                        float rightX = targetX;
                        float leftX = targetX;
                        float outroY = (GameConsts.VIRTUAL_SCREEN_HEIGHT - mOutroH) * 0.5f;
                       
                        if (mOutroTimer >= OUTRO_FADE_IN)
                        {
                                s.getPrettyFont().drawText(mOutroText, leftX, outroY, OUTRO_FADE_TEXT_COLOR, 2.0f);
                        }
                        else
                        {                      
                                float t = mOutroTimer / OUTRO_FADE_IN;
                               
                                float startLeftX = -2*mOutroW;
                                float startRightX = GameConsts.VIRTUAL_SCREEN_WIDTH + 2*mOutroW;
                               
                                float diffLeftX = targetX - startLeftX;
                                leftX = startLeftX + diffLeftX * MathUtil.easeInOut(t);
                               
                                float diffRightX = targetX - startRightX;
                                rightX = startRightX + diffRightX * MathUtil.easeInOut(t);
                               
                                s.getPrettyFont().drawText(mOutroText, leftX, outroY, OUTRO_FADE_TEXT_COLOR_ALPHA, 2.0f);
                                s.getPrettyFont().drawText(mOutroText, rightX, outroY, OUTRO_FADE_TEXT_COLOR_ALPHA, 2.0f);
                        }
                }
        }
       
        public void startIntroText()
        {
                mIsIntroStarted = true;
                mIntroStates.switchState(IntroState.FADE_IN);
               
                BurutaruCustomServices s = (BurutaruCustomServices)getGame().getCustomServices();
               
                final float scale = 1.0f;
                mStageText = getGameLogic().getLevel().getLevelData().getStage();

                float introW = s.getPrettyFont().getTextWidth(mStageText, scale);
                float introH = s.getPrettyFont().getTextHeight(mStageText, scale);
               
                mStageTextStartX = -2*introW;
                mStageTextTargetX = (GameConsts.VIRTUAL_SCREEN_WIDTH - introW) / 2;
                mStageTextEndX = GameConsts.VIRTUAL_SCREEN_WIDTH + introW;
                mStageTextPosY = (GameConsts.VIRTUAL_SCREEN_HEIGHT - introH) /2 - introH;
               
                mLevelText = getGameLogic().getLevel().getLevelData().getName();

                introW = s.getPrettyFont().getTextWidth(mLevelText, scale);
                introH = s.getPrettyFont().getTextHeight(mLevelText, scale);
               
                mLevelTextStartX = GameConsts.VIRTUAL_SCREEN_WIDTH + introW;
                mLevelTextTargetX = (GameConsts.VIRTUAL_SCREEN_WIDTH - introW) / 2;
                mLevelTextEndX = -2*introW;
                mLevelTextPosY = (GameConsts.VIRTUAL_SCREEN_HEIGHT - introH) /2 + introH;
        }

        @Override
        public boolean onSwitchState(IntroState newState)
        {
                return true;
        }

        @Override
        public void onUpdate(float deltaTime, IntroState currentState, float stateTime)
        {
                switch (currentState)
                {
                case FADE_IN:
                        if (stateTime > INTRO_FADE_IN)
                                mIntroStates.switchState(IntroState.WAIT);
                        break;
                case WAIT:
                        if (stateTime > INTRO_WAIT)
                                mIntroStates.switchState(IntroState.FADE_OUT);
                        break;
                case FADE_OUT:
                        if (stateTime > INTRO_FADE_OUT)
                                mIsIntroStarted = false;
                        break;
                }
        }

        @Override
        public void onEndState(IntroState currentState)
        {
        }
       
        public void startOutro(String outroText)
        {
                mOutroText = outroText;
               
                mIsOutroStarted = true;
                mOutroTimer = 0.0f;
               
                final float scale = 2.0f;
               
                BurutaruCustomServices s = (BurutaruCustomServices)getGame().getCustomServices();
                mOutroW = s.getPrettyFont().getTextWidth(mOutroText, scale);
                mOutroH = s.getPrettyFont().getTextHeight(mOutroText, scale);
        }
       
        // Getters/Setters==================================================================================

}