示例#1
0
		private static bool CheckParams(ITerminalAction termAction, out string message, out List<Ingame.TerminalActionParameter> termParams, params string[] termParamStrings)
		{
			ListReader<Ingame.TerminalActionParameter> parameterDefinitions = termAction.GetParameterDefinitions();
			if (parameterDefinitions.Count != termParamStrings.Length)
			{
				message = "wrong number of parameters: " + termParamStrings.Length + ", expected: " + parameterDefinitions.Count;
				termParams = null;
				return false;
			}
			termParams = new List<Ingame.TerminalActionParameter>(parameterDefinitions.Count);
			Logger.DebugLog("counts: " + parameterDefinitions.Count + ", " + termParamStrings.Length + ", " + termParams.Count);
			for (int index = 0; index < parameterDefinitions.Count; index++)
			{
				object obj;
				try
				{
					obj = Convert.ChangeType(termParamStrings[index], parameterDefinitions[index].TypeCode);
				}
				catch (InvalidCastException)
				{
					message = termParamStrings[index] + " cannot be cast to " + parameterDefinitions[index].TypeCode;
					return false;
				}
				catch (FormatException)
				{
					message = termParamStrings[index] + " is not in a format recognized by " + parameterDefinitions[index].TypeCode;
					return false;
				}
				catch (OverflowException)
				{
					message = termParamStrings[index] + " is out of range of " + parameterDefinitions[index].TypeCode;
					return false;
				}
				catch (ArgumentException)
				{
					message = "type code is invalid: " + parameterDefinitions[index].TypeCode;
					return false;
				}

				termParams.Add(Ingame.TerminalActionParameter.Get(obj));
			}
			message = null;
			return true;
		}
示例#2
0
		private static bool CheckParams(VRage.Game.ModAPI.IMyCubeBlock autopilot, string blockName, string actionName, string[] parameters, out string message, out List<Ingame.TerminalActionParameter> termParams)
		{
			int needParams = -1;
			message = actionName + " not found";

			foreach (IMyCubeBlock block in AttachedGrid.AttachedCubeBlocks((IMyCubeGrid)autopilot.CubeGrid, AttachedGrid.AttachmentKind.Permanent, true))
			{
				if (!block.DisplayNameText.Contains(blockName, StringComparison.InvariantCultureIgnoreCase))
					continue;
				IMyTerminalBlock term = block as IMyTerminalBlock;
				if (term == null)
					continue;
				ITerminalAction terminalAction = (ITerminalAction)term.GetActionWithName(actionName);
				if (terminalAction != null)
				{
					int paramCount = terminalAction.GetParameterDefinitions().Count;
					if (Math.Abs(parameters.Length - paramCount) > (Math.Abs(parameters.Length - needParams)))
						continue;

					needParams = paramCount;
					if (parameters.Length == needParams && CheckParams(terminalAction, out message, out termParams, parameters))
						return true;
				}
			}

			if (needParams < 0)
			{
				message = actionName + " has no parameters";
				termParams = null;
				return false;
			}
			if (parameters.Length != needParams)
			{
				message = actionName + " requires " + needParams + " parameters, got " + parameters.Length;
				termParams = null;
				return false;
			}

			termParams = null;
			return false;
		}