Package com.aqpproject.worldmodel.game.state

Source Code of com.aqpproject.worldmodel.game.state.OptionsGameState

/*
* AQP Project
* http://http://code.google.com/p/aqp-project/
* Alexandre Gomez - Clément Troesch - Fabrice Latterner
*/
package com.aqpproject.worldmodel.game.state;

import com.aqpproject.game.Singleton;
import com.aqpproject.sound.SoundController;
import com.aqpproject.tools.Vector2D;
import com.aqpproject.worldmodel.Control;
import com.aqpproject.worldmodel.GameState;
import com.aqpproject.worldmodel.game.WorldModelGame;
import com.aqpproject.worldmodel.game.entity.*;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import java.io.IOException;
import java.util.HashMap;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.text.TextAction;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;

/**
*
* @author Alexandre
*/
public class OptionsGameState implements GameState {

    /**
     * Constructor
     */
    public OptionsGameState() {
        m_initialized = false;
    }

    /**
     * @see WorldModel#initialize()
     */
    @Override
    public void initialize() {

        if (!m_initialized) {   //If not initialized

            System.out.append("test\ntest");
            m_worldEntities = new HashMap<>();
            m_worldTextEntities = new HashMap<>();
            m_barsList = new HashMap<>();
            try {
                sc = Singleton.getAudioController();
                Singleton.getVisualisation().loadSprites("config/mainmenu.xml");
            } catch (ParserConfigurationException | SAXException | IOException ex) {
                Logger.getLogger(MainMenuGameState.class.getName()).log(Level.SEVERE, null, ex);
            }

            m_position = 0;
            m_lastInput = 0;
            m_waitTime = 200;
            m_soundDelay = 10;
            m_resolution = Singleton.getVisualisation().getResolution();
            m_decX = 1420;
            m_decY = 1750;
            m_minX = 1420 - m_resolution.x / 2;
            m_minY = 1750 - m_resolution.y / 2;
            m_menuX = 975 - m_minX;
            m_stateTime = Singleton.getWorldModel().getTime();
            m_loadingTime = 500;
            m_menuWidth = Singleton.getVisualisation().getSpriteSize("bandeauY").x;
            m_musicVolumeOrig = Singleton.getOptionsController().getMusicVolume();
            m_fxVolumeOrig = Singleton.getOptionsController().getFXVolume();
            m_musicVolume = (int) (m_musicVolumeOrig * 100);
            m_fxVolume = (int) (m_fxVolumeOrig * 100);

            createEntities();

            //Initialisation
            m_initialized = true;
        }

    }

    /**
     * @see WorldModel#destroy()
     */
    @Override
    public void destroy() {

        //Entities
        for (WorldEntity e : m_worldEntities.values()) {
            e.destroy();
        }

        for (WorldTextEntity e : m_worldTextEntities.values()) {
            e.destroy();
        }

        for (WEMenu e : m_barsList.values()) {
            e.destroy();
        }

    }

