Package com.aqpproject.worldmodel.game.state

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

/*
* 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.tools.Vector2D;
import com.aqpproject.worldmodel.Control;
import com.aqpproject.worldmodel.GameState;
import com.aqpproject.worldmodel.game.WorldModelGame;
import com.aqpproject.worldmodel.game.entity.WEAlphaTextButton;
import com.aqpproject.worldmodel.game.entity.WEMenu;
import com.aqpproject.worldmodel.game.entity.WorldEntity;
import com.aqpproject.worldmodel.game.entity.WorldTextEntity;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

/**
*
* @author admlatterner
*/
public class HighscoresGameState implements GameState {

    @Override
    public void initialize() {
        if (!m_initialized) {
            m_worldEntities = new HashMap();
            m_miniaturesList = new ArrayList();
            m_displayNameList = new HashMap();
            m_worldTextEntities = new HashMap();
            m_timeList = new HashMap();
            m_stateTime = Singleton.getWorldModel().getTime();
            m_loadingTime = 500;
            m_decX = 1420;
            m_decY = 1750;
            m_isUpdating = false;
            m_currentSelectedMap = 0;
            m_previousSelectedMap = -1;
            m_mapCount = 0;
            m_lastInput = 0;
            m_waitTime = 200;
            m_position = 0;
            try {
                m_resolution = Singleton.getVisualisation().getResolution();
                loadCarList("config/highscores.xml");
                Singleton.getVisualisation().loadSprites("config/mainmenu.xml");
            } catch (Exception ex) {
                Logger.getLogger(WorldModelGame.class.getName()).log(Level.SEVERE, null, ex);
            }
            m_minX = 1420 - m_resolution.x / 2;
            m_minY = 1750 - m_resolution.y / 2;
            m_menuX = 975 - m_minX;
            m_menuWidth = Singleton.getVisualisation().getSpriteSize("bandeauY").x;
            createEntities();
            m_initialized = true;
        }
    }

    private void createEntities() {

        Singleton.getVisualisation().createMap(Singleton.getWorldModel().getMaps().get("MapMenu").getPath());
        Singleton.getVisualisation().setCameraPosition(m_decX, m_decY);
        m_worldEntities.put("bandeauY", new WEMenu("bandeauY", "bandeauY", new Vector2D(975, 1000), 0, 1));
        System.out.println(Singleton.getVisualisation().getSpriteSize("bandeauY").toString());

        float textWidth = calcWidth("High scores", "ar30whi");

        m_title = new WEAlphaTextButton("Title", m_menuX + m_menuWidth / 2 - textWidth / 2, m_resolution.y - 50, "High scores", "ar30whi");
        String selected_car = m_miniaturesList.get(m_currentSelectedMap);
        String display_name = m_displayNameList.get(selected_car);

        m_worldTextEntities.put("Map", new WEAlphaTextButton("Map", m_menuX + 50, m_resolution.y - 150, display_name, "ar30whi"));
        ((WEAlphaTextButton) m_worldTextEntities.get("Map")).m_setMInitialize(true);
        ((WEAlphaTextButton) m_worldTextEntities.get("Map")).setSelect(true);

        m_worldTextEntities.put("Quit", new WEAlphaTextButton("Quit", m_menuX + 50, m_resolution.y - 480, "Quit", "ar30whi"));
        ((WEAlphaTextButton) m_worldTextEntities.get("Quit")).m_setMInitialize(true);

        m_worldEntities.put("arrow_map", new WEMenu("arrow_map", "arrow", new Vector2D(m_minX + m_menuX + 10, m_resolution.y + m_minY - 178), 0, 1));
        m_worldEntities.put("arrow_qui", new WEMenu("arrow_quit", "arrow", new Vector2D(m_minX + m_menuX + 10, m_resolution.y + m_minY - 508), 0, 2));


        for (int i = 1; i <= 5; i++) {
            m_worldTextEntities.put("Player" + i, new WEAlphaTextButton("Player" + i, m_menuX + 50, m_resolution.y - 150 - 50 * i, "", "ar30whi"));
            ((WEAlphaTextButton) m_worldTextEntities.get("Player" + i)).m_setMInitialize(true);
            m_worldTextEntities.put("Time" + i, new WEAlphaTextButton("Time" + i, m_menuX + m_menuWidth - 100, m_resolution.y - 150 - 50 * i, "", "ar30whi"));
            ((WEAlphaTextButton) m_worldTextEntities.get("Time" + i)).m_setMInitialize(true);
        }
        updateRecords();

    }

