/// <summary> /// Filters the optional start nodes /// Falls der Knoten einen Fertigkeitsverweise hat /// </summary> private Infopaket FilterInfopaket(Infopaket infpaket) { Infopaket retPaket = infpaket; if (HasNodeTypeFertigkeit <Infopaket>(infpaket)) { if (!midgardCharacterChecker.CheckFertigkeit <Infopaket>(infpaket)) { List <Infopaket> infopakete = null; if (StartNode.typeNodeElement == typeof(Option)) { infopakete = (StartNode.nodeElement as Option).infopakete; } else if (StartNode.typeNodeElement == typeof(Mission)) { infopakete = (StartNode.nodeElement as Mission).infopakete; } infopakete.Remove(infpaket); if (infopakete != null && infopakete.Count > 0) { retPaket = infopakete[0]; } else { retPaket = null; } } } return(retPaket); }
//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 GetRootPaket1PaketInfos() { NPC npc1 = midgardNPCS.npcListe[0]; List <Infopaket> infoPakete = npc1.infopakete; Infopaket infoPaket = infoPakete [0]; Assert.AreEqual(1, infoPaket.infos.Count); }
/// <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> /// Gets the next info paket: /// Für jeden Startknoten muss das nächste Infopaket geholt werden (bis auf Optionspaket, das Optionen hat) /// </summary> /// <returns>The next info paket.</returns> protected virtual Infopaket GetInfopaket() { Infopaket returnPaket = null; if (startNode.typeNodeElement == typeof(Option)) { returnPaket = (startNode.nodeElement as Option).infopakete[0]; } else if (startNode.typeNodeElement == typeof(Mission)) { returnPaket = (startNode.nodeElement as Mission).infopakete[0]; } return(returnPaket); }
/// <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> /// Holt das nächste Infopaket und löscht es aus der Liste. /// Altes Interface für einfache Infopakete. /// </summary> /// <returns> /// List der Infos aus einem Paket /// </returns> public virtual List <string> GetNextInfos() { Infopaket infPackage = null; List <string> infoStrings = new List <string>(); //get first element of the list if (HasInfos()) { infPackage = artifactDialog.infopakete[0]; artifactDialog.infopakete.Remove(infPackage); List <Info> infos = infPackage.infos; if (infos != null) { foreach (var info in infos) { infoStrings.Add(info.content); } } } return(infoStrings); }
/// <summary> /// Gets the next info paket: /// Für jeden Startknoten muss das nächste Infopaket geholt werden (bis auf Optionspaket, das Optionen hat) /// </summary> /// <returns>The next info paket.</returns> protected override Infopaket GetInfopaket() { Infopaket returnPaket = base.GetInfopaket(); return(FilterInfopaket(returnPaket)); }
/// <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; }