public GenericTriggerBuilder(ContractTypeBuilder contractTypeBuilder, string name, MessageCenterMessageType triggerMessageType, GenericCompoundConditional conditional, string description, List <DesignResult> results)
 {
     this.name = name;
     this.triggerMessageType = triggerMessageType;
     this.conditional        = conditional;
     this.description        = description;
     this.results            = results;
 }
Exemple #2
0
        public GenericCompoundConditional Build()
        {
            conditionalList = new List <EncounterConditionalBox>();
            conditionals    = ScriptableObject.CreateInstance <GenericCompoundConditional>();

            foreach (JObject conditionalObject in conditionalsObject.Children <JObject>())
            {
                BuildConditional(conditionalObject);
            }

            conditionals.conditionalList = conditionalList.ToArray();
            return(conditionals);
        }
        public GenericTriggerBuilder(ContractTypeBuilder contractTypeBuilder, JObject trigger, string name)
        {
            this.contractTypeBuilder = contractTypeBuilder;
            this.trigger             = trigger;

            this.name        = name;
            this.triggerOn   = trigger["TriggerOn"].ToString();
            this.description = (trigger.ContainsKey("Description")) ? trigger["Description"].ToString() : "";

            this.conditionalEvaluationString = (trigger.ContainsKey("SucceedOn")) ? trigger["SucceedOn"].ToString() : "All";
            this.conditionalEvaluation       = (LogicEvaluation)Enum.Parse(typeof(LogicEvaluation), conditionalEvaluationString);

            if (trigger.ContainsKey("Conditionals"))
            {
                ConditionalBuilder conditionalBuilder = new ConditionalBuilder(contractTypeBuilder, (JArray)trigger["Conditionals"]);
                this.conditional = conditionalBuilder.Build();
                this.conditional.whichMustBeTrue = this.conditionalEvaluation;
            }

            if (trigger.ContainsKey("Results"))
            {
                ResultsBuilder resultsBuilder = new ResultsBuilder(contractTypeBuilder, (JArray)trigger["Results"]);
                this.results = resultsBuilder.Build();
            }
            else
            {
                Main.Logger.LogError("[GenericTriggerBuilder] Generic Triggers require 'Results'");
            }

            if (!Enum.TryParse(this.triggerOn, out triggerMessageType))
            {
                MessageTypes messageType;
                if (!Enum.TryParse(this.triggerOn, out messageType))
                {
                    Main.Logger.LogError("[GenericTriggerBuilder] Invalid 'TriggerOn' provided.");
                }
                else
                {
                    triggerMessageType = (MessageCenterMessageType)messageType;
                }
            }
        }
Exemple #4
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);
            }
        }