Subversion Repositories AndroidProjects

Rev

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

package com.gebauz.pingK.common.game;

import com.gebauz.pingK.common.R;
import com.gebauz.pingK.common.framework.MathUtil;
import com.gebauz.pingK.common.framework.ResourceManager;
import com.gebauz.pingK.common.framework.Sprite2D;
import com.gebauz.pingK.common.game.gamestates.GameStateManager;

/** Not a very pretty pause menu implementation. */
public class PauseScreen
{
        private TextButton mRestart;
        private TextButton mHelp;
        private TextButton mMusicOnOff;
        private TextButton mQuit;      
       
        private GameLogic mGameLogic;
        private Sprite2D mBackground = new Sprite2D();
        private Sprite2D mBlack = new Sprite2D();
        private float mPopupTimer = GameConsts.PAUSE_MENU_POPUP_TIME + 1.0f;
       
        private HelpScreen mHelpScreen;
       
        public PauseScreen(GameLogic gameLogic)
        {
                mGameLogic = gameLogic;
               
                mBackground.init(R.drawable.pause_bg, 0, mGameLogic.getVirtualPlayFieldHeight() / 2.0f, GameConsts.VIRTUAL_SCREEN_WIDTH, GameConsts.PAUSE_BG_HEIGHT);
                mBackground.pivotX = 0;
                mBackground.pivotY = GameConsts.PAUSE_BG_HEIGHT / 2.0f;
               
                mBlack.init(R.drawable.black50, 0, 0, GameConsts.VIRTUAL_SCREEN_WIDTH, mGameLogic.getVirtualPlayFieldHeight());
                mBlack.pivotX = 0;
                mBlack.pivotY = 0;
               
                mRestart = new TextButton(GameServices.getFont(), ResourceManager.getInstance().getCurrentContext().getString(R.string.pause_restart));
                mRestart.x = GameConsts.VIRTUAL_SCREEN_WIDTH / 2.0f;
                mRestart.y = GameConsts.PAUSE_MENU_RESTART_POSITION_Y;
                mRestart.scale = GameConsts.PAUSE_MENU_TEXT_SCALE;
                mRestart.setAlignment(TextButton.HorizontalAlignment.CENTER, TextButton.VerticalAlignment.TOP);
                mRestart.setTouchListener(mRestartListener);
               
                mHelp = new TextButton(GameServices.getFont(), ResourceManager.getInstance().getCurrentContext().getString(R.string.title_help));
                mHelp.x = GameConsts.VIRTUAL_SCREEN_WIDTH / 2.0f;
                mHelp.y = GameConsts.PAUSE_MENU_HELP_POSITION_Y;
                mHelp.scale = GameConsts.PAUSE_MENU_TEXT_SCALE;
                mHelp.setAlignment(TextButton.HorizontalAlignment.CENTER, TextButton.VerticalAlignment.TOP);
                mHelp.setTouchListener(mHelpListener);
               
                String musicOnOff = ResourceManager.getResources().getString(R.string.title_music_off);
                if (GameServices.getAudio().isMusicEnabled())
                        musicOnOff = ResourceManager.getResources().getString(R.string.title_music_on);
                mMusicOnOff = new TextButton(GameServices.getFont(), musicOnOff);
                mMusicOnOff.x = GameConsts.VIRTUAL_SCREEN_WIDTH / 2.0f;
                mMusicOnOff.y = GameConsts.PAUSE_MENU_MUSIC_ONOFF_POSITION_Y;
                mMusicOnOff.scale = GameConsts.PAUSE_MENU_TEXT_SCALE;
                mMusicOnOff.setAlignment(TextButton.HorizontalAlignment.CENTER, TextButton.VerticalAlignment.TOP);
                mMusicOnOff.setTouchListener(mMusicOnOffListener);
               
                mQuit = new TextButton(GameServices.getFont(), ResourceManager.getInstance().getCurrentContext().getString(R.string.pause_quit));
                mQuit.x = GameConsts.VIRTUAL_SCREEN_WIDTH / 2.0f;
                mQuit.y = GameConsts.PAUSE_MENU_QUIT_POSITION_Y;
                mQuit.scale = GameConsts.PAUSE_MENU_TEXT_SCALE;
                mQuit.setAlignment(TextButton.HorizontalAlignment.CENTER, TextButton.VerticalAlignment.TOP);
                mQuit.setTouchListener(mQuitListener);
               
                mHelpScreen = new HelpScreen(mGameLogic.getVirtualPlayFieldHeight());
        }
       
