示例#1
0
        /// <summary>
        /// Generates all the ContractParameter objects required for the array of ConfigNodes, and
        /// adds them to the host object.
        /// </summary>
        /// <param name="contract">Contract to generate for</param>
        /// <param name="contractParamHost">The object to use as a parent for ContractParameters</param>
        /// <param name="paramFactories">The ParameterFactory objects to use to generate parameters.</param>
        /// <returns>Whether the generation was successful.</returns>
        public static bool GenerateParameters(ConfiguredContract contract, IContractParameterHost contractParamHost, List <ParameterFactory> paramFactories)
        {
            foreach (ParameterFactory paramFactory in paramFactories)
            {
                if (paramFactory.enabled)
                {
                    ContractParameter parameter = paramFactory.Generate(contract, contractParamHost);

                    // Get the child parameters
                    if (parameter != null)
                    {
                        if (!GenerateParameters(contract, parameter, paramFactory.childNodes))
                        {
                            return(false);
                        }
                    }

                    ContractConfiguratorParameter ccParam = parameter as ContractConfiguratorParameter;
                    if (ccParam != null && ccParam.hideChildren)
                    {
                        foreach (ContractParameter child in ccParam.GetChildren())
                        {
                            ContractConfiguratorParameter ccChild = child as ContractConfiguratorParameter;
                            if (ccChild != null)
                            {
                                ccChild.Hide();
                            }
                        }
                    }
                }
            }

            return(true);
        }
        /// <summary>
        /// Generates all the ContractParameter objects required for the array of ConfigNodes, and
        /// adds them to the host object.
        /// </summary>
        /// <param name="contract">Contract to generate for</param>
        /// <param name="contractParamHost">The object to use as a parent for ContractParameters</param>
        /// <param name="paramFactories">The ParameterFactory objects to use to generate parameters.</param>
        /// <returns>Whether the generation was successful.</returns>
        public static bool GenerateParameters(ConfiguredContract contract, IContractParameterHost contractParamHost, List <ParameterFactory> paramFactories)
        {
            foreach (ParameterFactory paramFactory in paramFactories)
            {
                if (paramFactory.enabled)
                {
                    // Set up the iterator
                    int count   = 1;
                    int current = 0;
                    if (paramFactory.iteratorType != null)
                    {
                        count = (int)paramFactory.dataNode["iteratorCount"];
                    }

                    // Loop through the iterator, or do a single parameter for non-iterated parameters
                    while (current++ < count)
                    {
                        // Refresh the deterministic values
                        int oldValue = DataNode.IteratorCurrentIndex;
                        if (paramFactory.iteratorType != null)
                        {
                            DataNode.IteratorCurrentIndex = current - 1;
                            ConfigNodeUtil.UpdateNonDeterministicValues(paramFactory.dataNode, paramFactory.dataNode);
                        }

                        ContractParameter parameter = paramFactory.Generate(contract, contractParamHost);

                        // Get the child parameters
                        if (parameter != null)
                        {
                            if (!GenerateParameters(contract, parameter, paramFactory.childNodes))
                            {
                                return(false);
                            }
                        }

                        ContractConfiguratorParameter ccParam = parameter as ContractConfiguratorParameter;
                        if (ccParam != null && ccParam.hideChildren)
                        {
                            foreach (ContractParameter child in ccParam.GetChildren())
                            {
                                ContractConfiguratorParameter ccChild = child as ContractConfiguratorParameter;
                                if (ccChild != null)
                                {
                                    ccChild.Hide();
                                }
                            }
                        }

                        // Restore the old value for the iterator list (for recursive iterations)
                        DataNode.IteratorCurrentIndex = oldValue;
                    }
                }
            }

            return(true);
        }
        /// <summary>
        /// Method for generating ContractParameter objects.  This will call the Generate() method
        /// on the sub-class, load all common parameters and load child parameters.
        /// </summary>
        /// <param name="contract">Contract to generate for</param>
        /// <param name="contractParamHost">Parent object for the ContractParameter</param>
        /// <returns>Generated ContractParameter</returns>
        public virtual ContractParameter Generate(ConfiguredContract contract, IContractParameterHost contractParamHost)
        {
            // First check any requirements
            if (!ContractRequirement.RequirementsMet(contract, contract.contractType, requirements))
            {
                LoggingUtil.LogVerbose(typeof(ParameterFactory), "Returning null for " + contract.contractType.name + "." + name + ": requirements not met.");
                return(null);
            }

            // Generate a parameter using the sub-class logic
            ContractParameter parameter = Generate(contract);

            if (parameter == null)
            {
                LoggingUtil.LogWarning(this, GetType().FullName + ".Generate() returned a null ContractParameter!");
                return(null);
            }

            // Add ContractParameter to the host
            contractParamHost.AddParameter(parameter);

            // Set the funds/science/reputation parameters
            parameter.SetFunds(rewardFunds, failureFunds, targetBody);
            parameter.SetReputation(rewardReputation, failureReputation, targetBody);
            parameter.SetScience(rewardScience, targetBody);

            // Set other flags
            parameter.Optional = optional;
            if (disableOnStateChange != null)
            {
                parameter.DisableOnStateChange = (bool)disableOnStateChange;
            }
            parameter.ID = name;

            // Special stuff for contract configurator parameters
            ContractConfiguratorParameter ccParam = parameter as ContractConfiguratorParameter;

            if (ccParam != null)
            {
                ccParam.completeInSequence = completeInSequence;
                ccParam.notes            = notes;
                ccParam.completedMessage = completedMessage;
                ccParam.hidden           = hidden;
                ccParam.hideChildren     = hideChildren;
            }

            return(parameter);
        }
 public ContractConfiguratorException(ContractConfiguratorParameter p, Exception innerException)
     : this(p.Root as ConfiguredContract, innerException)
 {
 }