public void SetCurrentLocation(TreeNode <MapItem> newLocation) { if (newLocation.mItem.Available == true) { mCurrentLocation = newLocation; UpdateMapState(); } }
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); }
private TreePath CreatePath(Utility.TreeNode node) { return(new TreePath(node.Indices)); }
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(); }