/// <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);
        }
Example #2
0
        //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();
                }
            }
        }
Example #3
0
    public void GetRootPaket1PaketInfos()
    {
        NPC npc1 = midgardNPCS.npcListe[0];
        List <Infopaket> infoPakete = npc1.infopakete;
        Infopaket        infoPaket  = infoPakete [0];

        Assert.AreEqual(1, infoPaket.infos.Count);
    }
Example #4
0
        /// <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();
                }
            }
        }
Example #5
0
        /// <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);
        }
Example #6
0
        /// <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);
        }
Example #7
0
        /// <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));
        }
Example #10
0
 /// <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;
 }