BananaMpq.Geometry.Builders.WmoBuilder.BuildWmos C# (CSharp) Метод

BuildWmos() публичный Метод

public BuildWmos ( IEnumerable definitions, IList references, RectangleF bounds ) : WmoBuildResults
definitions IEnumerable
references IList
bounds RectangleF
Результат WmoBuildResults
        public WmoBuildResults BuildWmos(IEnumerable<IModelDefinition> definitions, IList<StringReference> references, RectangleF bounds)
        {
            var groups = Enumerable.Empty<SceneObject>();
            var liquids = Enumerable.Empty<SceneObject>();
            var doodads = Enumerable.Empty<SceneObject>();
            foreach (var definition in definitions)
            {
                if (definition.Id != null && !_builtIds.Add(definition.Id.Value)) continue;
                var file = definition.GetModelReference(references);
                var wmo = Files.GetWmo(file);
                var transform = definition.GetTranform();

                var doodadDefs = definition.FilterDoodadSetDefinitions(wmo.DoodadSets, wmo.DoodadDefinitions);
                doodads = doodads.Concat(_doodadBuilder.BuildDoodads(doodadDefs, wmo.DoodadReferences, bounds, transform));

                groups = groups.Concat(from g in wmo.Groups
                                       let collisionTriangles =
                                           g.Triangles.Where((t, i) => (g.TriangleFlags[i] & MopyChunk.NoCollision) == 0)
                                       where collisionTriangles.Any()
                                       select BuildModelFromTransform(g.Vertices, collisionTriangles, transform, file) into sceneObject
                                       where bounds.Intersects(sceneObject.Bounds)
                                       select sceneObject);

                liquids = liquids.Concat(from g in wmo.Groups
                                         where g.Liquid != null
                                         let l = g.Liquid
                                         let meshBuilder = new SquareMeshBuilder(l.HeightMap, new Vector3(l.Position.X, l.Position.Y, 0.0f),
                                             MapChunk.TileSize, transform)
                                         let materialProperties = _getLiquidMaterial(g.DetermineLiquidType())
                                         select meshBuilder.BuildSquareMesh((c, r) => !l.ExistsTable[r, c], materialProperties, bounds)
                                         into sceneObject
                                         where sceneObject != null
                                         select sceneObject);
            }

            return new WmoBuildResults
            {
                GroupObjects = groups,
                Doodads = doodads,
                Liquids = liquids
            };
        }

Usage Example

Пример #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="continent"></param>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <param name="padding">You can pad from 0 up to an mcnk sized strip around the adt.</param>
        /// <returns></returns>
        public Scene BuildTile(string continent, int x, int y, float padding = MapChunk.TileSize)
        {
            var chunkBuilder  = new ChunkBuilder(GetLiquidMaterialProperties);
            var doodadBuilder = new DoodadBuilder(_files);
            var wmoBuilder    = new WmoBuilder(_files, doodadBuilder, GetLiquidMaterialProperties);
            var terrain       = new List <SceneObject>();
            var liquids       = new List <SceneObject>();
            var doodads       = new List <SceneObject>();
            var wmos          = new List <SceneObject>();

            var centerAdt = _files.GetAdt(continent, x, y);
            var bounds    = GetSceneBounds(centerAdt, padding);

            foreach (var p in AdtRegion(continent, x, y))
            {
                var curX = (int)p.X;
                var curY = (int)p.Y;
                var adt  = _files.GetAdt(continent, curX, curY);
                terrain.AddRange(chunkBuilder.BuildTerrain(adt, bounds));
                liquids.AddRange(chunkBuilder.BuildLiquid(adt, bounds));
                doodads.AddRange(doodadBuilder.BuildDoodads(DefinedDoodads(adt), adt.DoodadReferences, bounds));
                var wmoResults = wmoBuilder.BuildWmos(DefinedWmos(adt), adt.WmoReferences, bounds);
                wmos.AddRange(wmoResults.GroupObjects);

                doodads.AddRange(wmoResults.Doodads);
                liquids.AddRange(wmoResults.Liquids);
            }

            return(MergeIntoScene(centerAdt, terrain, liquids, doodads, wmos));
        }
All Usage Examples Of BananaMpq.Geometry.Builders.WmoBuilder::BuildWmos