Exemple #1
0
 public void SetCurrentLocation(TreeNode <MapItem> newLocation)
 {
     if (newLocation.mItem.Available == true)
     {
         mCurrentLocation = newLocation;
         UpdateMapState();
     }
 }
Exemple #2
0
        public void StartBattle(Utility.TreeNode <MapItem> location)
        {
            mMapState.SetCurrentLocation(location);

            State.CardsSetupState cardsSetupState = new State.CardsSetupState(true, true);
            cardsSetupState.mPlayerDeck   = mCampaignState.mCurrentCollection.mDeck;
            cardsSetupState.mOpposingDeck = GenerateOpposingDeck(location.mItem.mDifficultyTier,
                                                                 State.StateHolder.StateManager.MetaDataLibrary);

            State.StateHolder.StateManager.SetPassedState(cardsSetupState);
            State.StateHolder.StateManager.MoveToNextScene(State.GameScene.CampaignCardGame);
        }
Exemple #3
0
 private TreePath CreatePath(Utility.TreeNode node)
 {
     return(new TreePath(node.Indices));
 }
Exemple #4
0
        public MapState(int numLayers, int startingDifficulty)
        {
            System.Random R = new System.Random();
            mStartingDifficulty = startingDifficulty;
            mNumLayers          = numLayers;
            mMapCompleted       = false;

            // TODO - Take in a tree to parse
            mMapTree = new TreeNode <MapItem>();

            MapItem rootItem = new MapItem(R, State.StateHolder.StateManager.CardPool,
                                           State.StateHolder.StateManager.MetaDataLibrary, "root", mStartingDifficulty);

            rootItem.mTreeNode = mMapTree;
            mMapTree.mItem     = rootItem;

            List <TreeNode <MapItem> > currentLayer = new List <TreeNode <MapItem> >();
            List <TreeNode <MapItem> > nextLayer    = new List <TreeNode <MapItem> >();

            currentLayer.Add(mMapTree);

            for (int layer = 0; layer < mNumLayers - 1; layer++)
            {
                int childNodesFromThisLayer = 0;
                int nextLayerDifficultyTier = (startingDifficulty + layer + 1);
                foreach (TreeNode <MapItem> mapTreeNode in currentLayer)
                {
                    int minChildForNode = 0;
                    if (childNodesFromThisLayer == 0 &&
                        // Is this the last node in this layer?
                        (currentLayer.Count - 1) == currentLayer.IndexOf(mapTreeNode))
                    {
                        minChildForNode = 1;
                    }
                    int childrenToAdd = R.Next(minChildForNode, 3);
                    childNodesFromThisLayer += childrenToAdd;
                    for (int i = 0; i < childrenToAdd; i++)
                    {
                        MapItem newItem = new MapItem(R, State.StateHolder.StateManager.CardPool,
                                                      State.StateHolder.StateManager.MetaDataLibrary,
                                                      nextLayerDifficultyTier.ToString(), nextLayerDifficultyTier);
                        //"layer: " + layer.ToString() + ", node: " + currentLayer.IndexOf(mapTreeNode).ToString() + ", child: " + i.ToString());
                        TreeNode <MapItem> newTreeNode = mapTreeNode.AddChild(newItem);
                        newItem.mTreeNode = newTreeNode;
                        nextLayer.Add(newTreeNode);
                    }
                }
                // Add extra links to nodes with few links
                foreach (TreeNode <MapItem> mapTreeNode in currentLayer)
                {
                    if (mapTreeNode.GetNumChildren() < 1)
                    {
                        int sideToLinkTo = R.Next(0, 2);
                        int nodeIndex    = currentLayer.IndexOf(mapTreeNode);

                        bool canDoLeftSide = nodeIndex != 0 &&
                                             currentLayer[nodeIndex - 1].GetNumChildren() > 0;

                        bool canDoRightSide = nodeIndex != currentLayer.Count - 1 &&
                                              currentLayer[nodeIndex + 1].GetNumChildren() > 0;

                        TreeNode <MapItem> newLinkNode = null;
                        // Left
                        if ((sideToLinkTo == 0 && canDoLeftSide) ||
                            (sideToLinkTo == 1 && canDoLeftSide && !canDoRightSide))
                        {
                            TreeNode <MapItem> leftNode = currentLayer[nodeIndex - 1];
                            newLinkNode = leftNode.GetChild(leftNode.GetNumChildren() - 1);
                        }
                        // Right
                        else if ((sideToLinkTo == 1 && canDoRightSide) ||
                                 (sideToLinkTo == 0 && canDoRightSide && !canDoLeftSide))
                        {
                            TreeNode <MapItem> rightNode = currentLayer[nodeIndex + 1];
                            newLinkNode = rightNode.GetChild(0);
                        }

                        if (newLinkNode != null)
                        {
                            mapTreeNode.LinkChild(newLinkNode);
                        }
                    }
                }
                List <TreeNode <MapItem> > tempLayer = currentLayer;
                currentLayer.Clear();
                currentLayer = nextLayer;
                nextLayer    = tempLayer;
            }

            mCurrentLocation = null;

            UpdateMapState();
        }