public 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(); 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"]; ChunkTypeBuilder chunkTypeBuilder = new ChunkTypeBuilder(this, name, type, subType, controlledByContract, guid, position, children); GameObject chunkGo = chunkTypeBuilder.Build(); if (chunkGo == null) { Main.Logger.LogError("[ContractTypeBuild.{ContractTypeKey}] Chunk creation failed. GameObject is null"); } foreach (JObject child in children.Children <JObject>()) { BuildNode(chunkGo, child); } }
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); } }