//Setzt neuen Startpunkt mit Parent. -> Upward-Jumping //Beispiele: // * Infopaket enthält weiteres Optionspaket (letzter Leave auf einer Ebene) // ->Optionspaket auch letztes Element im Parent, damit wird parent NICHT das Infopaket darüber, sondern das nächste // ->Infopaket eine Ebene weiter oben. /// <summary> /// Sets the start node: /// Setzt den Startknoten für neue Iteration. Falls kein Unterknoten, springe hoch. /// Beispiele MoveUpward: /// Infopaket enthält weiteres Optionspaket (letzter Leave auf einer Ebene) /// ->Optionspaket auch letztes Element im Parent, damit wird parent NICHT das Infopaket darüber, sondern das nächste /// ->Infopaket eine Ebene weiter oben. /// </summary> /// <param name="newNode">New node.</param> protected void SetStartNode(DialogNode <object> nextNode) { Infopaket infopaket = nextNode.nodeElement as Infopaket; if (infopaket.optionspaket != null) {//Drill Down DialogNode <object> newStartNode = new DialogNode <object>(); startNode = newStartNode; startNode.nodeElement = infopaket.optionspaket; startNode.typeNodeElement = typeof(Optionspaket); startNode.typeParentNodeElement = typeof(Infopaket); startNode.parentNode = nextNode; } else { //Same level if (HasMoreInfoPaketeOnLevel(nextNode)) { RemoveLastInfopaket(nextNode); } else { MoveUpward(); } } }
public void SetParentOptionalStartNodeIndex(int optionIndex) { if (optionIndex < optionalStartNodes.Count) { DialogNode <object> newStartNode = optionalStartNodes[optionIndex]; startNode = newStartNode; } }
/// <summary> /// Moves the tree upward. /// </summary> protected void MoveUpward() { DialogNode <object> tmpNodeParent = startNode.parentNode; DialogNode <object> tmpNode = startNode; List <Infopaket> infopakete = new List <Infopaket>(); //Hier refactoring if (tmpNode.typeNodeElement == typeof(Infopaket)) { if (tmpNode.typeParentNodeElement == typeof(Option)) { Option option = tmpNodeParent.nodeElement as Option; infopakete = option.infopakete; } else if (tmpNode.typeParentNodeElement == typeof(Mission)) { Mission mission = tmpNodeParent.nodeElement as Mission; infopakete = mission.infopakete; } Infopaket infopaket = tmpNode.nodeElement as Infopaket; infopakete.Remove(infopaket); if (infopakete.Count > 0) { startNode = startNode.parentNode; return; } } //Move Node up startNode = startNode.parentNode; infopakete.Clear(); if (startNode != null) { if (startNode.typeNodeElement == typeof(Option)) { Option option = tmpNodeParent.nodeElement as Option; infopakete = option.infopakete; } else if (startNode.typeNodeElement == typeof(Mission)) { Mission mission = tmpNodeParent.nodeElement as Mission; infopakete = mission.infopakete; } if (infopakete.Count > 0) { return; } else { MoveUpward(); } } }
/// <summary> /// Sets the type of the next node parent, abhängig vom aktuellen Startknoten /// </summary> /// <param name="nextNode">Next node.</param> protected void SetNextNodeParentType(DialogNode <object> nextNode) { if (startNode.typeNodeElement == typeof(Option)) { nextNode.typeParentNodeElement = typeof(Option); } else if (startNode.typeNodeElement == typeof(Mission)) { nextNode.typeParentNodeElement = typeof(Mission); } }
/// <summary> /// Determines whether this instance has more info pakete on level the specified nextNode. /// </summary> /// <returns><c>true</c> if this instance has more info pakete on level the specified nextNode; otherwise, <c>false</c>.</returns> /// <param name="nextNode">Next node.</param> protected bool HasMoreInfoPaketeOnLevel(DialogNode <object> nextNode) { if (nextNode.typeParentNodeElement == typeof(Option)) { Option optionParent = (nextNode.parentNode.nodeElement as Option); return(optionParent.infopakete.Count > 1); } else if (nextNode.typeParentNodeElement == typeof(Mission)) { Mission missionParent = (nextNode.parentNode.nodeElement as Mission); return(missionParent.infopakete.Count > 1); } return(false); }
/// <summary> /// Sets the parent optional start node: /// Methode wird nur bei Optionspaketen gebraucht, welche die optionalen Punkte in einer Liste festlegt /// </summary> protected virtual void SetParentOptionalStartNodes() { optionalStartNodes.Clear(); //leere die alte Liste; Optionspaket opaket = startNode.nodeElement as Optionspaket; List <Option> optionen = opaket.optionen; foreach (var option in optionen) { DialogNode <object> optionsNode = new DialogNode <object>(); optionsNode.nodeElement = option; optionsNode.typeNodeElement = typeof(Option); optionsNode.typeParentNodeElement = typeof(Optionspaket); optionsNode.parentNode = startNode; optionalStartNodes.Add(optionsNode); } }
/// <summary> /// Moves to the next possible Node /// </summary> /// <param name="nextNode">Next node.</param> /// <param name="infopaket">Infopaket.</param> protected List <Info> ManageInfopaket() { List <Info> returnInfos = null; DialogNode <object> nextNode = new DialogNode <object>(); Infopaket infopaket = GetInfopaket(); if (infopaket != null) { SetNextNodeParentType(nextNode); nextNode.typeNodeElement = typeof(Infopaket); SetParent(infopaket, nextNode); SetStartNode(nextNode); returnInfos = infopaket.infos; } return(returnInfos); }
/// <summary> /// Removes the last infopaket. /// </summary> /// <param name="nextNode">Next node.</param> protected void RemoveLastInfopaket(DialogNode <object> nextNode) { List <Infopaket> infopakete = null; if (nextNode.typeParentNodeElement == typeof(Option)) { Option optionParent = (nextNode.parentNode.nodeElement as Option); infopakete = optionParent.infopakete; } else if (nextNode.typeParentNodeElement == typeof(Mission)) { Mission missionParent = (nextNode.parentNode.nodeElement as Mission); infopakete = missionParent.infopakete; } Infopaket delPaket = infopakete[0]; infopakete.Remove(delPaket); }
/// <summary> /// Initializes a new instance of the <see cref="DialogParser"/> class. /// </summary> public DialogParser() { startNode = null; optionalStartNodes = new List <DialogNode <object> >(); }
/// <summary> /// Legt den Parent für das Infopaket fest. Der kann entweder Mission oder Option sein /// </summary> /// <param name="infopaket">Infopaket.</param> /// <param name="newNode">New node.</param> protected void SetParent(Infopaket infopaket, DialogNode <object> newNode) { newNode.nodeElement = infopaket; newNode.parentNode = startNode; }