Init() public method

public Init ( string name, idWindow win ) : void
name string
win idWindow
return void
コード例 #1
0
		public void AddRegister(string name, RegisterType type, idScriptParser parser, idWindow window, idWindowVariable var)
		{
			idRegister register = FindRegister(name);

			if(register == null)
			{
				int regCount = idRegister.RegisterTypeCount[(int) type];
				register = new idRegister(name, type, var);
				
				if(type == RegisterType.String)
				{
					idToken token;
					
					if((token = parser.ReadToken()) != null)
					{
						var.Init(idE.Language.Get(token.ToString()), window);
					}
				}
				else
				{
					for(int i = 0; i < regCount; i++)
					{
						register.Indexes[i] = window.ParseExpression(parser, null);

						if(i < (regCount - 1))
						{
							parser.ExpectTokenString(",");
						}
					}
				}

				_registers.Add(register);
				_registerDict.Add(name, register);
			}
			else
			{
				int regCount = idRegister.RegisterTypeCount[(int) type];

				register.Variable = var;

				if(type == RegisterType.String)
				{
					idToken token = parser.ReadToken();

					if(token != null)
					{
						var.Init(token.ToString(), window);
					}
				}
				else
				{
					for(int i = 0; i < regCount; i++)
					{
						register.Indexes[i] = window.ParseExpression(parser, null);

						if(i < (regCount - 1))
						{
							parser.ExpectTokenString(",");
						}
					}
				}
			}
		}
コード例 #2
0
ファイル: idWindow.cs プロジェクト: iainmckay/idtech4.net
		/// <summary>
		/// 
		/// </summary>
		/// <param name="parser"></param>
		/// <param name="var"></param>
		/// <param name="component"></param>
		/// <returns>Returns a register index.</returns>
		private int ParseTerm(idScriptParser parser, idWindowVariable var, int component)
		{
			int a, b;
			object tmp;

			idToken token = parser.ReadToken();
			string tokenValue = token.ToString().ToLower();

			if(tokenValue == "(")
			{
				a = ParseExpression(parser);
				parser.ExpectTokenString(")");

				return a;
			}
			else if(tokenValue == "time")
			{
				return (int) WindowExpressionRegister.Time;
			}
			// parse negative numbers
			else if(tokenValue == "-")
			{
				token = parser.ReadToken();

				if((token.Type == TokenType.Number) || (token.ToString() == "."))
				{
					return ExpressionConstant(-token.ToFloat());
				}

				parser.Warning("Bad negative number '{0}'", token.ToString());

				return 0;
			}

			if((token.Type == TokenType.Number) || (token.ToString() == ".") || (token.ToString() == "-"))
			{
				return ExpressionConstant(token.ToFloat());
			}

			// see if it is a table name
			idDeclTable table = idE.DeclManager.FindType<idDeclTable>(DeclType.Table, token.ToString(), false);

			if(table != null)
			{
				a = table.Index;

				// parse a table expression
				parser.ExpectTokenString("[");
				b = ParseExpression(parser);
				parser.ExpectTokenString("]");

				return EmitOperation(a, b, WindowExpressionOperationType.Table);
			}

			if(var == null)
			{
				var = GetVariableByName(token.ToString(), true);
			}

			if(var != null)
			{
				var.Init(tokenValue, this);

				tmp = var;
				b = component;

				if(var is idWinVector4)
				{
					if((token = parser.ReadToken()) != null)
					{
						if(token.ToString() == "[")
						{
							b = ParseExpression(parser);
							parser.ExpectTokenString("]");
						}
						else
						{
							parser.UnreadToken(token);
						}
					}

					return EmitOperation(tmp, b, WindowExpressionOperationType.Var);
				}
				else if(var is idWinFloat)
				{
					return EmitOperation(tmp, b, WindowExpressionOperationType.VarF);
				}
				else if(var is idWinInteger)
				{
					return EmitOperation(tmp, b, WindowExpressionOperationType.VarI);
				}
				else if(var is idWinBool)
				{
					return EmitOperation(tmp, b, WindowExpressionOperationType.VarB);
				}
				else if(var is idWinString)
				{
					return EmitOperation(tmp, b, WindowExpressionOperationType.VarS);
				}
				else
				{
					parser.Warning("Variable expression not vec4, float or int '{0}'", token.ToString());
				}

				return 0;
			}
			else
			{
				// ugly but used for post parsing to fixup named vars
				EmitOperation(token.ToString(), -2, WindowExpressionOperationType.Var);
			}

			return 0;
		}