public static CareerNode RandomCareerNode(int id, int child1, int child2, int child3)
    {
        string[] args = new string[6];
        args[0] = "" + id;
        args[2] = "" + child1;
        args[3] = "" + child2;
        args[4] = "" + child3;
        args[5] = "";

        int nodeType = 1;

        if (Util.RandInt(0, 100) > 80)
        {
            nodeType = 5; // Weighted distribution of rest sites
        }

        args[1] = "" + nodeType;

        if (nodeType == 1)
        {
            args[5] = RandomArenaMap();
        }

        return(CareerNode.FromRow(args));
    }
Beispiel #2
0
    public static System.Collections.Generic.Dictionary <int, CareerNode[]> GetLevels(List <CareerNode> nodes)
    {
        System.Collections.Generic.Dictionary <int, CareerNode[]> ret;
        ret = new System.Collections.Generic.Dictionary <int, CareerNode[]>();


        CareerNode root = Root(nodes);

        CareerNode[] rootRow = new CareerNode[1];
        rootRow[0] = root;
        ret.Add(0, rootRow);

        if (root == null)
        {
            GD.Print("CareerNode.GetLevels Root node null");
            return(null);
        }
        else if (root.IsLeaf())
        {
            return(ret);
        }


        int level = 1;
        List <CareerNode> nextLevel = GetChildren(root, nodes);

        while (nextLevel.Count > 0)
        {
            ret.Add(level, nextLevel.ToArray());
            level++;
            nextLevel = GetChildren(nextLevel, nodes);
        }

        return(ret);
    }
Beispiel #3
0
    /*
     *  As a player traverses their career, they will be presented with
     *  multiple choices per level according to previous choices.
     *
     */
    public static bool NodeIsActive(CareerNode node, List <CareerNode> nodes, int currentLevel, int lastNode)
    {
        if (node == null || nodes == null)
        {
            GD.Print("NodeIsActive: Invalid args " + node + "," + nodes);
            return(false);
        }

        int nodeLevel = GetLevel(node, nodes);

        if (node.IsLeaf() && currentLevel == -1)
        {
            return(true);
        }
        if (CareerNode.IsRoot(node, nodes) && currentLevel == 0)
        {
            GD.Print("Node " + node.nodeId + " is root and currentLevel is 0");
            return(true);
        }

        if (node.HasChild(lastNode))
        {
            return(true);
        }

        return(false);
    }
Beispiel #4
0
 public static bool IsRoot(CareerNode node, List <CareerNode> nodes)
 {
     if (ParentCount(node, nodes) == 0)
     {
         return(true);
     }
     return(false);
 }
Beispiel #5
0
    public static Career LoadCareer()
    {
        GD.Print("CareerDb.LoadCareer");
        List <CareerNode> nodes = CareerNode.FromRows(CSV.ReadRows(CareerFile));
        StatsManager      stats = StatsManager.FromRows(CSV.ReadRows(StatsFile));

        return(Career.Factory(nodes, stats));
    }
    public static Career Factory(string championName)
    {
        Career ret = new Career(championName);

        ret.careerNodes = GenerateCareerTree(championName);
        ret.root        = CareerNode.Root(ret.careerNodes);
        ret.leaves      = CareerNode.Leaves(ret.careerNodes);
        return(ret);
    }
    void ScaleNodeButtons()
    {
        System.Collections.Generic.Dictionary <int, CareerNode[]> levels = CareerNode.GetLevels(careerNodes);
        List <CareerNode> nodes = Session.session.career.careerNodes;

        foreach (int key in levels.Keys)
        {
            ScaleLevel(key, levels[key], nodes);
        }
    }
    public static Career Factory(List <CareerNode> careerNodes, StatsManager stats)
    {
        Career ret = new Career();

        ret.careerNodes = careerNodes;
        ret.root        = CareerNode.Root(ret.careerNodes);
        ret.leaves      = CareerNode.Leaves(ret.careerNodes);
        ret.stats       = stats;
        ret.playerData  = new ActorData(ret.stats);
        return(ret);
    }
 public Career(string championName = "")
 {
     careerNodes = new List <CareerNode>();
     root        = null;
     leaves      = new List <CareerNode>();
     if (championName != "")
     {
         stats      = new StatsManager(championName);
         playerData = new ActorData(stats);
     }
 }
    void  ScaleLevel(int level, CareerNode[] levelNodes, List <CareerNode> nodes)
    {
        Career career       = Session.session.career;
        int    currentLevel = career.stats.GetStat(StatsManager.Stats.CurrentLevel);
        int    lastNode     = career.stats.GetStat(StatsManager.Stats.LastNode);

        for (int i = 0; i < levelNodes.Length; i++)
        {
            bool active = CareerNode.NodeIsActive(levelNodes[i], nodes, currentLevel, lastNode);
            ScaleNodeButton(levelNodes[i].nodeId, level, i, levelNodes.Length, active);
        }
    }
Beispiel #11
0
    public static List <CareerNode> GetParents(CareerNode node, List <CareerNode> nodes)
    {
        List <CareerNode> ret = new List <CareerNode>();

        foreach (CareerNode candidate in nodes)
        {
            if (candidate.child1 == node.nodeId || candidate.child2 == node.nodeId || candidate.child3 == node.nodeId)
            {
                ret.Add(candidate);
            }
        }

        return(ret);
    }
