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;
}