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

public BuildDoodads ( IEnumerable definitions, IList references, RectangleF bounds, Matrix rootTransform = null ) : IEnumerable
definitions IEnumerable
references IList
bounds RectangleF
rootTransform Matrix
Результат IEnumerable
Пример #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));
        }
Пример #2
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);
        }
Пример #3
0
        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
            });
        }