Exemple #1
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));
        }
Exemple #2
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);
            }
        }