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);
        }
示例#2
0
        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));
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#6
0
        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);
            }
        }
示例#7
0
 public EncounterObjectStateChangeMessage(string guid, EncounterObjectStatus state) : base(guid, guid)
 {
     this.State = state;
 }
示例#8
0
        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);
        }