Пример #1
0
        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();
            }
        }
Пример #2
0
        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}'");
            }
        }
Пример #3
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);
            }
        }