    @Override
    public void destroy() {
        //Entities
        for (WorldEntity e : m_worldEntities.values()) {
            e.destroy();
        }
        for (WorldTextEntity e : m_worldTextEntities.values()) {
            e.destroy();
        }
        //Title
        m_title.destroy();
    }

    public void restoreTimes() {
        for (int i = 1; i <= 5; i++) {
            m_worldTextEntities.get("Time" + i).updateText("");
            m_worldTextEntities.get("Player" + i).updateText("");
        }
    }

    public void updateRecords() {
        restoreTimes();

        String current_map = m_miniaturesList.get(m_currentSelectedMap);

        //Préparation du tableau
        ArrayList<Integer> rec_list = new ArrayList<>();
        for (Entry e : m_timeList.get(current_map).entrySet()) {
            rec_list.add((int) e.getKey());
        }
        Collections.sort(rec_list);

        int i = 1;
        for (int x = 0; x < rec_list.size(); x++) {
            ArrayList<String> al = m_timeList.get(current_map).get(rec_list.get(x));
            Collections.sort(al);
            for (int y = 0; y < al.size(); y++) {
                String player = al.get(y);
                String time = getTime(rec_list.get(x));
                if (i <= 5) {
                    m_worldTextEntities.get("Time" + i).updateText(time);
                    m_worldTextEntities.get("Player" + i).updateText(player);
                    i++;
                }
            }
        }
    }

    @Override
    public void update() {

        if (m_initialized) {
            m_isUpdating = true;

            ((WEAlphaTextButton) m_worldTextEntities.get("Map")).setSelect(m_position == 0 ? true : false);
            ((WEAlphaTextButton) m_worldTextEntities.get("Quit")).setSelect(m_position == 1 ? true : false);
            Singleton.getVisualisation().updateActorFrame("arrow_map", m_position == 0 ? 1 : 2);
            Singleton.getVisualisation().updateActorFrame("arrow_quit", m_position == 1 ? 1 : 2);


            long time = Singleton.getWorldModel().getTime();
            for (WorldTextEntity e : m_worldTextEntities.values()) {
                e.update(time);
            }
            if (m_currentSelectedMap != m_previousSelectedMap) {
                String selected_car = m_miniaturesList.get(m_currentSelectedMap);
                String display_name = m_displayNameList.get(selected_car);
                // String time = m_timeList.get(selected_car);
                ((WEAlphaTextButton) m_worldTextEntities.get("Map")).updateText(display_name);
                m_previousSelectedMap = m_currentSelectedMap;
            }
            m_isUpdating = false;
        }

    }

    @Override
    public void control(Control control) {
        if (Singleton.getWorldModel().getTime() - m_stateTime > m_loadingTime) {
            if (control == Control.RIGHT && Singleton.getWorldModel().getTime() - m_lastInput > m_waitTime && m_position == 0) {
                m_previousSelectedMap = m_currentSelectedMap;
                m_currentSelectedMap = m_currentSelectedMap + 1;
                if (m_currentSelectedMap >= m_mapCount) {
                    m_currentSelectedMap = 0;
                }
                updateRecords();
                m_lastInput = Singleton.getWorldModel().getTime();
            }
            if (control == Control.LEFT && Singleton.getWorldModel().getTime() - m_lastInput > m_waitTime && m_position == 0) {
                m_previousSelectedMap = m_currentSelectedMap;
                m_currentSelectedMap = m_currentSelectedMap - 1;
                if (m_currentSelectedMap < 0) {
                    m_currentSelectedMap = m_mapCount - 1;
                }
                updateRecords();
                m_lastInput = Singleton.getWorldModel().getTime();
            }
            if (control == Control.UP && Singleton.getWorldModel().getTime() - m_lastInput > m_waitTime) {
                m_position--;
                if (m_position < 0) {
                    m_position = 1;
                }
                m_lastInput = Singleton.getWorldModel().getTime();
            }
            if (control == Control.DOWN && Singleton.getWorldModel().getTime() - m_lastInput > m_waitTime) {
                m_position++;
                if (m_position > 1) {
                    m_position = 0;
                }
                m_lastInput = Singleton.getWorldModel().getTime();
            }
            if (control == Control.ENTER && m_position == 1) {
                Singleton.getWorldModel().setNextState(new MainMenuGameState());
            }
        }
    }

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

