public void CopyTo(QuestCounterMessageEvent messageEvent) { if (messageEvent == null) { Debug.LogWarning("Quest Machine: QuestCounterMessageEventProxy.CopyTo destination is null."); return; } messageEvent.senderSpecifier = sndSpec; messageEvent.senderID = new StringField(snd); messageEvent.targetSpecifier = tgtSpec; messageEvent.targetID = new StringField(tgt); messageEvent.message = new StringField(msg); messageEvent.parameter = new StringField(parm); messageEvent.operation = op; messageEvent.literalValue = val; }
public void CopyFrom(QuestCounterMessageEvent messageEvent) { if (messageEvent == null) { Debug.LogWarning("Quest Machine: QuestCounterMessageEventProxy.CopyFrom source is null."); return; } sndSpec = messageEvent.senderSpecifier; snd = StringField.GetStringValue(messageEvent.senderID); tgtSpec = messageEvent.targetSpecifier; tgt = StringField.GetStringValue(messageEvent.targetID); msg = StringField.GetStringValue(messageEvent.message); parm = StringField.GetStringValue(messageEvent.parameter); op = messageEvent.operation; val = messageEvent.literalValue; }
public static List <QuestCounterMessageEvent> CreateList(QuestCounterMessageEventProxy[] messageEventsProxy) { var list = new List <QuestCounterMessageEvent>(); if (messageEventsProxy == null) { Debug.LogWarning("Quest Machine: QuestCounterMessageEventProxy.CreateList source is null."); return(list); } for (int i = 0; i < messageEventsProxy.Length; i++) { var messageEvent = new QuestCounterMessageEvent(); messageEventsProxy[i].CopyTo(messageEvent); list.Add(messageEvent); } return(list); }
public QuestCounterMessageEventProxy(QuestCounterMessageEvent messageEvent) { CopyFrom(messageEvent); }
/// <summary> /// Adds the plan's steps. /// </summary> /// <param name="questBuilder">QuestBuilder.</param> /// <param name="domainName">Main target's domain.</param> /// <param name="goal">Goal step.</param> /// <param name="plan">List of steps that end with goal step.</param> /// <returns>The last node added.</returns> protected virtual QuestNode AddSteps(QuestBuilder questBuilder, string domainName, PlanStep goal, Plan plan) { var previousNode = questBuilder.GetStartNode(); var counterNames = new HashSet <string>(); for (int i = 0; i < plan.steps.Count; i++) { var step = plan.steps[i]; // Create next condition node: var targetEntity = step.fact.entityType.name; var targetDescriptor = step.fact.entityType.GetDescriptor(step.requiredCounterValue); var id = (i + 1).ToString(); var internalName = step.action.displayName + " " + targetDescriptor; var conditionNode = questBuilder.AddConditionNode(previousNode, id, internalName, ConditionCountMode.All); previousNode = conditionNode; // Variables for node text tag replacement: var counterName = string.Empty; int requiredCounterValue = 0; var completion = step.action.completion; if (completion.mode == ActionCompletion.Mode.Counter) { // Setup counter condition: counterName = goal.fact.entityType.pluralDisplayName.value + completion.baseCounterName.value; if (!counterNames.Contains(counterName)) { var counter = questBuilder.AddCounter(counterName, completion.initialValue, completion.minValue, completion.maxValue, false, completion.updateMode); foreach (var messageEvent in completion.messageEventList) { var counterMessageEvent = new QuestCounterMessageEvent(messageEvent.targetID, messageEvent.message, new StringField(StringField.GetStringValue(messageEvent.parameter).Replace("{TARGETENTITY}", targetEntity)), messageEvent.operation, messageEvent.literalValue); counter.messageEventList.Add(counterMessageEvent); } } counterName = goal.fact.entityType.pluralDisplayName.value + completion.baseCounterName.value; requiredCounterValue = Mathf.Min(step.requiredCounterValue, step.fact.count); questBuilder.AddCounterCondition(conditionNode, counterName, CounterValueConditionMode.AtLeast, requiredCounterValue); // Consider: Add action to reset counter to zero in case future nodes repeat the same counter? } else { // Setup message condition: questBuilder.AddMessageCondition(conditionNode, QuestMessageParticipant.Any, completion.senderID, QuestMessageParticipant.Any, completion.targetID, completion.message, new StringField(StringField.GetStringValue(completion.parameter).Replace("{TARGETENTITY}", targetEntity))); } var activeState = conditionNode.stateInfoList[(int)QuestNodeState.Active]; AddStepNodeText(questBuilder, conditionNode, activeState, targetEntity, targetDescriptor, domainName, counterName, requiredCounterValue, step); // Actions when active: if (!StringField.IsNullOrEmpty(step.action.actionText.activeText.alertText)) { // Alert action: var alertAction = questBuilder.CreateAlertAction(ReplaceStepTags(step.action.actionText.activeText.alertText.value, targetEntity, targetDescriptor, domainName, counterName, requiredCounterValue)); activeState.actionList.Add(alertAction); } // Send message action: if (!StringField.IsNullOrEmpty(step.action.sendMessageOnActive)) { var messageAction = questBuilder.CreateMessageAction(ReplaceStepTags(step.action.sendMessageOnActive.value, targetEntity, targetDescriptor, domainName, counterName, requiredCounterValue)); activeState.actionList.Add(messageAction); } // Actions when completed: if (!StringField.IsNullOrEmpty(step.action.sendMessageOnCompletion)) { var trueState = conditionNode.stateInfoList[(int)QuestNodeState.True]; var messageAction = questBuilder.CreateMessageAction(ReplaceStepTags(step.action.sendMessageOnCompletion.value, targetEntity, targetDescriptor, domainName, counterName, requiredCounterValue)); trueState.actionList.Add(messageAction); } } return(previousNode); }