예제 #1
0
        /// <summary>
        /// Mod_LoadBrushModel
        /// </summary>
        public void LoadBrushModel(BrushModelData mod, Byte[] buffer)
        {
            mod.Load(mod.Name, buffer, (tx) =>
            {
                if (tx.name != null && tx.name.StartsWith("sky"))    // !Q_strncmp(mt->name,"sky",3))
                {
                    Host.RenderContext.WarpableTextures.InitSky(tx);
                }
                else
                {
                    tx.texture = BaseTexture.FromBuffer(Host.Video.Device, tx.name, new ByteArraySegment(tx.pixels),
                                                        ( Int32 )tx.width, ( Int32 )tx.height, true, true);
                }
            },
                     (textureFile) =>
            {
                var lowerName = textureFile.ToLower( );

                if (Host.WadTextures.ContainsKey(lowerName))
                {
                    var wadFile = Host.WadTextures[lowerName];
                    var wad     = Host.WadFiles[wadFile];

                    return(wad.GetLumpBuffer(textureFile));
                }

                return(null);
            });

            //
            // set up the submodels (FIXME: this is confusing)
            //
            for (var i = 0; i < mod.NumSubModels; i++)
            {
                mod.SetupSubModel(ref mod.SubModels[i]);

                if (i < mod.NumSubModels - 1)
                {
                    // duplicate the basic information
                    var name = "*" + (i + 1).ToString( );
                    CurrentModel = FindName(name, ModelType.mod_brush);
                    CurrentModel.CopyFrom(mod);           // *loadmodel = *mod;
                    CurrentModel.Name = name;             //strcpy (loadmodel->name, name);
                    mod = ( BrushModelData )CurrentModel; //mod = loadmodel;
                }
            }
        }