public BuildDoodads ( IEnumerable |
||
definitions | IEnumerable |
|
references | IList |
|
bounds | RectangleF | |
rootTransform | Matrix | |
return | IEnumerable |
/// <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)); }
/// <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); }
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 }); }