Switch-Toolbox/File_Format_Library/FileFormats/BMD/BMDMaterialWrapper.cs
2019-08-06 15:57:36 -04:00

114 lines
4.5 KiB
C#

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);
}
}
}