fr.fg.client.core.Tutorial.java Source code

Java tutorial

Introduction

Here is the source code for fr.fg.client.core.Tutorial.java

Source

/*
Copyright 2010 Jeremie Gottero
    
This file is part of Fallen Galaxy.
    
Fallen Galaxy is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
    
Fallen Galaxy is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
    
You should have received a copy of the GNU Affero General Public License
along with Fallen Galaxy. If not, see <http://www.gnu.org/licenses/>.
*/

package fr.fg.client.core;

import java.util.HashMap;

import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.EventPreview;

import fr.fg.client.ajax.Action;
import fr.fg.client.core.DialogManager.ChoiceListener;
import fr.fg.client.core.settings.Settings;
import fr.fg.client.openjwt.core.Config;
import fr.fg.client.openjwt.core.EventManager;

public class Tutorial implements EventPreview, ChoiceListener {
    // ------------------------------------------------------- CONSTANTES -- //

    public final static int LESSON_NONE = 0, LESSON_BEGIN = 1 << 0, LESSON_SECTOR_MAP = 1 << 1,
            LESSON_GALAXY_MAP = 1 << 2, LESSON_DIPLOMACY = 1 << 3, LESSON_RESEARCH = 1 << 4,
            LESSON_ACHIEVEMENTS = 1 << 5, LESSON_BANK = 1 << 6, LESSON_CIVILIZATION = 1 << 7,

            LESSON_FLEET = 1 << 8, LESSON_TRADECENTER = 1 << 9, LESSON_MAP = 1 << 11, LESSON_SYSTEM = 1 << 12,
            LESSON_EVENT = 1 << 13, LESSON_CONTRACT = 1 << 14, LESSON_CONTACT = 1 << 15, LESSON_TACTIC = 1 << 10,
            LESSON_SYSTEM_BUILD = 1 << 16, LESSON_STRUCTURE = 1 << 17;

    private final static int SUB_LESSON_NONE = 0, SUB_LESSON_BEGIN_START = 1, SUB_LESSON_BEGIN_MOVE_MAP = 2,
            SUB_LESSON_SECTOR_MAP_START = 100, SUB_LESSON_SECTOR_MAP_EXPLORATION = 101,
            SUB_LESSON_GALAXY_MAP_START = 200, SUB_LESSON_DIPLOMACY_START = 400,
            SUB_LESSON_DIPLOMACY_TREATIES = 401, SUB_LESSON_DIPLOMACY_DISABLE = 402,
            SUB_LESSON_RESEARCH_START = 600, SUB_LESSON_RESEARCH_LABORATORIES = 601,
            SUB_LESSON_ACHIEVEMENTS_START = 800, SUB_LESSON_BANK_START = 1000, SUB_LESSON_BANK_ADVICE = 1001,
            SUB_LESSON_CIVILIZATION_START = 1200, SUB_LESSON_CIVILIZATION_TABS = 1201,
            SUB_LESSON_FLEET_START = 1400, SUB_LESSON_FLEET_TIPS = 1401, SUB_LESSON_TRADECENTER_START = 1600,
            SUB_LESSON_EVENT_START = 1800, SUB_LESSON_CONTRACT_START = 2000, SUB_LESSON_CONTRACT_FACTION = 2001,
            SUB_LESSON_CONTRACT_TIPS = 2002, SUB_LESSON_CONTACT_START = 2200, SUB_LESSON_TACTIC_START = 2400,
            SUB_LESSON_TACTIC_TIPS = 2401, SUB_LESSON_SYSTEM_START = 2600, SUB_LESSON_SYSTEM_BUILD_START = 2800,
            SUB_LESSON_MAP_START = 3000, SUB_LESSON_MAP_TYPES = 3001, SUB_LESSON_STRUCTURE_START = 3200,
            SUB_LESSON_STRUCTURE_NEXT = 3201;

    // -------------------------------------------------------- ATTRIBUTS -- //

    private int lesson, subLesson;

    private long lessonsDone;

    // ---------------------------------------------------- CONSTRUCTEURS -- //