    /**
     * Create the entities
     */
    private void createEntities() {

        Singleton.getVisualisation().createMap(Singleton.getWorldModel().getMaps().get("MapMenu").getPath());
        Singleton.getVisualisation().setCameraPosition(1420, 1750);

        m_worldEntities.put("bandeauY", new WEMenu("bandeauY", "bandeauY", new Vector2D(975, 1000), 0, 1));


        float textWidth = calcWidth("Options", "ar30whi");
        m_worldTextEntities.put("Title", new WEAlphaTextButton("Title", m_menuX + m_menuWidth / 2 - textWidth / 2, m_resolution.y - 50, "Options", "ar30whi"));
        m_worldTextEntities.put("MusicVolume", new WEAlphaTextButton("MusicVolume", m_menuX + 50, m_resolution.y - 150, "Music Volume", "ar30whi"));
        m_worldTextEntities.put("FXVolume", new WEAlphaTextButton("FXVolume", m_menuX + 50, m_resolution.y - 250, "FX Volume", "ar30whi"));
        m_worldTextEntities.put("Accept", new WEAlphaTextButton("Accept", m_menuX + 50, m_resolution.y - 350, "Accept", "ar30whi"));
        m_worldTextEntities.put("Cancel", new WEAlphaTextButton("Cancel", m_menuX + 50, m_resolution.y - 400, "Cancel", "ar30whi"));

        //Texts initialization
        ((WEAlphaTextButton) m_worldTextEntities.get("MusicVolume")).m_setMInitialize(true);
        ((WEAlphaTextButton) m_worldTextEntities.get("FXVolume")).m_setMInitialize(true);
        ((WEAlphaTextButton) m_worldTextEntities.get("Accept")).m_setMInitialize(true);
        ((WEAlphaTextButton) m_worldTextEntities.get("Cancel")).m_setMInitialize(true);

        ((WEAlphaTextButton) m_worldTextEntities.get("MusicVolume")).setSelect(true);

        //Arrows
        m_worldEntities.put("arrow_music_volume", new WEMenu("arrow_music_volume", "arrow", new Vector2D(m_minX + m_menuX + 10, m_resolution.y + m_minY - 178), 0, 1));
        m_worldEntities.put("arrow_fx_volume", new WEMenu("arrow_fx_volume", "arrow", new Vector2D(m_minX + m_menuX + 10, m_resolution.y + m_minY - 278), 0, 2));
        m_worldEntities.put("arrow_accept", new WEMenu("arrow_accept", "arrow", new Vector2D(m_minX + m_menuX + 10, m_resolution.y + m_minY - 378), 0, 2));
        m_worldEntities.put("arrow_cancel", new WEMenu("arrow_cancel", "arrow", new Vector2D(m_minX + m_menuX + 10, m_resolution.y + m_minY - 428), 0, 2));

        //Speakers
        m_worldEntities.put("speaker_music", new WEMenu("speaker_music", "speaker", new Vector2D(m_minX + m_menuX + 50, m_resolution.y + m_minY - 228), 0, 1));
        m_worldEntities.put("speaker_fx", new WEMenu("speaker_fx", "speaker", new Vector2D(m_minX + m_menuX + 50, m_resolution.y + m_minY - 328), 0, 1));

        //Barre de volume musique
        int i = 1;
        m_barsList.put("music_bar" + i, new WEMenu("music_bar" + i, "bar_left", new Vector2D(m_minX + m_menuX + 100, m_resolution.y + m_minY - 228), 0, 1));
        for (i = 2; i < 100; i++) {
            m_barsList.put("music_bar" + i, new WEMenu("music_bar" + i, "bar", new Vector2D(m_minX + m_menuX + 100 + i * 2, m_resolution.y + m_minY - 228), 0, 1));
        }
        m_barsList.put("music_bar" + i, new WEMenu("music_bar" + i, "bar_right", new Vector2D(m_minX + m_menuX + 300, m_resolution.y + m_minY - 228), 0, 1));

        //Barre de volume fx
        i = 1;
        m_barsList.put("fx_bar" + i, new WEMenu("fx_bar" + i, "bar_left", new Vector2D(m_minX + m_menuX + 100, m_resolution.y + m_minY - 328), 0, 1));
        for (i = 2; i < 100; i++) {
            m_barsList.put("fx_bar" + i, new WEMenu("fx_bar" + i, "bar", new Vector2D(m_minX + m_menuX + 100 + i * 2, m_resolution.y + m_minY - 328), 0, 1));
        }
        m_barsList.put("fx_bar" + i, new WEMenu("fx_bar" + i, "bar_right", new Vector2D(m_minX + m_menuX + 300, m_resolution.y + m_minY - 328), 0, 1));

        updateBars();
    }

    /**
     * @see WorldModel#update()
     */
    @Override
    public void update() {
        if (m_initialized) {

            ((WEAlphaTextButton) m_worldTextEntities.get("MusicVolume")).setSelect(m_position == 0 ? true : false);
            ((WEAlphaTextButton) m_worldTextEntities.get("FXVolume")).setSelect(m_position == 1 ? true : false);
            ((WEAlphaTextButton) m_worldTextEntities.get("Accept")).setSelect(m_position == 2 ? true : false);
            ((WEAlphaTextButton) m_worldTextEntities.get("Cancel")).setSelect(m_position == 3 ? true : false);

            Singleton.getVisualisation().updateActorFrame("arrow_music_volume", m_position == 0 ? 1 : 2);
            Singleton.getVisualisation().updateActorFrame("arrow_fx_volume", m_position == 1 ? 1 : 2);
            Singleton.getVisualisation().updateActorFrame("arrow_accept", m_position == 2 ? 1 : 2);
            Singleton.getVisualisation().updateActorFrame("arrow_cancel", m_position == 3 ? 1 : 2);

            Singleton.getVisualisation().updateActorFrame("speaker_music", m_musicVolume == 0 ? 2 : 1);
            Singleton.getVisualisation().updateActorFrame("speaker_fx", m_fxVolume == 0 ? 2 : 1);

            long time = Singleton.getWorldModel().getTime();
            for (WorldTextEntity e : m_worldTextEntities.values()) {
                e.update(time);
            }

        }
    }

