StonehearthEditor.EncounterNodeData.AddOutEdge C# (CSharp) Method

AddOutEdge() public method

public AddOutEdge ( GameMasterNode nodeFile ) : bool
nodeFile GameMasterNode
return bool
        public override bool AddOutEdge(GameMasterNode nodeFile)
        {
            if (nodeFile.NodeType != GameMasterNodeType.ENCOUNTER)
            {
                return false;
            }

            EncounterNodeData encounterData = nodeFile.NodeData as EncounterNodeData;
            string inEdge = encounterData.InEdge;

            if (encounterData.IsStartNode)
            {
                // Cannot add start nodes to an encounter. they should be added to arc
                return false;
            }

            List<string> outEdges = GetOutEdges();
            if (outEdges.Contains(nodeFile.Id))
            {
                // This item is already part of the out edges
                return false;
            }

            if (!mOutEdgeStrings.Contains(inEdge))
            {
                // This out edge isn't already in the list of possible out edges, see if we can add it.
                switch (mEncounterType)
                {
                    case "generator":
                        // Cannot add more than one edge to generator
                        return false;
                    case "random_out_edge":
                        JObject randomOutEdgesDictionary = (JObject)NodeFile.Json["random_out_edge_info"]["out_edges"];
                        randomOutEdgesDictionary.Add(inEdge, JObject.Parse(@"{""weight"":1 }"));
                        mOutEdgeStrings.Add(inEdge);
                        break;
                    case "collection_quest":
                        return false;
                    case "dialog_tree":
                        // We can't add to a dialog tree, you have to specify a node.
                        return false;
                    case "counter":
                        // Cannot add to a counter because it either does fail or success
                        return false;
                    default:
                        NodeFile.Json.Remove("out_edge");
                        mOutEdgeStrings.Add(inEdge);
                        NodeFile.Json.Add("out_edge", JsonConvert.SerializeObject(mOutEdgeStrings));
                        break;
                }
            }

            if (nodeFile.Owner != NodeFile.Owner)
            {
                // make sure encounter is added to this tree
                ArcNodeData ownerArcData = NodeFile.Owner.NodeData as ArcNodeData;
                ownerArcData.AddEncounter(encounterData);
                nodeFile.Owner = NodeFile.Owner;
            }

            NodeFile.IsModified = true;
            return true;
        }