    public Tutorial() {
        this.lesson = LESSON_NONE;

        Client.getInstance().getDialogManager().addChoiceListener(this);
    }

    // --------------------------------------------------------- METHODES -- //

    public void addLesson(int lesson) {
        this.lessonsDone = lessonsDone | lesson;

        HashMap<String, String> params = new HashMap<String, String>();
        params.put("section", String.valueOf(lesson));

        new Action("hidetutorial", params);
    }

    public void setLessonDone(long lessonsDone) {
        this.lessonsDone = lessonsDone;
    }

    public void setLesson(int lesson) {
        if ((lessonsDone & lesson) != 0)
            return;

        this.lesson = lesson;

        switch (this.lesson) {
        case LESSON_BEGIN:
            setSubLesson(SUB_LESSON_BEGIN_START);
            break;
        case LESSON_SECTOR_MAP:
            setSubLesson(SUB_LESSON_SECTOR_MAP_START);
            break;
        case LESSON_GALAXY_MAP:
            setSubLesson(SUB_LESSON_GALAXY_MAP_START);
            break;
        case LESSON_DIPLOMACY:
            setSubLesson(SUB_LESSON_DIPLOMACY_START);
            break;
        case LESSON_RESEARCH:
            setSubLesson(SUB_LESSON_RESEARCH_START);
            break;
        case LESSON_ACHIEVEMENTS:
            setSubLesson(SUB_LESSON_ACHIEVEMENTS_START);
            break;
        case LESSON_BANK:
            setSubLesson(SUB_LESSON_BANK_START);
            break;
        case LESSON_CIVILIZATION:
            setSubLesson(SUB_LESSON_CIVILIZATION_START);
            break;
        case LESSON_FLEET:
            setSubLesson(SUB_LESSON_FLEET_START);
            break;
        case LESSON_TRADECENTER:
            setSubLesson(SUB_LESSON_TRADECENTER_START);
            break;
        case LESSON_EVENT:
            setSubLesson(SUB_LESSON_EVENT_START);
            break;
        case LESSON_CONTRACT:
            setSubLesson(SUB_LESSON_CONTRACT_START);
            break;
        case LESSON_CONTACT:
            setSubLesson(SUB_LESSON_CONTACT_START);
            break;
        case LESSON_TACTIC:
            setSubLesson(SUB_LESSON_TACTIC_START);
            break;
        case LESSON_SYSTEM:
            setSubLesson(SUB_LESSON_SYSTEM_START);
            break;
        case LESSON_SYSTEM_BUILD:
            setSubLesson(SUB_LESSON_SYSTEM_BUILD_START);
            break;
        case LESSON_MAP:
            setSubLesson(SUB_LESSON_MAP_START);
            break;
        case LESSON_STRUCTURE:
            setSubLesson(SUB_LESSON_STRUCTURE_START);
            break;
        default:
            setSubLesson(SUB_LESSON_NONE);
            break;
        }
    }

    public boolean onEventPreview(Event event) {
        boolean validEvent = false;

        // Autorise les vnements sur le dialogue, et un certain
        // nombre de types d'vnements
        if (Client.getInstance().getDialogManager().getElement().isOrHasChild(event.getTarget()))
            validEvent = true;

        if (event.getTypeInt() == Event.ONMOUSEOVER || event.getTypeInt() == Event.ONMOUSEOUT
                || event.getTypeInt() == Event.ONMOUSEMOVE || event.getTypeInt() == Event.ONMOUSEUP)
            validEvent = true;

        if (!validEvent) {
            switch (subLesson) {
            case SUB_LESSON_BEGIN_MOVE_MAP:
                // Bloque tous les vnements sauf ceux pour dplacer la vue
                switch (event.getTypeInt()) {
                case Event.ONMOUSEDOWN:
                    if (DOM.isOrHasChild(Client.getInstance().getAreaContainer().getElement(),
                            DOM.eventGetTarget(event))
                            || DOM.isOrHasChild(Client.getInstance().getAreaContainer().getMap().getMiniMaps()
                                    .get(0).getElement(), DOM.eventGetTarget(event))) {
                        validEvent = true;
                    }
                    break;
                case Event.ONCLICK:
                    if (DOM.isOrHasChild(
                            Client.getInstance().getAreaContainer().getMap().getMiniMaps().get(0).getElement(),
                            DOM.eventGetTarget(event))) {
                        validEvent = true;
                    }
                    break;
                case Event.ONKEYUP:
                case Event.ONKEYDOWN:
                    int keyCode = DOM.eventGetKeyCode(event);

                    if (keyCode >= 32 && keyCode <= 40)
                        validEvent = true;
                    break;
                }
                break;
            }
        }

        if (validEvent) {
            for (EventPreview hook : EventManager.getEventHooks())
                hook.onEventPreview(event);
        } else {
            event.cancelBubble(true);
            event.preventDefault();
        }

        return validEvent;
    }

