private static EntityGeometry Billboard(EntityData data, Texture2D propTexture) { ITextureDefintion texture = DefaultTextureDefinition.Instance; var textures = data.Textures; if (textures != null && textures.Length > 0) { texture = new TextureRectangle(textures[0], propTexture); } var size = data.Size2; var vertices = RectangleComposer.Create(1f, 1f, texture); VertexTransformer.Rotate(vertices, new Vector3(data.billboardTilt, 0, 0)); VertexTransformer.Scale(vertices, new Vector3(size.X, size.Y, 1f)); if (size.Y != 1f) { VertexTransformer.Offset(vertices, new Vector3(0, (size.Y - 1f) / 2f, 0)); } var geometry = new EntityGeometry { Vertices = vertices, Heights = new[] { size.Y, size.Y, size.Y, size.Y }, Size = new Vector3(size.X, size.Y, size.X) }; return(geometry); }
private static EntityGeometry HouseInside(EntityData data, Texture2D propTexture) { ITextureDefintion texture = DefaultTextureDefinition.Instance; var textures = data.Textures; if (textures != null && textures.Length > 0) { texture = new TextureRectangle(textures[0], propTexture); } var size = data.Size3; var allVertices = new List <VertexPositionNormalTexture>(); // back { var vertices = RectangleComposer.Create(1f, 1f, texture); VertexTransformer.Scale(vertices, new Vector3(size.X, size.Y, 1f)); VertexTransformer.Rotate(vertices, new Vector3(MathHelper.PiOver2, 0, 0)); VertexTransformer.Offset(vertices, new Vector3(0, 0, -size.Z / 2f)); allVertices.AddRange(vertices); } // left { var vertices = RectangleComposer.Create(1f, 1f, texture); VertexTransformer.Scale(vertices, new Vector3(size.Z, size.Y, 1f)); VertexTransformer.Rotate(vertices, new Vector3(MathHelper.PiOver2, MathHelper.PiOver2, 0)); VertexTransformer.Offset(vertices, new Vector3(-size.X / 2f, 0, 0)); allVertices.AddRange(vertices); } // right { var vertices = RectangleComposer.Create(1f, 1f, texture); VertexTransformer.Scale(vertices, new Vector3(size.Z, size.Y, 1f)); VertexTransformer.Rotate(vertices, new Vector3(MathHelper.PiOver2, -MathHelper.PiOver2, 0)); VertexTransformer.Offset(vertices, new Vector3(size.X / 2f, 0, 0)); allVertices.AddRange(vertices); } // floor { var vertices = RectangleComposer.Create(1f, 1f, texture); VertexTransformer.Scale(vertices, new Vector3(size.X, 1f, size.Z)); VertexTransformer.Offset(vertices, new Vector3(0, -0.499f, 0)); // do not put 0.5 to not interfer with floors allVertices.AddRange(vertices); } var geometry = new EntityGeometry { Vertices = allVertices.ToArray(), Heights = new[] { size.Y, size.Y, size.Y, size.Y }, Size = new Vector3(size.X, size.Y, size.Z) }; return(geometry); }