/// <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) { }