    public void onChoice(DialogManager source, int choice) {
        switch (subLesson) {
        case SUB_LESSON_BEGIN_START:
            setSubLesson(SUB_LESSON_BEGIN_MOVE_MAP);
            break;
        case SUB_LESSON_SECTOR_MAP_START:
            setSubLesson(SUB_LESSON_SECTOR_MAP_EXPLORATION);
            break;
        case SUB_LESSON_DIPLOMACY_START:
            setSubLesson(SUB_LESSON_DIPLOMACY_TREATIES);
            break;
        case SUB_LESSON_DIPLOMACY_TREATIES:
            setSubLesson(SUB_LESSON_DIPLOMACY_DISABLE);
            break;
        case SUB_LESSON_RESEARCH_START:
            setSubLesson(SUB_LESSON_RESEARCH_LABORATORIES);
            break;
        case SUB_LESSON_BANK_START:
            setSubLesson(SUB_LESSON_BANK_ADVICE);
            break;
        case SUB_LESSON_CIVILIZATION_START:
            setSubLesson(SUB_LESSON_CIVILIZATION_TABS);
            break;
        case SUB_LESSON_CONTRACT_START:
            setSubLesson(SUB_LESSON_CONTRACT_FACTION);
            break;
        case SUB_LESSON_CONTRACT_FACTION:
            setSubLesson(SUB_LESSON_CONTRACT_TIPS);
            break;
        case SUB_LESSON_TACTIC_START:
            setSubLesson(SUB_LESSON_TACTIC_TIPS);
            break;
        case SUB_LESSON_FLEET_START:
            setSubLesson(SUB_LESSON_FLEET_TIPS);
            break;
        case SUB_LESSON_MAP_START:
            setSubLesson(SUB_LESSON_MAP_TYPES);
            break;
        case SUB_LESSON_STRUCTURE_START:
            setSubLesson(SUB_LESSON_STRUCTURE_NEXT);
            break;
        default:
            Client.getInstance().getDialogManager().hide();
            break;
        }
    }

