public GenericTriggerBuilder(ContractTypeBuilder contractTypeBuilder, string name, MessageCenterMessageType triggerMessageType, GenericCompoundConditional conditional, string description, List <DesignResult> results) { this.name = name; this.triggerMessageType = triggerMessageType; this.conditional = conditional; this.description = description; this.results = results; }
public GenericCompoundConditional Build() { conditionalList = new List <EncounterConditionalBox>(); conditionals = ScriptableObject.CreateInstance <GenericCompoundConditional>(); foreach (JObject conditionalObject in conditionalsObject.Children <JObject>()) { BuildConditional(conditionalObject); } conditionals.conditionalList = conditionalList.ToArray(); return(conditionals); }
public GenericTriggerBuilder(ContractTypeBuilder contractTypeBuilder, JObject trigger, string name) { this.contractTypeBuilder = contractTypeBuilder; this.trigger = trigger; this.name = name; this.triggerOn = trigger["TriggerOn"].ToString(); this.description = (trigger.ContainsKey("Description")) ? trigger["Description"].ToString() : ""; this.conditionalEvaluationString = (trigger.ContainsKey("SucceedOn")) ? trigger["SucceedOn"].ToString() : "All"; this.conditionalEvaluation = (LogicEvaluation)Enum.Parse(typeof(LogicEvaluation), conditionalEvaluationString); if (trigger.ContainsKey("Conditionals")) { ConditionalBuilder conditionalBuilder = new ConditionalBuilder(contractTypeBuilder, (JArray)trigger["Conditionals"]); this.conditional = conditionalBuilder.Build(); this.conditional.whichMustBeTrue = this.conditionalEvaluation; } if (trigger.ContainsKey("Results")) { ResultsBuilder resultsBuilder = new ResultsBuilder(contractTypeBuilder, (JArray)trigger["Results"]); this.results = resultsBuilder.Build(); } else { Main.Logger.LogError("[GenericTriggerBuilder] Generic Triggers require 'Results'"); } if (!Enum.TryParse(this.triggerOn, out triggerMessageType)) { MessageTypes messageType; if (!Enum.TryParse(this.triggerOn, out messageType)) { Main.Logger.LogError("[GenericTriggerBuilder] Invalid 'TriggerOn' provided."); } else { triggerMessageType = (MessageCenterMessageType)messageType; } } }
private void BuildChunk(JObject chunk) { Main.LogDebug($"[ContractTypeBuild.{ContractTypeKey}] Chunk is '{chunk["Name"]}'"); string name = chunk["Name"].ToString(); string type = chunk["Type"].ToString(); string subType = chunk["SubType"].ToString(); string status = (chunk.ContainsKey("StartingStatus")) ? chunk["StartingStatus"].ToString() : null; List <string> conflictsWith = chunk.ContainsKey("ConflictsWith") ? ((JArray)chunk["ConflictsWith"]).ToObject <List <string> >() : null; JArray onActiveExecute = (chunk.ContainsKey("OnActiveExecute")) ? (JArray)chunk["OnActiveExecute"] : null; bool controlledByContract = (chunk.ContainsKey("ControlledByContract")) ? (bool)chunk["ControlledByContract"] : false; string guid = (chunk.ContainsKey("Guid")) ? chunk["Guid"].ToString() : null; JObject position = (JObject)chunk["Position"]; JArray children = (JArray)chunk["Children"]; EncounterObjectStatus?startingStatus = (status == null) ? null : (EncounterObjectStatus?)((EncounterObjectStatus)Enum.Parse(typeof(EncounterObjectStatus), status)); ChunkTypeBuilder chunkTypeBuilder = new ChunkTypeBuilder(this, name, type, subType, startingStatus, controlledByContract, guid, position, children); GameObject chunkGo = chunkTypeBuilder.Build(); if (chunkGo == null) { Main.Logger.LogError("[ContractTypeBuild.{ContractTypeKey}] Chunk creation failed. GameObject is null"); } if (conflictsWith != null) { Main.LogDebug($"[ContractTypeBuild.{ContractTypeKey}] There are '{conflictsWith.Count} conflicting chunk(s) defined on chunk '{name}'"); foreach (string chunkGuid in conflictsWith) { GenericCompoundConditional genericCompoundConditional = ScriptableObject.CreateInstance <GenericCompoundConditional>(); EncounterObjectStatus statusType = EncounterObjectStatus.Active; EncounterObjectMatchesStateConditional conditional = ScriptableObject.CreateInstance <EncounterObjectMatchesStateConditional>(); conditional.EncounterGuid = guid; conditional.State = statusType; List <EncounterConditionalBox> conditionalBoxList = new List <EncounterConditionalBox>() { new EncounterConditionalBox(conditional) }; genericCompoundConditional.conditionalList = conditionalBoxList.ToArray(); SetChunkObjectivesAsPrimary result = ScriptableObject.CreateInstance <SetChunkObjectivesAsPrimary>(); result.EncounterGuid = chunkGuid; result.Primary = false; GenericTriggerBuilder genericTrigger = new GenericTriggerBuilder(this, "ConflictAvoidanceTrigger", (MessageCenterMessageType)MessageTypes.OnEncounterStateChanged, genericCompoundConditional, "Avoids a conflicting chunk's objectives by making them secondary", new List <DesignResult>() { result }); genericTrigger.Build(); } } if (onActiveExecute != null) { Main.LogDebug($"[ContractTypeBuild.{ContractTypeKey}] There are '{onActiveExecute.Count} activators(s) defined on chunk '{name}'"); foreach (JObject activator in onActiveExecute.Children <JObject>()) { BuildChunkNodeActivators(chunkGo, activator); } } foreach (JObject child in children.Children <JObject>()) { BuildNode(chunkGo, child); } }