public static void ShiftNode(int dir) { if (displayTree.SelectedNode == null) { return; } if (displayTree.SelectedNode.Parent == null) { //If on root int ind = interactedObject.InterItems.IndexOf(nodeBase[displayTree.SelectedNode]); if (ind - dir < 0 || ind - dir >= interactedObject.InterItems.Count) { displayTree.Focus(); return; } interactedObject.InterItems.RemoveAt(ind); interactedObject.InterItems.Insert(ind - dir, nodeBase[displayTree.SelectedNode]); TreeNode n = displayTree.SelectedNode; int ind2 = displayTree.Nodes.IndexOf(displayTree.SelectedNode); displayTree.Nodes.Remove(n); displayTree.Nodes.Insert(ind2 - dir, n); displayTree.SelectedNode = n; displayTree.Focus(); } else //If inside a path if (nodeBase[displayTree.SelectedNode.Parent].GetType() == typeof(InteractionPath)) { InteractionPath pathPar = ((InteractionPath)nodeBase[displayTree.SelectedNode.Parent]); int ind = pathPar.items.IndexOf(nodeBase[displayTree.SelectedNode]); if (ind - dir < 0 || ind - dir >= pathPar.items.Count) { displayTree.Focus(); return; } pathPar.items.RemoveAt(ind); pathPar.items.Insert(ind - dir, nodeBase[displayTree.SelectedNode]); TreeNode n = displayTree.SelectedNode; int ind2 = displayTree.SelectedNode.Parent.Nodes.IndexOf(displayTree.SelectedNode); displayTree.SelectedNode.Parent.Nodes.Remove(n); displayTree.SelectedNode.Parent.Nodes.Insert(ind2 - dir, n); displayTree.SelectedNode = n; displayTree.Focus(); } else //If the node is a path if (nodeBase[displayTree.SelectedNode].GetType() == typeof(InteractionPath)) { InteractionChoice c = (InteractionChoice)nodeBase[displayTree.SelectedNode.Parent]; int ind = c.paths.IndexOf((InteractionPath)nodeBase[displayTree.SelectedNode]); if (ind - dir < 0 || ind - dir >= c.paths.Count) { displayTree.Focus(); return; } c.paths.RemoveAt(ind); c.paths.Insert(ind - dir, (InteractionPath)nodeBase[displayTree.SelectedNode]); TreeNode n = displayTree.SelectedNode; int ind2 = displayTree.SelectedNode.Parent.Nodes.IndexOf(displayTree.SelectedNode); displayTree.SelectedNode.Parent.Nodes.Remove(n); displayTree.SelectedNode.Parent.Nodes.Insert(ind2 - dir, n); displayTree.SelectedNode = n; displayTree.Focus(); } SetupInteractionData(); }
//Creates a new object from type given and adds it to the tree public static void SetupNewData(Type nt) { InteractionBase news = new InteractionDialogue(""); if (nt == typeof(InteractionQuests)) { news = new InteractionQuests(new List <InteractionPath>() { }); } else if (nt.Equals(typeof(InteractionDialogue))) { news = new InteractionDialogue(""); } else if (nt.Equals(typeof(InteractionChoice))) { news = new InteractionChoice(new List <InteractionPath>() { }); } else if (nt.Equals(typeof(InteractionPath))) { news = new InteractionPath(); } TreeNode nod = new TreeNode(news.ToString()); if (displayTree.SelectedNode != null) { if (nodeBase[displayTree.SelectedNode].GetType() == typeof(InteractionPath)) { //If the node is a path, then add the item to that path ((InteractionChoice)nodeBase[displayTree.SelectedNode.Parent]).AddBase(displayTree.SelectedNode.Text, news); displayTree.SelectedNode.Nodes.Add(nod); displayTree.SelectedNode.Expand(); nodeBase.Add(nod, news); } else if (nodeBase[displayTree.SelectedNode].GetType() == typeof(InteractionChoice)) { ((InteractionChoice)nodeBase[displayTree.SelectedNode]).AddChoice(pars[0].Text); nod.Text = pars[0].Text; displayTree.SelectedNode.Nodes.Add(nod); displayTree.SelectedNode.Expand(); nodeBase.Add(nod, news); pars = null; } else if (nodeBase[displayTree.SelectedNode].GetType() == typeof(InteractionQuests)) { ((InteractionQuests)nodeBase[displayTree.SelectedNode]).AddChoice(pars[0].Text); ((InteractionQuests)nodeBase[displayTree.SelectedNode]).questTags.Add(""); nod.Text = pars[0].Text; displayTree.SelectedNode.Nodes.Add(nod); displayTree.SelectedNode.Expand(); nodeBase.Add(nod, news); pars = null; } } else { //if nothing selected, then the primary level interactedObject.InterItems.Add(news); nodeBase.Add(nod, news); displayTree.Nodes.Add(nod); } }