/// <summary> /// Loads a Daggerfall texture as a billboard. /// </summary> /// <param name="archive">Texture archive.</param> /// <param name="record">Texture record.</param> /// <param name="flat">Flat data.</param> public void LoadBillboard(DaggerfallBlockComponent.BlockFlat flat) { // Get path to texture file string path = Path.Combine( core.MaterialManager.Arena2Path, TextureFile.IndexToFileName(flat.Archive)); // Get size and scale of this texture System.Drawing.Size size = TextureFile.QuickSize(path, flat.Record); System.Drawing.Size scale = TextureFile.QuickScale(path, flat.Record); // Set start size Vector2 startSize; startSize.X = size.Width; startSize.Y = size.Height; // Apply scale Vector2 finalSize; int xChange = (int)(size.Width * (scale.Width / BlocksFile.ScaleDivisor)); int yChange = (int)(size.Height * (scale.Height / BlocksFile.ScaleDivisor)); finalSize.X = (size.Width + xChange); finalSize.Y = (size.Height + yChange); finalSize *= ModelManager.GlobalScale; // Load material this.material = core.MaterialManager.CreateDaggerfallMaterialEffect( flat.Archive, flat.Record, null, MaterialManager.DefaultBillboardFlags); // Save settings this.size = finalSize; // Calcuate offset for correct positioning in scene if (flat.Dungeon) { this.offset = Vector3.Zero; } else { this.offset = new Vector3(0, (finalSize.Y / 2) - (4 * ModelManager.GlobalScale), 0); } // Set bounding sphere BoundingSphere sphere; sphere.Center = Vector3.Zero; if (finalSize.X > finalSize.Y) { sphere.Radius = finalSize.X / 2; } else { sphere.Radius = finalSize.Y / 2; } this.BoundingSphere = sphere; }
/// <summary> /// Constructor to load billboard texture. /// </summary> /// <param name="core">Engine core.</param> /// <param name="archive">Texture archive index.</param> /// <param name="record">Texture record index.</param> /// <param name="flat">Flat data.</param> public DaggerfallBillboardComponent(DeepCore core, DaggerfallBlockComponent.BlockFlat flat) : base(core) { LoadBillboard(flat); }