public SetChunkStateAtRandomActivatorBuilder(ContractTypeBuilder contractTypeBuilder, GameObject parent, JObject activator) { this.contractTypeBuilder = contractTypeBuilder; this.activator = activator; this.parent = parent; this.chunkGuids = ((JArray)activator["ChunkGuids"]).ToObject <List <string> >(); this.statusString = activator.ContainsKey("Status") ? activator["Status"].ToString() : "Active"; this.statusType = (EncounterObjectStatus)Enum.Parse(typeof(EncounterObjectStatus), statusString); }
private void BuildEncounterObjectMatchesStateConditional(JObject conditionalObject) { Main.LogDebug("[BuildEncounterObjectMatchesStateConditional] Building 'EncounterObjectMatchesStateConditional' conditional"); string guid = conditionalObject["Guid"].ToString(); string status = conditionalObject["Status"].ToString(); EncounterObjectStatus statusType = (EncounterObjectStatus)Enum.Parse(typeof(EncounterObjectStatus), status); EncounterObjectMatchesStateConditional conditional = ScriptableObject.CreateInstance <EncounterObjectMatchesStateConditional>(); conditional.EncounterGuid = guid; conditional.State = statusType; conditionalList.Add(new EncounterConditionalBox(conditional)); }
static bool Prefix(EncounterChunkGameLogic __instance, ChunkOverride chunkOverride) { Main.LogDebug($"[EncounterChunkGameLogicApplyContractOverridePatch.Prefix] Running EncounterChunkGameLogicApplyContractOverridePatch - {chunkOverride.name}"); EncounterObjectStatus startingStatus = EncounterObjectStatus.Active; if (chunkOverride.enableChunkFromContract) { if (chunkOverride.controlledByContractChunkGroupList.Count > 0) { if (!Enum.TryParse(chunkOverride.controlledByContractChunkGroupList[0], out startingStatus)) { startingStatus = EncounterObjectStatus.Active; } } __instance.startingStatus = startingStatus; } return(false); }
private void BuildSetStateAtRandomResult(JObject resultObject) { Main.LogDebug("[BuildSetStateAtRandomResult] Building 'SetStateAtRandom' result"); List <string> encounterGuids = (resultObject.ContainsKey("EncounterGuids")) ? resultObject["EncounterGuids"].ToObject <List <string> >() : null; string state = (resultObject.ContainsKey("State")) ? resultObject["State"].ToString() : null; EncounterObjectStatus stateType = (EncounterObjectStatus)Enum.Parse(typeof(EncounterObjectStatus), state); if (encounterGuids != null) { SetStateAtRandomResult result = ScriptableObject.CreateInstance <SetStateAtRandomResult>(); result.EncounterGuids = encounterGuids; result.State = stateType; results.Add(result); } else { Main.Logger.LogError("[BuildSetStateAtRandomResult] You have not provided an 'EncounterGuids' to SetState on"); } }
static void Prefix(EncounterObjectGameLogic __instance, EncounterObjectStatus status) { EncounterObjectStateChangeMessage message = new EncounterObjectStateChangeMessage(__instance.encounterObjectGuid, status); UnityGameInstance.BattleTechGame.Combat.MessageCenter.PublishMessage(message); }
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); } }
public EncounterObjectStateChangeMessage(string guid, EncounterObjectStatus state) : base(guid, guid) { this.State = state; }
public static SetChunkStateAtRandomActivator CreateSetChunkStateAtRandomActivator(GameObject parent, List <string> guids, EncounterObjectStatus state) { SetChunkStateAtRandomActivator setChunkStateAtRandomActivator = parent.AddComponent <SetChunkStateAtRandomActivator>(); setChunkStateAtRandomActivator.encounterObjectGuid = Guid.NewGuid().ToString(); setChunkStateAtRandomActivator.ChunkGuids = guids; setChunkStateAtRandomActivator.State = state; return(setChunkStateAtRandomActivator); }