        BaseButton.TouchListener mRestartListener = new BaseButton.TouchListener()
        {
                @Override
                public void onTouched(BaseButton sender, int tag)
                {
                        GameStateManager.getInstance().switchState("MainGameState");
                }
        };
       
        BaseButton.TouchListener mHelpListener = new BaseButton.TouchListener()
        {
                @Override
                public void onTouched(BaseButton sender, int tag)
                {
                        mHelpScreen.show();
                }
        };
       
       
        BaseButton.TouchListener mMusicOnOffListener = new BaseButton.TouchListener()
        {
                @Override
                public void onTouched(BaseButton sender, int tag)
                {
                        TextButton tb = (TextButton)sender;
                        if (GameServices.getAudio().isMusicEnabled())
                        {
                                GameServices.getAudio().enableMusic(false);
                                tb.setText(ResourceManager.getResources().getString(R.string.title_music_off));
                        }
                        else
                        {
                                GameServices.getAudio().enableMusic(true);
                                tb.setText(ResourceManager.getResources().getString(R.string.title_music_on));                         
                        }
                }
        };
       
        BaseButton.TouchListener mQuitListener = new BaseButton.TouchListener()
        {
                @Override
                public void onTouched(BaseButton sender, int tag)
                {
                        GameStateManager.getInstance().switchState("TitleState");
                }
        };
       
        public void update(float deltaTime)
        {
                mPopupTimer += deltaTime;
                float bgsize = 0.0f;
                if (mGameLogic.isPaused())
                {
                        bgsize = MathUtil.clamp(mPopupTimer / GameConsts.PAUSE_MENU_POPUP_TIME, 0.0f, 1.0f) * GameConsts.PAUSE_BG_HEIGHT;
                }
                else
                {
                        bgsize = (1.0f-MathUtil.clamp(mPopupTimer / GameConsts.PAUSE_MENU_POPUP_TIME, 0.0f, 1.0f)) * GameConsts.PAUSE_BG_HEIGHT;                       
                }
               
                mBackground.h = bgsize;
                mBackground.pivotY = mBackground.h/2.0f;
               
                mBackground.update(deltaTime);
                mBlack.update(deltaTime);
               
                if (!mGameLogic.isPaused())
                        return;
               
                if (!mHelpScreen.isActive())
                {              
                        mRestart.update(deltaTime);
                        mHelp.update(deltaTime);
                        mMusicOnOff.update(deltaTime);
                        mQuit.update(deltaTime);
                }
               
                mHelpScreen.update(deltaTime);
        }
       
        public void render()
        {              
                if (mGameLogic.isPaused())
                {
                        mBlack.render();
                }
               
                if (!mGameLogic.isPaused() && (mPopupTimer > GameConsts.PAUSE_MENU_POPUP_TIME))
                        return;
               
                mBackground.render();
               
                if (mGameLogic.isPaused() && (mPopupTimer > GameConsts.PAUSE_MENU_POPUP_TIME))                         
                {
                        String text = ResourceManager.getInstance().getCurrentContext().getResources().getString(R.string.pause_text);
                        float w = text.length() * Font.CHARACTER_SIZE * GameConsts.PAUSE_TITLE_TEXT_SCALE;
                        GameServices.getFont().drawText(text, (GameConsts.VIRTUAL_SCREEN_WIDTH - w) / 2.0f, GameConsts.PAUSE_TITLE_TEXT_POSITION_Y, GameConsts.PAUSE_TITLE_TEXT_SCALE);        
               
                       
                        mRestart.render();
                        mHelp.render();
                        mMusicOnOff.render();
                        mQuit.render();
                }
               
                mHelpScreen.render();
        }
       
        public void startShowing()
        {
                if (!mGameLogic.isPaused() && mHelpScreen.isActive())
                {
                        mHelpScreen.hideImmediately();
                }
                mPopupTimer = 0.0f;
        }
}