Subversion Repositories AndroidProjects

Rev

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

package com.gebauz.PonPonChun.game;

import java.util.Vector;

import com.badlogic.gdx.Gdx;
import com.gebauz.Bauzoid.game.Game;
import com.gebauz.Bauzoid.game.GameObject;
import com.gebauz.Bauzoid.game.StateMachine;
import com.gebauz.Bauzoid.menu.EventProcessor;
import com.gebauz.Bauzoid.menu.Menu;
import com.gebauz.Bauzoid.menu.MenuEventListener;
import com.gebauz.Bauzoid.menu.MenuItem;
import com.gebauz.Bauzoid.menu.MenuUtil;
import com.gebauz.Bauzoid.menu.SegmentButton;

public class OptionsScreen extends GameObject implements StateMachine.EventListener<OptionsScreen.State>, MenuEventListener
{


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

        // Embedded Types===================================================================================
       
        enum State
        {
                INACTIVE,
                FADE_IN,
                ACTIVE,
                FADE_OUT
        }

        // Fields===========================================================================================
       
        private StateMachine<State> mStateMachine;
        private Menu mOptionsMenu = null;
       
        private SegmentButton mSoundsButton = null;
        private SegmentButton mMusicButton = null;

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

        public OptionsScreen(Game game)
        {
                super(game);
               
                mStateMachine = new StateMachine<State>(State.INACTIVE, this);
        }
       
        public void init()
        {
                mOptionsMenu = MenuUtil.createMenuFromFile(getGame(), Gdx.files.internal("data/menus/optionsmenu.txt"));
                mOptionsMenu.init();
                mOptionsMenu.setEventListener(this);
               
                mSoundsButton = (SegmentButton)mOptionsMenu.findMenuItem("sounds");
                mMusicButton = (SegmentButton)mOptionsMenu.findMenuItem("music");
               
                mOptionsMenu.setEnabled(false);
                mOptionsMenu.setVisible(false);
               
                updateSoundsMusicButton();
        }
       
        public void exit()
        {
                mSoundsButton = null;
                mMusicButton = null;
               
                if (mOptionsMenu != null)
                {
                        mOptionsMenu.exit();
                        mOptionsMenu = null;
                }
        }
       
        public void update(float deltaTime)
        {              
                mOptionsMenu.update(deltaTime);

                mStateMachine.update(deltaTime);
        }
       
        public void render()
        {
                if (isActive())
                {
                        mOptionsMenu.render();
                }
        }
       
        public void show()
        {
                if (mStateMachine.getState() == State.INACTIVE)
                {
                        mStateMachine.switchState(State.FADE_IN);
                }
        }
       
        public void hide()
        {
                if (mStateMachine.getState() == State.ACTIVE)
                {
                        mStateMachine.switchState(State.FADE_OUT);
                }              
        }
       
        public boolean isActive()
        {
                return (mStateMachine.getState() != State.INACTIVE);
        }

        @Override
        public boolean onSwitchState(State newState)
        {
                switch(newState)
                {
                case FADE_IN:
                        mOptionsMenu.setVisible(true);
                        mOptionsMenu.setEnabled(true);
                        mOptionsMenu.startFadeIn();
                        break;
                case FADE_OUT:
                        mOptionsMenu.startFadeOut();
                        break;
                default:
                        break;
                }
               
                return true;
        }

        @Override
        public void onUpdate(float deltaTime, State currentState, float stateTime)
        {
                switch(currentState)
                {
                case FADE_IN:
                case FADE_OUT:
                        if (mOptionsMenu.isFadingDone())
                                onEndState(currentState);
                        break;
                default:
                        break;
                }
        }

        @Override
        public void onEndState(State currentState)
        {
                switch(currentState)
                {
                case FADE_IN:
                        mStateMachine.switchState(State.ACTIVE);
                        break;
                case FADE_OUT:
                        mStateMachine.switchState(State.INACTIVE);
                        break;
                default:
                        break;
                }
        }

        @Override
        public void onMessage(Menu menu, MenuItem sender, String msgType, Vector<String> paramList)
        {
                for (String param : paramList)
                {
                        if (param.equalsIgnoreCase("back"))
                        {
                                hide();
                        }
                        else if (param.equalsIgnoreCase("sounds"))
                        {
                                getAudio().setSoundEnabled(!getAudio().isSoundEnabled());
                                updateSoundsMusicButton();
                        }
                        else if (param.equalsIgnoreCase("music"))
                        {
                                getAudio().setMusicEnabled(!getAudio().isMusicEnabled());
                                updateSoundsMusicButton();
                        }
                        else
                        {
                                EventProcessor.processEvent(menu, sender, msgType, param);
                        }
                }
               
        }
       
        public void updateSoundsMusicButton()
        {
                if (mSoundsButton != null)
                {
                        if (getAudio().isSoundEnabled())               
                                mSoundsButton.getTextElement().setCaption("SOUNDS: ON");
                        else
                                mSoundsButton.getTextElement().setCaption("SOUNDS: OFF");
                }
               
                if (mMusicButton != null)
                {
                        if (getAudio().isMusicEnabled())
                                mMusicButton.getTextElement().setCaption("MUSIC: ON");
                        else
                                mMusicButton.getTextElement().setCaption("MUSIC: OFF");
                }
        }
       
        // Getters/Setters==================================================================================

}