Inheritance: IDisposable
Example #1
0
        /// <summary>
        /// Finds the decl with the given name and type; returning a default version if requested.
        /// </summary>
        /// <param name="type"></param>
        /// <param name="name"></param>
        /// <param name="makeDefault"> If true, a default decl of appropriate type will be created.</param>
        /// <returns>Decl with the given name or a default decl of the requested type if not found or null if makeDefault is false.</returns>
        public T FindType <T>(DeclType type, string name, bool makeDefault) where T : idDecl
        {
            if ((name == null) || (name == string.Empty))
            {
                name = "_emptyName";
            }

            idDecl decl = FindTypeWithoutParsing(type, name, makeDefault);

            if (decl == null)
            {
                return(null);
            }

            // if it hasn't been parsed yet, parse it now
            if (decl.State == DeclState.Unparsed)
            {
                decl.ParseLocal();
            }

            // mark it as referenced
            decl.ReferencedThisLevel = true;
            decl.EverReferenced      = true;

            if (_insideLevelLoad == true)
            {
                decl.ParsedOutsideLevelLoad = false;
            }

            return(decl as T);
        }
Example #2
0
        /// <summary>
        /// This finds or creates the decl, but does not cause a parse.  This is only used internally.
        /// </summary>
        /// <param name="type"></param>
        /// <param name="name"></param>
        /// <param name="makeDefault"></param>
        /// <returns></returns>
        internal idDecl FindTypeWithoutParsing(DeclType type, string name, bool makeDefault)
        {
            if (_declTypes.ContainsKey(type) == false)
            {
                idConsole.FatalError("find type without parsing: bad type {0}", type.ToString().ToLower());
            }
            else
            {
                string canonicalName = name;

                foreach (idDecl decl in _declsByType[type])
                {
                    if (decl.Name.Equals(canonicalName, StringComparison.OrdinalIgnoreCase) == true)
                    {
                        // only print these when decl_show is set to 2, because it can be a lot of clutter
                        if (idE.CvarSystem.GetInteger("decl_show") > 1)
                        {
                            MediaPrint("referencing {0} {1}", type.ToString().ToLower(), name);
                        }

                        return(decl);
                    }
                }

                if (makeDefault == true)
                {
                    idDecl newDecl = _declTypes[type].Allocator.Create();
                    newDecl.Name                   = canonicalName;
                    newDecl.Type                   = type;
                    newDecl.State                  = DeclState.Unparsed;
                    newDecl.SourceFile             = _implicitDecls;
                    newDecl.ParsedOutsideLevelLoad = !_insideLevelLoad;
                    newDecl.Index                  = _declsByType[type].Count;

                    _declsByType[type].Add(newDecl);

                    return(newDecl);
                }
            }

            return(null);
        }
Example #3
0
        public idDecl DeclByIndex(DeclType type, int index, bool forceParse)
        {
            if (_declTypes.ContainsKey(type) == false)
            {
                idConsole.FatalError("idDeclManager.DeclByIndex: bad type: {0}", type.ToString().ToLower());
            }

            if ((index < 0) || (index >= _declsByType[type].Count))
            {
                idConsole.Error("idDeclManager.DeclByIndex: out of range [{0}: {1} < {2}]", type, index, _declsByType[type].Count);
            }

            idDecl decl = _declsByType[type][index];

            if ((forceParse == true) && (decl.State == DeclState.Unparsed))
            {
                decl.ParseLocal();
            }

            return(decl);
        }
Example #4
0
		private void ParseDeform(idLexer lexer)
		{
			idToken token = lexer.ExpectAnyToken();

			if(token == null)
			{
				return;
			}

			string tokenValue = token.ToString();
			string tokenLower = tokenValue.ToLower();

			if(tokenLower == "sprite")
			{
				_deformType = DeformType.Sprite;
				_cullType = CullType.TwoSided;

				this.MaterialFlag = MaterialFlags.NoShadows;
			}
			else if(tokenLower == "tube")
			{
				_deformType = DeformType.Tube;
				_cullType = CullType.TwoSided;

				this.MaterialFlag = MaterialFlags.NoShadows;
			}
			else if(tokenLower == "flare")
			{
				_deformType = DeformType.Flare;
				_cullType = CullType.TwoSided;
				_deformRegisters[0] = ParseExpression(lexer);

				this.MaterialFlag = MaterialFlags.NoShadows;
			}
			else if(tokenLower == "expand")
			{
				_deformType = DeformType.Expand;
				_deformRegisters[0] = ParseExpression(lexer);
			}
			else if(tokenLower == "move")
			{
				_deformType = DeformType.Move;
				_deformRegisters[0] = ParseExpression(lexer);
			}
			else if(tokenLower == "turbulent")
			{
				_deformType = DeformType.Turbulent;

				if((token = lexer.ExpectAnyToken()) == null)
				{
					lexer.Warning("deform particle missing particle name");
					this.MaterialFlag = MaterialFlags.Defaulted;
				}
				else
				{
					_deformDecl = idE.DeclManager.FindType(DeclType.Table, token.ToString(), true);

					_deformRegisters[0] = ParseExpression(lexer);
					_deformRegisters[1] = ParseExpression(lexer);
					_deformRegisters[2] = ParseExpression(lexer);
				}
			}
			else if(tokenLower == "eyeball")
			{
				_deformType = DeformType.Eyeball;
			}
			else if(tokenLower == "particle")
			{
				_deformType = DeformType.Particle;

				if((token = lexer.ExpectAnyToken()) == null)
				{
					lexer.Warning("deform particle missing particle name");
					this.MaterialFlag = MaterialFlags.Defaulted;
				}
				else
				{
					_deformDecl = idE.DeclManager.FindType(DeclType.Particle, token.ToString(), true);
				}
			}
			else if(tokenLower == "particle2")
			{
				_deformType = DeformType.Particle2;

				if((token = lexer.ExpectAnyToken()) == null)
				{
					lexer.Warning("deform particle missing particle name");
					this.MaterialFlag = MaterialFlags.Defaulted;
				}
				else
				{
					_deformDecl = idE.DeclManager.FindType(DeclType.Table, token.ToString(), true);

					_deformRegisters[0] = ParseExpression(lexer);
					_deformRegisters[1] = ParseExpression(lexer);
					_deformRegisters[2] = ParseExpression(lexer);
				}
			}
			else
			{
				lexer.Warning("Bad deform type '{0}'", tokenValue);
				this.MaterialFlag = MaterialFlags.Defaulted;
			}
		}