/// <summary> /// Adds miscellaneous RMB flats to block node. /// </summary> /// <param name="block">DFBlock</param> /// <param name="blockNode">BlockNode.</param> private void AddRMBMiscFlats(ref DFBlock block, BlockNode blockNode) { // Iterate through all misc flat records foreach (DFBlock.RmbBlockFlatObjectRecord obj in block.RmbBlock.MiscFlatObjectRecords) { // Get flat type BillboardNode.BillboardType billboardType = GetFlatType(obj.TextureArchive); // Flags TextureManager.TextureCreateFlags flags = TextureManager.TextureCreateFlags.Dilate | TextureManager.TextureCreateFlags.PreMultiplyAlpha; if (Core.GraphicsProfile == GraphicsProfile.HiDef) { flags |= TextureManager.TextureCreateFlags.MipMaps; } // Load flat int textureKey; Vector2 startSize; Vector2 finalSize; if (true == LoadDaggerfallFlat( obj.TextureArchive, obj.TextureRecord, flags, out textureKey, out startSize, out finalSize)) { // Calcuate position Vector3 position = new Vector3( obj.XPos, -obj.YPos + (finalSize.Y / 2) - 4, -rmbSide + -obj.ZPos); // Create billboard node BillboardNode billboardNode = new BillboardNode( billboardType, textureKey, finalSize); billboardNode.Position = position; blockNode.Add(billboardNode); // Add point light node if (billboardType == BillboardNode.BillboardType.Light) { AddPointLight(position, PointLightNode.ExteriorRadius, blockNode); } } } }
/// <summary> /// Adds RDB flat to scene node. /// </summary> /// <param name="obj">RdbObject.</param> /// <param name="blockNode">BlockNode.</param> private void AddRDBFlat(DFBlock.RdbObject obj, BlockNode blockNode) { // Get flat type BillboardNode.BillboardType billboardType = GetFlatType(obj.Resources.FlatResource.TextureArchive); // Add light if needed // Load flat int textureKey; Vector2 startSize; Vector2 finalSize; if (true == LoadDaggerfallFlat( obj.Resources.FlatResource.TextureArchive, obj.Resources.FlatResource.TextureRecord, TextureManager.TextureCreateFlags.Dilate | TextureManager.TextureCreateFlags.PreMultiplyAlpha, out textureKey, out startSize, out finalSize)) { // Foliage (TEXTURE.500 and up) do not seem to use scaling // in dungeons. Revert scaling. if (obj.Resources.FlatResource.TextureArchive > 499) { finalSize = startSize; } // Calcuate position Vector3 position = new Vector3( obj.XPos, -obj.YPos, -obj.ZPos); // Create billboard node BillboardNode billboardNode = new BillboardNode( billboardType, textureKey, finalSize); billboardNode.Position = position; blockNode.Add(billboardNode); // Add point light node if (billboardType == BillboardNode.BillboardType.Light) { AddPointLight(position, PointLightNode.DungeonRadius, blockNode); } } }