private void BuildDelayResult(JObject resultObject) { Main.LogDebug("[BuildDelayResult] Building 'Delay' result"); string name = resultObject.ContainsKey("Name") ? resultObject["Name"].ToString() : "Unnamed Delay Result"; float time = resultObject.ContainsKey("Time") ? (float)resultObject["Time"] : -1; int rounds = resultObject.ContainsKey("Rounds") ? (int)resultObject["Rounds"] : -1; int phases = resultObject.ContainsKey("Phases") ? (int)resultObject["Phases"] : -1; JObject skipIfTrigger = resultObject.ContainsKey("SkipIf") ? (JObject)resultObject["SkipIf"] : null; List <DesignConditional> childSkipIfConditionals = new List <DesignConditional>(); JArray childResultsArray = (JArray)resultObject["Results"]; JArray childResultsIfSkippedArray = resultObject.ContainsKey("ResultsIfSkipped") ? (JArray)resultObject["ResultsIfSkipped"] : null; List <DesignResult> createdChildResults = new List <DesignResult>(); ResultsBuilder childResultsBuilder = new ResultsBuilder(this.contractTypeBuilder, childResultsArray); createdChildResults = childResultsBuilder.Build(); List <DesignResult> createdChildResultsIfSkipped = new List <DesignResult>(); if (childResultsIfSkippedArray != null) { ResultsBuilder childResultsIfSkippedBuilder = new ResultsBuilder(this.contractTypeBuilder, childResultsIfSkippedArray); createdChildResultsIfSkipped = childResultsIfSkippedBuilder.Build(); } DelayResult result = ScriptableObject.CreateInstance <DelayResult>(); result.Name = name; result.Time = time; result.Rounds = rounds; result.Phases = phases; result.Results = createdChildResults; result.ResultsIfSkipped = createdChildResultsIfSkipped; results.Add(result); if (skipIfTrigger != null) { GenericTriggerBuilder genericTrigger = new GenericTriggerBuilder(this.contractTypeBuilder, skipIfTrigger, "DelaySkipIfTrigger"); ActivateDelaySkipResultsResult triggerResult = ScriptableObject.CreateInstance <ActivateDelaySkipResultsResult>(); triggerResult.DelayResult = result; genericTrigger.Results = new List <DesignResult>() { triggerResult }; genericTrigger.Build(); } }
private void BuildTrigger(JObject trigger) { Main.LogDebug($"[ContractTypeBuild.{ContractTypeKey}] Trigger is '{trigger["Name"]}'"); string name = trigger["Name"].ToString(); string type = (trigger.ContainsKey("Type")) ? trigger["Type"].ToString() : "Generic"; TriggerBuilder triggerBuilder = null; switch (type) { case "Generic": triggerBuilder = new GenericTriggerBuilder(this, trigger, name); break; default: break; } if (triggerBuilder != null) { triggerBuilder.Build(); } else { Main.LogDebug($"[ContractTypeBuild.{ContractTypeKey}] No valid trigger was built for '{type}'"); } }
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); } }