public void Init(float minX, float minY, float maxX, float maxY)
 {
     Sound.PlayRandomSong(Sound.GetPlaylist(Sound.Playlists.Menu));
     InitControls();
     ScaleControls();
     CareerDb.ClearCareer();
 }
    public void PressEventEncounter(string info = "")
    {
        GD.Print("PressEventEncounter -info " + info);
        pressEvent = CareerDb.LoadPressEvent(info);

        Session.ChangeMenu(Menu.Menus.PressEvent);
    }
    void InitControls()
    {
        background = Menu.BackgroundBox();
        AddChild(background);

        logo = Menu.TexturedButton("res://Textures/logo.jpg");
        AddChild(logo);

        newGameButton = Menu.Button(text: "New", onClick: NewGame);
        AddChild(newGameButton);

        if (CareerDb.SaveExists())
        {
            continueGameButton = Menu.Button(text: "Continue", onClick: ContinueGame);
            AddChild(continueGameButton);
        }

        quitButton = Menu.Button(text: "Quit", onClick: Quit);
        AddChild(quitButton);

        settingsButton = (Godot.Button)Menu.Button(text: "Settings", onClick: Settings);
        AddChild(settingsButton);

        Sound.PlayRandomSong(Sound.GetPlaylist(Sound.Playlists.Menu));
    }
    public static void StartNewCareer(string championName = "")
    {
        Session.session.player = null;
        Career career = Factory(championName);

        Session.session.career = career;
        Session.ChangeMenu(Menu.Menus.Career);
        CareerDb.SaveCareer(career);
    }
    public void ExecuteNode(int id)
    {
        CareerNode node = CareerNode.GetNode(id, careerNodes);

        if (node == null)
        {
            GD.Print("Can't execute null node id " + id);
            return;
        }

        stats.SetBaseStat(StatsManager.Stats.LastNode, stats.GetStat(StatsManager.Stats.CurrentNode));
        stats.SetBaseStat(StatsManager.Stats.CurrentNode, id);
        stats.SetBaseStat(StatsManager.Stats.NodeInProgress, 1);
        CareerDb.SaveCareer(this);

        switch (node.nodeType)
        {
        case CareerNode.NodeTypes.None:
            GD.Print("NullEncounter");
            CompleteEncounter();
            break;

        case CareerNode.NodeTypes.ArenaMatch:
            ArenaEncounter(node.extraInfo);
            break;

        case CareerNode.NodeTypes.BossMatch:
            ArenaEncounter(node.extraInfo);
            break;

        case CareerNode.NodeTypes.FinalBoss:
            ArenaEncounter(node.extraInfo);
            break;

        case CareerNode.NodeTypes.Shop:
            ShopEncounter(node.extraInfo);
            break;

        case CareerNode.NodeTypes.RestSite:
            RestSiteEncounter(node.extraInfo);
            break;

        case CareerNode.NodeTypes.PressEvent:
            PressEventEncounter(node.extraInfo);
            break;
        }
    }
    public void CompleteEncounter()
    {
        if (Session.session.player != null)
        {
            playerData = Session.session.player.GetData();
            if (playerData != null && playerData.stats != null)
            {
                int health = playerData.stats.GetBaseStat(StatsManager.Stats.Health);
                stats.SetBaseStat(StatsManager.Stats.Health, health);
                playerData.stats = stats;
            }
        }

        Session.ClearGame();
        int        id        = stats.GetStat(StatsManager.Stats.CurrentNode);
        CareerNode node      = CareerNode.GetNode(id, careerNodes);
        int        nodeLevel = CareerNode.GetLevel(node, careerNodes);
        int        nextLevel = nodeLevel - 1;

        stats.SetBaseStat(StatsManager.Stats.CurrentLevel, nextLevel);
        stats.SetBaseStat(StatsManager.Stats.LastNode, id);
        stats.SetBaseStat(StatsManager.Stats.CurrentNode, 0);
        stats.SetBaseStat(StatsManager.Stats.NodeInProgress, 0);

        CareerDb.SaveCareer(this);


        Session.session.player = null;
        if (nextLevel == -1)
        {
            CompleteGame();
        }
        else
        {
            Session.ChangeMenu(Menu.Menus.Career);
        }
    }
 public static void Save()
 {
     CareerDb.SaveCareer(Session.session.career);
 }
 public void ContinueGame()
 {
     GD.Print("ContinueGame");
     Session.session.career = CareerDb.LoadCareer();
     Session.ChangeMenu(Menu.Menus.Career);
 }