    /**
     * @see WorldModel#controlEntity(java.lang.String,
     * com.aqpproject.worldmodel.Control)
     */
    @Override
    public void control(Control control) {
        if (Singleton.getWorldModel().getTime() - m_stateTime > m_loadingTime) {
            if (control == Control.SPACE) {
                Singleton.getWorldModel().setNextState(new RaceGameState());
            }
            if (control == Control.UP && m_lastInput + m_waitTime < Singleton.getWorldModel().getTime()) {
                m_position--;
                sc.playSound("ding", false);
                if (m_position < 0) {
                    m_position = 3;
                }
                m_lastInput = Singleton.getWorldModel().getTime();

            }
            if (control == Control.DOWN && m_lastInput + m_waitTime < Singleton.getWorldModel().getTime()) {
                m_position++;
                sc.playSound("ding", false);
                if (m_position > 3) {
                    m_position = 0;
                }
                m_lastInput = Singleton.getWorldModel().getTime();

            }
            if (control == Control.LEFT && m_lastInput + m_soundDelay < Singleton.getWorldModel().getTime()) {
                switch (m_position) {
                    case 0:
                        m_musicVolume--;
                        if (m_musicVolume < 0) {
                            m_musicVolume = 0;
                        }
                        Singleton.getOptionsController().setMusicVolume(((float) m_musicVolume) / 100);
                        break;
                    case 1:
                        m_fxVolume--;
                        if (m_fxVolume < 0) {
                            m_fxVolume = 0;
                        }
                        Singleton.getOptionsController().setFXVolume(((float) m_fxVolume) / 100);
                        break;
                }
                updateBars();
                m_lastInput = Singleton.getWorldModel().getTime();
            }
            if (control == Control.RIGHT && m_lastInput + m_soundDelay < Singleton.getWorldModel().getTime()) {
                switch (m_position) {
                    case 0:
                        m_musicVolume++;
                        if (m_musicVolume > 100) {
                            m_musicVolume = 100;
                        }
                        Singleton.getOptionsController().setMusicVolume(((float) m_musicVolume) / 100);

                        break;
                    case 1:
                        m_fxVolume++;
                        if (m_fxVolume > 100) {
                            m_fxVolume = 100;
                        }
                        Singleton.getOptionsController().setFXVolume(((float) m_fxVolume) / 100);
                        break;
                }
                updateBars();
                m_lastInput = Singleton.getWorldModel().getTime();
            }
            if (control == Control.ESCAPE) {
                Singleton.getOptionsController().setFXVolume(m_fxVolumeOrig);
                Singleton.getOptionsController().setMusicVolume(m_musicVolumeOrig);
                Singleton.getWorldModel().setNextState(new MainMenuGameState());
            }
            if (control == Control.ENTER) {
                switch (m_position) {
                    case 2:
                        Singleton.getWorldModel().setNextState(new MainMenuGameState());
                        break;
                    case 3:
                        Singleton.getOptionsController().setFXVolume(m_fxVolumeOrig);
                        Singleton.getOptionsController().setMusicVolume(m_musicVolumeOrig);
                        Singleton.getWorldModel().setNextState(new MainMenuGameState());
                        break;
                }
            }
        }
    }

    @Override
    public void control(Control control, String entity) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    /**
     * @see WorldModel#updateActorTransform()
     */
    @Override
    public void updateActorTransform() {

        //Entities
        for (WorldEntity e : m_worldEntities.values()) {
            e.updateActorTransform();
        }
    }

    /**
     * @see WorldModel#saveEntitiesState()
     */
    @Override
    public void saveEntitiesState() {
        /*
         * for (WorldEntity e : m_worldEntities.values()) { e.saveTransform(); }
         *
         */
    }

    @Override
    public boolean isInitialized() {
        return m_initialized;
    }

    @Override
    public void startContact(String firstEntity, String secondEntity, Vector2D normal, Vector2D point) {
    }

    @Override
    public void stopContact(String firstEntity, String secondEntity, Vector2D normal, Vector2D point) {
    }

    public void addTextEntity(String name, WorldTextEntity entity) {
        m_worldTextEntities.put(name, entity);
    }

    public float calcWidth(String s, String font) {
        BitmapFont myFont = new BitmapFont(Gdx.files.internal("data/font/" + font + ".fnt"), Gdx.files.internal("data/font/" + font + ".png"), false); //TODO: change the font/size
        float res = myFont.getBounds(s).width;
        return res;
    }

    public void updateBars() {
        for (int i = 1; i <= 100; i++) {
            System.out.println(i);
            Singleton.getVisualisation().updateActorFrame("music_bar" + i, i < m_musicVolume + 1 ? 2 : 1);
            Singleton.getVisualisation().updateActorFrame("fx_bar" + i, i < m_fxVolume + 1 ? 2 : 1);
        }
    }

    @Override
    public HashMap<String, WorldEntity> getWorldEntities() {
        return m_worldEntities;
    }
    /////////////////////////////////////////
    // Attributes
    /////////////////////////////////////////
    protected HashMap<String, WorldEntity> m_worldEntities;
    protected HashMap<String, WorldTextEntity> m_worldTextEntities;
    protected HashMap<String, WEMenu> m_barsList;
    protected boolean m_initialized;
    protected int m_position;
    protected long m_lastInput;
    protected long m_waitTime;
    protected long m_stateTime;
    protected long m_loadingTime;
    protected SoundController sc;
    protected float m_minX;
    protected float m_minY;
    protected float m_menuX;
    protected float m_menuWidth;
    protected int m_decX;
    protected int m_decY;
    protected boolean m_isUpdating;
    protected Vector2D m_resolution;
    protected int m_fxVolume;
    protected int m_musicVolume;
    protected float m_soundDelay;
    protected float m_fxVolumeOrig;
    protected float m_musicVolumeOrig;
}
TOP

Related Classes of com.aqpproject.worldmodel.game.state.OptionsGameState

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.