using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Toolbox.Library; using Toolbox.Library.Forms; using SuperBMDLib.Materials; namespace FirstPlugin { public class BMDMaterialWrapper : STGenericMaterial { public Material Material; SuperBMDLib.Model ParentModel; public bool isTransparent { get { return (Material.Flag & 3) == 0; } } public BMDMaterialWrapper(Material mat, SuperBMDLib.Model model) { Material = mat; ParentModel = model; Text = mat.Name; int textureUnit = 1; if (mat.TextureIndices[0] != -1) { int texIndex = mat.TextureIndices[0]; BMDTextureMap matTexture = new BMDTextureMap(this); matTexture.TextureIndex = texIndex; matTexture.Name = ParentModel.Textures[texIndex].Name; matTexture.Type = STGenericMatTexture.TextureType.Diffuse; matTexture.textureUnit = textureUnit++; matTexture.WrapModeS = ConvertWrapMode(ParentModel.Textures[texIndex].WrapS); matTexture.WrapModeT = ConvertWrapMode(ParentModel.Textures[texIndex].WrapT); matTexture.MinFilter = ConvertMinFilter(ParentModel.Textures[texIndex].MinFilter); matTexture.MagFilter = ConvertMagFilter(ParentModel.Textures[texIndex].MagFilter); TextureMaps.Add(matTexture); foreach (var textureIndex in mat.TextureIndices) { if (textureIndex != -1) Nodes.Add(ParentModel.Textures[textureIndex].Name); } } } private STTextureWrapMode ConvertWrapMode(BinaryTextureImage.WrapModes wrapMode) { switch (wrapMode) { case BinaryTextureImage.WrapModes.Repeat: return STTextureWrapMode.Repeat; case BinaryTextureImage.WrapModes.MirroredRepeat: return STTextureWrapMode.Mirror; case BinaryTextureImage.WrapModes.ClampToEdge: return STTextureWrapMode.Clamp; default: return STTextureWrapMode.Repeat; } } private STTextureMinFilter ConvertMinFilter(BinaryTextureImage.FilterMode filterMode) { switch (filterMode) { case BinaryTextureImage.FilterMode.Linear: return STTextureMinFilter.Linear; case BinaryTextureImage.FilterMode.LinearMipmapLinear: return STTextureMinFilter.Linear; case BinaryTextureImage.FilterMode.LinearMipmapNearest: return STTextureMinFilter.LinearMipMapNearest; case BinaryTextureImage.FilterMode.Nearest: return STTextureMinFilter.Nearest; case BinaryTextureImage.FilterMode.NearestMipmapLinear: return STTextureMinFilter.NearestMipmapLinear; case BinaryTextureImage.FilterMode.NearestMipmapNearest: return STTextureMinFilter.NearestMipmapNearest; default: return STTextureMinFilter.Linear; } } private STTextureMagFilter ConvertMagFilter(BinaryTextureImage.FilterMode filterMode) { switch (filterMode) { case BinaryTextureImage.FilterMode.Linear: return STTextureMagFilter.Linear; case BinaryTextureImage.FilterMode.LinearMipmapLinear: return STTextureMagFilter.Linear; case BinaryTextureImage.FilterMode.LinearMipmapNearest: return STTextureMagFilter.Linear; case BinaryTextureImage.FilterMode.Nearest: return STTextureMagFilter.Nearest; case BinaryTextureImage.FilterMode.NearestMipmapLinear: return STTextureMagFilter.Nearest; case BinaryTextureImage.FilterMode.NearestMipmapNearest: return STTextureMagFilter.Nearest; default: return STTextureMagFilter.Linear; } } public override void OnClick(TreeView treeView) { STPropertyGrid editor = (STPropertyGrid)LibraryGUI.GetActiveContent(typeof(STPropertyGrid)); if (editor == null) { editor = new STPropertyGrid(); LibraryGUI.LoadEditor(editor); } editor.Text = Text; editor.Dock = DockStyle.Fill; editor.LoadProperty(Material, null); } } }