    public void setSubLesson(int subLesson) {
        // Efface les paramtres de la leon prcdente
        switch (this.subLesson) {
        case SUB_LESSON_BEGIN_MOVE_MAP:
            DOM.removeEventPreview(this);
            break;
        }

        this.subLesson = subLesson;

        // Paramtres de la nouvelle leon
        switch (this.subLesson) {
        case SUB_LESSON_BEGIN_START:
            DOM.addEventPreview(this);
            Client.getInstance().getDialogManager().show("Jade",
                    "Bienvenue " + Settings.getPlayerLogin() + " ! Je suis une "
                            + "Intelligence Virtuelle, que les gens de votre espce "
                            + "biologique appellent Jade, bien que mon vrai nom soit "
                            + "XV-157RT-8853W40T. J'ai t programme dans le but de vous "
                            + "assister dans vos fonctions.",
                    new String[] { "Je t'coute... Jade.", "Je ne veux pas de tes conseils." },
                    new boolean[] { true, true }, "jade");
            break;
        case SUB_LESSON_BEGIN_MOVE_MAP:
            Client.getInstance().getDialogManager().show("Jade", "Gros con.", new String[] { "Ok.", "Pas cool." },
                    new boolean[] { true, false }, "jade");
            break;
        case SUB_LESSON_SECTOR_MAP_START:
            Client.getInstance().getDialogManager().show("Jade",
                    "Voici la carte de votre <b>quadrant</b>.<br/>"
                            + "Un quadrant une rgion de la galaxie compose de nombreux "
                            + "<b>secteurs</b>. Le secteur clignotant est le secteur "
                            + "dans lequel vous vous trouvez actuellement.<br/>"
                            + "Vous pouvez dplacer la vue en cliquant sur la carte sans "
                            + "relcher le bouton puis en dplaant la souris.",
                    new String[] { "Suite" }, new boolean[] { true }, "jade");
            break;
        case SUB_LESSON_SECTOR_MAP_EXPLORATION:
            // Carte de la galaxie
            Client.getInstance().getDialogManager().show("Jade",
                    "Pour afficher le contenu d'un secteur explor, il suffit " + "de cliquer dessus.<br/>"
                            + "Comme vous pouvez l'apercevoir, il y a des secteurs inconnus "
                            + "proches de votre secteur et qu'il vous faudra explorer. Pour "
                            + "explorer un secteur, dplacez une flotte prs d'un "
                            + "<b>relai hyperspatial</b>, et cliquez sur le bouton "
                            + "<b>saut hyperspatial</b>.<br/><br/>"
                            + "<span class=\"emphasize\">Faites maintenant un clic droit "
                            + "sur la carte pour afficher la galaxie (ou molette arrire).</span>",
                    new String[] {}, new boolean[] {}, "jade");
            addLesson(lesson);
            break;
        case SUB_LESSON_GALAXY_MAP_START:
            Client.getInstance().getDialogManager().show("Jade",
                    "Et voici la carte de la galaxie.<br/>La galaxie est compose "
                            + "de quadrants, eux-mme composs de secteurs. Le quadrant "
                            + "clignotant est le quadrant qui contient le secteur dans "
                            + "lequel vous vous trouvez actuellement.<br/>Pour afficher le "
                            + "contenu d'un quadrant explor, cliquez simplement dessus.",
                    new String[] { "Termin" }, new boolean[] { true }, "jade");
            addLesson(lesson);
            break;
        case SUB_LESSON_DIPLOMACY_START:
            // Diplomatie
            Client.getInstance().getDialogManager().show("Jade",
                    "Cette fentre vous permet de grer vos relations diplomatiques "
                            + "avec les autres joueurs ; les traits en cours y sont lists. "
                            + "Par dfaut, vous avez un statut <b>neutre</b> avec tous les joueurs.<br/>"
                            + "Vous pouvez signer des <b>coalitions</b> avec d'autres joueurs, "
                            + "afin de partager certaines informations comme le contenu de "
                            + "vos flottes ; ou <b>dclarer la guerre</b>, afin d'attaquer un joueur.",
                    new String[] { "Suite" }, new boolean[] { true }, "jade");
            break;
        case SUB_LESSON_DIPLOMACY_TREATIES:
            Client.getInstance().getDialogManager().show("Jade",
                    "Si vous faites partie d'une alliance, votre alliance peut galement "
                            + "dclarer la guerre ou signer des coalitions avec d'autres "
                            + "alliances. Seuls les dirigeants peuvent grer les relations "
                            + "diplomatiques de l'alliance.<br/>"
                            + "Notez que la diplomatie de l'alliance est prioritaire sur "
                            + "vos relations diplomatiques.",
                    new String[] { "Suite" }, new boolean[] { true }, "jade");
            break;
        case SUB_LESSON_DIPLOMACY_DISABLE:
            Client.getInstance().getDialogManager().show("Jade",
                    "Enfin, si vous ne souhaitez pas tre attaqu par d'autres joueurs, "
                            + "la diplomatie peut tre dsactive dans l'onglet options.<br/>"
                            + "Attention, vous ne pourrez plus dclarer de guerre ni avoir "
                            + "de coalitions avec d'autres joueurs tant que la diplomatie sera "
                            + "dsactive. Si vous faites partie une alliance, vous restez en guerre "
                            + "contre les alliances ennemies, mme si vous avez dsactiv la " + "diplomatie.",
                    new String[] { "Termin" }, new boolean[] { true }, "jade");
            addLesson(LESSON_DIPLOMACY);
            break;
        case SUB_LESSON_RESEARCH_START:
            // Recherche
            Client.getInstance().getDialogManager().show("Jade",
                    "Cet cran affiche votre avancement technologique. Il existe "
                            + "de nombreuses technologies, qui vous permettront d'accder "
                            + " de nouveaux btiments, de nouveaux vaisseaux ou des capacits "
                            + "pour vos vaisseaux.<br/>Pour commencer  rechercher une "
                            + "technologie, cliquez dessus. Passez la souris sur une "
                            + "technologie pour voir ce  quoi elle donne accs. Vous "
                            + "pouvez vous dplacer dans l'arbre des technologies en "
                            + "cliquant sans relcher le bouton puis en dplaant la souris.",
                    new String[] { "Suite" }, new boolean[] { true }, "jade");
            break;
        case SUB_LESSON_RESEARCH_LABORATORIES:
            Client.getInstance().getDialogManager().show("Jade",
                    "Afin de diminuer le temps pour dvelopper une technologie, "
                            + "il faut construire des <b>laboratoires</b> et des <b>centres "
                            + "de recherche</b> sur votre systme.<br/>Les laboratoires augmentent "
                            + "la gnration de <img src=\"" + Config.getMediaUrl()
                            + "images/misc/blank.gif\" class=\"resource research\"/>, et "
                            + "les centres de recherches augmentent l'efficacit de vos " + "laboratoires.",
                    new String[] { "Termin" }, new boolean[] { true }, "jade");
            addLesson(LESSON_RESEARCH);
            break;
        case SUB_LESSON_ACHIEVEMENTS_START:
            Client.getInstance().getDialogManager().show("Jade",
                    "Cette fentre liste les trophs que vous avez acquis au cours du jeu. "
                            + "Les trophs n'apportent aucun avantage, ils tmoignent des  prouesses  que vous avez accomplies. "
                            + "Pour chaque trophe, il y a 5 niveaux possibles : Apprenti, Initi, Expert, Matre et Grand matre. "
                            + "Pour voir les trophs acquis par un autre joueur, utilisez la commande /trophes joueur.",
                    new String[] { "Termin" }, new boolean[] { true }, "jade");
            addLesson(LESSON_ACHIEVEMENTS);
            break;
        case SUB_LESSON_BANK_START:
            Client.getInstance().getDialogManager().show("Jade",
                    "Vous voici dans une banque ; vous pouvez y dposer des "
                            + "ressources afin de gagner des intrts. Plus une ressource "
                            + "est prsente dans une banque, plus son taux d'intrt sera faible. "
                            + "Les taux d'intrt sont donns pour une semaine.",
                    new String[] { "Suite" }, new boolean[] { true }, "jade");
            break;
        case SUB_LESSON_BANK_ADVICE:
            Client.getInstance().getDialogManager().show("Jade",
                    "Attention,  chaque fois que vous transfrez des ressources "
                            + "vers la banque ou vers une flotte, vous payez des frais. "
                            + "Les frais sont indpendants de la quantit change, aussi "
                            + "essayez toujours de transfrer un maximum de ressources en "
                            + "une fois.<br/>Pour transfrer des ressources, cliquez "
                            + "sur les ressources que vous souhaitez transfrer, pour "
                            + "cliquez sur le bouton Transfrer pour valider le transfert.",
                    new String[] { "Termin" }, new boolean[] { true }, "jade");
            addLesson(LESSON_BANK);
            break;
        case SUB_LESSON_CIVILIZATION_START:
            Client.getInstance().getDialogManager().show("Jade",
                    "A chaque fois que vous gagnez un niveau, vous obtenez <b>5 "
                            + "points de civilisation</b>, qui vous permettent d'acqurir des "
                            + "avances. Une <b>avance</b> est un bonus dans un domaine "
                            + "(conomie, militaire...) qui profite  l'ensemble de votre "
                            + "empire. Chaque avance cote un nombre variable de points de "
                            + "civilisation. Notez que certaines avances ncessitent "
                            + "d'conomiser des points de colonisation pendant deux " + "niveaux.",
                    new String[] { "Suite" }, new boolean[] { true }, "jade");
            break;
        case SUB_LESSON_CIVILIZATION_TABS:
            Client.getInstance().getDialogManager().show("Jade",
                    "L'onglet <b>Avances acquises</b> liste les avances dont "
                            + "vous disposez.<br/>L'onglet <b>Amlioration</b> permet "
                            + "d'acqurir de nouvelles avances ou amliorer celles dont "
                            + "vous disposez dj.",
                    new String[] { "Termin" }, new boolean[] { true }, "jade");
            addLesson(LESSON_CIVILIZATION);
            break;
        case SUB_LESSON_FLEET_START:
            Client.getInstance().getDialogManager().show("Jade", "Vous venez de selectionner une flotte !<br/>"
                    + "Les flottes peuvent se dplacer, combattre, sauter" + " dans d'autres zones etc.<br/>"
                    + "Lorsque vous selectionnez une flotte, vous pouvez modifier"
                    + " sa tactique de combat. Vous aurez des tactiques plus labores"
                    + " quand vous aurez fait les recherches pour de nouveaux vaisseaux"
                    + " et de nouvelles capacits !", new String[] { "Suite" }, new boolean[] { true }, "jade");
            break;
        case SUB_LESSON_FLEET_TIPS:
            Client.getInstance().getDialogManager().show("Jade",
                    "Vos flottes peuvent tre constitues de cargos, permettant "
                            + "de transporter des ressources et de commercer.<br/>"
                            + "Attention ! Vous ne pouvez mettre qu'un certain nombre de vaisseaux dans une"
                            + " flotte, selon votre niveau.<br/>"
                            + "Le niveau d'une flotte lui permet d'avoir des comptences "
                            + "qui permettent de poser des balises, des mines, de miner des "
                            + "astroides ... ainsi que des comptences ultimes !<br/>"
                            + "La comptence de flotte \"Ingnieur\" permet de crer des "
                            + "structures, trs utiles dans une alliance !",
                    new String[] { "Termin" }, new boolean[] { true }, "jade");
            addLesson(LESSON_FLEET);
            break;

        case SUB_LESSON_TRADECENTER_START:
            Client.getInstance().getDialogManager().show("Jade",
                    "Vous voici dans un centre de commerce ; vous pouvez y changer "
                            + "des ressources contre des crdits, ou l'inverse. <br/>"
                            + "Attention, chaque transaction est taxe, et plus elle est "
                            + "importante, plus la taxe l'est aussi !",
                    new String[] { "Termin" }, new boolean[] { true }, "jade");
            addLesson(LESSON_TRADECENTER);
            break;
        case SUB_LESSON_EVENT_START:
            Client.getInstance().getDialogManager().show("Jade",
                    "Voici la fentre d'venements et d'alertes.<br/>"
                            + "Celle ci vous permettra de savoir ce qui c'est pass durant "
                            + "votre absence, et vous donnera des indications sur vos flottes, "
                            + "systmes etc.<br/>" + "Les venements vous indiqueront les derniers combats, les "
                            + "changements de diplomatie. Les alertes vous indiqueront si "
                            + "vos flottes n'ont pas de tactiques de combats ou si vos dpts " + "sont pleins !",
                    new String[] { "Termin" }, new boolean[] { true }, "jade");
            addLesson(LESSON_EVENT);
            break;
        case SUB_LESSON_CONTRACT_START:
            Client.getInstance().getDialogManager().show("Jade",
                    "Ceci est la fentre permettant de grer vos missions !<br/>"
                            + "Chaque heure, vous recevrez 1 proposition de mission, dans la "
                            + "limite de 2 missions maximum.<br/>"
                            + "Les missions permettent de gagner des rcompenses"
                            + " comme de l'exprience pour vous ou pour vos flottes.<br/>",
                    new String[] { "Suite" }, new boolean[] { true }, "jade");
            break;
        case SUB_LESSON_CONTRACT_FACTION:
            Client.getInstance().getDialogManager().show("Jade",
                    "Les missions peuvent tre proposes par diffrentes " + "factions.<br/>"
                            + " Chacune de vos missions accomplies amliore vos relation "
                            + "avec la faction qui vous a propos la mission, mais peut "
                            + "faire diminuer vos relations avec d'autres factions.<br/>"
                            + "Vous gagnerez des bonus suivant le niveau de relation que vous "
                            + "avez avec une faction !",
                    new String[] { "Suite" }, new boolean[] { true }, "jade");
            break;
        case SUB_LESSON_CONTRACT_TIPS:
            Client.getInstance().getDialogManager().show("Jade",
                    "Il y a diffrent type de missions : celles o vous devrez "
                            + "combattre l'intelligence artificielle, d'autres o vous devrez "
                            + "faire des actions sans combats, ou encore d'autres contre " + "des joueurs !<br/>"
                            + "Vos relations tendent  devenir neutre chaque semaine.<br/> "
                            + "Pensez donc  faire rgulirement des missions pour votre faction prfre !",
                    new String[] { "Termin" }, new boolean[] { true }, "jade");
            addLesson(LESSON_CONTRACT);
            break;
        case SUB_LESSON_CONTACT_START:
            Client.getInstance().getDialogManager().show("Jade",
                    "Vous pouvez ici ajouter vos amis si vous avez un compte premium "
                            + "ou alors les accepter uniquement. Cela permet de savoir quand "
                            + "ceux-ci se connectent.",
                    new String[] { "Termin" }, new boolean[] { true }, "jade");
            addLesson(LESSON_CONTACT);
            break;
        case SUB_LESSON_TACTIC_START:
            Client.getInstance().getDialogManager().show("Jade",
                    "Vous voici dans la fentre permettant de grer la tactique " + "d'un flotte !<br/>"
                            + "La tactique d'une flotte permet de choisir "
                            + "quels sont les vaisseaux que vous voulez placer en "
                            + "premire/arrire ligne, quels sont les vaisseaux qui doivent tirer "
                            + "durant l'action, ou encore lequels doivent utiliser leurs capacits !<br/>"
                            + "Vous dbloquerez de nouveaux vaisseaux et de nouvelles capacits "
                            + "en faisant des recherches !",
                    new String[] { "Suite" }, new boolean[] { true }, "jade");
            break;
        case SUB_LESSON_TACTIC_TIPS:
            Client.getInstance().getDialogManager().show("Jade",
                    "Voici quelques indications supplmentaires :<br/>"
                            + "-Les capacits des vaisseaux ont un temps de rechargement de plusieurs "
                            + "tours. Il faut donc bien prparer ses tactiques avant un combat.<br/>"
                            + "-Les cargos ne peuvent pas tre plac en premire ligne !<br/>"
                            + "-Vous pouvez modifier vos tactiques  n'importe quel moment, mme"
                            + " si vos flottes sont immobilises.<br/>",
                    new String[] { "Termin" }, new boolean[] { true }, "jade");
            addLesson(LESSON_TACTIC);
            break;

        case SUB_LESSON_SYSTEM_START:
            Client.getInstance().getDialogManager().show("Jade", "Vous venez de selectionner un systme !<br/>"
                    + "Vous pouvez construire diffrents types de btiments "
                    + "sur celui ci, comme les exploitations qui produisent des " + "ressources.<br/>"
                    + "Les systmes permettent aussi de construire des vaisseaux.<br/>"
                    + "Essayons de construire un btiment. Pour cela, veuillez cliquer sur "
                    + "le deuxime bouton rouge, encadr par des rayures jaune/noir" + " en bas de votre cran.",
                    new String[] {}, new boolean[] { true }, "jade");
            addLesson(LESSON_SYSTEM);
            break;
        case SUB_LESSON_SYSTEM_BUILD_START:
            Client.getInstance().getDialogManager().show("Jade",
                    "Voici la fentre de cration de btiment. Vous "
                            + "pouvez crer de nouveaux batiments et en amliorer "
                            + "d'autres si vous avez fait les recherches ncessaires.<br/>"
                            + "Selectionnez le btiment que vous souhaitez construire, "
                            + "puis cliquez sur le bouton \"OK\". ",
                    new String[] { "Termin" }, new boolean[] { true }, "jade");
            addLesson(LESSON_SYSTEM_BUILD);
            break;
        case SUB_LESSON_MAP_START:
            Client.getInstance().getDialogManager().show("Jade",
                    "Vous venez de dplacer une flotte dans un secteur. "
                            + "Les secteurs contiennent des systmes d'autres joueurs, parfois un "
                            + "centre de commerce ou une banque, des astrodes etc.<br/>"
                            + "Mais ils sont aussi peupl de pirates qui n'hsites pas  attaquer "
                            + "les flottes  leur porte !<br/>"
                            + "Il y a aussi au moins une porte hyperspatiale dans chaque secteur, "
                            + "qui permet de se dplacer dans d'autres secteurs ou quadrants "
                            + "de la galaxie.<br/>"
                            + "Les lments intressants du secteur sont reprsents sur la "
                            + "minimap en bas  gauche de votre cran.",
                    new String[] { "Suite" }, new boolean[] { true }, "jade");
            break;
        case SUB_LESSON_MAP_TYPES:
            Client.getInstance().getDialogManager().show("Jade",
                    "Vous explorerez diffrents types de secteurs qui peuvent " + "tre :<br/>"
                            + "-Des secteurs de dpart, comme celui dans lequel vous tes. "
                            + "Ces secteurs ne sont peupls que de peu de pirates, et sont "
                            + "donc peu dangereux, et moins intressants que d'autres " + "types de secteurs.<br/>"
                            + "-Des secteurs banquaires, sans pirate, vous permettant "
                            + "d'entreposer vos ressources pour y gagner des interts.<br/>"
                            + "-Des secteurs pirates, dangereux car peupls de pirates plus "
                            + "agressifs, plus forts et plus nombreux. Ces secteurs permettent "
                            + "donc de monter de niveaux, et des astrodes interessants y " + "sont prsents !",
                    new String[] { "Termin" }, new boolean[] { true }, "jade");
            addLesson(LESSON_MAP);
            break;
        case SUB_LESSON_STRUCTURE_START:
            Client.getInstance().getDialogManager().show("Jade",
                    "Les flottes disposant de la comptence ingnieur peuvent "
                            + "construire des structures.<br/>"
                            + "Tout d'abord, pour construire une structure, vous "
                            + "(ou votre alliance) doit disposer d'une source d'nergie "
                            + "pour alimenter vos structures.<br/>" + "Les gnrateurs seront vos "
                            + "premires sources d'nergie, et c'est une structure, "
                            + "constructible uniquement sur les puits gravitationnels "
                            + "prsents dans chaque secteur.<br/>"
                            + "Le silo est la structure permettant de stocker vos "
                            + "ressources pour vos structures.",
                    new String[] { "Suite" }, new boolean[] { true }, "jade");
            break;
        case SUB_LESSON_STRUCTURE_NEXT:
            Client.getInstance().getDialogManager().show("Jade",
                    "Vous pouvez construire des structures de production ou "
                            + "de protection, des structures permettant d'acclrer les "
                            + "sauts hyperspatiaux etc.<br/>"
                            + "Vos structures sont bien sr amliorables, mais peuvent "
                            + "tre attaques par d'autres flottes! Vous devrez souvent " + "les dfendre.",
                    new String[] { "Termin" }, new boolean[] { true }, "jade");
            addLesson(LESSON_STRUCTURE);
            break;

        }
    }

    public void resetTutorial() {
        this.lessonsDone = LESSON_NONE;
    }

    // ------------------------------------------------- METHODES PRIVEES -- //
}