public bool AddNewGenericScriptNode(IGraphOwner owner, string scriptNodeName, string filePath)
{
if (mCurrentGraphRoot == null)
{
return(false);
}
EncounterScriptFile scriptFile = mGenericScriptNodes[scriptNodeName];
scriptFile.WriteDefaultToFile(filePath);
GameMasterNode newNode = new GameMasterNode(mCurrentGraphRoot.Module, filePath);
mGameMasterNodes.Add(newNode.Path, newNode);
newNode.Load(mGameMasterNodes);
string nodeName = Path.GetFileNameWithoutExtension(filePath);
CampaignNodeData campaignNodeData = mCurrentGraphRoot.NodeData as CampaignNodeData;
string arcsDir = Path.GetFullPath(Path.Combine(campaignNodeData.NodeFile.Path, "..", "arcs")).ToUpperInvariant();
string filePathUpper = Path.GetFullPath(filePath).ToUpperInvariant();
bool foundMatchingArc = false;
foreach (var arcNode in campaignNodeData.GetAllArcs())
{
string arcDir = Path.GetFullPath(Path.Combine(arcNode.Path, "..")).ToUpperInvariant();
if (filePathUpper.StartsWith(arcDir))
{
// Add new node to arc's index file (ex. game_events_arc) using nodeName as the key
(arcNode.NodeData as ArcNodeData).AddEncounter(newNode.NodeData as EncounterNodeData);
newNode.Owner = arcNode;
foundMatchingArc = true;
break;
}
}
if (!foundMatchingArc)
{
(mCurrentGraphRoot.NodeData as CampaignNodeData).OrphanedNodes.Add(newNode);
newNode.Owner = mCurrentGraphRoot;
}
newNode.IsModified = true;
newNode.SaveIfNecessary();
RefreshGraph(owner);
return(true);
}