Beispiel #12
0
    public static List <CareerNode> GetChildren(CareerNode node, List <CareerNode> nodes)
    {
        List <CareerNode> ret = new List <CareerNode>();

        foreach (CareerNode candidate in nodes)
        {
            int id = candidate.nodeId;
            if (id == node.child1 || id == node.child2 || id == node.child3)
            {
                ret.Add(candidate);
            }
        }
        return(ret);
    }
Beispiel #13
0
    public static int ParentCount(CareerNode node, List <CareerNode> nodes)
    {
        int count = 0;

        foreach (CareerNode candidate in nodes)
        {
            if (candidate.child1 == node.nodeId || candidate.child2 == node.nodeId || candidate.child3 == node.nodeId)
            {
                count++;
            }
        }

        return(count);
    }
Beispiel #14
0
    public static List <CareerNode> GetActiveParents(CareerNode node, List <CareerNode> nodes, int currentLevel, int lastNode)
    {
        List <CareerNode> parents = GetParents(node, nodes);
        List <CareerNode> ret     = new List <CareerNode>();

        foreach (CareerNode parent in parents)
        {
            if (NodeIsActive(parent, nodes, currentLevel, lastNode))
            {
                ret.Add(parent);
            }
        }

        return(ret);
    }
    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;
        }
    }
    void AddNodeButton(CareerNode node)
    {
        CareerNode.NodeTypes nodeType = node.nodeType;
        string nodeName = "" + nodeType;

        if (nodeType == CareerNode.NodeTypes.ArenaMatch)
        {
            nodeName = node.extraInfo;
            nodeName = nodeName.Replace("res://Scenes/Maps/", "");
            nodeName = nodeName.Replace(".tscn", "");
            nodeName = nodeType + ": " + nodeName;
        }

        Button button = NodeButton(node.nodeId, nodeName);

        careerButtons.Add(node.nodeId, button);
        AddChild(button);
    }
Beispiel #17
0
    public static int GetLevel(CareerNode node, List <CareerNode> nodes)
    {
        if (node == null || nodes == null)
        {
            GD.Print("Invalid args" + node + "," + nodes);
            return(-1);
        }

        System.Collections.Generic.Dictionary <int, CareerNode[]> levels = GetLevels(nodes);

        foreach (int key in levels.Keys)
        {
            CareerNode[] level = levels[key];
            for (int i = 0; i < level.Length; i++)
            {
                if (level[i].nodeId == node.nodeId)
                {
                    return(key);
                }
            }
        }
        return(-1);
    }
Beispiel #18
0
    public static CareerNode FromRow(string[] row)
    {
        if (row.Length != 6)
        {
            GD.Print("CareerNode.FromRow invalid row length: " + row.Length);
            return(null);
        }

        CareerNode ret = new CareerNode();

        ret.nodeId = Util.ToInt(row[0]);

        int category = Util.ToInt(row[1]);

        ret.nodeType = (NodeTypes)category;

        ret.child1    = Util.ToInt(row[2]);
        ret.child2    = Util.ToInt(row[3]);
        ret.child3    = Util.ToInt(row[4]);
        ret.extraInfo = row[5];

        return(ret);
    }
    public string ToString()
    {
        string text = "Career:\n";

        text += "Root: " + root.ToString() + "\n";

        text += "\nLeaves:\n";

        foreach (CareerNode leaf in leaves)
        {
            text += "\t" + leaf.ToString() + "\n";
        }

        text += "\nNodes:\n";
        foreach (CareerNode node in careerNodes)
        {
            text += "\t" + node.ToString() + "\n";
        }

        text += "Levels:\n";

        System.Collections.Generic.Dictionary <int, CareerNode[]> levels;
        levels = CareerNode.GetLevels(careerNodes);

        foreach (int key in levels.Keys)
        {
            text += "\n level[" + key + "]:";
            CareerNode[] level = levels[key];
            for (int i = 0; i < level.Length; i++)
            {
                text += level[i].ToString();
            }
            text += "\n";
        }

        return(text);
    }
    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);
        }
    }
    void ExecuteNode(int id)
    {
        GD.Print("Executing node " + id + ".");
        Session.session.career.ExecuteNode(id);
        return;

        Career     career    = Session.session.career;
        CareerNode node      = CareerNode.GetNode(id, career.careerNodes);
        int        nodeLevel = CareerNode.GetLevel(node, career.careerNodes);
        int        nextLevel = nodeLevel - 1;



        if (nodeLevel == 0)
        {
            GD.Print("Final boss time!");
            return;
        }
        else
        {
            GD.Print("Changing current level to " + nextLevel);
        }
        ScaleControls();
    }
Beispiel #22
0
 public static void SaveCareer(Career career)
 {
     GD.Print("CareerDb.SaveCareer");
     CSV.WriteToFile(StatsFile, career.stats.GetRows());
     CSV.WriteToFile(CareerFile, CareerNode.ToRows(career.careerNodes));
 }