    public Vector2D getCameraPosition() {
        return new Vector2D();
    }

    @Override
    public void updateActorTransform() {
        //Vector2D camPos = getCameraPosition();
        //Singleton.getVisualisation().setCameraPosition(camPos.x, camPos.y);
        //Entities
        if (!m_isUpdating) {
            for (WorldEntity e : m_worldEntities.values()) {
                e.updateActorTransform();
            }
        }
    }

    @Override
    public void saveEntitiesState() {
    }

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

    private void loadCarList(String path) throws ParserConfigurationException, SAXException, IOException {

        if (path != null) {
            File file = new File(path);
            DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
            Document doc = builder.parse(file);
            doc.getDocumentElement().normalize();

            Element root = doc.getDocumentElement();
            NodeList children = root.getChildNodes();

            for (int i = 0; i < children.getLength(); i++) {
                Node n = children.item(i);
                if (n.getNodeType() == Node.ELEMENT_NODE) {
                    Element e = (Element) n;
                    m_mapCount++;
                    String name = e.getAttribute("name");
                    m_miniaturesList.add(name);
                    System.out.println(i);
                    m_displayNameList.put(name, e.getAttribute("displayName"));
                    if (!m_timeList.containsKey(name)) {
                        m_timeList.put(name, new HashMap());

                    }
                    NodeList mapChildren = e.getChildNodes();
                    for (int x = 0; x < mapChildren.getLength(); x++) {
                        Node nd = mapChildren.item(x);
                        if (nd.getNodeType() == Node.ELEMENT_NODE) {
                            Element el = (Element) nd;
                            if (!m_timeList.get(name).containsKey(Integer.parseInt(el.getAttribute("time")))) {
                                m_timeList.get(name).put(Integer.parseInt(el.getAttribute("time")), new ArrayList());
                            }
                            m_timeList.get(name).get(Integer.parseInt(el.getAttribute("time"))).add(el.getAttribute("name"));
                        }
                    }
                }
            }

        }
    }

    @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 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 String getTime(int t) {
        int minutes;
        int seconds;
        String mn;
        String sec;
        minutes = t / 60000;
        seconds = (t - minutes * 60000) / 1000;
        if (minutes < 10) {
            mn = "0" + minutes;
        } else {
            mn = String.valueOf(minutes);
        }
        if (seconds < 10) {
            sec = "0" + seconds;
        } else {
            sec = String.valueOf(seconds);
        }
        return mn + ":" + sec;
    }

    @Override
    public HashMap<String, WorldEntity> getWorldEntities() {
        return m_worldEntities;
    }
    protected HashMap<String, WorldEntity> m_worldEntities;
    protected HashMap<String, WorldTextEntity> m_worldTextEntities;
    protected boolean m_initialized;
    protected HashMap<String, String> m_displayNameList;
    protected HashMap<String, HashMap<Integer, ArrayList<String>>> m_timeList;
    protected ArrayList<String> m_miniaturesList;
    protected Vector2D m_resolution;
    protected WEMenu m_miniature;
    protected WEMenu m_time;
    protected WEMenu m_score;
    protected int m_currentSelectedMap;
    protected int m_previousSelectedMap;
    protected int m_decY;
    protected int m_decX;
    protected int m_mapCount;
    protected long m_lastInput;
    protected long m_waitTime;
    protected long m_stateTime;
    protected long m_loadingTime;
    protected WEAlphaTextButton m_title;
    protected float m_minX;
    protected float m_minY;
    protected float m_menuX;
    protected float m_menuWidth;
    protected boolean m_isUpdating;
    protected int m_position;
}
TOP

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

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.