public QuestNode AddNode(QuestNode parent, StringField id, StringField internalName, QuestNodeType nodeType, bool isOptional = false)
        {
            if (parent == null)
            {
                if (Debug.isDebugBuild)
                {
                    Debug.LogWarning("Quest Machine: QuestBuilder.AddNode must be provided a valid parent node.");
                }
                return(null);
            }
            if (parent.childIndexList == null)
            {
                return(null);
            }
            parent.childIndexList.Add(quest.nodeList.Count);
            var node = new QuestNode(id, internalName, nodeType, isOptional);

            node.canvasRect = new Rect(parent.canvasRect.x, parent.canvasRect.y + 20 + QuestNode.DefaultNodeHeight, QuestNode.DefaultNodeWidth, QuestNode.DefaultNodeHeight);
            quest.nodeList.Add(node);
            QuestStateInfo.ValidateStateInfoListCount(node.stateInfoList);
            QuestStateInfo.ValidateCategorizedContentListCount(node.stateInfoList[(int)QuestNodeState.Active].categorizedContentList);
            QuestStateInfo.ValidateCategorizedContentListCount(node.stateInfoList[(int)QuestNodeState.Inactive].categorizedContentList);
            QuestStateInfo.ValidateCategorizedContentListCount(node.stateInfoList[(int)QuestNodeState.True].categorizedContentList);
            return(node);
        }
        private void ValidateListSizes()
        {
            var numStates = Enum.GetNames(typeof(QuestState)).Length;

            QuestStateInfo.ValidateStateInfoListCount(quest.stateInfoList, numStates);
            for (int i = 0; i < numStates; i++)
            {
                QuestStateInfo.ValidateCategorizedContentListCount(quest.stateInfoList[i].categorizedContentList);
            }
        }
Example #3
0
        /// <summary>
        /// Adds a final "return to quest giver" step.
        /// </summary>
        /// <returns>The return node.</returns>
        protected virtual QuestNode AddReturnNode(QuestBuilder questBuilder, QuestNode previousNode, QuestEntity entity, string mainTargetEntity, string mainTargetDescriptor, string domainName, PlanStep goal, int rewardsContentIndex = 9999) // Default to 9999 to not break any customer code using old signature.
        {
            var questGiver = entity.GetComponent <QuestGiver>();
            var giverID    = (questGiver != null) ? questGiver.id : ((entity != null) ? entity.displayName : null);
            var returnNode = questBuilder.AddDiscussQuestNode(previousNode, QuestMessageParticipant.QuestGiver, giverID);

            returnNode.id = new StringField("Return");
            previousNode  = returnNode;

            QuestStateInfo.ValidateStateInfoListCount(returnNode.stateInfoList);
            var hudText = "{Return to} " + questGiver.displayName;

            // Text when active:
            AddReturnNodeText(questBuilder, returnNode, questGiver, mainTargetEntity, mainTargetDescriptor, domainName, goal, hudText);

            // Add rewards content:
            var dialogueList     = returnNode.stateInfoList[(int)QuestNodeState.Active].categorizedContentList[(int)QuestContentCategory.Dialogue];
            var offerContentList = questBuilder.quest.offerContentList;

            for (int i = rewardsContentIndex; i < offerContentList.Count; i++)
            {
                var original = offerContentList[i];
                var copy     = QuestContent.Instantiate(original) as QuestContent;
                original.CloneSubassetsInto(copy);
                dialogueList.contentList.Add(copy);
            }

            var actionList = returnNode.GetStateInfo(QuestNodeState.Active).actionList;

            // Alert when active:
            AddReturnNodeAlert(questBuilder, returnNode, actionList, hudText);

            // Indicators:
            AddReturnNodeIndicators(questBuilder, returnNode, actionList, entity);

            return(previousNode);
        }