Home Reference Source Repository

app/ui/MenuFlowsController.js

import CharacterBuilder from './CharacterBuilder.js';
import UserProgressService from '../services/UserProgressService.js';
import RandomMapDungeonFactory from '../dungeons/RandomMapDungeonFactory.js';
import TutorialLayoutGenerator from '../dungeons/generators/layouts/TutorialLayoutGenerator.js';
import TutorialScenarioTriggers from './TutorialScenarioTriggers.js';
import GameEvents from '../events/GameEvents.js';

import DebugConsole from '../util/DebugConsole.js';

function getPrng(newSeed) {
    const prng = Random.engines.mt19937();
    if(localStorage.lastSeed && !newSeed) {
        prng.seed(localStorage.lastSeed);
    } else {
        prng.seed(localStorage.lastSeed = +new Date());
    }
    DebugConsole.log(localStorage.lastSeed);
    return prng;
}

function newGame(sharedData) {
    new CharacterBuilder().getCharacter().then(function(character) {
        const dungeon = new RandomMapDungeonFactory().getRandomMap(getPrng(localStorage.repeatPreviousLevel !== 'true'), character);
        sharedData.setDungeon(dungeon);
    });
}

export default {
    start: function(sharedData) {
        if(!UserProgressService.hasCompletedTutorial()) {
            $('<div>').text('It looks like this is your first visit. Would you like to play the tutorial?').dialog({
                buttons: [{
                    text: 'OK',
                    click: function() {
                        $(this).dialog('close');
                        let dungeon = TutorialLayoutGenerator.generate();
                        sharedData.setDungeon(dungeon);
                        dungeon.addObserver(function(event) {
                            if(event instanceof GameEvents.VictoryEvent) {
                                UserProgressService.markTutorialComplete();
                            }
                        });
                        TutorialScenarioTriggers.bind(dungeon);
                    }
                }, {
                    text: 'No thanks',
                    click: function() {
                        $(this).dialog('close');
                        UserProgressService.markTutorialComplete();
                        newGame(sharedData);
                    }
                }]
            });
        } else {
            newGame(sharedData);
        }
    }
};