From e4722ed1af1b64ce19d1949f5f1415ee7c968e81 Mon Sep 17 00:00:00 2001 From: KillzXGaming Date: Sat, 7 Dec 2019 20:16:13 -0500 Subject: [PATCH] Alot of additions. General - Always allow multiple instances of the tool by default. (UseSingleInstance in config.XML) - Yaz0 now uses a new library using c code. This improves compression times and is comparable to wzst's yaz0 compressor. Thanks to AboodXD for helping port the code. - Add flat buffer templates for gfbmdl and gfbanm. - Redid UV editor. Now using new 2D engine with some improvements. Should work better with mutliple file formats than just bfres. - Auto compress bfres with .sbfres extension. BFLYT: -Add animation reference list to panes if they have any animations. - Note the animation editor in it is not functional yet. GFBMDL - Progress on model importing. Currently crashes on many tests so saving is currently disabled till i figure out why. - Add new texture map display with UV coordinates shown. Displays how transforms are handled. - Add option to export materials and models entirely as .json files. DAE - improve bone/joint check. --- .../BFRES/Bfres Structs/SubFiles/FMDL.cs | 12 - .../BFRES/Bfres Structs/SubFiles/FMDL/FMAT.cs | 2 + File_Format_Library/FileFormats/Grezzo/CMB.cs | 15 +- .../FileFormats/Layout/Common.cs | 170 +++ .../FileFormats/Pokemon/GFBMDL/GFBMDL.cs | 195 --- .../FileFormats/Pokemon/GFBMDL/GFLXModel.cs | 333 ------ .../Pokemon/GFLX/FlatBufferHelper.cs | 39 + .../{ => GFLX}/GFBANIM/FlatBuffers/gfbanim.cs | 0 .../Pokemon/{ => GFLX}/GFBANIM/GFBANM.cs | 233 ++-- .../GFLX/GFBANIM/GfbanimKeyFrameLoader.cs | 129 ++ .../GFBANMCFG/FlatBuffers/gfbanmcfg.cs | 0 .../Pokemon/{ => GFLX}/GFBANMCFG/GFBANMCFG.cs | 0 .../GFLX/GFBMDL/FlatBuffers/BufferToStruct.cs | 312 +++++ .../{ => GFLX}/GFBMDL/FlatBuffers/gfbmdl.cs | 407 +++---- .../FileFormats/Pokemon/GFLX/GFBMDL/GFBMDL.cs | 655 ++++++++++ .../Pokemon/{ => GFLX}/GFBMDL/GFLXMesh.cs | 51 +- .../{ => GFLX}/GFBMDL/GFLXMeshBufferHelper.cs | 271 ++++- .../Pokemon/GFLX/GFBMDL/GFLXModel.cs | 508 ++++++++ .../Pokemon/GFLX/GFBMDL/GFMDLStructs.cs | 276 +++++ .../GFLX/GFBMDL/GfbmdlImportSettings.cs | 52 + .../GFBPMCATALOG/FlatBuffers/gfbpmcatalog.cs | 0 .../Pokemon/{ => GFLX}/PokemonTable.cs | 0 .../File_Format_Library.csproj | 59 +- File_Format_Library/GL/GFBMDL_Render.cs | 4 +- .../Basic/LayoutAnimEditorBasic.Designer.cs | 3 +- .../Animations/Basic/LayoutAnimEditorBasic.cs | 13 +- .../PaneAnimationController.Designer.cs | 147 +++ .../BFLYT/Editor/PaneAnimationController.cs | 87 ++ .../BFLYT/Editor/PaneAnimationController.resx | 0 .../GUI/BFLYT/Editor/PaneEditor.Designer.cs | 65 +- .../GUI/BFLYT/Editor/PaneEditor.cs | 20 + .../GUI/BFLYT/Editor/PaneEditor.resx | 2 +- File_Format_Library/GUI/BFLYT/LayoutEditor.cs | 6 +- .../GUI/GFBMDL/GFLXMaterialEditor.Designer.cs | 1059 ++++++++++++----- .../GUI/GFBMDL/GFLXMaterialEditor.cs | 105 +- .../GUI/GFBMDL/GFLXMaterialEditor.resx | 208 ---- .../GUI/GFBMDL/GFLXMeshEditor.Designer.cs | 140 +++ .../GUI/GFBMDL/GFLXMeshEditor.cs | 76 ++ .../GUI/GFBMDL/GFLXMeshEditor.resx | 0 .../GUI/GFBMDL/GFLXModelImporter.Designer.cs | 600 ++++++++++ .../GUI/GFBMDL/GFLXModelImporter.cs | 345 ++++++ .../GUI/GFBMDL/GFLXModelImporter.resx | 120 ++ .../Importers/GX2/GTXTextureImporter.cs | 6 +- File_Format_Library/Main.cs | 4 +- README.md | 2 +- .../Compression/Formats/Yaz0.cs | 245 +++- .../FileFormats/Assimp/Assimp.cs | 8 +- Switch_Toolbox_Library/FileFormats/DAE/DAE.cs | 2 + .../Dialogs/ExportModelSettings.Designer.cs | 31 +- .../Forms/Dialogs/ExportModelSettings.cs | 9 + .../Forms/Editors/TextEditor/TextEditor.cs | 26 + .../Forms/Editors/UV/PickableUVMap.cs | 203 ++++ .../Forms/Editors/UV/UVEditor.Designer.cs | 38 +- .../Forms/Editors/UV/UVEditor.cs | 355 +----- .../Forms/Editors/UV/UVEditor2.Designer.cs | 326 ----- .../Forms/Editors/UV/UVEditor2.cs | 532 --------- .../Editors/UV/UVEditorAdvanced.Designer.cs | 45 - .../Forms/Editors/UV/UVEditorAdvanced.cs | 26 - .../Forms/Editors/UV/UVEditorForm.Designer.cs | 4 +- .../Forms/Editors/UV/UVViewport.cs | 267 ++--- .../Forms/Editors/UV/UVViewport.resx | 120 ++ .../Generics/GenericObject.cs | 10 +- .../Generics/GenericPolygonGroup.cs | 2 + .../Generics/Materials/GenericMatTexture.cs | 10 + Switch_Toolbox_Library/IO/FileWriter.cs | 8 + .../IO/FlatBuffer/FlatBufferConverter.cs | 217 ++++ Switch_Toolbox_Library/IO/STFileSaver.cs | 43 +- .../IO/SyrootCommon/Half.cs | 2 +- Switch_Toolbox_Library/OpenGL/Viewport2D.cs | 14 +- .../Properties/Resources.Designer.cs | 30 + .../Properties/Resources.resx | 9 + Switch_Toolbox_Library/Rendering/RenderLib.cs | 8 + .../Resources/FlatBuffers/gfbanm.fbs | 210 ++++ .../Resources/FlatBuffers/gfbmdl.fbs | 196 +++ Switch_Toolbox_Library/Resources/flatc.exe | Bin 0 -> 1536000 bytes Switch_Toolbox_Library/Runtime.cs | 7 +- Switch_Toolbox_Library/Toolbox_Library.csproj | 32 +- Toolbox/Lib/yaz0.dll | Bin 0 -> 49759 bytes Toolbox/Shader/GFBModel.frag | 1 - Toolbox/Shader/GFBModel.vert | 1 + Toolbox/Shader/GenericShader.vert | 9 +- Toolbox/Toolbox.csproj | 3 + 82 files changed, 6775 insertions(+), 3005 deletions(-) delete mode 100644 File_Format_Library/FileFormats/Pokemon/GFBMDL/GFBMDL.cs delete mode 100644 File_Format_Library/FileFormats/Pokemon/GFBMDL/GFLXModel.cs create mode 100644 File_Format_Library/FileFormats/Pokemon/GFLX/FlatBufferHelper.cs rename File_Format_Library/FileFormats/Pokemon/{ => GFLX}/GFBANIM/FlatBuffers/gfbanim.cs (100%) rename File_Format_Library/FileFormats/Pokemon/{ => GFLX}/GFBANIM/GFBANM.cs (74%) create mode 100644 File_Format_Library/FileFormats/Pokemon/GFLX/GFBANIM/GfbanimKeyFrameLoader.cs rename File_Format_Library/FileFormats/Pokemon/{ => GFLX}/GFBANMCFG/FlatBuffers/gfbanmcfg.cs (100%) rename File_Format_Library/FileFormats/Pokemon/{ => GFLX}/GFBANMCFG/GFBANMCFG.cs (100%) create mode 100644 File_Format_Library/FileFormats/Pokemon/GFLX/GFBMDL/FlatBuffers/BufferToStruct.cs rename File_Format_Library/FileFormats/Pokemon/{ => GFLX}/GFBMDL/FlatBuffers/gfbmdl.cs (73%) create mode 100644 File_Format_Library/FileFormats/Pokemon/GFLX/GFBMDL/GFBMDL.cs rename File_Format_Library/FileFormats/Pokemon/{ => GFLX}/GFBMDL/GFLXMesh.cs (74%) rename File_Format_Library/FileFormats/Pokemon/{ => GFLX}/GFBMDL/GFLXMeshBufferHelper.cs (50%) create mode 100644 File_Format_Library/FileFormats/Pokemon/GFLX/GFBMDL/GFLXModel.cs create mode 100644 File_Format_Library/FileFormats/Pokemon/GFLX/GFBMDL/GFMDLStructs.cs create mode 100644 File_Format_Library/FileFormats/Pokemon/GFLX/GFBMDL/GfbmdlImportSettings.cs rename File_Format_Library/FileFormats/Pokemon/{ => GFLX}/GFBPMCATALOG/FlatBuffers/gfbpmcatalog.cs (100%) rename File_Format_Library/FileFormats/Pokemon/{ => GFLX}/PokemonTable.cs (100%) create mode 100644 File_Format_Library/GUI/BFLYT/Editor/PaneAnimationController.Designer.cs create mode 100644 File_Format_Library/GUI/BFLYT/Editor/PaneAnimationController.cs rename Switch_Toolbox_Library/Forms/Editors/UV/UVEditor2.resx => File_Format_Library/GUI/BFLYT/Editor/PaneAnimationController.resx (100%) create mode 100644 File_Format_Library/GUI/GFBMDL/GFLXMeshEditor.Designer.cs create mode 100644 File_Format_Library/GUI/GFBMDL/GFLXMeshEditor.cs rename Switch_Toolbox_Library/Forms/Editors/UV/UVEditorAdvanced.resx => File_Format_Library/GUI/GFBMDL/GFLXMeshEditor.resx (100%) create mode 100644 File_Format_Library/GUI/GFBMDL/GFLXModelImporter.Designer.cs create mode 100644 File_Format_Library/GUI/GFBMDL/GFLXModelImporter.cs create mode 100644 File_Format_Library/GUI/GFBMDL/GFLXModelImporter.resx create mode 100644 Switch_Toolbox_Library/Forms/Editors/UV/PickableUVMap.cs delete mode 100644 Switch_Toolbox_Library/Forms/Editors/UV/UVEditor2.Designer.cs delete mode 100644 Switch_Toolbox_Library/Forms/Editors/UV/UVEditor2.cs delete mode 100644 Switch_Toolbox_Library/Forms/Editors/UV/UVEditorAdvanced.Designer.cs delete mode 100644 Switch_Toolbox_Library/Forms/Editors/UV/UVEditorAdvanced.cs create mode 100644 Switch_Toolbox_Library/Forms/Editors/UV/UVViewport.resx create mode 100644 Switch_Toolbox_Library/IO/FlatBuffer/FlatBufferConverter.cs create mode 100644 Switch_Toolbox_Library/Resources/FlatBuffers/gfbanm.fbs create mode 100644 Switch_Toolbox_Library/Resources/FlatBuffers/gfbmdl.fbs create mode 100644 Switch_Toolbox_Library/Resources/flatc.exe create mode 100644 Toolbox/Lib/yaz0.dll diff --git a/File_Format_Library/FileFormats/BFRES/Bfres Structs/SubFiles/FMDL.cs b/File_Format_Library/FileFormats/BFRES/Bfres Structs/SubFiles/FMDL.cs index 2b523bcc..87a05cc2 100644 --- a/File_Format_Library/FileFormats/BFRES/Bfres Structs/SubFiles/FMDL.cs +++ b/File_Format_Library/FileFormats/BFRES/Bfres Structs/SubFiles/FMDL.cs @@ -816,18 +816,6 @@ namespace Bfres.Structs ImportedMaterials = seModel.materials; ImportedSkeleton = seModel.skeleton; } - else if (Runtime.DEVELOPER_DEBUG_MODE) - { - DAE daeFile = new DAE(); - bool IsLoaded = daeFile.LoadFile(FileName); - - if (!IsLoaded) - return; - - ImportedObjects = daeFile.objects; - ImportedMaterials = daeFile.materials; - ImportedSkeleton = daeFile.skeleton; - } else { AssimpData assimp = new AssimpData(); diff --git a/File_Format_Library/FileFormats/BFRES/Bfres Structs/SubFiles/FMDL/FMAT.cs b/File_Format_Library/FileFormats/BFRES/Bfres Structs/SubFiles/FMDL/FMAT.cs index 7664282c..751c47f3 100644 --- a/File_Format_Library/FileFormats/BFRES/Bfres Structs/SubFiles/FMDL/FMAT.cs +++ b/File_Format_Library/FileFormats/BFRES/Bfres Structs/SubFiles/FMDL/FMAT.cs @@ -738,6 +738,8 @@ namespace Bfres.Structs public float MaxLod; public float BiasLod; + + public override STGenericTexture GetTexture() { foreach (var bntx in PluginRuntime.bntxContainers) diff --git a/File_Format_Library/FileFormats/Grezzo/CMB.cs b/File_Format_Library/FileFormats/Grezzo/CMB.cs index 98cc197c..9c093355 100644 --- a/File_Format_Library/FileFormats/Grezzo/CMB.cs +++ b/File_Format_Library/FileFormats/Grezzo/CMB.cs @@ -695,10 +695,21 @@ namespace FirstPlugin int VertexCount = (int)Slice.Size / StrideSize; VertexAttribute.VertexData = new Syroot.Maths.Vector4F[VertexCount]; - for (int v = 0; v < VertexCount; v++) + if (VertexAttribute.Mode == SepdVertexAttribMode.ARRAY) { - VertexAttribute.VertexData[v] = ReadVertexBufferData(reader, VertexAttribute, elementCount); + for (int v = 0; v < VertexCount; v++) { + VertexAttribute.VertexData[v] = ReadVertexBufferData(reader, VertexAttribute, elementCount); + } } + else + { + VertexAttribute.VertexData[0] = new Syroot.Maths.Vector4F( + VertexAttribute.Constants[0], + VertexAttribute.Constants[1], + VertexAttribute.Constants[2], + VertexAttribute.Constants[3]); + } + } private static Syroot.Maths.Vector4F ReadVertexBufferData(FileReader reader, SepdVertexAttribute VertexAttribute, int elementCount) diff --git a/File_Format_Library/FileFormats/Layout/Common.cs b/File_Format_Library/FileFormats/Layout/Common.cs index 320e9234..28d01443 100644 --- a/File_Format_Library/FileFormats/Layout/Common.cs +++ b/File_Format_Library/FileFormats/Layout/Common.cs @@ -821,6 +821,11 @@ namespace LayoutBXLYT return (int[])data; } + public byte[] GetBytes() + { + return (byte[])data; + } + public void SetValue(string value) { data = value; @@ -839,14 +844,123 @@ namespace LayoutBXLYT Type = UserDataType.Int; } + public void SetValue(List value) + { + data = value; + Type = UserDataType.StructData; + } + + public List GetStructs() + { + return (List)data; + } + internal long _pos; } + public class UserDataStruct + { + public ushort Unknown { get; set; } // 0 + + public List Entries = new List(); + + public UserDataStruct(FileReader reader, BxlytHeader header) + { + long pos = reader.Position; + + ushort unknown = reader.ReadUInt16(); + ushort numEntries = reader.ReadUInt16(); + uint[] offsets = reader.ReadUInt32s(numEntries); + + + for (int i = 0; i < numEntries; i++) + { + reader.SeekBegin(pos + offsets[i]); + Entries.Add(new UserDataStructEntry(reader, header)); + } + } + + public void Write(FileWriter writer, LayoutHeader header) + { + long pos = writer.Position; + + writer.Write(Unknown); + writer.Write((ushort)Entries.Count); + + long _ofsPos = writer.Position; + //Fill empty spaces for offsets later + writer.Write(new uint[Entries.Count]); + + for (int i = 0; i < Entries.Count; i++) + { + writer.WriteUint32Offset(_ofsPos + (i * 4), pos); + Entries[i].Write(writer, header); + } + } + } + + public class UserDataStructEntry + { + public uint DataType { get; set; } + + public List Data { get; set; } + + public UserDataStructEntry(FileReader reader, BxlytHeader header) + { + long pos = reader.Position; + + DataType = reader.ReadUInt32(); + uint numEntries = reader.ReadUInt32(); + uint[] offsets = reader.ReadUInt32s((int)numEntries); + + Console.WriteLine($"USD1 Struct DataType " + DataType); + + Data = new List(); + for (int i = 0; i < numEntries; i++) + { + reader.SeekBegin(pos + offsets[i]); + switch (DataType) + { + case 0: + Data.Add(reader.ReadZeroTerminatedString()); + break; + } + } + } + + public void Write(FileWriter writer, LayoutHeader header) + { + long pos = writer.Position; + + writer.Write(DataType); + writer.Write(Data.Count); + + long _ofsPos = writer.Position; + //Fill empty spaces for offsets later + writer.Write(new uint[Data.Count]); + + for (int i = 0; i < Data.Count; i++) + { + writer.WriteUint32Offset(_ofsPos + (i * 4), pos); + switch (DataType) + { + case 0: + writer.WriteString((string)Data[i]); + break; + } + + if (i == Data.Count - 1) + writer.Align(64); + } + } + } + public enum UserDataType : byte { String, Int, Float, + StructData, } public enum AnimationTarget : byte @@ -1379,6 +1493,53 @@ namespace LayoutBXLYT public BxlanPAT1 AnimationTag; public BxlanPAI1 AnimationInfo; + public static bool ContainsEntry(byte[] bxlanFile, string[] EntryNames) + { + using (var reader = new FileReader(new System.IO.MemoryStream(bxlanFile))) + { + reader.SetByteOrder(true); + + reader.ReadUInt32(); //magic + ushort byteOrderMark = reader.ReadUInt16(); + reader.CheckByteOrderMark(byteOrderMark); + ushort HeaderSize = reader.ReadUInt16(); + uint Version = reader.ReadUInt32(); + uint FileSize = reader.ReadUInt32(); + ushort sectionCount = reader.ReadUInt16(); + reader.ReadUInt16(); //Padding + + reader.SeekBegin(HeaderSize); + for (int i = 0; i < sectionCount; i++) + { + long pos = reader.Position; + string Signature = reader.ReadString(4, Encoding.ASCII); + uint SectionSize = reader.ReadUInt32(); + if (Signature == "pai1") + { + reader.ReadUInt16(); //FrameSize + reader.ReadBoolean(); //Loop + reader.ReadByte(); //padding + var numTextures = reader.ReadUInt16(); + var numEntries = reader.ReadUInt16(); + var entryOffsetTbl = reader.ReadUInt32(); + + reader.SeekBegin(pos + entryOffsetTbl); + var entryOffsets = reader.ReadUInt32s(numEntries); + for (int e = 0; e < numEntries; e++) + { + reader.SeekBegin(pos + entryOffsets[e]); + string name = reader.ReadString(28, true); + if (EntryNames.Contains(name)) + return true; + } + } + + reader.SeekBegin(pos + SectionSize); + } + } + return false; + } + public BxlanPaiEntry TryGetTag(string name) { for (int i = 0; i < AnimationInfo.Entries?.Count; i++) @@ -1389,6 +1550,15 @@ namespace LayoutBXLYT return null; } + public bool ContainsEntry(string name) + { + for (int i = 0; i < AnimationInfo.Entries?.Count; i++) { + if (AnimationInfo.Entries[i].Name == name) + return true; + } + return false; + } + public virtual void Read(FileReader reader, BXLAN header) { diff --git a/File_Format_Library/FileFormats/Pokemon/GFBMDL/GFBMDL.cs b/File_Format_Library/FileFormats/Pokemon/GFBMDL/GFBMDL.cs deleted file mode 100644 index ca8b887d..00000000 --- a/File_Format_Library/FileFormats/Pokemon/GFBMDL/GFBMDL.cs +++ /dev/null @@ -1,195 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Threading.Tasks; -using Toolbox; -using System.Windows.Forms; -using Toolbox.Library; -using Toolbox.Library.IO; -using Toolbox.Library.Forms; -using Toolbox.Library.Rendering; -using OpenTK; -using FirstPlugin.Forms; - -namespace FirstPlugin -{ - public class GFBMDL : TreeNodeFile, IContextMenuNode, IFileFormat - { - public FileType FileType { get; set; } = FileType.Model; - - public bool CanSave { get; set; } - public string[] Description { get; set; } = new string[] { "Graphic Model" }; - public string[] Extension { get; set; } = new string[] { "*.gfbmdl" }; - public string FileName { get; set; } - public string FilePath { get; set; } - public IFileInfo IFileInfo { get; set; } - - public bool Identify(System.IO.Stream stream) - { - using (var reader = new Toolbox.Library.IO.FileReader(stream, true)) - { - reader.ByteOrder = Syroot.BinaryData.ByteOrder.BigEndian; - - bool IsMatch = reader.ReadUInt32() == 0x20000000; - reader.Position = 0; - - return IsMatch; - } - } - - public Type[] Types - { - get - { - List types = new List(); - return types.ToArray(); - } - } - - - bool DrawablesLoaded = false; - public override void OnClick(TreeView treeView) { - LoadEditor(); - } - - public T LoadEditor() where T : UserControl, new() - { - T control = new T(); - control.Dock = DockStyle.Fill; - - ViewportEditor editor = (ViewportEditor)LibraryGUI.GetActiveContent(typeof(ViewportEditor)); - if (editor == null) - { - editor = new ViewportEditor(true); - editor.Dock = DockStyle.Fill; - LibraryGUI.LoadEditor(editor); - } - if (!DrawablesLoaded) - { - ObjectEditor.AddContainer(DrawableContainer); - DrawablesLoaded = true; - } - if (Runtime.UseOpenGL) - editor.LoadViewport(DrawableContainer); - - editor.LoadEditor(control); - - return control; - } - - public GFBMDL_Render Renderer; - - public DrawableContainer DrawableContainer = new DrawableContainer(); - - public GFLXModel Model; - - public void Load(System.IO.Stream stream) - { - CanSave = false; - - Text = FileName; - DrawableContainer.Name = FileName; - Renderer = new GFBMDL_Render(); - DrawableContainer.Drawables.Add(Renderer); - - Model = new GFLXModel(); - Model.LoadFile(FlatBuffers.Gfbmdl.Model.GetRootAsModel( - new FlatBuffers.ByteBuffer(stream.ToBytes())),this, Renderer); - - TreeNode SkeletonWrapper = new TreeNode("Skeleton"); - TreeNode MaterialFolderWrapper = new TreeNode("Materials"); - TreeNode VisualGroupWrapper = new TreeNode("Visual Groups"); - TreeNode Textures = new TreeNode("Textures"); - - if (Model.Skeleton.bones.Count > 0) - { - Nodes.Add(SkeletonWrapper); - DrawableContainer.Drawables.Add(Model.Skeleton); - - foreach (var bone in Model.Skeleton.bones) { - if (bone.Parent == null) - SkeletonWrapper.Nodes.Add(bone); - } - } - - - List loadedTextures = new List(); - for (int i = 0; i < Model.Textures.Count; i++) - { - foreach (var bntx in PluginRuntime.bntxContainers) - { - if (bntx.Textures.ContainsKey(Model.Textures[i]) && - !loadedTextures.Contains(Model.Textures[i])) - { - TreeNode tex = new TreeNode(Model.Textures[i]); - tex.ImageKey = "texture"; - tex.SelectedImageKey = "texture"; - - tex.Tag = bntx.Textures[Model.Textures[i]]; - Textures.Nodes.Add(tex); - loadedTextures.Add(Model.Textures[i]); - } - } - } - - loadedTextures.Clear(); - - Nodes.Add(MaterialFolderWrapper); - Nodes.Add(VisualGroupWrapper); - if (Textures.Nodes.Count > 0) - Nodes.Add(Textures); - - for (int i = 0; i < Model.GenericMaterials.Count; i++) - MaterialFolderWrapper.Nodes.Add(Model.GenericMaterials[i]); - - for (int i = 0; i < Model.GenericMeshes.Count; i++) - VisualGroupWrapper.Nodes.Add(Model.GenericMeshes[i]); - } - - public void Save(System.IO.Stream stream) - { - Model.SaveFile(stream); - } - - public ToolStripItem[] GetContextMenuItems() - { - List Items = new List(); - Items.Add(new ToolStripMenuItem("Export Model", null, ExportAction, Keys.Control | Keys.E)); - return Items.ToArray(); - } - - private void ExportAction(object sender, EventArgs args) - { - SaveFileDialog sfd = new SaveFileDialog(); - sfd.Filter = "Supported Formats|*.dae;"; - if (sfd.ShowDialog() == DialogResult.OK) - { - ExportModelSettings exportDlg = new ExportModelSettings(); - if (exportDlg.ShowDialog() == DialogResult.OK) - ExportModel(sfd.FileName, exportDlg.Settings); - } - } - - public void ExportModel(string fileName, DAE.ExportSettings settings) - { - var model = new STGenericModel(); - model.Materials = Model.GenericMaterials; - model.Objects = Model.GenericMeshes; - var textures = new List(); - foreach (var bntx in PluginRuntime.bntxContainers) - foreach (var tex in bntx.Textures.Values) - { - if (Model.Textures.Contains(tex.Text)) - textures.Add(tex); - } - - DAE.Export(fileName, settings, model, textures, Model.Skeleton); - } - - public void Unload() - { - - } - } -} diff --git a/File_Format_Library/FileFormats/Pokemon/GFBMDL/GFLXModel.cs b/File_Format_Library/FileFormats/Pokemon/GFBMDL/GFLXModel.cs deleted file mode 100644 index 04bbbdd9..00000000 --- a/File_Format_Library/FileFormats/Pokemon/GFBMDL/GFLXModel.cs +++ /dev/null @@ -1,333 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; -using FlatBuffers.Gfbmdl; -using Toolbox.Library; -using Toolbox.Library.IO; -using Toolbox.Library.Rendering; -using FirstPlugin.Forms; - -namespace FirstPlugin -{ - public class GFLXModel - { - public GFBMDL ParentFile; - - public List GenericMaterials = new List(); - public List GenericMeshes = new List(); - - public STSkeleton Skeleton = new STSkeleton(); - - public Model Model; - - public List Textures = new List(); - public List Shaders = new List(); - - public T LoadEditor() where T : - System.Windows.Forms.UserControl, new() - { - return ParentFile.LoadEditor(); - } - - public void UpdateVertexData(bool updateViewport) { - ParentFile.Renderer.UpdateVertexData(); - - if (updateViewport) - LibraryGUI.UpdateViewport(); - } - - public void LoadFile(Model model, GFBMDL file, GFBMDL_Render Renderer) { - Model = model; - ParentFile = file; - - for (int t = 0; t < Model.TextureNamesLength; t++) - Textures.Add(Model.TextureNames(t)); - - for (int s = 0; s < Model.ShaderNamesLength; s++) - Shaders.Add(Model.ShaderNames(s)); - - for (int m = 0; m < Model.MaterialsLength; m++) { - var mat = Model.Materials(m).Value; - GenericMaterials.Add(new GFLXMaterialData(this, mat)); - } - - List SkinningIndices = new List(); - - for (int b = 0; b < Model.BonesLength; b++) { - var bone = Model.Bones(b).Value; - Skeleton.bones.Add(new GFLXBone(this, bone)); - - if (bone.SkinCheck == null) - SkinningIndices.Add(b); - } - - Skeleton.reset(); - Skeleton.update(); - - for (int g = 0; g < Model.GroupsLength; g++) { - var group = Model.Groups(g).Value; - var mesh = Model.Meshes(g).Value; - - OpenTK.Matrix4 transform = OpenTK.Matrix4.Identity; - - GFLXMesh genericMesh = new GFLXMesh(this, group, mesh); - genericMesh.Checked = true; - genericMesh.ImageKey = "model"; - genericMesh.SelectedImageKey = "model"; - - int boneIndex = (int)group.BoneID; - if (boneIndex < Skeleton.bones.Count && boneIndex > 0) - { - genericMesh.BoneIndex = boneIndex; - transform = Skeleton.bones[boneIndex].Transform; - - genericMesh.Text = Skeleton.bones[boneIndex].Text; - } - - // if (group.MeshID < Skeleton.bones.Count && group.MeshID > 0) - // genericMesh.Text = Skeleton.bones[(int)group.MeshID].Text; - - Renderer.Meshes.Add(genericMesh); - GenericMeshes.Add(genericMesh); - - //Load the vertex data - genericMesh.vertices = GFLXMeshBufferHelper.LoadVertexData(mesh, transform, SkinningIndices); - genericMesh.FlipUvsVertical(); - - //Load faces - for (int p = 0; p < mesh.PolygonsLength; p++) - { - var poly = mesh.Polygons(p).Value; - - var polygonGroup = new STGenericPolygonGroup(); - polygonGroup.MaterialIndex = (int)poly.MaterialID; - genericMesh.PolygonGroups.Add(polygonGroup); - - for (int f = 0; f < poly.DataLength; f++) - polygonGroup.faces.Add((int)poly.Data(f)); - } - } - } - - - public void SaveFile(System.IO.Stream stream) - { - using (var writer = new FileWriter(stream)) { - writer.Write(Model.ByteBuffer.ToFullArray()); - } - } - } - - public class GFLXMaterialData : STGenericMaterial - { - private Material Material; - private GFLXModel ParentModel; - - public Dictionary SwitchParams = new Dictionary(); - public Dictionary ValueParams = new Dictionary(); - public Dictionary ColorParams = new Dictionary(); - - public override void OnClick(TreeView treeView) { - var editor = ParentModel.LoadEditor(); - editor.LoadMaterial(this); - } - - public GFLXMaterialData(GFLXModel parent, Material mat) - { - ParentModel = parent; - Material = mat; - - Text = mat.Name; - - for (int i = 0; i < Material.SwitchesLength; i++) { - var val = Material.Switches(i).Value; - SwitchParams.Add(val.Name, new GFLXSwitchParam(val)); - } - - for (int i = 0; i < Material.ValuesLength; i++) { - var val = Material.Values(i).Value; - ValueParams.Add(val.Name, new GFLXValueParam(val)); - } - - for (int i = 0; i < Material.ColorsLength; i++) { - var val = Material.Colors(i).Value; - ColorParams.Add(val.Name, new GFLXColorParam(val)); - } - - int textureUnit = 1; - for (int t = 0; t < Material.TexturesLength; t++) - { - var tex = Material.Textures(t).Value; - string name = ParentModel.Textures[tex.Index]; - - STGenericMatTexture matTexture = new STGenericMatTexture(); - matTexture.Name = name; - matTexture.SamplerName = tex.Name; - matTexture.textureUnit = textureUnit++; - matTexture.WrapModeS = STTextureWrapMode.Mirror; - matTexture.WrapModeT = STTextureWrapMode.Repeat; - TextureMaps.Add(matTexture); - - switch (tex.Name) - { - case "Col0Tex": - matTexture.Type = STGenericMatTexture.TextureType.Diffuse; - break; - case "EmissionMaskTex": - // matTexture.Type = STGenericMatTexture.TextureType.Emission; - break; - case "LyCol0Tex": - break; - case "NormalMapTex": - matTexture.WrapModeT = STTextureWrapMode.Repeat; - matTexture.WrapModeT = STTextureWrapMode.Repeat; - matTexture.Type = STGenericMatTexture.TextureType.Normal; - break; - case "AmbientTex": - break; - case "LightTblTex": - break; - case "SphereMapTex": - break; - case "EffectTex": - break; - } - } - } - } - - public class GFLXBone : STBone - { - private Bone Bone; - private GFLXModel ParentModel; - - public GFLXBone(GFLXModel parent, Bone bone) : base(parent.Skeleton) - { - ParentModel = parent; - Bone = bone; - - Text = bone.Name; - parentIndex = bone.Parent; - - if (bone.Translation != null) - { - position = new float[3] - { bone.Translation.Value.X, - bone.Translation.Value.Y, - bone.Translation.Value.Z - }; - } - - if (bone.Rotation != null) - { - rotation = new float[4] - { bone.Rotation.Value.X, - bone.Rotation.Value.Y, - bone.Rotation.Value.Z, - 1.0f, - }; - } - - if (bone.Scale != null) - { - scale = new float[3] - { bone.Scale.Value.X, - bone.Scale.Value.Y, - bone.Scale.Value.Z - }; - } - } - } - - public class GFLXColorParam - { - private MatColor Param; - - public GFLXColorParam(MatColor param) - { - Param = param; - } - - public string Name - { - get { return Param.Name; } - set - { - Param.ByteBuffer.PutStringUTF8(0, value); - } - } - - public OpenTK.Vector3 Value - { - get { return new OpenTK.Vector3( - Param.Color.Value.R, - Param.Color.Value.G, - Param.Color.Value.B); - } - set - { - var vec3 = value; - - Param.Color.Value.ByteBuffer.PutFloat(0, vec3.X); - Param.Color.Value.ByteBuffer.PutFloat(1, vec3.Y); - Param.Color.Value.ByteBuffer.PutFloat(2, vec3.Z); - } - } - } - - public class GFLXValueParam - { - private MatFloat Param; - - public GFLXValueParam(MatFloat param) { - Param = param; - } - - public string Name - { - get { return Param.Name; } - set { - Param.ByteBuffer.PutStringUTF8(0, value); - } - } - - public float Value - { - get { return Param.Value; } - set { - Param.ByteBuffer.PutFloat(1, value); - } - } - } - - public class GFLXSwitchParam - { - private MatSwitch Param; - - public GFLXSwitchParam(MatSwitch param) - { - Param = param; - } - - public string Name - { - get { return Param.Name; } - set - { - Param.ByteBuffer.PutStringUTF8(0, value); - } - } - - public bool Value - { - get { return Param.Value; } - set - { - Param.ByteBuffer.PutByte(1, value ? (byte)1 : (byte)0); - } - } - } -} diff --git a/File_Format_Library/FileFormats/Pokemon/GFLX/FlatBufferHelper.cs b/File_Format_Library/FileFormats/Pokemon/GFLX/FlatBufferHelper.cs new file mode 100644 index 00000000..c1497293 --- /dev/null +++ b/File_Format_Library/FileFormats/Pokemon/GFLX/FlatBufferHelper.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using FlatBuffers.Gfbmdl; +using FlatBuffers; + +namespace FirstPlugin +{ + public class FlatBufferHelper + { + public static StringOffset[] CreateStringList(FlatBufferBuilder builder, List strings) + { + StringOffset[] offsets = new StringOffset[strings.Count]; + for (int i = 0; i < strings.Count; i++) + offsets[i] = builder.CreateString(strings[i]); + return offsets; + } + + public static Offset CreateVector( + FlatBufferBuilder builder, Vector3? vector) + { + return Vector3.CreateVector3(builder, + vector.Value.X, + vector.Value.Y, + vector.Value.Z); + } + + public static Offset CreateVector( + FlatBufferBuilder builder, Vector3 vector) + { + return Vector3.CreateVector3(builder, + vector.X, + vector.Y, + vector.Z); + } + } +} diff --git a/File_Format_Library/FileFormats/Pokemon/GFBANIM/FlatBuffers/gfbanim.cs b/File_Format_Library/FileFormats/Pokemon/GFLX/GFBANIM/FlatBuffers/gfbanim.cs similarity index 100% rename from File_Format_Library/FileFormats/Pokemon/GFBANIM/FlatBuffers/gfbanim.cs rename to File_Format_Library/FileFormats/Pokemon/GFLX/GFBANIM/FlatBuffers/gfbanim.cs diff --git a/File_Format_Library/FileFormats/Pokemon/GFBANIM/GFBANM.cs b/File_Format_Library/FileFormats/Pokemon/GFLX/GFBANIM/GFBANM.cs similarity index 74% rename from File_Format_Library/FileFormats/Pokemon/GFBANIM/GFBANM.cs rename to File_Format_Library/FileFormats/Pokemon/GFLX/GFBANIM/GFBANM.cs index 814f28f5..bd0f2ada 100644 --- a/File_Format_Library/FileFormats/Pokemon/GFBANIM/GFBANM.cs +++ b/File_Format_Library/FileFormats/Pokemon/GFLX/GFBANIM/GFBANM.cs @@ -12,10 +12,11 @@ using System.Reflection; using Toolbox.Library.IO.FlatBuffer; using Toolbox.Library.Animations; using FirstPlugin.Forms; +using Toolbox.Library.Forms; namespace FirstPlugin { - public class GFBANM : TreeNodeFile, IFileFormat, IAnimationContainer + public class GFBANM : TreeNodeFile, IFileFormat, IAnimationContainer, IConvertableTextFormat { public STAnimation AnimationController => AnimationData; @@ -44,6 +45,30 @@ namespace FirstPlugin } } + #region Text Converter Interface + public TextFileType TextFileType => TextFileType.Json; + public bool CanConvertBack => false; + + public string ConvertToString() + { + if (IFileInfo.ArchiveParent != null) + { + foreach (var file in IFileInfo.ArchiveParent.Files) + if (file.FileName == FileName) + return FlatBufferConverter.DeserializeToJson(new System.IO.MemoryStream(file.FileData), "gfbanm"); + } + else + return FlatBufferConverter.DeserializeToJson(FilePath, "gfbanm"); + + return ""; + } + + public void ConvertFromString(string text) + { + } + + #endregion + public Type[] Types { get @@ -90,8 +115,31 @@ namespace FirstPlugin { } + public class MeshAnimationController + { + public bool IsVisible = true; + } + public class Animation : STSkeletonAnimation { + private GFBMDL ActiveModel + { + get + { + GFBMDL model = null; + foreach (var container in ObjectEditor.GetDrawableContainers()) { + if (container.ContainerState == ContainerState.Active) { + foreach (var drawable in container.Drawables) + { + if (drawable is GFBMDL_Render) + model = ((GFBMDL_Render)drawable).GfbmdlFile; + } + } + } + return model; + } + } + public override void NextFrame() { if (Frame > FrameCount) return; @@ -105,6 +153,26 @@ namespace FirstPlugin bool Updated = false; // no need to update skeleton of animations that didn't change foreach (var animGroup in AnimGroups) { + if (animGroup is VisibiltyGroup && ActiveModel != null) + { + var node = animGroup as VisibiltyGroup; + foreach (var mesh in ActiveModel.Model.GenericMeshes) { + if (animGroup.Name == mesh.Text) + { + var value = node.BooleanTrack.GetFrameValue(Frame); + mesh.AnimationController.IsVisible = value == 1; + } + } + } + if (animGroup is MaterialGroup && ActiveModel != null) + { + foreach (var mat in ActiveModel.Model.GenericMaterials) { + if (animGroup.Name == mat.Text) + { + + } + } + } if (animGroup is BoneGroup) { var node = animGroup as BoneGroup; @@ -134,17 +202,22 @@ namespace FirstPlugin if (node.RotationX.HasKeys || node.RotationY.HasKeys || node.RotationZ.HasKeys) { - float x = node.RotationX.HasKeys ? node.RotationX.GetFrameValue(Frame) : b.rotation[0]; - float y = node.RotationY.HasKeys ? node.RotationY.GetFrameValue(Frame) : b.rotation[1]; - float z = node.RotationZ.HasKeys ? node.RotationZ.GetFrameValue(Frame) : b.rotation[2]; + ushort value1 = (ushort)node.RotationX.GetFrameValue(Frame); + ushort value2 = (ushort)node.RotationY.GetFrameValue(Frame); + ushort value3 = (ushort)node.RotationZ.GetFrameValue(Frame); - var Rotation = new Vector3(x / 0xffff, y/ 0xffff, z / 0xffff).Normalized(); - b.rot = EulerToQuat(Rotation.Z, Rotation.Y, Rotation.X); + int x = value1 >> 5; + int y = value2 >> 5; + int z = value3 >> 5; + + var Rotation = new Vector3(x / (float)0xff, y/ (float)0xff, z / (float)0xff); + // b.rot = EulerToQuat(Rotation.Z, Rotation.Y, Rotation.X); + + // Console.WriteLine($"{animGroup.Name} {Frame} {Rotation}"); // b.rot = EulerToQuat(Rotation.Z, Rotation.Y, Rotation.X); float Angle = Rotation.Length; - Console.WriteLine($"{node.Name} Angle {Angle}"); // b.rot = Angle > 0 // ? Quaternion.FromAxisAngle(Vector3.Normalize(Rotation), Angle) @@ -168,7 +241,7 @@ namespace FirstPlugin Quaternion xRotation = Quaternion.FromAxisAngle(Vector3.UnitX, x); Quaternion yRotation = Quaternion.FromAxisAngle(Vector3.UnitY, y); Quaternion zRotation = Quaternion.FromAxisAngle(Vector3.UnitZ, z); - return (zRotation * yRotation * xRotation); + return (zRotation * yRotation * xRotation); } public void LoadBoneGroup(Gfbanim.Bone boneAnim) @@ -193,7 +266,7 @@ namespace FirstPlugin var rotate = boneAnim.Rotate(); if (rotate.HasValue) { - var values = LoadRotationTrack(rotate.Value); + var values = GfbanimKeyFrameLoader.LoadRotationTrack(rotate.Value); groupAnim.RotationX = values[0]; groupAnim.RotationY = values[1]; groupAnim.RotationZ = values[2]; @@ -206,9 +279,9 @@ namespace FirstPlugin if (rotate.HasValue) { var vec = rotate.Value.Value.Value; - groupAnim.RotationX.KeyFrames.Add(new STKeyFrame(0, ConvertRotation(vec.X))); - groupAnim.RotationY.KeyFrames.Add(new STKeyFrame(0, ConvertRotation(vec.Y))); - groupAnim.RotationZ.KeyFrames.Add(new STKeyFrame(0, ConvertRotation(vec.Z))); + groupAnim.RotationX.KeyFrames.Add(new STKeyFrame(0, GfbanimKeyFrameLoader.ConvertRotation(vec.X))); + groupAnim.RotationY.KeyFrames.Add(new STKeyFrame(0, GfbanimKeyFrameLoader.ConvertRotation(vec.Y))); + groupAnim.RotationZ.KeyFrames.Add(new STKeyFrame(0, GfbanimKeyFrameLoader.ConvertRotation(vec.Z))); } } break; @@ -217,7 +290,7 @@ namespace FirstPlugin var rotate = boneAnim.Rotate(); if (rotate.HasValue) { - var values = LoadRotationTrack(rotate.Value); + var values = GfbanimKeyFrameLoader.LoadRotationTrack(rotate.Value); groupAnim.RotationX = values[0]; groupAnim.RotationY = values[1]; groupAnim.RotationZ = values[2]; @@ -247,7 +320,7 @@ namespace FirstPlugin var scale = boneAnim.Scale(); if (scale.HasValue) { - var values = LoadVectorTrack(scale.Value); + var values = GfbanimKeyFrameLoader.LoadVectorTrack(scale.Value); groupAnim.ScaleX = values[0]; groupAnim.ScaleY = values[1]; groupAnim.ScaleZ = values[2]; @@ -259,7 +332,7 @@ namespace FirstPlugin var scale = boneAnim.Scale(); if (scale.HasValue) { - var values = LoadVectorTrack(scale.Value); + var values = GfbanimKeyFrameLoader.LoadVectorTrack(scale.Value); groupAnim.ScaleX = values[0]; groupAnim.ScaleY = values[1]; groupAnim.ScaleZ = values[2]; @@ -286,7 +359,7 @@ namespace FirstPlugin var trans = boneAnim.Translate(); if (trans.HasValue) { - var values = LoadVectorTrack(trans.Value); + var values = GfbanimKeyFrameLoader.LoadVectorTrack(trans.Value); groupAnim.TranslateX = values[0]; groupAnim.TranslateY = values[1]; groupAnim.TranslateZ = values[2]; @@ -298,7 +371,7 @@ namespace FirstPlugin var trans = boneAnim.Translate(); if (trans.HasValue) { - var values = LoadVectorTrack(trans.Value); + var values = GfbanimKeyFrameLoader.LoadVectorTrack(trans.Value); groupAnim.TranslateX = values[0]; groupAnim.TranslateY = values[1]; groupAnim.TranslateZ = values[2]; @@ -320,101 +393,53 @@ namespace FirstPlugin } } - public float ConvertRotation(ushort val) - { - return val; - } - - public STAnimationTrack[] LoadRotationTrack(Gfbanim.DynamicQuatTrack dynamicTrack) - { - STAnimationTrack[] tracks = new STAnimationTrack[3]; - tracks[0] = new STAnimationTrack(STInterpoaltionType.Linear); - tracks[1] = new STAnimationTrack(STInterpoaltionType.Linear); - tracks[2] = new STAnimationTrack(STInterpoaltionType.Linear); - - for (int i = 0; i < dynamicTrack.ValuesLength; i++) - { - var quat = dynamicTrack.Values(i).Value; - tracks[0].KeyFrames.Add(new STKeyFrame(i, ConvertRotation(quat.X))); - tracks[1].KeyFrames.Add(new STKeyFrame(i, ConvertRotation(quat.Y))); - tracks[2].KeyFrames.Add(new STKeyFrame(i, ConvertRotation(quat.Z))); - - Console.WriteLine($"{i} { ConvertRotation(quat.X)} { ConvertRotation(quat.Y)} {ConvertRotation(quat.Z)}"); - } - return tracks; - } - - public STAnimationTrack[] LoadVectorTrack(Gfbanim.DynamicVectorTrack dynamicTrack) - { - STAnimationTrack[] tracks = new STAnimationTrack[3]; - tracks[0] = new STAnimationTrack(STInterpoaltionType.Linear); - tracks[1] = new STAnimationTrack(STInterpoaltionType.Linear); - tracks[2] = new STAnimationTrack(STInterpoaltionType.Linear); - - for (int i = 0; i < dynamicTrack.ValuesLength; i++) - { - var vec = dynamicTrack.Values(i).Value; - tracks[0].KeyFrames.Add(new STKeyFrame(i, vec.X)); - tracks[1].KeyFrames.Add(new STKeyFrame(i, vec.Y)); - tracks[2].KeyFrames.Add(new STKeyFrame(i, vec.Z)); - } - return tracks; - } - - public STAnimationTrack[] LoadVectorTrack(Gfbanim.FramedVectorTrack framedTrack) - { - ushort[] frames = framedTrack.GetFramesArray(); - - STAnimationTrack[] tracks = new STAnimationTrack[3]; - tracks[0] = new STAnimationTrack(STInterpoaltionType.Linear); - tracks[1] = new STAnimationTrack(STInterpoaltionType.Linear); - tracks[2] = new STAnimationTrack(STInterpoaltionType.Linear); - - for (int i = 0; i < framedTrack.ValuesLength; i++) - { - var vec = framedTrack.Values(i).Value; - int frame = i; - - if (i < frames?.Length) frame = frames[i]; - - tracks[0].KeyFrames.Add(new STKeyFrame(frame, vec.X)); - tracks[1].KeyFrames.Add(new STKeyFrame(frame, vec.Y)); - tracks[2].KeyFrames.Add(new STKeyFrame(frame, vec.Z)); - } - return tracks; - } - - public STAnimationTrack[] LoadRotationTrack(Gfbanim.FramedQuatTrack framedTrack) - { - ushort[] frames = framedTrack.GetFramesArray(); - - STAnimationTrack[] tracks = new STAnimationTrack[3]; - tracks[0] = new STAnimationTrack(STInterpoaltionType.Linear); - tracks[1] = new STAnimationTrack(STInterpoaltionType.Linear); - tracks[2] = new STAnimationTrack(STInterpoaltionType.Linear); - - for (int i = 0; i < framedTrack.ValuesLength; i++) - { - var quat = framedTrack.Values(i).Value; - int frame = i; - - if (i < frames?.Length) frame = frames[i]; - - tracks[0].KeyFrames.Add(new STKeyFrame(frame, ConvertRotation(quat.X))); - tracks[1].KeyFrames.Add(new STKeyFrame(frame, ConvertRotation(quat.Y))); - tracks[2].KeyFrames.Add(new STKeyFrame(frame, ConvertRotation(quat.Z))); - } - return tracks; - } - public void LoadMaterialGroup(Gfbanim.Material matAnim) { + for (int i = 0; i < matAnim.SwitchesLength; i++) + { + var switchTrack = matAnim.Switches(i).Value; + + } + for (int i = 0; i < matAnim.ValuesLength; i++) + { + var valueTrack = matAnim.Values(i).Value; + } + for (int i = 0; i < matAnim.VectorsLength; i++) + { + var vectorTrack = matAnim.Vectors(i).Value; + + } } public void LoadVisibilyGroup(Gfbanim.Group visAnim) { + VisibiltyGroup groupAnim = new VisibiltyGroup(); + groupAnim.Name = visAnim.Name; + AnimGroups.Add(groupAnim); + if (visAnim.ValueType == Gfbanim.BooleanTrack.FixedBooleanTrack) { + var track = visAnim.Value(); + if (track.HasValue) + { + var animTrack = new STAnimationTrack(); + animTrack.KeyFrames.Add(new STKeyFrame(0, track.Value.Value)); + groupAnim.BooleanTrack = animTrack; + } + } + else if (visAnim.ValueType == Gfbanim.BooleanTrack.DynamicBooleanTrack) { + var track = visAnim.Value(); + if (track.HasValue) { + groupAnim.BooleanTrack = GfbanimKeyFrameLoader.LoadBooleanTrack(track.Value); + } + } + else if(visAnim.ValueType == Gfbanim.BooleanTrack.FramedBooleanTrack) { + var track = visAnim.Value(); + if (track.HasValue) + { + groupAnim.BooleanTrack = GfbanimKeyFrameLoader.LoadBooleanTrack(track.Value); + } + } } public void LoadTriggerGroup(Gfbanim.Trigger triggerAnim) diff --git a/File_Format_Library/FileFormats/Pokemon/GFLX/GFBANIM/GfbanimKeyFrameLoader.cs b/File_Format_Library/FileFormats/Pokemon/GFLX/GFBANIM/GfbanimKeyFrameLoader.cs new file mode 100644 index 00000000..5dd2066c --- /dev/null +++ b/File_Format_Library/FileFormats/Pokemon/GFLX/GFBANIM/GfbanimKeyFrameLoader.cs @@ -0,0 +1,129 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Toolbox.Library.Animations; + +namespace FirstPlugin +{ + public class GfbanimKeyFrameLoader + { + public static STAnimationTrack[] LoadRotationTrack(Gfbanim.DynamicQuatTrack dynamicTrack) + { + STAnimationTrack[] tracks = new STAnimationTrack[3]; + tracks[0] = new STAnimationTrack(STInterpoaltionType.Linear); + tracks[1] = new STAnimationTrack(STInterpoaltionType.Linear); + tracks[2] = new STAnimationTrack(STInterpoaltionType.Linear); + + for (int i = 0; i < dynamicTrack.ValuesLength; i++) + { + var quat = dynamicTrack.Values(i).Value; + tracks[0].KeyFrames.Add(new STKeyFrame(i, ConvertRotation(quat.X))); + tracks[1].KeyFrames.Add(new STKeyFrame(i, ConvertRotation(quat.Y))); + tracks[2].KeyFrames.Add(new STKeyFrame(i, ConvertRotation(quat.Z))); + } + return tracks; + } + + public static float ConvertRotation(ushort val) + { + return val; + } + + public static STAnimationTrack[] LoadVectorTrack(Gfbanim.DynamicVectorTrack dynamicTrack) + { + STAnimationTrack[] tracks = new STAnimationTrack[3]; + tracks[0] = new STAnimationTrack(STInterpoaltionType.Linear); + tracks[1] = new STAnimationTrack(STInterpoaltionType.Linear); + tracks[2] = new STAnimationTrack(STInterpoaltionType.Linear); + + for (int i = 0; i < dynamicTrack.ValuesLength; i++) + { + var vec = dynamicTrack.Values(i).Value; + tracks[0].KeyFrames.Add(new STKeyFrame(i, vec.X)); + tracks[1].KeyFrames.Add(new STKeyFrame(i, vec.Y)); + tracks[2].KeyFrames.Add(new STKeyFrame(i, vec.Z)); + } + return tracks; + } + + public static STAnimationTrack[] LoadVectorTrack(Gfbanim.FramedVectorTrack framedTrack) + { + ushort[] frames = framedTrack.GetFramesArray(); + + STAnimationTrack[] tracks = new STAnimationTrack[3]; + tracks[0] = new STAnimationTrack(STInterpoaltionType.Linear); + tracks[1] = new STAnimationTrack(STInterpoaltionType.Linear); + tracks[2] = new STAnimationTrack(STInterpoaltionType.Linear); + + for (int i = 0; i < framedTrack.ValuesLength; i++) + { + var vec = framedTrack.Values(i).Value; + int frame = i; + + if (i < frames?.Length) frame = frames[i]; + + tracks[0].KeyFrames.Add(new STKeyFrame(frame, vec.X)); + tracks[1].KeyFrames.Add(new STKeyFrame(frame, vec.Y)); + tracks[2].KeyFrames.Add(new STKeyFrame(frame, vec.Z)); + } + return tracks; + } + + public static STAnimationTrack LoadBooleanTrack(Gfbanim.DynamicBooleanTrack framedTrack) + { + STAnimationTrack track = new STAnimationTrack(STInterpoaltionType.Step); + for (int i = 0; i < framedTrack.ValuesLength; i++) + { + ushort val = framedTrack.Values(i); + int frame = i; + + //Visibily is handled by bits from a ushort + track.KeyFrames.Add(new STKeyFrame(frame, val)); + } + return track; + } + + public static STAnimationTrack LoadBooleanTrack(Gfbanim.FramedBooleanTrack framedTrack) + { + ushort[] frames = framedTrack.GetFramesArray(); + + STAnimationTrack track = new STAnimationTrack(STInterpoaltionType.Step); + for (int i = 0; i < framedTrack.ValuesLength; i++) + { + ushort val = framedTrack.Values(i); + int frame = i; + + if (i < frames?.Length) frame = frames[i]; + + //Visibily is handled by bits from a ushort + track.KeyFrames.Add(new STKeyFrame(frame, val)); + } + return track; + } + + public static STAnimationTrack[] LoadRotationTrack(Gfbanim.FramedQuatTrack framedTrack) + { + ushort[] frames = framedTrack.GetFramesArray(); + + STAnimationTrack[] tracks = new STAnimationTrack[3]; + tracks[0] = new STAnimationTrack(STInterpoaltionType.Linear); + tracks[1] = new STAnimationTrack(STInterpoaltionType.Linear); + tracks[2] = new STAnimationTrack(STInterpoaltionType.Linear); + + for (int i = 0; i < framedTrack.ValuesLength; i++) + { + var quat = framedTrack.Values(i).Value; + int frame = i; + + if (i < frames?.Length) frame = frames[i]; + + tracks[0].KeyFrames.Add(new STKeyFrame(frame, ConvertRotation(quat.X))); + tracks[1].KeyFrames.Add(new STKeyFrame(frame, ConvertRotation(quat.Y))); + tracks[2].KeyFrames.Add(new STKeyFrame(frame, ConvertRotation(quat.Z))); + } + return tracks; + } + } +} diff --git a/File_Format_Library/FileFormats/Pokemon/GFBANMCFG/FlatBuffers/gfbanmcfg.cs b/File_Format_Library/FileFormats/Pokemon/GFLX/GFBANMCFG/FlatBuffers/gfbanmcfg.cs similarity index 100% rename from File_Format_Library/FileFormats/Pokemon/GFBANMCFG/FlatBuffers/gfbanmcfg.cs rename to File_Format_Library/FileFormats/Pokemon/GFLX/GFBANMCFG/FlatBuffers/gfbanmcfg.cs diff --git a/File_Format_Library/FileFormats/Pokemon/GFBANMCFG/GFBANMCFG.cs b/File_Format_Library/FileFormats/Pokemon/GFLX/GFBANMCFG/GFBANMCFG.cs similarity index 100% rename from File_Format_Library/FileFormats/Pokemon/GFBANMCFG/GFBANMCFG.cs rename to File_Format_Library/FileFormats/Pokemon/GFLX/GFBANMCFG/GFBANMCFG.cs diff --git a/File_Format_Library/FileFormats/Pokemon/GFLX/GFBMDL/FlatBuffers/BufferToStruct.cs b/File_Format_Library/FileFormats/Pokemon/GFLX/GFBMDL/FlatBuffers/BufferToStruct.cs new file mode 100644 index 00000000..855fbd6b --- /dev/null +++ b/File_Format_Library/FileFormats/Pokemon/GFLX/GFBMDL/FlatBuffers/BufferToStruct.cs @@ -0,0 +1,312 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using FirstPlugin.GFMDLStructs; +using Toolbox.Library.IO; + +namespace FirstPlugin +{ + public class BufferToStruct + { + public static Model LoadFile(System.IO.Stream stream) + { + var buffer = FlatBuffers.Gfbmdl.Model.GetRootAsModel( + new FlatBuffers.ByteBuffer(stream.ToBytes())); + + Model model = new Model(); + model.Version = buffer.Version; + model.Bounding = ConvertBounding(buffer.Bounding); + + model.TextureNames = new List(); + model.ShaderNames = new List(); + model.MaterialNames = new List(); + + for (int i = 0; i < buffer.TextureNamesLength; i++) + model.TextureNames.Add(buffer.TextureNames(i)); + + for (int i = 0; i < buffer.ShaderNamesLength; i++) + model.ShaderNames.Add(buffer.ShaderNames(i)); + + for (int i = 0; i < buffer.MaterialNamesLength; i++) + model.MaterialNames.Add(buffer.MaterialNames(i)); + + model.Materials = new List(); + for (int i = 0; i < buffer.MaterialsLength; i++) + { + var mat = buffer.Materials(i).Value; + List colors = new List(); + List switches = new List(); + List values = new List(); + List textures = new List(); + + MaterialCommon common = null; + if (mat.Common != null) + { + var com = mat.Common.Value; + + List sharedColors = new List(); + List sharedSwitches = new List(); + List sharedValues = new List(); + + for (int j = 0; j < com.ColorsLength; j++) + { + var col = com.Colors(j).Value; + sharedColors.Add(new MatColor() + { + Color = ConvertColor(col.Color), + Name = col.Name, + }); + } + + for (int j = 0; j < com.ValuesLength; j++) + { + var val = com.Values(j).Value; + sharedValues.Add(new MatInt() + { + Value = val.Value, + Name = val.Name, + }); + } + + for (int j = 0; j < com.SwitchesLength; j++) + { + var val = com.Switches(j).Value; + sharedSwitches.Add(new MatSwitch() + { + Value = val.Value, + Name = val.Name, + }); + } + + common = new MaterialCommon() + { + Switches = sharedSwitches, + Values = sharedValues, + Colors = sharedColors, + }; + } + + for (int j = 0; j < mat.TextureMapsLength; j++) + { + var tex = mat.TextureMaps(j).Value; + TextureParams parameters = null; + if (tex.Params != null) + { + var param = tex.Params.Value; + parameters = new TextureParams() + { + Unknown1 = param.Unknown1, + Unknown2 = param.Unknown2, + Unknown3 = param.Unknown3, + Unknown4 = param.Unknown4, + Unknown5 = param.Unknown5, + Unknown6 = param.Unknown6, + Unknown7 = param.Unknown7, + Unknown8 = param.Unknown8, + lodBias = param.LodBias, + }; + } + textures.Add(new TextureMap() + { + Index = (uint)tex.Index, + Sampler = tex.Sampler, + Params = parameters, + }); + } + + for (int j = 0; j < mat.ColorsLength; j++) + { + var col = mat.Colors(j).Value; + colors.Add(new MatColor() + { + Color = ConvertColor(col.Color), + Name = col.Name, + }); + } + + for (int j = 0; j < mat.ValuesLength; j++) + { + var val = mat.Values(j).Value; + values.Add(new MatFloat() + { + Value = val.Value, + Name = val.Name, + }); + } + + for (int j = 0; j < mat.SwitchesLength; j++) + { + var val = mat.Switches(j).Value; + switches.Add(new MatSwitch() + { + Value = val.Value, + Name = val.Name, + }); + } + + model.Materials.Add(new Material() + { + Name = mat.Name, + Switches = switches, + Colors = colors, + Values = values, + Parameter1 = mat.Parameter1, + Parameter2 = mat.Parameter2, + Parameter3 = mat.Parameter3, + Parameter4 = mat.Parameter4, + Parameter5 = mat.Parameter5, + Parameter6 = mat.Parameter6, + RenderLayer = mat.RenderLayer, + ShaderGroup = mat.ShaderGroup, + Unknown1 = mat.Unknown1, + Unknown2 = mat.Unknown2, + Unknown3 = mat.Unknown3, + Unknown4 = mat.Unknown4, + Unknown5 = mat.Unknown5, + Unknown6 = mat.Unknown6, + Unknown7 = mat.Unknown7, + Common = common, + TextureMaps = textures, + }); + } + + model.Groups = new List(); + for (int i = 0; i < buffer.GroupsLength; i++) + { + var group = buffer.Groups(i).Value; + model.Groups.Add(new Group() + { + BoneIndex = group.BoneIndex, + Layer = group.Layer, + MeshIndex= group.MeshIndex, + Bounding = ConvertBounding(group.Bounding), + }); + } + + model.Meshes = new List(); + for (int i = 0; i < buffer.MeshesLength; i++) + { + var mesh = buffer.Meshes(i).Value; + + List attributes = new List(); + for (int j = 0; j < mesh.AttributesLength; j++) + { + var att = mesh.Attributes(j).Value; + attributes.Add(new MeshAttribute() + { + BufferFormat = att.BufferFormat, + ElementCount = att.ElementCount, + VertexType = att.VertexType, + }); + } + + List polygons = new List(); + for (int j = 0; j < mesh.PolygonsLength; j++) + { + var poly = mesh.Polygons(j).Value; + polygons.Add(new MeshPolygon() + { + MaterialIndex = poly.MaterialIndex, + Faces = poly.GetFacesArray().ToList(), + }); + } + + model.Meshes.Add(new Mesh() + { + Attributes = attributes, + Polygons = polygons, + Data = mesh.GetDataArray().ToList(), + }); + } + + model.Bones = new List(); + for (int i = 0; i < buffer.BonesLength; i++) + { + var bone = buffer.Bones(i).Value; + BoneRigidData rigidData = null; + if (bone.RigidCheck != null) + { + rigidData = new BoneRigidData(); + rigidData.Unknown1 = (uint)bone.RigidCheck.Value.Unknown1; + } + + model.Bones.Add(new Bone() + { + Name = bone.Name, + BoneType = bone.BoneType, + Parent = bone.Parent, + Scale = ConvertVec3(bone.Scale), + Rotation = ConvertVec3(bone.Rotation), + Translation = ConvertVec3(bone.Translation), + RadiusEnd = ConvertVec3(bone.RadiusEnd), + RadiusStart = ConvertVec3(bone.RadiusStart), + Visible = bone.Visible, + Zero = bone.Zero, + RigidCheck = rigidData, + }); + } + + model.CollisionGroups = new List(); + for (int i = 0; i < buffer.CollisionGroupsLength; i++) + { + var colGroup = buffer.CollisionGroups(i).Value; + List children = colGroup.GetBoneChildrenArray().ToList(); + + model.CollisionGroups.Add(new CollisionGroup() + { + BoneIndex = colGroup.BoneIndex, + Unknown1 = colGroup.Unknown1, + Bounding = ConvertBounding(colGroup.Bounding), + BoneChildren = children, + }); + } + + model.Unknown = new List(); + + return model; + } + + public static BoundingBox ConvertBounding(FlatBuffers.Gfbmdl.BoundingBox? buffer) + { + if (buffer != null && buffer.HasValue) + { + BoundingBox bounding = new BoundingBox(); + bounding.MinX = buffer.Value.MinX; + bounding.MinY = buffer.Value.MinY; + bounding.MinZ = buffer.Value.MinZ; + bounding.MaxX = buffer.Value.MaxX; + bounding.MaxY = buffer.Value.MaxY; + bounding.MaxZ = buffer.Value.MaxZ; + return bounding; + } + else + return null; + } + + public static Vector3 ConvertVec3(FlatBuffers.Gfbmdl.Vector3? vec3) + { + if (vec3 != null && vec3.HasValue) + return new Vector3(vec3.Value.X, vec3.Value.Y, vec3.Value.Z); + else + return null; + } + + public static Vector4 ConvertVec4(FlatBuffers.Gfbmdl.Vector4? vec3) + { + if (vec3 != null && vec3.HasValue) + return new Vector4(vec3.Value.X, vec3.Value.Y, vec3.Value.Z, vec3.Value.W); + else + return null; + } + + public static ColorRGB32 ConvertColor(FlatBuffers.Gfbmdl.ColorRGB32? col) + { + if (col != null && col.HasValue) + return new ColorRGB32(col.Value.R, col.Value.G, col.Value.B); + else + return null; + } + } +} diff --git a/File_Format_Library/FileFormats/Pokemon/GFBMDL/FlatBuffers/gfbmdl.cs b/File_Format_Library/FileFormats/Pokemon/GFLX/GFBMDL/FlatBuffers/gfbmdl.cs similarity index 73% rename from File_Format_Library/FileFormats/Pokemon/GFBMDL/FlatBuffers/gfbmdl.cs rename to File_Format_Library/FileFormats/Pokemon/GFLX/GFBMDL/FlatBuffers/gfbmdl.cs index ebed02ef..2db0b7d1 100644 --- a/File_Format_Library/FileFormats/Pokemon/GFBMDL/FlatBuffers/gfbmdl.cs +++ b/File_Format_Library/FileFormats/Pokemon/GFLX/GFBMDL/FlatBuffers/gfbmdl.cs @@ -4,6 +4,7 @@ namespace FlatBuffers.Gfbmdl { + using global::System; using global::FlatBuffers; @@ -66,8 +67,8 @@ namespace FlatBuffers.Gfbmdl public int MeshesLength { get { int o = __p.__offset(20); return o != 0 ? __p.__vector_len(o) : 0; } } public Bone? Bones(int j) { int o = __p.__offset(22); return o != 0 ? (Bone?)(new Bone()).__assign(__p.__indirect(__p.__vector(o) + j * 4), __p.bb) : null; } public int BonesLength { get { int o = __p.__offset(22); return o != 0 ? __p.__vector_len(o) : 0; } } - public RenderInfo? RenderData(int j) { int o = __p.__offset(24); return o != 0 ? (RenderInfo?)(new RenderInfo()).__assign(__p.__indirect(__p.__vector(o) + j * 4), __p.bb) : null; } - public int RenderDataLength { get { int o = __p.__offset(24); return o != 0 ? __p.__vector_len(o) : 0; } } + public CollisionGroup? CollisionGroups(int j) { int o = __p.__offset(24); return o != 0 ? (CollisionGroup?)(new CollisionGroup()).__assign(__p.__indirect(__p.__vector(o) + j * 4), __p.bb) : null; } + public int CollisionGroupsLength { get { int o = __p.__offset(24); return o != 0 ? __p.__vector_len(o) : 0; } } public static void StartModel(FlatBufferBuilder builder) { builder.StartObject(11); } public static void AddVersion(FlatBufferBuilder builder, uint Version) { builder.AddUint(0, Version, 0); } @@ -104,10 +105,10 @@ namespace FlatBuffers.Gfbmdl public static VectorOffset CreateBonesVector(FlatBufferBuilder builder, Offset[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddOffset(data[i].Value); return builder.EndVector(); } public static VectorOffset CreateBonesVectorBlock(FlatBufferBuilder builder, Offset[] data) { builder.StartVector(4, data.Length, 4); builder.Add(data); return builder.EndVector(); } public static void StartBonesVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); } - public static void AddRenderData(FlatBufferBuilder builder, VectorOffset RenderDataOffset) { builder.AddOffset(10, RenderDataOffset.Value, 0); } - public static VectorOffset CreateRenderDataVector(FlatBufferBuilder builder, Offset[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddOffset(data[i].Value); return builder.EndVector(); } - public static VectorOffset CreateRenderDataVectorBlock(FlatBufferBuilder builder, Offset[] data) { builder.StartVector(4, data.Length, 4); builder.Add(data); return builder.EndVector(); } - public static void StartRenderDataVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); } + public static void AddCollisionGroups(FlatBufferBuilder builder, VectorOffset CollisionGroupsOffset) { builder.AddOffset(10, CollisionGroupsOffset.Value, 0); } + public static VectorOffset CreateCollisionGroupsVector(FlatBufferBuilder builder, Offset[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddOffset(data[i].Value); return builder.EndVector(); } + public static VectorOffset CreateCollisionGroupsVectorBlock(FlatBufferBuilder builder, Offset[] data) { builder.StartVector(4, data.Length, 4); builder.Add(data); return builder.EndVector(); } + public static void StartCollisionGroupsVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); } public static Offset EndModel(FlatBufferBuilder builder) { int o = builder.EndObject(); @@ -169,50 +170,50 @@ namespace FlatBuffers.Gfbmdl #endif public byte[] GetShaderGroupArray() { return __p.__vector_as_array(6); } public int RenderLayer { get { int o = __p.__offset(8); return o != 0 ? __p.bb.GetInt(o + __p.bb_pos) : (int)0; } } - public sbyte Unknown1 { get { int o = __p.__offset(10); return o != 0 ? __p.bb.GetSbyte(o + __p.bb_pos) : (sbyte)0; } } - public sbyte Unknown2 { get { int o = __p.__offset(12); return o != 0 ? __p.bb.GetSbyte(o + __p.bb_pos) : (sbyte)0; } } + public byte Unknown1 { get { int o = __p.__offset(10); return o != 0 ? __p.bb.Get(o + __p.bb_pos) : (byte)0; } } + public byte Unknown2 { get { int o = __p.__offset(12); return o != 0 ? __p.bb.Get(o + __p.bb_pos) : (byte)0; } } public int Parameter1 { get { int o = __p.__offset(14); return o != 0 ? __p.bb.GetInt(o + __p.bb_pos) : (int)0; } } public int Parameter2 { get { int o = __p.__offset(16); return o != 0 ? __p.bb.GetInt(o + __p.bb_pos) : (int)0; } } public int Parameter3 { get { int o = __p.__offset(18); return o != 0 ? __p.bb.GetInt(o + __p.bb_pos) : (int)0; } } public int Parameter4 { get { int o = __p.__offset(20); return o != 0 ? __p.bb.GetInt(o + __p.bb_pos) : (int)0; } } public int Parameter5 { get { int o = __p.__offset(22); return o != 0 ? __p.bb.GetInt(o + __p.bb_pos) : (int)0; } } public int Parameter6 { get { int o = __p.__offset(24); return o != 0 ? __p.bb.GetInt(o + __p.bb_pos) : (int)0; } } - public TextureMap? Textures(int j) { int o = __p.__offset(26); return o != 0 ? (TextureMap?)(new TextureMap()).__assign(__p.__indirect(__p.__vector(o) + j * 4), __p.bb) : null; } - public int TexturesLength { get { int o = __p.__offset(26); return o != 0 ? __p.__vector_len(o) : 0; } } + public TextureMap? TextureMaps(int j) { int o = __p.__offset(26); return o != 0 ? (TextureMap?)(new TextureMap()).__assign(__p.__indirect(__p.__vector(o) + j * 4), __p.bb) : null; } + public int TextureMapsLength { get { int o = __p.__offset(26); return o != 0 ? __p.__vector_len(o) : 0; } } public MatSwitch? Switches(int j) { int o = __p.__offset(28); return o != 0 ? (MatSwitch?)(new MatSwitch()).__assign(__p.__indirect(__p.__vector(o) + j * 4), __p.bb) : null; } public int SwitchesLength { get { int o = __p.__offset(28); return o != 0 ? __p.__vector_len(o) : 0; } } public MatFloat? Values(int j) { int o = __p.__offset(30); return o != 0 ? (MatFloat?)(new MatFloat()).__assign(__p.__indirect(__p.__vector(o) + j * 4), __p.bb) : null; } public int ValuesLength { get { int o = __p.__offset(30); return o != 0 ? __p.__vector_len(o) : 0; } } public MatColor? Colors(int j) { int o = __p.__offset(32); return o != 0 ? (MatColor?)(new MatColor()).__assign(__p.__indirect(__p.__vector(o) + j * 4), __p.bb) : null; } public int ColorsLength { get { int o = __p.__offset(32); return o != 0 ? __p.__vector_len(o) : 0; } } - public sbyte Unknown3 { get { int o = __p.__offset(34); return o != 0 ? __p.bb.GetSbyte(o + __p.bb_pos) : (sbyte)0; } } - public sbyte Unknown4 { get { int o = __p.__offset(36); return o != 0 ? __p.bb.GetSbyte(o + __p.bb_pos) : (sbyte)0; } } - public sbyte Unknown5 { get { int o = __p.__offset(38); return o != 0 ? __p.bb.GetSbyte(o + __p.bb_pos) : (sbyte)0; } } - public sbyte Unknown6 { get { int o = __p.__offset(40); return o != 0 ? __p.bb.GetSbyte(o + __p.bb_pos) : (sbyte)0; } } - public sbyte Unknown7 { get { int o = __p.__offset(42); return o != 0 ? __p.bb.GetSbyte(o + __p.bb_pos) : (sbyte)0; } } + public byte Unknown3 { get { int o = __p.__offset(34); return o != 0 ? __p.bb.Get(o + __p.bb_pos) : (byte)0; } } + public byte Unknown4 { get { int o = __p.__offset(36); return o != 0 ? __p.bb.Get(o + __p.bb_pos) : (byte)0; } } + public byte Unknown5 { get { int o = __p.__offset(38); return o != 0 ? __p.bb.Get(o + __p.bb_pos) : (byte)0; } } + public byte Unknown6 { get { int o = __p.__offset(40); return o != 0 ? __p.bb.Get(o + __p.bb_pos) : (byte)0; } } + public byte Unknown7 { get { int o = __p.__offset(42); return o != 0 ? __p.bb.Get(o + __p.bb_pos) : (byte)0; } } public MaterialCommon? Common { get { int o = __p.__offset(44); return o != 0 ? (MaterialCommon?)(new MaterialCommon()).__assign(__p.__indirect(o + __p.bb_pos), __p.bb) : null; } } public static Offset CreateMaterial(FlatBufferBuilder builder, StringOffset NameOffset = default(StringOffset), StringOffset ShaderGroupOffset = default(StringOffset), int RenderLayer = 0, - sbyte Unknown1 = 0, - sbyte Unknown2 = 0, + byte Unknown1 = 0, + byte Unknown2 = 0, int Parameter1 = 0, int Parameter2 = 0, int Parameter3 = 0, int Parameter4 = 0, int Parameter5 = 0, int Parameter6 = 0, - VectorOffset TexturesOffset = default(VectorOffset), + VectorOffset TextureMapsOffset = default(VectorOffset), VectorOffset SwitchesOffset = default(VectorOffset), VectorOffset ValuesOffset = default(VectorOffset), VectorOffset ColorsOffset = default(VectorOffset), - sbyte Unknown3 = 0, - sbyte Unknown4 = 0, - sbyte Unknown5 = 0, - sbyte Unknown6 = 0, - sbyte Unknown7 = 0, + byte Unknown3 = 0, + byte Unknown4 = 0, + byte Unknown5 = 0, + byte Unknown6 = 0, + byte Unknown7 = 0, Offset CommonOffset = default(Offset)) { builder.StartObject(21); @@ -220,7 +221,7 @@ namespace FlatBuffers.Gfbmdl Material.AddColors(builder, ColorsOffset); Material.AddValues(builder, ValuesOffset); Material.AddSwitches(builder, SwitchesOffset); - Material.AddTextures(builder, TexturesOffset); + Material.AddTextureMaps(builder, TextureMapsOffset); Material.AddParameter6(builder, Parameter6); Material.AddParameter5(builder, Parameter5); Material.AddParameter4(builder, Parameter4); @@ -244,18 +245,18 @@ namespace FlatBuffers.Gfbmdl public static void AddName(FlatBufferBuilder builder, StringOffset NameOffset) { builder.AddOffset(0, NameOffset.Value, 0); } public static void AddShaderGroup(FlatBufferBuilder builder, StringOffset ShaderGroupOffset) { builder.AddOffset(1, ShaderGroupOffset.Value, 0); } public static void AddRenderLayer(FlatBufferBuilder builder, int RenderLayer) { builder.AddInt(2, RenderLayer, 0); } - public static void AddUnknown1(FlatBufferBuilder builder, sbyte Unknown1) { builder.AddSbyte(3, Unknown1, 0); } - public static void AddUnknown2(FlatBufferBuilder builder, sbyte Unknown2) { builder.AddSbyte(4, Unknown2, 0); } + public static void AddUnknown1(FlatBufferBuilder builder, byte Unknown1) { builder.AddByte(3, Unknown1, 0); } + public static void AddUnknown2(FlatBufferBuilder builder, byte Unknown2) { builder.AddByte(4, Unknown2, 0); } public static void AddParameter1(FlatBufferBuilder builder, int Parameter1) { builder.AddInt(5, Parameter1, 0); } public static void AddParameter2(FlatBufferBuilder builder, int Parameter2) { builder.AddInt(6, Parameter2, 0); } public static void AddParameter3(FlatBufferBuilder builder, int Parameter3) { builder.AddInt(7, Parameter3, 0); } public static void AddParameter4(FlatBufferBuilder builder, int Parameter4) { builder.AddInt(8, Parameter4, 0); } public static void AddParameter5(FlatBufferBuilder builder, int Parameter5) { builder.AddInt(9, Parameter5, 0); } public static void AddParameter6(FlatBufferBuilder builder, int Parameter6) { builder.AddInt(10, Parameter6, 0); } - public static void AddTextures(FlatBufferBuilder builder, VectorOffset TexturesOffset) { builder.AddOffset(11, TexturesOffset.Value, 0); } - public static VectorOffset CreateTexturesVector(FlatBufferBuilder builder, Offset[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddOffset(data[i].Value); return builder.EndVector(); } - public static VectorOffset CreateTexturesVectorBlock(FlatBufferBuilder builder, Offset[] data) { builder.StartVector(4, data.Length, 4); builder.Add(data); return builder.EndVector(); } - public static void StartTexturesVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); } + public static void AddTextureMaps(FlatBufferBuilder builder, VectorOffset TextureMapsOffset) { builder.AddOffset(11, TextureMapsOffset.Value, 0); } + public static VectorOffset CreateTextureMapsVector(FlatBufferBuilder builder, Offset[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddOffset(data[i].Value); return builder.EndVector(); } + public static VectorOffset CreateTextureMapsVectorBlock(FlatBufferBuilder builder, Offset[] data) { builder.StartVector(4, data.Length, 4); builder.Add(data); return builder.EndVector(); } + public static void StartTextureMapsVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); } public static void AddSwitches(FlatBufferBuilder builder, VectorOffset SwitchesOffset) { builder.AddOffset(12, SwitchesOffset.Value, 0); } public static VectorOffset CreateSwitchesVector(FlatBufferBuilder builder, Offset[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddOffset(data[i].Value); return builder.EndVector(); } public static VectorOffset CreateSwitchesVectorBlock(FlatBufferBuilder builder, Offset[] data) { builder.StartVector(4, data.Length, 4); builder.Add(data); return builder.EndVector(); } @@ -268,11 +269,11 @@ namespace FlatBuffers.Gfbmdl public static VectorOffset CreateColorsVector(FlatBufferBuilder builder, Offset[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddOffset(data[i].Value); return builder.EndVector(); } public static VectorOffset CreateColorsVectorBlock(FlatBufferBuilder builder, Offset[] data) { builder.StartVector(4, data.Length, 4); builder.Add(data); return builder.EndVector(); } public static void StartColorsVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); } - public static void AddUnknown3(FlatBufferBuilder builder, sbyte Unknown3) { builder.AddSbyte(15, Unknown3, 0); } - public static void AddUnknown4(FlatBufferBuilder builder, sbyte Unknown4) { builder.AddSbyte(16, Unknown4, 0); } - public static void AddUnknown5(FlatBufferBuilder builder, sbyte Unknown5) { builder.AddSbyte(17, Unknown5, 0); } - public static void AddUnknown6(FlatBufferBuilder builder, sbyte Unknown6) { builder.AddSbyte(18, Unknown6, 0); } - public static void AddUnknown7(FlatBufferBuilder builder, sbyte Unknown7) { builder.AddSbyte(19, Unknown7, 0); } + public static void AddUnknown3(FlatBufferBuilder builder, byte Unknown3) { builder.AddByte(15, Unknown3, 0); } + public static void AddUnknown4(FlatBufferBuilder builder, byte Unknown4) { builder.AddByte(16, Unknown4, 0); } + public static void AddUnknown5(FlatBufferBuilder builder, byte Unknown5) { builder.AddByte(17, Unknown5, 0); } + public static void AddUnknown6(FlatBufferBuilder builder, byte Unknown6) { builder.AddByte(18, Unknown6, 0); } + public static void AddUnknown7(FlatBufferBuilder builder, byte Unknown7) { builder.AddByte(19, Unknown7, 0); } public static void AddCommon(FlatBufferBuilder builder, Offset CommonOffset) { builder.AddOffset(20, CommonOffset.Value, 0); } public static Offset EndMaterial(FlatBufferBuilder builder) { @@ -480,32 +481,32 @@ namespace FlatBuffers.Gfbmdl public void __init(int _i, ByteBuffer _bb) { __p.bb_pos = _i; __p.bb = _bb; } public TextureMap __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; } - public string Name { get { int o = __p.__offset(4); return o != 0 ? __p.__string(o + __p.bb_pos) : null; } } + public string Sampler { get { int o = __p.__offset(4); return o != 0 ? __p.__string(o + __p.bb_pos) : null; } } #if ENABLE_SPAN_T - public Span GetNameBytes() { return __p.__vector_as_span(4); } + public Span GetSamplerBytes() { return __p.__vector_as_span(4); } #else - public ArraySegment? GetNameBytes() { return __p.__vector_as_arraysegment(4); } + public ArraySegment? GetSamplerBytes() { return __p.__vector_as_arraysegment(4); } #endif - public byte[] GetNameArray() { return __p.__vector_as_array(4); } + public byte[] GetSamplerArray() { return __p.__vector_as_array(4); } public int Index { get { int o = __p.__offset(6); return o != 0 ? __p.bb.GetInt(o + __p.bb_pos) : (int)0; } } - public TextureMapping? Mapping { get { int o = __p.__offset(8); return o != 0 ? (TextureMapping?)(new TextureMapping()).__assign(__p.__indirect(o + __p.bb_pos), __p.bb) : null; } } + public TextureMapping? Params { get { int o = __p.__offset(8); return o != 0 ? (TextureMapping?)(new TextureMapping()).__assign(__p.__indirect(o + __p.bb_pos), __p.bb) : null; } } public static Offset CreateTextureMap(FlatBufferBuilder builder, - StringOffset NameOffset = default(StringOffset), + StringOffset SamplerOffset = default(StringOffset), int Index = 0, - Offset MappingOffset = default(Offset)) + Offset ParamsOffset = default(Offset)) { builder.StartObject(3); - TextureMap.AddMapping(builder, MappingOffset); + TextureMap.AddParams(builder, ParamsOffset); TextureMap.AddIndex(builder, Index); - TextureMap.AddName(builder, NameOffset); + TextureMap.AddSampler(builder, SamplerOffset); return TextureMap.EndTextureMap(builder); } public static void StartTextureMap(FlatBufferBuilder builder) { builder.StartObject(3); } - public static void AddName(FlatBufferBuilder builder, StringOffset NameOffset) { builder.AddOffset(0, NameOffset.Value, 0); } + public static void AddSampler(FlatBufferBuilder builder, StringOffset SamplerOffset) { builder.AddOffset(0, SamplerOffset.Value, 0); } public static void AddIndex(FlatBufferBuilder builder, int Index) { builder.AddInt(1, Index, 0); } - public static void AddMapping(FlatBufferBuilder builder, Offset MappingOffset) { builder.AddOffset(2, MappingOffset.Value, 0); } + public static void AddParams(FlatBufferBuilder builder, Offset ParamsOffset) { builder.AddOffset(2, ParamsOffset.Value, 0); } public static Offset EndTextureMap(FlatBufferBuilder builder) { int o = builder.EndObject(); @@ -522,50 +523,50 @@ namespace FlatBuffers.Gfbmdl public void __init(int _i, ByteBuffer _bb) { __p.bb_pos = _i; __p.bb = _bb; } public TextureMapping __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; } - public uint Type { get { int o = __p.__offset(4); return o != 0 ? __p.bb.GetUint(o + __p.bb_pos) : (uint)0; } } - public uint Scale { get { int o = __p.__offset(6); return o != 0 ? __p.bb.GetUint(o + __p.bb_pos) : (uint)0; } } - public uint Translation { get { int o = __p.__offset(8); return o != 0 ? __p.bb.GetUint(o + __p.bb_pos) : (uint)0; } } - public uint Rotation { get { int o = __p.__offset(10); return o != 0 ? __p.bb.GetUint(o + __p.bb_pos) : (uint)0; } } - public uint WrapS { get { int o = __p.__offset(12); return o != 0 ? __p.bb.GetUint(o + __p.bb_pos) : (uint)0; } } - public uint WrapT { get { int o = __p.__offset(14); return o != 0 ? __p.bb.GetUint(o + __p.bb_pos) : (uint)0; } } - public uint MagFilter { get { int o = __p.__offset(16); return o != 0 ? __p.bb.GetUint(o + __p.bb_pos) : (uint)0; } } - public uint MinFilter { get { int o = __p.__offset(18); return o != 0 ? __p.bb.GetUint(o + __p.bb_pos) : (uint)0; } } - public float MinLOD { get { int o = __p.__offset(20); return o != 0 ? __p.bb.GetFloat(o + __p.bb_pos) : (float)0.0f; } } + public uint Unknown1 { get { int o = __p.__offset(4); return o != 0 ? __p.bb.GetUint(o + __p.bb_pos) : (uint)0; } } + public uint Unknown2 { get { int o = __p.__offset(6); return o != 0 ? __p.bb.GetUint(o + __p.bb_pos) : (uint)0; } } + public uint Unknown3 { get { int o = __p.__offset(8); return o != 0 ? __p.bb.GetUint(o + __p.bb_pos) : (uint)0; } } + public uint Unknown4 { get { int o = __p.__offset(10); return o != 0 ? __p.bb.GetUint(o + __p.bb_pos) : (uint)0; } } + public uint Unknown5 { get { int o = __p.__offset(12); return o != 0 ? __p.bb.GetUint(o + __p.bb_pos) : (uint)0; } } + public uint Unknown6 { get { int o = __p.__offset(14); return o != 0 ? __p.bb.GetUint(o + __p.bb_pos) : (uint)0; } } + public uint Unknown7 { get { int o = __p.__offset(16); return o != 0 ? __p.bb.GetUint(o + __p.bb_pos) : (uint)0; } } + public uint Unknown8 { get { int o = __p.__offset(18); return o != 0 ? __p.bb.GetUint(o + __p.bb_pos) : (uint)0; } } + public float LodBias { get { int o = __p.__offset(20); return o != 0 ? __p.bb.GetFloat(o + __p.bb_pos) : (float)0.0f; } } public static Offset CreateTextureMapping(FlatBufferBuilder builder, - uint Type = 0, - uint Scale = 0, - uint Translation = 0, - uint Rotation = 0, - uint WrapS = 0, - uint WrapT = 0, - uint magFilter = 0, - uint minFilter = 0, - float minLOD = 0.0f) + uint Unknown1 = 0, + uint Unknown2 = 0, + uint Unknown3 = 0, + uint Unknown4 = 0, + uint Unknown5 = 0, + uint Unknown6 = 0, + uint Unknown7 = 0, + uint Unknown8 = 0, + float lodBias = 0.0f) { builder.StartObject(9); - TextureMapping.AddMinLOD(builder, minLOD); - TextureMapping.AddMinFilter(builder, minFilter); - TextureMapping.AddMagFilter(builder, magFilter); - TextureMapping.AddWrapT(builder, WrapT); - TextureMapping.AddWrapS(builder, WrapS); - TextureMapping.AddRotation(builder, Rotation); - TextureMapping.AddTranslation(builder, Translation); - TextureMapping.AddScale(builder, Scale); - TextureMapping.AddType(builder, Type); + TextureMapping.AddLodBias(builder, lodBias); + TextureMapping.AddUnknown8(builder, Unknown8); + TextureMapping.AddUnknown7(builder, Unknown7); + TextureMapping.AddUnknown6(builder, Unknown6); + TextureMapping.AddUnknown5(builder, Unknown5); + TextureMapping.AddUnknown4(builder, Unknown4); + TextureMapping.AddUnknown3(builder, Unknown3); + TextureMapping.AddUnknown2(builder, Unknown2); + TextureMapping.AddUnknown1(builder, Unknown1); return TextureMapping.EndTextureMapping(builder); } public static void StartTextureMapping(FlatBufferBuilder builder) { builder.StartObject(9); } - public static void AddType(FlatBufferBuilder builder, uint Type) { builder.AddUint(0, Type, 0); } - public static void AddScale(FlatBufferBuilder builder, uint Scale) { builder.AddUint(1, Scale, 0); } - public static void AddTranslation(FlatBufferBuilder builder, uint Translation) { builder.AddUint(2, Translation, 0); } - public static void AddRotation(FlatBufferBuilder builder, uint Rotation) { builder.AddUint(3, Rotation, 0); } - public static void AddWrapS(FlatBufferBuilder builder, uint WrapS) { builder.AddUint(4, WrapS, 0); } - public static void AddWrapT(FlatBufferBuilder builder, uint WrapT) { builder.AddUint(5, WrapT, 0); } - public static void AddMagFilter(FlatBufferBuilder builder, uint magFilter) { builder.AddUint(6, magFilter, 0); } - public static void AddMinFilter(FlatBufferBuilder builder, uint minFilter) { builder.AddUint(7, minFilter, 0); } - public static void AddMinLOD(FlatBufferBuilder builder, float minLOD) { builder.AddFloat(8, minLOD, 0.0f); } + public static void AddUnknown1(FlatBufferBuilder builder, uint Unknown1) { builder.AddUint(0, Unknown1, 0); } + public static void AddUnknown2(FlatBufferBuilder builder, uint Unknown2) { builder.AddUint(1, Unknown2, 0); } + public static void AddUnknown3(FlatBufferBuilder builder, uint Unknown3) { builder.AddUint(2, Unknown3, 0); } + public static void AddUnknown4(FlatBufferBuilder builder, uint Unknown4) { builder.AddUint(3, Unknown4, 0); } + public static void AddUnknown5(FlatBufferBuilder builder, uint Unknown5) { builder.AddUint(4, Unknown5, 0); } + public static void AddUnknown6(FlatBufferBuilder builder, uint Unknown6) { builder.AddUint(5, Unknown6, 0); } + public static void AddUnknown7(FlatBufferBuilder builder, uint Unknown7) { builder.AddUint(6, Unknown7, 0); } + public static void AddUnknown8(FlatBufferBuilder builder, uint Unknown8) { builder.AddUint(7, Unknown8, 0); } + public static void AddLodBias(FlatBufferBuilder builder, float lodBias) { builder.AddFloat(8, lodBias, 0.0f); } public static Offset EndTextureMapping(FlatBufferBuilder builder) { int o = builder.EndObject(); @@ -582,16 +583,16 @@ namespace FlatBuffers.Gfbmdl public void __init(int _i, ByteBuffer _bb) { __p.bb_pos = _i; __p.bb = _bb; } public Group __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; } - public uint BoneID { get { int o = __p.__offset(4); return o != 0 ? __p.bb.GetUint(o + __p.bb_pos) : (uint)0; } } - public uint MeshID { get { int o = __p.__offset(6); return o != 0 ? __p.bb.GetUint(o + __p.bb_pos) : (uint)0; } } + public uint BoneIndex { get { int o = __p.__offset(4); return o != 0 ? __p.bb.GetUint(o + __p.bb_pos) : (uint)0; } } + public uint MeshIndex { get { int o = __p.__offset(6); return o != 0 ? __p.bb.GetUint(o + __p.bb_pos) : (uint)0; } } public BoundingBox? Bounding { get { int o = __p.__offset(8); return o != 0 ? (BoundingBox?)(new BoundingBox()).__assign(o + __p.bb_pos, __p.bb) : null; } } public uint Layer { get { int o = __p.__offset(10); return o != 0 ? __p.bb.GetUint(o + __p.bb_pos) : (uint)0; } } public static void StartGroup(FlatBufferBuilder builder) { builder.StartObject(4); } - public static void AddBoneID(FlatBufferBuilder builder, uint boneID) { builder.AddUint(0, boneID, 0); } - public static void AddMeshID(FlatBufferBuilder builder, uint meshID) { builder.AddUint(1, meshID, 0); } + public static void AddBoneIndex(FlatBufferBuilder builder, uint BoneIndex) { builder.AddUint(0, BoneIndex, 0); } + public static void AddMeshIndex(FlatBufferBuilder builder, uint MeshIndex) { builder.AddUint(1, MeshIndex, 0); } public static void AddBounding(FlatBufferBuilder builder, Offset BoundingOffset) { builder.AddStruct(2, BoundingOffset.Value, 0); } - public static void AddLayer(FlatBufferBuilder builder, uint layer) { builder.AddUint(3, layer, 0); } + public static void AddLayer(FlatBufferBuilder builder, uint Layer) { builder.AddUint(3, Layer, 0); } public static Offset EndGroup(FlatBufferBuilder builder) { int o = builder.EndObject(); @@ -610,8 +611,8 @@ namespace FlatBuffers.Gfbmdl public MeshPolygon? Polygons(int j) { int o = __p.__offset(4); return o != 0 ? (MeshPolygon?)(new MeshPolygon()).__assign(__p.__indirect(__p.__vector(o) + j * 4), __p.bb) : null; } public int PolygonsLength { get { int o = __p.__offset(4); return o != 0 ? __p.__vector_len(o) : 0; } } - public MeshAlignment? Alignments(int j) { int o = __p.__offset(6); return o != 0 ? (MeshAlignment?)(new MeshAlignment()).__assign(__p.__indirect(__p.__vector(o) + j * 4), __p.bb) : null; } - public int AlignmentsLength { get { int o = __p.__offset(6); return o != 0 ? __p.__vector_len(o) : 0; } } + public MeshAttribute? Attributes(int j) { int o = __p.__offset(6); return o != 0 ? (MeshAttribute?)(new MeshAttribute()).__assign(__p.__indirect(__p.__vector(o) + j * 4), __p.bb) : null; } + public int AttributesLength { get { int o = __p.__offset(6); return o != 0 ? __p.__vector_len(o) : 0; } } public byte Data(int j) { int o = __p.__offset(8); return o != 0 ? __p.bb.Get(__p.__vector(o) + j * 1) : (byte)0; } public int DataLength { get { int o = __p.__offset(8); return o != 0 ? __p.__vector_len(o) : 0; } } #if ENABLE_SPAN_T @@ -623,12 +624,12 @@ namespace FlatBuffers.Gfbmdl public static Offset CreateMesh(FlatBufferBuilder builder, VectorOffset PolygonsOffset = default(VectorOffset), - VectorOffset AlignmentsOffset = default(VectorOffset), + VectorOffset AttributesOffset = default(VectorOffset), VectorOffset DataOffset = default(VectorOffset)) { builder.StartObject(3); Mesh.AddData(builder, DataOffset); - Mesh.AddAlignments(builder, AlignmentsOffset); + Mesh.AddAttributes(builder, AttributesOffset); Mesh.AddPolygons(builder, PolygonsOffset); return Mesh.EndMesh(builder); } @@ -638,10 +639,10 @@ namespace FlatBuffers.Gfbmdl public static VectorOffset CreatePolygonsVector(FlatBufferBuilder builder, Offset[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddOffset(data[i].Value); return builder.EndVector(); } public static VectorOffset CreatePolygonsVectorBlock(FlatBufferBuilder builder, Offset[] data) { builder.StartVector(4, data.Length, 4); builder.Add(data); return builder.EndVector(); } public static void StartPolygonsVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); } - public static void AddAlignments(FlatBufferBuilder builder, VectorOffset AlignmentsOffset) { builder.AddOffset(1, AlignmentsOffset.Value, 0); } - public static VectorOffset CreateAlignmentsVector(FlatBufferBuilder builder, Offset[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddOffset(data[i].Value); return builder.EndVector(); } - public static VectorOffset CreateAlignmentsVectorBlock(FlatBufferBuilder builder, Offset[] data) { builder.StartVector(4, data.Length, 4); builder.Add(data); return builder.EndVector(); } - public static void StartAlignmentsVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); } + public static void AddAttributes(FlatBufferBuilder builder, VectorOffset AttributesOffset) { builder.AddOffset(1, AttributesOffset.Value, 0); } + public static VectorOffset CreateAttributesVector(FlatBufferBuilder builder, Offset[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddOffset(data[i].Value); return builder.EndVector(); } + public static VectorOffset CreateAttributesVectorBlock(FlatBufferBuilder builder, Offset[] data) { builder.StartVector(4, data.Length, 4); builder.Add(data); return builder.EndVector(); } + public static void StartAttributesVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); } public static void AddData(FlatBufferBuilder builder, VectorOffset DataOffset) { builder.AddOffset(2, DataOffset.Value, 0); } public static VectorOffset CreateDataVector(FlatBufferBuilder builder, byte[] data) { builder.StartVector(1, data.Length, 1); for (int i = data.Length - 1; i >= 0; i--) builder.AddByte(data[i]); return builder.EndVector(); } public static VectorOffset CreateDataVectorBlock(FlatBufferBuilder builder, byte[] data) { builder.StartVector(1, data.Length, 1); builder.Add(data); return builder.EndVector(); } @@ -662,32 +663,32 @@ namespace FlatBuffers.Gfbmdl public void __init(int _i, ByteBuffer _bb) { __p.bb_pos = _i; __p.bb = _bb; } public MeshPolygon __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; } - public uint MaterialID { get { int o = __p.__offset(4); return o != 0 ? __p.bb.GetUint(o + __p.bb_pos) : (uint)0; } } - public ushort Data(int j) { int o = __p.__offset(6); return o != 0 ? __p.bb.GetUshort(__p.__vector(o) + j * 2) : (ushort)0; } - public int DataLength { get { int o = __p.__offset(6); return o != 0 ? __p.__vector_len(o) : 0; } } + public uint MaterialIndex { get { int o = __p.__offset(4); return o != 0 ? __p.bb.GetUint(o + __p.bb_pos) : (uint)0; } } + public ushort Faces(int j) { int o = __p.__offset(6); return o != 0 ? __p.bb.GetUshort(__p.__vector(o) + j * 2) : (ushort)0; } + public int FacesLength { get { int o = __p.__offset(6); return o != 0 ? __p.__vector_len(o) : 0; } } #if ENABLE_SPAN_T - public Span GetDataBytes() { return __p.__vector_as_span(6); } + public Span GetFacesBytes() { return __p.__vector_as_span(6); } #else - public ArraySegment? GetDataBytes() { return __p.__vector_as_arraysegment(6); } + public ArraySegment? GetFacesBytes() { return __p.__vector_as_arraysegment(6); } #endif - public ushort[] GetDataArray() { return __p.__vector_as_array(6); } + public ushort[] GetFacesArray() { return __p.__vector_as_array(6); } public static Offset CreateMeshPolygon(FlatBufferBuilder builder, - uint materialID = 0, - VectorOffset dataOffset = default(VectorOffset)) + uint MaterialIndex = 0, + VectorOffset FacesOffset = default(VectorOffset)) { builder.StartObject(2); - MeshPolygon.AddData(builder, dataOffset); - MeshPolygon.AddMaterialID(builder, materialID); + MeshPolygon.AddFaces(builder, FacesOffset); + MeshPolygon.AddMaterialIndex(builder, MaterialIndex); return MeshPolygon.EndMeshPolygon(builder); } public static void StartMeshPolygon(FlatBufferBuilder builder) { builder.StartObject(2); } - public static void AddMaterialID(FlatBufferBuilder builder, uint materialID) { builder.AddUint(0, materialID, 0); } - public static void AddData(FlatBufferBuilder builder, VectorOffset dataOffset) { builder.AddOffset(1, dataOffset.Value, 0); } - public static VectorOffset CreateDataVector(FlatBufferBuilder builder, ushort[] data) { builder.StartVector(2, data.Length, 2); for (int i = data.Length - 1; i >= 0; i--) builder.AddUshort(data[i]); return builder.EndVector(); } - public static VectorOffset CreateDataVectorBlock(FlatBufferBuilder builder, ushort[] data) { builder.StartVector(2, data.Length, 2); builder.Add(data); return builder.EndVector(); } - public static void StartDataVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(2, numElems, 2); } + public static void AddMaterialIndex(FlatBufferBuilder builder, uint MaterialIndex) { builder.AddUint(0, MaterialIndex, 0); } + public static void AddFaces(FlatBufferBuilder builder, VectorOffset FacesOffset) { builder.AddOffset(1, FacesOffset.Value, 0); } + public static VectorOffset CreateFacesVector(FlatBufferBuilder builder, ushort[] data) { builder.StartVector(2, data.Length, 2); for (int i = data.Length - 1; i >= 0; i--) builder.AddUshort(data[i]); return builder.EndVector(); } + public static VectorOffset CreateFacesVectorBlock(FlatBufferBuilder builder, ushort[] data) { builder.StartVector(2, data.Length, 2); builder.Add(data); return builder.EndVector(); } + public static void StartFacesVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(2, numElems, 2); } public static Offset EndMeshPolygon(FlatBufferBuilder builder) { int o = builder.EndObject(); @@ -695,39 +696,39 @@ namespace FlatBuffers.Gfbmdl } }; - public struct MeshAlignment : IFlatbufferObject + public struct MeshAttribute : IFlatbufferObject { private Table __p; public ByteBuffer ByteBuffer { get { return __p.bb; } } - public static MeshAlignment GetRootAsMeshAlignment(ByteBuffer _bb) { return GetRootAsMeshAlignment(_bb, new MeshAlignment()); } - public static MeshAlignment GetRootAsMeshAlignment(ByteBuffer _bb, MeshAlignment obj) { return (obj.__assign(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); } + public static MeshAttribute GetRootAsMeshAttribute(ByteBuffer _bb) { return GetRootAsMeshAttribute(_bb, new MeshAttribute()); } + public static MeshAttribute GetRootAsMeshAttribute(ByteBuffer _bb, MeshAttribute obj) { return (obj.__assign(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); } public void __init(int _i, ByteBuffer _bb) { __p.bb_pos = _i; __p.bb = _bb; } - public MeshAlignment __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; } + public MeshAttribute __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; } - public VertexType TypeID { get { int o = __p.__offset(4); return o != 0 ? (VertexType)__p.bb.GetUint(o + __p.bb_pos) : VertexType.Position; } } - public BufferFormat FormatID { get { int o = __p.__offset(6); return o != 0 ? (BufferFormat)__p.bb.GetUint(o + __p.bb_pos) : BufferFormat.Float; } } + public uint VertexType { get { int o = __p.__offset(4); return o != 0 ? __p.bb.GetUint(o + __p.bb_pos) : (uint)0; } } + public uint BufferFormat { get { int o = __p.__offset(6); return o != 0 ? __p.bb.GetUint(o + __p.bb_pos) : (uint)0; } } public uint ElementCount { get { int o = __p.__offset(8); return o != 0 ? __p.bb.GetUint(o + __p.bb_pos) : (uint)0; } } - public static Offset CreateMeshAlignment(FlatBufferBuilder builder, - VertexType TypeID = VertexType.Position, - BufferFormat FormatID = BufferFormat.Float, + public static Offset CreateMeshAttribute(FlatBufferBuilder builder, + uint VertexType = 0, + uint BufferFormat = 0, uint ElementCount = 0) { builder.StartObject(3); - MeshAlignment.AddElementCount(builder, ElementCount); - MeshAlignment.AddFormatID(builder, FormatID); - MeshAlignment.AddTypeID(builder, TypeID); - return MeshAlignment.EndMeshAlignment(builder); + MeshAttribute.AddElementCount(builder, ElementCount); + MeshAttribute.AddBufferFormat(builder, BufferFormat); + MeshAttribute.AddVertexType(builder, VertexType); + return MeshAttribute.EndMeshAttribute(builder); } - public static void StartMeshAlignment(FlatBufferBuilder builder) { builder.StartObject(3); } - public static void AddTypeID(FlatBufferBuilder builder, VertexType TypeID) { builder.AddUint(0, (uint)TypeID, 0); } - public static void AddFormatID(FlatBufferBuilder builder, BufferFormat FormatID) { builder.AddUint(1, (uint)FormatID, 0); } + public static void StartMeshAttribute(FlatBufferBuilder builder) { builder.StartObject(3); } + public static void AddVertexType(FlatBufferBuilder builder, uint VertexType) { builder.AddUint(0, VertexType, 0); } + public static void AddBufferFormat(FlatBufferBuilder builder, uint BufferFormat) { builder.AddUint(1, BufferFormat, 0); } public static void AddElementCount(FlatBufferBuilder builder, uint ElementCount) { builder.AddUint(2, ElementCount, 0); } - public static Offset EndMeshAlignment(FlatBufferBuilder builder) + public static Offset EndMeshAttribute(FlatBufferBuilder builder) { int o = builder.EndObject(); - return new Offset(o); + return new Offset(o); } }; @@ -747,7 +748,7 @@ namespace FlatBuffers.Gfbmdl public ArraySegment? GetNameBytes() { return __p.__vector_as_arraysegment(4); } #endif public byte[] GetNameArray() { return __p.__vector_as_array(4); } - public BoneType Type { get { int o = __p.__offset(6); return o != 0 ? (BoneType)__p.bb.GetUint(o + __p.bb_pos) : BoneType.NoSkinning; } } + public uint BoneType { get { int o = __p.__offset(6); return o != 0 ? __p.bb.GetUint(o + __p.bb_pos) : (uint)0; } } public int Parent { get { int o = __p.__offset(8); return o != 0 ? __p.bb.GetInt(o + __p.bb_pos) : (int)0; } } public uint Zero { get { int o = __p.__offset(10); return o != 0 ? __p.bb.GetUint(o + __p.bb_pos) : (uint)0; } } public bool Visible { get { int o = __p.__offset(12); return o != 0 ? 0 != __p.bb.Get(o + __p.bb_pos) : (bool)false; } } @@ -756,11 +757,11 @@ namespace FlatBuffers.Gfbmdl public Vector3? Translation { get { int o = __p.__offset(18); return o != 0 ? (Vector3?)(new Vector3()).__assign(o + __p.bb_pos, __p.bb) : null; } } public Vector3? RadiusStart { get { int o = __p.__offset(20); return o != 0 ? (Vector3?)(new Vector3()).__assign(o + __p.bb_pos, __p.bb) : null; } } public Vector3? RadiusEnd { get { int o = __p.__offset(22); return o != 0 ? (Vector3?)(new Vector3()).__assign(o + __p.bb_pos, __p.bb) : null; } } - public UnknownData? SkinCheck { get { int o = __p.__offset(24); return o != 0 ? (UnknownData?)(new UnknownData()).__assign(o + __p.bb_pos, __p.bb) : null; } } + public BoneRigidData? RigidCheck { get { int o = __p.__offset(24); return o != 0 ? (BoneRigidData?)(new BoneRigidData()).__assign(o + __p.bb_pos, __p.bb) : null; } } public static void StartBone(FlatBufferBuilder builder) { builder.StartObject(11); } public static void AddName(FlatBufferBuilder builder, StringOffset NameOffset) { builder.AddOffset(0, NameOffset.Value, 0); } - public static void AddType(FlatBufferBuilder builder, BoneType Type) { builder.AddUint(1, (uint)Type, 0); } + public static void AddBoneType(FlatBufferBuilder builder, uint BoneType) { builder.AddUint(1, BoneType, 0); } public static void AddParent(FlatBufferBuilder builder, int Parent) { builder.AddInt(2, Parent, 0); } public static void AddZero(FlatBufferBuilder builder, uint Zero) { builder.AddUint(3, Zero, 0); } public static void AddVisible(FlatBufferBuilder builder, bool Visible) { builder.AddBool(4, Visible, false); } @@ -769,7 +770,7 @@ namespace FlatBuffers.Gfbmdl public static void AddTranslation(FlatBufferBuilder builder, Offset TranslationOffset) { builder.AddStruct(7, TranslationOffset.Value, 0); } public static void AddRadiusStart(FlatBufferBuilder builder, Offset RadiusStartOffset) { builder.AddStruct(8, RadiusStartOffset.Value, 0); } public static void AddRadiusEnd(FlatBufferBuilder builder, Offset RadiusEndOffset) { builder.AddStruct(9, RadiusEndOffset.Value, 0); } - public static void AddSkinCheck(FlatBufferBuilder builder, Offset SkinCheckOffset) { builder.AddStruct(10, SkinCheckOffset.Value, 0); } + public static void AddRigidCheck(FlatBufferBuilder builder, Offset RigidCheckOffset) { builder.AddStruct(10, RigidCheckOffset.Value, 0); } public static Offset EndBone(FlatBufferBuilder builder) { int o = builder.EndObject(); @@ -777,136 +778,56 @@ namespace FlatBuffers.Gfbmdl } }; - public struct UnknownData : IFlatbufferObject + public struct BoneRigidData : IFlatbufferObject { private Struct __p; public ByteBuffer ByteBuffer { get { return __p.bb; } } public void __init(int _i, ByteBuffer _bb) { __p.bb_pos = _i; __p.bb = _bb; } - public UnknownData __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; } + public BoneRigidData __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; } - public sbyte NoSkin { get { return __p.bb.GetSbyte(__p.bb_pos + 0); } } + public sbyte Unknown1 { get { return __p.bb.GetSbyte(__p.bb_pos + 0); } } - public static Offset CreateUnknownData(FlatBufferBuilder builder, sbyte NoSkin) + public static Offset CreateBoneRigidData(FlatBufferBuilder builder, sbyte Unknown1) { builder.Prep(1, 1); - builder.PutSbyte(NoSkin); - return new Offset(builder.Offset); + builder.PutSbyte(Unknown1); + return new Offset(builder.Offset); } }; - public struct RenderInfo : IFlatbufferObject + public struct CollisionGroup : IFlatbufferObject { private Table __p; public ByteBuffer ByteBuffer { get { return __p.bb; } } - public static RenderInfo GetRootAsRenderInfo(ByteBuffer _bb) { return GetRootAsRenderInfo(_bb, new RenderInfo()); } - public static RenderInfo GetRootAsRenderInfo(ByteBuffer _bb, RenderInfo obj) { return (obj.__assign(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); } + public static CollisionGroup GetRootAsCollisionGroup(ByteBuffer _bb) { return GetRootAsCollisionGroup(_bb, new CollisionGroup()); } + public static CollisionGroup GetRootAsCollisionGroup(ByteBuffer _bb, CollisionGroup obj) { return (obj.__assign(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); } public void __init(int _i, ByteBuffer _bb) { __p.bb_pos = _i; __p.bb = _bb; } - public RenderInfo __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; } + public CollisionGroup __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; } - public uint Unknown1 { get { int o = __p.__offset(4); return o != 0 ? __p.bb.GetUint(o + __p.bb_pos) : (uint)0; } } - public uint Unknown2 { get { int o = __p.__offset(6); return o != 0 ? __p.bb.GetUint(o + __p.bb_pos) : (uint)0; } } - public RenderUnknown? Unknown3 { get { int o = __p.__offset(8); return o != 0 ? (RenderUnknown?)(new RenderUnknown()).__assign(__p.__indirect(o + __p.bb_pos), __p.bb) : null; } } - public RenderUnknown2? Unknown4 { get { int o = __p.__offset(10); return o != 0 ? (RenderUnknown2?)(new RenderUnknown2()).__assign(__p.__indirect(o + __p.bb_pos), __p.bb) : null; } } + public uint BoneIndex { get { int o = __p.__offset(4); return o != 0 ? __p.bb.GetUint(o + __p.bb_pos) : (uint)0; } } + public uint Unknown1 { get { int o = __p.__offset(6); return o != 0 ? __p.bb.GetUint(o + __p.bb_pos) : (uint)0; } } + public uint BoneChildren(int j) { int o = __p.__offset(8); return o != 0 ? __p.bb.GetUint(__p.__vector(o) + j * 4) : (uint)0; } + public int BoneChildrenLength { get { int o = __p.__offset(8); return o != 0 ? __p.__vector_len(o) : 0; } } +#if ENABLE_SPAN_T + public Span GetBoneChildrenBytes() { return __p.__vector_as_span(8); } +#else + public ArraySegment? GetBoneChildrenBytes() { return __p.__vector_as_arraysegment(8); } +#endif + public uint[] GetBoneChildrenArray() { return __p.__vector_as_array(8); } + public BoundingBox? Bounding { get { int o = __p.__offset(10); return o != 0 ? (BoundingBox?)(new BoundingBox()).__assign(o + __p.bb_pos, __p.bb) : null; } } - public static Offset CreateRenderInfo(FlatBufferBuilder builder, - uint Unknown1 = 0, - uint Unknown2 = 0, - Offset Unknown3Offset = default(Offset), - Offset Unknown4Offset = default(Offset)) - { - builder.StartObject(4); - RenderInfo.AddUnknown4(builder, Unknown4Offset); - RenderInfo.AddUnknown3(builder, Unknown3Offset); - RenderInfo.AddUnknown2(builder, Unknown2); - RenderInfo.AddUnknown1(builder, Unknown1); - return RenderInfo.EndRenderInfo(builder); - } - - public static void StartRenderInfo(FlatBufferBuilder builder) { builder.StartObject(4); } - public static void AddUnknown1(FlatBufferBuilder builder, uint Unknown1) { builder.AddUint(0, Unknown1, 0); } - public static void AddUnknown2(FlatBufferBuilder builder, uint Unknown2) { builder.AddUint(1, Unknown2, 0); } - public static void AddUnknown3(FlatBufferBuilder builder, Offset Unknown3Offset) { builder.AddOffset(2, Unknown3Offset.Value, 0); } - public static void AddUnknown4(FlatBufferBuilder builder, Offset Unknown4Offset) { builder.AddOffset(3, Unknown4Offset.Value, 0); } - public static Offset EndRenderInfo(FlatBufferBuilder builder) + public static void StartCollisionGroup(FlatBufferBuilder builder) { builder.StartObject(4); } + public static void AddBoneIndex(FlatBufferBuilder builder, uint BoneIndex) { builder.AddUint(0, BoneIndex, 0); } + public static void AddUnknown1(FlatBufferBuilder builder, uint Unknown1) { builder.AddUint(1, Unknown1, 0); } + public static void AddBoneChildren(FlatBufferBuilder builder, VectorOffset BoneChildrenOffset) { builder.AddOffset(2, BoneChildrenOffset.Value, 0); } + public static VectorOffset CreateBoneChildrenVector(FlatBufferBuilder builder, uint[] data) { builder.StartVector(4, data.Length, 4); for (int i = data.Length - 1; i >= 0; i--) builder.AddUint(data[i]); return builder.EndVector(); } + public static VectorOffset CreateBoneChildrenVectorBlock(FlatBufferBuilder builder, uint[] data) { builder.StartVector(4, data.Length, 4); builder.Add(data); return builder.EndVector(); } + public static void StartBoneChildrenVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(4, numElems, 4); } + public static void AddBounding(FlatBufferBuilder builder, Offset BoundingOffset) { builder.AddStruct(3, BoundingOffset.Value, 0); } + public static Offset EndCollisionGroup(FlatBufferBuilder builder) { int o = builder.EndObject(); - return new Offset(o); - } - }; - - public struct RenderUnknown : IFlatbufferObject - { - private Table __p; - public ByteBuffer ByteBuffer { get { return __p.bb; } } - public static RenderUnknown GetRootAsRenderUnknown(ByteBuffer _bb) { return GetRootAsRenderUnknown(_bb, new RenderUnknown()); } - public static RenderUnknown GetRootAsRenderUnknown(ByteBuffer _bb, RenderUnknown obj) { return (obj.__assign(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); } - public void __init(int _i, ByteBuffer _bb) { __p.bb_pos = _i; __p.bb = _bb; } - public RenderUnknown __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; } - - public uint Unknown { get { int o = __p.__offset(4); return o != 0 ? __p.bb.GetUint(o + __p.bb_pos) : (uint)0; } } - - public static Offset CreateRenderUnknown(FlatBufferBuilder builder, - uint Unknown = 0) - { - builder.StartObject(1); - RenderUnknown.AddUnknown(builder, Unknown); - return RenderUnknown.EndRenderUnknown(builder); - } - - public static void StartRenderUnknown(FlatBufferBuilder builder) { builder.StartObject(1); } - public static void AddUnknown(FlatBufferBuilder builder, uint Unknown) { builder.AddUint(0, Unknown, 0); } - public static Offset EndRenderUnknown(FlatBufferBuilder builder) - { - int o = builder.EndObject(); - return new Offset(o); - } - }; - - public struct RenderUnknown2 : IFlatbufferObject - { - private Table __p; - public ByteBuffer ByteBuffer { get { return __p.bb; } } - public static RenderUnknown2 GetRootAsRenderUnknown2(ByteBuffer _bb) { return GetRootAsRenderUnknown2(_bb, new RenderUnknown2()); } - public static RenderUnknown2 GetRootAsRenderUnknown2(ByteBuffer _bb, RenderUnknown2 obj) { return (obj.__assign(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); } - public void __init(int _i, ByteBuffer _bb) { __p.bb_pos = _i; __p.bb = _bb; } - public RenderUnknown2 __assign(int _i, ByteBuffer _bb) { __init(_i, _bb); return this; } - - public float Unknown1 { get { int o = __p.__offset(4); return o != 0 ? __p.bb.GetFloat(o + __p.bb_pos) : (float)0.0f; } } - public float Unknown2 { get { int o = __p.__offset(6); return o != 0 ? __p.bb.GetFloat(o + __p.bb_pos) : (float)0.0f; } } - public float Unknown3 { get { int o = __p.__offset(8); return o != 0 ? __p.bb.GetFloat(o + __p.bb_pos) : (float)0.0f; } } - public float Unknown4 { get { int o = __p.__offset(10); return o != 0 ? __p.bb.GetFloat(o + __p.bb_pos) : (float)0.0f; } } - public float Unknown5 { get { int o = __p.__offset(12); return o != 0 ? __p.bb.GetFloat(o + __p.bb_pos) : (float)0.0f; } } - public float Unknown6 { get { int o = __p.__offset(14); return o != 0 ? __p.bb.GetFloat(o + __p.bb_pos) : (float)0.0f; } } - - public static Offset CreateRenderUnknown2(FlatBufferBuilder builder, - float Unknown1 = 0.0f, - float Unknown2 = 0.0f, - float Unknown3 = 0.0f, - float Unknown4 = 0.0f, - float Unknown5 = 0.0f, - float Unknown6 = 0.0f) - { - builder.StartObject(6); - RenderUnknown2.AddUnknown6(builder, Unknown6); - RenderUnknown2.AddUnknown5(builder, Unknown5); - RenderUnknown2.AddUnknown4(builder, Unknown4); - RenderUnknown2.AddUnknown3(builder, Unknown3); - RenderUnknown2.AddUnknown2(builder, Unknown2); - RenderUnknown2.AddUnknown1(builder, Unknown1); - return RenderUnknown2.EndRenderUnknown2(builder); - } - - public static void StartRenderUnknown2(FlatBufferBuilder builder) { builder.StartObject(6); } - public static void AddUnknown1(FlatBufferBuilder builder, float Unknown1) { builder.AddFloat(0, Unknown1, 0.0f); } - public static void AddUnknown2(FlatBufferBuilder builder, float Unknown2) { builder.AddFloat(1, Unknown2, 0.0f); } - public static void AddUnknown3(FlatBufferBuilder builder, float Unknown3) { builder.AddFloat(2, Unknown3, 0.0f); } - public static void AddUnknown4(FlatBufferBuilder builder, float Unknown4) { builder.AddFloat(3, Unknown4, 0.0f); } - public static void AddUnknown5(FlatBufferBuilder builder, float Unknown5) { builder.AddFloat(4, Unknown5, 0.0f); } - public static void AddUnknown6(FlatBufferBuilder builder, float Unknown6) { builder.AddFloat(5, Unknown6, 0.0f); } - public static Offset EndRenderUnknown2(FlatBufferBuilder builder) - { - int o = builder.EndObject(); - return new Offset(o); + return new Offset(o); } }; diff --git a/File_Format_Library/FileFormats/Pokemon/GFLX/GFBMDL/GFBMDL.cs b/File_Format_Library/FileFormats/Pokemon/GFLX/GFBMDL/GFBMDL.cs new file mode 100644 index 00000000..b543f2cf --- /dev/null +++ b/File_Format_Library/FileFormats/Pokemon/GFLX/GFBMDL/GFBMDL.cs @@ -0,0 +1,655 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using Toolbox; +using System.Windows.Forms; +using Toolbox.Library; +using Toolbox.Library.IO; +using Toolbox.Library.Forms; +using Toolbox.Library.Rendering; +using OpenTK; +using FirstPlugin.Forms; +using FirstPlugin.GFMDLStructs; +using Newtonsoft.Json; + +namespace FirstPlugin +{ + public class GFBMDL : TreeNodeFile, IContextMenuNode, IFileFormat + { + public FileType FileType { get; set; } = FileType.Model; + + public bool CanSave { get; set; } + public string[] Description { get; set; } = new string[] { "Graphic Model" }; + public string[] Extension { get; set; } = new string[] { "*.gfbmdl" }; + public string FileName { get; set; } + public string FilePath { get; set; } + public IFileInfo IFileInfo { get; set; } + + public bool Identify(System.IO.Stream stream) + { + using (var reader = new Toolbox.Library.IO.FileReader(stream, true)) + { + reader.ByteOrder = Syroot.BinaryData.ByteOrder.BigEndian; + + bool IsMatch = reader.ReadUInt32() == 0x20000000; + reader.Position = 0; + + return IsMatch; + } + } + + public Type[] Types + { + get + { + List types = new List(); + return types.ToArray(); + } + } + + + bool DrawablesLoaded = false; + public override void OnClick(TreeView treeView) { + LoadEditor(); + } + + public T LoadEditor() where T : UserControl, new() + { + T control = new T(); + control.Dock = DockStyle.Fill; + + ViewportEditor editor = (ViewportEditor)LibraryGUI.GetActiveContent(typeof(ViewportEditor)); + if (editor == null) + { + editor = new ViewportEditor(true); + editor.Dock = DockStyle.Fill; + LibraryGUI.LoadEditor(editor); + } + if (!DrawablesLoaded) + { + ObjectEditor.AddContainer(DrawableContainer); + DrawablesLoaded = true; + } + if (Runtime.UseOpenGL) + editor.LoadViewport(DrawableContainer); + + editor.LoadEditor(control); + + return control; + } + + public GFBMDL_Render Renderer; + + public DrawableContainer DrawableContainer = new DrawableContainer(); + + public GFLXModel Model; + + public void Load(System.IO.Stream stream) + { + // CanSave = true; + + Text = FileName; + DrawableContainer.Name = FileName; + Renderer = new GFBMDL_Render(); + Renderer.GfbmdlFile = this; + DrawableContainer.Drawables.Add(Renderer); + + //Here i convert buffer classes generated from flatc to c# classes that are much nicer to alter + var model = BufferToStruct.LoadFile(stream); + ReloadModel(model); + } + + private void ReloadModel(Model model) + { + Nodes.Clear(); + if (Renderer.Meshes == null) + Renderer.Meshes = new List(); + Renderer.Meshes.Clear(); + + Model = new GFLXModel(); + Model.LoadFile(model, this, Renderer); + + TreeNode SkeletonWrapper = new TreeNode("Skeleton"); + TreeNode MaterialFolderWrapper = new TreeNode("Materials"); + TreeNode VisualGroupWrapper = new TreeNode("Visual Groups"); + TreeNode Textures = new TreeNode("Textures"); + + if (Model.Skeleton.bones.Count > 0) + { + Nodes.Add(SkeletonWrapper); + DrawableContainer.Drawables.Add(Model.Skeleton); + + foreach (var bone in Model.Skeleton.bones) + { + if (bone.Parent == null) + SkeletonWrapper.Nodes.Add(bone); + } + } + + + List loadedTextures = new List(); + for (int i = 0; i < Model.Textures.Count; i++) + { + foreach (var bntx in PluginRuntime.bntxContainers) + { + if (bntx.Textures.ContainsKey(Model.Textures[i]) && + !loadedTextures.Contains(Model.Textures[i])) + { + TreeNode tex = new TreeNode(Model.Textures[i]); + tex.ImageKey = "texture"; + tex.SelectedImageKey = "texture"; + + tex.Tag = bntx.Textures[Model.Textures[i]]; + Textures.Nodes.Add(tex); + loadedTextures.Add(Model.Textures[i]); + } + } + } + + loadedTextures.Clear(); + + Nodes.Add(MaterialFolderWrapper); + Nodes.Add(VisualGroupWrapper); + if (Textures.Nodes.Count > 0) + Nodes.Add(Textures); + + for (int i = 0; i < Model.GenericMaterials.Count; i++) + MaterialFolderWrapper.Nodes.Add(Model.GenericMaterials[i]); + + for (int i = 0; i < Model.GenericMeshes.Count; i++) + VisualGroupWrapper.Nodes.Add(Model.GenericMeshes[i]); + } + + public void Save(System.IO.Stream stream) + { + Model.SaveFile(stream); + } + + public ToolStripItem[] GetContextMenuItems() + { + List Items = new List(); + Items.Add(new ToolStripMenuItem("Export Model", null, ExportAction, Keys.Control | Keys.E)); + Items.Add(new ToolStripMenuItem("Replace Model", null, ReplaceAction, Keys.Control | Keys.R)); + return Items.ToArray(); + } + + private void ExportAction(object sender, EventArgs args) + { + SaveFileDialog sfd = new SaveFileDialog(); + sfd.Filter = "Supported Formats|*.dae;*.json;"; + sfd.FileName = Text; + sfd.DefaultExt = "dae"; + if (sfd.ShowDialog() == DialogResult.OK) + { + string ext = Utils.GetExtension(sfd.FileName); + if (ext == ".json") + { + string json = JsonConvert.SerializeObject(Model.Model, Formatting.Indented); + System.IO.File.WriteAllText(sfd.FileName, json); + } + else + { + ExportModelSettings exportDlg = new ExportModelSettings(); + if (exportDlg.ShowDialog() == DialogResult.OK) + ExportModel(sfd.FileName, exportDlg.Settings); + } + } + } + + private void ReplaceAction(object sender, EventArgs args) + { + OpenFileDialog ofd = new OpenFileDialog(); + ofd.Filter = "Supported Formats|*.dae;*.json;"; + if (ofd.ShowDialog() == DialogResult.OK) + { + string ext = Utils.GetExtension(ofd.FileName); + if (ext == ".json") + { + var model = JsonConvert.DeserializeObject( + System.IO.File.ReadAllText(ofd.FileName)); + + Model.LoadFile(model, this, Renderer); + } + else + { + AssimpData assimp = new AssimpData(); + bool IsLoaded = assimp.LoadFile(ofd.FileName); + + if (!IsLoaded) + return; + + GFLXModelImporter dialog = new GFLXModelImporter(); + dialog.LoadMeshes(assimp.objects, assimp.materials, Model.GenericMaterials, Model.GenericMeshes); + if (dialog.ShowDialog() == DialogResult.OK) { + ImportModel(dialog, assimp.materials, assimp.objects, assimp.skeleton); + } + } + } + } + + private List GeneratePolygonGroups(List importedMeshes, + List importedMaterials, List textures, GfbmdlImportSettings settings) + { + List meshes = new List(); + foreach (var mesh in importedMeshes) + { + var lod = mesh.lodMeshes[0]; + var setting = settings.MeshSettings[importedMeshes.IndexOf(mesh)]; + + //Create or map existing materials to the polygon group + var currentMaterial = Model.Model.Materials.FirstOrDefault(x => x.Name == setting.Material); + if (currentMaterial == null) + { + currentMaterial = Material.Replace(setting.MaterialFile); + + //Get the imported material and set it's material data to the gfbmdl one + if (mesh.MaterialIndex < importedMaterials.Count && mesh.MaterialIndex >= 0) + SetupMaterial(importedMaterials[mesh.MaterialIndex], currentMaterial, textures); + + Model.Model.Materials.Add(currentMaterial); + } + + mesh.MaterialIndex = Model.Model.Materials.IndexOf(currentMaterial); + + //Merge dupes with the same name + //Some are duped but use different material index + //Which go into a polygon group + var existingMesh = meshes.FirstOrDefault(x => x.ObjectName == mesh.ObjectName); + + //Don't split atm since it's buggy + //The faces seemed fine, but vertices are split by assimp giving issues + bool splitPolygonGroups = false; + if (existingMesh != null && splitPolygonGroups) + { + int offset = 0; + foreach (var poly in existingMesh.PolygonGroups) + { + for (int f = 0; f < poly.faces.Count; f++) + offset = Math.Max(offset, poly.faces[f]); + } + + List faces = new List(); + for (int f = 0; f < lod.faces.Count; f++) { + faces.Add((int)(lod.faces[f] + offset + 1 )); + } + + foreach (var vertex in mesh.vertices) + existingMesh.vertices.Add(vertex); + + existingMesh.PolygonGroups.Add(new STGenericPolygonGroup() + { + MaterialIndex = mesh.MaterialIndex, + faces = faces, + }); + } + else + { + mesh.PolygonGroups.Add(new STGenericPolygonGroup() + { + MaterialIndex = mesh.MaterialIndex, + faces = lod.faces, + }); + + meshes.Add(mesh); + } + } + return meshes; + } + + private void SetupMaterial(STGenericMaterial importedMaterial, Material newMaterial, List textures) + { + return; + + //Here all we want is the diffuse texture and swap them + foreach (var texMap in importedMaterial.TextureMaps) + { + var diffuseTex = newMaterial.TextureMaps.FirstOrDefault(x => + x.Sampler == "Col0Tex" || x.Sampler == "BaseColor0"); + if (diffuseTex != null) { + diffuseTex.Index = (uint)textures.IndexOf(texMap.Name); + } + } + } + + private void ImportModel(GFLXModelImporter importer, + List importedMaterials, List importedMeshes, + STSkeleton skeleton) + { + Model.Model.Groups.Clear(); + Model.Model.Meshes.Clear(); + + List textures = Model.Textures.ToList(); + foreach (var mat in importedMaterials) + { + + } + + var meshes = GeneratePolygonGroups(importedMeshes, importedMaterials, textures, importer.Settings); + + //Once mesh groups are merged search for bone nodes + //The bone section is basically a node tree + //Which contains nodes for meshes + //We need to remove the original and replace with new ones + //Then index these in our mesh groups + if (importer.ImportNewBones) + { + //Clear the original bones and nodes + Model.Skeleton.bones.Clear(); + Model.Model.Bones.Clear(); + + List SkinningIndices = new List(); + foreach (var genericBone in skeleton.bones) + { + var scale = genericBone.scale; + var trans = genericBone.position; + var rot = genericBone.rotation; + + Bone bone = new Bone(); + bone.Name = genericBone.Text; + bone.BoneType = 0; + bone.Parent = genericBone.parentIndex; + bone.Zero = 0; + bone.Visible = false; + bone.Scale = new GFMDLStructs.Vector3(scale[0], scale[1], scale[2]); + bone.Rotation = new GFMDLStructs.Vector3(rot[0], rot[1], rot[2]); + bone.Translation = new GFMDLStructs.Vector3(trans[0], trans[1], trans[2]); + bone.RadiusStart = new GFMDLStructs.Vector3(0, 0, 0); + bone.RadiusEnd = new GFMDLStructs.Vector3(0, 0, 0); + bone.RigidCheck = new BoneRigidData() { Unknown1 = 0 }; + + //Check if the bone is rigged + for (int i = 0; i < meshes.Count; i++) + { + if (meshes[i].vertices.Any(x => x.boneNames.Contains(bone.Name))) { + bone.BoneType = 1; + bone.RigidCheck = null; + } + } + + Model.Model.Bones.Add(bone); + } + } + + Dictionary NodeIndices = new Dictionary(); + + //Go through each bone and remove the original mesh node + for (int i = 0; i < Model.Skeleton.bones.Count; i++) + { + var node = (GFLXBone)Model.Skeleton.bones[i]; + if (Model.GenericMeshes.Any(x => x.Text == node.Text)) + { + NodeIndices.Add(node.Text, i); + Console.WriteLine($"match {node.Text}"); + Model.Model.Bones.Remove(node.Bone); + Model.Skeleton.bones.Remove(node); + } + + /* if (Model.Model.CollisionGroups?.Count != 0) + { + var collisionGroups = Model.Model.CollisionGroups; + for (int c = 0; c < collisionGroups.Count; c++) + { + if (collisionGroups[c].BoneIndex == i) + { + + } + } + }*/ + } + + // Model.Model.CollisionGroups = new List(); + + List skinningIndices = Model.GenerateSkinningIndices(); + + List unmappedBones = new List(); + + foreach (var mesh in meshes) + { + for (int i = 0; i < mesh.vertices.Count; i++) + { + if (importer.RotationY != 0) + { + var transform = OpenTK.Matrix4.CreateRotationX(OpenTK.MathHelper.DegreesToRadians(importer.RotationY)); + mesh.vertices[i].pos = OpenTK.Vector3.TransformPosition(mesh.vertices[i].pos, transform); + mesh.vertices[i].nrm = OpenTK.Vector3.TransformPosition(mesh.vertices[i].nrm, transform); + } + + for (int j = 0; j < mesh.vertices[i].boneNames?.Count; j++) + { + string boneName = mesh.vertices[i].boneNames[j]; + int boneIndex = Model.Model.Bones.IndexOf(Model.Model.Bones.Where(p => p.Name == boneName).FirstOrDefault()); + + if (boneIndex != -1) + mesh.vertices[i].boneIds.Add(boneIndex); + else + { + if (!unmappedBones.Contains(boneName)) + unmappedBones.Add(boneName); + } + } + } + } + + //Now add brand new mesh nodes + foreach (var mesh in meshes) + { + int index = meshes.IndexOf(mesh); + + var setting = importer.Settings.MeshSettings[index]; + + Bone bone = new Bone(); + bone.Name = mesh.ObjectName; + bone.BoneType = 0; + bone.Parent = 0; + bone.Zero = 0; + bone.Visible = false; + bone.Scale = new GFMDLStructs.Vector3(1, 1, 1); + bone.Rotation = new GFMDLStructs.Vector3(0, 0, 0); + bone.Translation = new GFMDLStructs.Vector3(0,0,0); + bone.RadiusStart = new GFMDLStructs.Vector3(0, 0, 0); + bone.RadiusEnd = new GFMDLStructs.Vector3(0, 0, 0); + bone.RigidCheck = new BoneRigidData(); + + int NodeIndex = Model.Model.Bones.IndexOf(bone); + Model.Model.Bones.Add(bone); + + //Now create the associated group + var group = new Group(); + group.Bounding = Model.GenerateBoundingBox(mesh); + group.BoneIndex = (uint)NodeIndex; + group.MeshIndex = (uint)index; + group.Layer = 0; + Model.Model.Groups.Add(group); + + //Now create our mesh data + var meshData = new Mesh(); + Model.Model.Meshes.Add(meshData); + + if (setting.HasBitangents) + { + try { + mesh.CalculateTangentBitangent(false); + } + catch { } + } + + //Add attributes based on settings + IList attributes = new List(); + attributes.Add(new MeshAttribute() + { + VertexType = (uint)VertexType.Position, + BufferFormat = (uint)setting.PositionFormat, + ElementCount = 3, + }); + + if (setting.HasNormals) { + attributes.Add(new MeshAttribute() + { + VertexType = (uint)VertexType.Normal, + BufferFormat = (uint)setting.NormalFormat, + ElementCount = 4, + }); + } + + if (setting.HasTexCoord1) { + attributes.Add(new MeshAttribute() + { + VertexType = (uint)VertexType.UV1, + BufferFormat = (uint)setting.TexCoord1Format, + ElementCount = 2, + }); + } + if (setting.HasTexCoord2) { + attributes.Add(new MeshAttribute() + { + VertexType = (uint)VertexType.UV2, + BufferFormat = (uint)setting.TexCoord2Format, + ElementCount = 2, + }); + } + if (setting.HasTexCoord3) { + attributes.Add(new MeshAttribute() + { + VertexType = (uint)VertexType.UV3, + BufferFormat = (uint)setting.TexCoord3Format, + ElementCount = 2, + }); + } + if (setting.HasTexCoord4) { + attributes.Add(new MeshAttribute() + { + VertexType = (uint)VertexType.UV4, + BufferFormat = (uint)setting.TexCoord4Format, + ElementCount = 2, + }); + } + if (setting.HasColor1) { + attributes.Add(new MeshAttribute() + { + VertexType = (uint)VertexType.Color1, + BufferFormat = (uint)setting.Color1Format, + ElementCount = 4, + }); + } + if (setting.HasColor2) { + attributes.Add(new MeshAttribute() + { + VertexType = (uint)VertexType.Color2, + BufferFormat = (uint)setting.Color2Format, + ElementCount = 4, + }); + } + if (setting.HasBitangents) { + attributes.Add(new MeshAttribute() + { + VertexType = (uint)VertexType.Binormal, + BufferFormat = (uint)setting.BitangentnFormat, + ElementCount = 4, + }); + } + if (setting.HasWeights) { + attributes.Add(new MeshAttribute() + { + VertexType = (uint)VertexType.BoneWeight, + BufferFormat = (uint)setting.BoneWeightFormat, + ElementCount = 4, + }); + } + if (setting.HasBoneIndices) { + attributes.Add(new MeshAttribute() + { + VertexType = (uint)VertexType.BoneID, + BufferFormat = (uint)setting.BoneIndexFormat, + ElementCount = 4, + }); + } + if (setting.HasTangents) { + attributes.Add(new MeshAttribute() + { + VertexType = (uint)VertexType.Tangents, + BufferFormat = (uint)setting.TangentsFormat, + ElementCount = 4, + }); + } + + meshData.Attributes = attributes; + meshData.SetData(GFLXMeshBufferHelper.CreateVertexDataBuffer(mesh, skinningIndices, attributes)); + + //Lastly add the polygon groups + foreach (var poly in mesh.PolygonGroups) + { + List faces = new List(); + for (int f = 0; f < poly.faces.Count; f++) + faces.Add((ushort)poly.faces[f]); + + if (poly.MaterialIndex < 0) + poly.MaterialIndex = 0; + + meshData.Polygons = new List(); + meshData.Polygons.Add(new MeshPolygon() + { + MaterialIndex = (uint)poly.MaterialIndex, + Faces = faces, + }); + } + } + + foreach (var bone in unmappedBones) + Console.WriteLine($"unmapped bone! {bone}"); + + Console.WriteLine($""); + + //Generate bounding box + Model.GenerateBoundingBox(); + ReloadModel(Model.Model); + + Model.UpdateVertexData(true); + } + + public void ExportModel(string fileName, DAE.ExportSettings settings) + { + var model = new STGenericModel(); + model.Materials = Model.GenericMaterials; + model.Objects = Model.GenericMeshes; + var textures = new List(); + foreach (var bntx in PluginRuntime.bntxContainers) + foreach (var tex in bntx.Textures.Values) + { + if (Model.Textures.Contains(tex.Text)) + textures.Add(tex); + } + + foreach (var mesh in model.Objects) + { + foreach (var poly in mesh.PolygonGroups) + { + GFLXMaterialData mat = (GFLXMaterialData)poly.Material; + var faces = poly.GetDisplayFace(); + for (int v = 0; v < poly.displayFaceSize; v += 3) + { + if (faces.Count < v + 2) + break; + + var diffuse = mat.TextureMaps.FirstOrDefault(x => x.Type == STGenericMatTexture.TextureType.Diffuse); + STTextureTransform transform = new STTextureTransform(); + if (diffuse != null) + transform = diffuse.Transform; + + mesh.vertices[faces[v]].uv0 += transform.Translate * transform.Scale; + mesh.vertices[faces[v + 1]].uv0 += transform.Translate * transform.Scale; + mesh.vertices[faces[v + 2]].uv0 += transform.Translate * transform.Scale; + } + } + } + + DAE.Export(fileName, settings, model, textures, Model.Skeleton); + } + + public void Unload() + { + + } + } +} diff --git a/File_Format_Library/FileFormats/Pokemon/GFBMDL/GFLXMesh.cs b/File_Format_Library/FileFormats/Pokemon/GFLX/GFBMDL/GFLXMesh.cs similarity index 74% rename from File_Format_Library/FileFormats/Pokemon/GFBMDL/GFLXMesh.cs rename to File_Format_Library/FileFormats/Pokemon/GFLX/GFBMDL/GFLXMesh.cs index c2912292..8a014339 100644 --- a/File_Format_Library/FileFormats/Pokemon/GFBMDL/GFLXMesh.cs +++ b/File_Format_Library/FileFormats/Pokemon/GFLX/GFBMDL/GFLXMesh.cs @@ -8,6 +8,7 @@ using Toolbox.Library.Rendering; using OpenTK; using Toolbox.Library.Forms; using System.Windows.Forms; +using FirstPlugin.Forms; namespace FirstPlugin { @@ -18,8 +19,17 @@ namespace FirstPlugin public GFLXModel ParentModel { get; set; } - public FlatBuffers.Gfbmdl.Mesh MeshData { get; set; } - public FlatBuffers.Gfbmdl.Group GroupData { get; set; } + public GFBANM.MeshAnimationController AnimationController = new GFBANM.MeshAnimationController(); + + public Matrix4 Transform { get; set; } + + public GFMDLStructs.Mesh MeshData { get; set; } + public GFMDLStructs.Group GroupData { get; set; } + + public override void OnClick(TreeView treeView) { + var editor = ParentModel.LoadEditor(); + editor.LoadMesh(this); + } public GFLXMaterialData GetMaterial(STGenericPolygonGroup polygroup) { @@ -31,11 +41,35 @@ namespace FirstPlugin List Items = new List(); var uvMenu = new ToolStripMenuItem("UVs"); Items.Add(uvMenu); + + Items.Add(new ToolStripMenuItem("Recalculate Bitangents", null, CalculateTangentBitangenAction, Keys.Control | Keys.T)); uvMenu.DropDownItems.Add(new ToolStripMenuItem("Flip Vertical", null, FlipVerticalAction, Keys.Control | Keys.V)); uvMenu.DropDownItems.Add(new ToolStripMenuItem("Flip Horizontal", null, FlipHorizontalAction, Keys.Control | Keys.H)); + var colorMenu = new ToolStripMenuItem("Vertex Colors"); + colorMenu.DropDownItems.Add(new ToolStripMenuItem("Set Color", null, SetVertexColorDialog, Keys.Control | Keys.C)); + Items.Add(colorMenu); + return Items.ToArray(); } + private void SetVertexColorDialog(object sender, EventArgs args) + { + if (!MeshData.Attributes.Any(x => x.VertexType == (uint)GFMDLStructs.VertexType.Color1)) + return; + + ColorDialog dlg = new ColorDialog(); + + if (dlg.ShowDialog() == DialogResult.OK) { + SetVertexColor(new Vector4( + dlg.Color.R / 255.0f, + dlg.Color.G / 255.0f, + dlg.Color.B / 255.0f, + dlg.Color.A / 255.0f)); + + UpdateMesh(); + } + } + private void FlipVerticalAction(object sender, EventArgs args) { this.FlipUvsVertical(); UpdateMesh(); @@ -46,9 +80,16 @@ namespace FirstPlugin UpdateMesh(); } + private void CalculateTangentBitangenAction(object sender, EventArgs args) + { + this.CalculateTangentBitangent(false); + UpdateMesh(); + } + + private void UpdateMesh() { + MeshData.SetData(GFLXMeshBufferHelper.CreateVertexDataBuffer(this)); ParentModel.UpdateVertexData(true); - GFLXMeshBufferHelper.ReloadVertexData(this); } public struct DisplayVertex @@ -69,8 +110,8 @@ namespace FirstPlugin } public GFLXMesh(GFLXModel model, - FlatBuffers.Gfbmdl.Group group, - FlatBuffers.Gfbmdl.Mesh mesh) + GFMDLStructs.Group group, + GFMDLStructs.Mesh mesh) { ParentModel = model; GroupData = group; diff --git a/File_Format_Library/FileFormats/Pokemon/GFBMDL/GFLXMeshBufferHelper.cs b/File_Format_Library/FileFormats/Pokemon/GFLX/GFBMDL/GFLXMeshBufferHelper.cs similarity index 50% rename from File_Format_Library/FileFormats/Pokemon/GFBMDL/GFLXMeshBufferHelper.cs rename to File_Format_Library/FileFormats/Pokemon/GFLX/GFBMDL/GFLXMeshBufferHelper.cs index afce5bc1..f70b618b 100644 --- a/File_Format_Library/FileFormats/Pokemon/GFBMDL/GFLXMeshBufferHelper.cs +++ b/File_Format_Library/FileFormats/Pokemon/GFLX/GFBMDL/GFLXMeshBufferHelper.cs @@ -1,102 +1,205 @@ -using System; +using FirstPlugin.GFMDLStructs; +using FlatBuffers; +using System; using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Toolbox.Library.IO; -using OpenTK; -using FlatBuffers.Gfbmdl; -using Toolbox.Library.Rendering; using Toolbox.Library; +using Toolbox.Library.IO; +using Toolbox.Library.Rendering; +using System.Linq; namespace FirstPlugin { public class GFLXMeshBufferHelper { - public static void ReloadVertexData(GFLXMesh mesh) + public static byte[] CreateVertexDataBuffer(GFLXMesh mesh) { - var flatMesh = mesh.MeshData; - var buf = flatMesh.ByteBuffer; - for (int v = 0; v < mesh.vertices.Count; v++) + var meshData = mesh.MeshData; + + //Get all the bones from model and create skin index list + List SkinningIndices = new List(); + foreach (GFLXBone bone in mesh.ParentModel.Skeleton.bones) { - // flatMesh.ByteBuffer.PutByte(); - // flatMesh.Data(v); + if (bone.HasSkinning) + SkinningIndices.Add(mesh.ParentModel.Skeleton.bones.IndexOf(bone)); } + + return CreateVertexDataBuffer(mesh, SkinningIndices, mesh.MeshData.Attributes); + } + + public static byte[] CreateVertexDataBuffer(STGenericObject mesh, List SkinningIndices, IList attributes) + { + + var mem = new System.IO.MemoryStream(); + using (var writer = new FileWriter(mem)) + { + //Generate a buffer based on the attributes used + for (int v = 0; v < mesh.vertices.Count; v++) + { + for (int a = 0; a < attributes.Count; a++) + { + uint numAttributes = attributes[a].ElementCount; + + List values = new List(); + switch ((VertexType)attributes[a].VertexType) + { + case VertexType.Position: + values.Add(mesh.vertices[v].pos.X); + values.Add(mesh.vertices[v].pos.Y); + values.Add(mesh.vertices[v].pos.Z); + break; + case VertexType.Normal: + values.Add(mesh.vertices[v].nrm.X); + values.Add(mesh.vertices[v].nrm.Y); + values.Add(mesh.vertices[v].nrm.Z); + values.Add(0); + // values.Add(((GFLXMesh.GFLXVertex)mesh.vertices[v]).NormalW); + break; + case VertexType.Color1: + values.Add(mesh.vertices[v].col.X * 255); + values.Add(mesh.vertices[v].col.Y * 255); + values.Add(mesh.vertices[v].col.Z * 255); + values.Add(mesh.vertices[v].col.W * 255); + break; + case VertexType.UV1: + values.Add(mesh.vertices[v].uv0.X); + values.Add(1 - mesh.vertices[v].uv0.Y); + break; + case VertexType.UV2: + values.Add(mesh.vertices[v].uv1.X); + values.Add(1 - mesh.vertices[v].uv1.Y); + break; + case VertexType.UV3: + values.Add(mesh.vertices[v].uv2.X); + values.Add(1 - mesh.vertices[v].uv2.Y); + break; + case VertexType.UV4: + values.Add(mesh.vertices[v].uv3.X); + values.Add(1 - mesh.vertices[v].uv3.Y); + break; + case VertexType.BoneWeight: + var weights = mesh.vertices[v].boneWeights; + for (int b = 0; b < numAttributes; b++) + { + if (weights.Count > b) + values.Add(weights[b]); + else + values.Add(0); + } + break; + case VertexType.BoneID: + var boneIds = mesh.vertices[v].boneIds; + for (int b = 0; b < numAttributes; b++) + { + if (boneIds.Count > b) + values.Add(SkinningIndices.IndexOf(boneIds[b])); + else + values.Add(0); + } + break; + case VertexType.Binormal: + values.Add(mesh.vertices[v].bitan.X); + values.Add(mesh.vertices[v].bitan.Y); + values.Add(mesh.vertices[v].bitan.Z); + values.Add(mesh.vertices[v].bitan.W); + break; + case VertexType.Color2: + values.Add(mesh.vertices[v].col2.X * 255); + values.Add(mesh.vertices[v].col2.Y * 255); + values.Add(mesh.vertices[v].col2.Z * 255); + values.Add(mesh.vertices[v].col2.W * 255); + break; + case VertexType.Tangents: + values.Add(mesh.vertices[v].tan.X); + values.Add(mesh.vertices[v].tan.Y); + values.Add(mesh.vertices[v].tan.Z); + values.Add(mesh.vertices[v].tan.W); + break; + default: + throw new Exception("unsupported format!"); + } + + + WriteBuffer(writer, numAttributes, values.ToArray(), + (BufferFormat)attributes[a].BufferFormat, (VertexType)attributes[a].VertexType); + } + } + } + + return mem.ToArray(); } public static uint GetTotalBufferStride(Mesh mesh) { uint VertBufferStride = 0; - for (int i = 0; i < mesh.AlignmentsLength; i++) + for (int i = 0; i < mesh.Attributes?.Count; i++) { - var attribute = mesh.Alignments(i).Value; - switch (attribute.TypeID) + var attribute = mesh.Attributes[i]; + switch ((VertexType)attribute.VertexType) { case VertexType.Position: - if (attribute.FormatID == BufferFormat.HalfFloat) + if (attribute.BufferFormat == (uint)BufferFormat.HalfFloat) VertBufferStride += 0x08; - else if (attribute.FormatID == BufferFormat.Float) + else if (attribute.BufferFormat == (uint)BufferFormat.Float) VertBufferStride += 0x0C; else - throw new Exception($"Unknown Combination! {attribute.TypeID} {attribute.FormatID}"); + throw new Exception($"Unknown Combination! {attribute.VertexType} {attribute.BufferFormat}"); break; case VertexType.Normal: - if (attribute.FormatID == BufferFormat.HalfFloat) + if (attribute.BufferFormat == (uint)BufferFormat.HalfFloat) VertBufferStride += 0x08; - else if (attribute.FormatID == BufferFormat.Float) + else if (attribute.BufferFormat == (uint)BufferFormat.Float) VertBufferStride += 0x0C; else - throw new Exception($"Unknown Combination! {attribute.TypeID} {attribute.FormatID}"); + throw new Exception($"Unknown Combination! {attribute.VertexType} {attribute.BufferFormat}"); break; case VertexType.Binormal: - if (attribute.FormatID == BufferFormat.HalfFloat) + if (attribute.BufferFormat == (uint)BufferFormat.HalfFloat) VertBufferStride += 0x08; - else if (attribute.FormatID == BufferFormat.Float) + else if (attribute.BufferFormat == (uint)BufferFormat.Float) VertBufferStride += 0x0C; else - throw new Exception($"Unknown Combination! {attribute.TypeID} {attribute.FormatID}"); + throw new Exception($"Unknown Combination! {attribute.VertexType} {attribute.BufferFormat}"); break; case VertexType.UV1: case VertexType.UV2: case VertexType.UV3: case VertexType.UV4: - if (attribute.FormatID == BufferFormat.HalfFloat) + if (attribute.BufferFormat == (uint)BufferFormat.HalfFloat) VertBufferStride += 0x04; - else if (attribute.FormatID == BufferFormat.Float) + else if (attribute.BufferFormat == (uint)BufferFormat.Float) VertBufferStride += 0x08; else - throw new Exception($"Unknown Combination! {attribute.TypeID} {attribute.FormatID}"); + throw new Exception($"Unknown Combination! {attribute.VertexType} {attribute.BufferFormat}"); break; case VertexType.Color1: case VertexType.Color2: - if (attribute.FormatID == BufferFormat.Byte) + if (attribute.BufferFormat == (uint)BufferFormat.Byte) VertBufferStride += 0x04; else - throw new Exception($"Unknown Combination! {attribute.TypeID} {attribute.FormatID}"); + throw new Exception($"Unknown Combination! {attribute.VertexType} {attribute.BufferFormat}"); break; case VertexType.BoneID: - if (attribute.FormatID == BufferFormat.Short) + if (attribute.BufferFormat == (uint)BufferFormat.Short) VertBufferStride += 0x08; - else if (attribute.FormatID == BufferFormat.Byte) + else if (attribute.BufferFormat == (uint)BufferFormat.Byte) VertBufferStride += 0x04; else - throw new Exception($"Unknown Combination! {attribute.TypeID} {attribute.FormatID}"); + throw new Exception($"Unknown Combination! {attribute.VertexType} {attribute.BufferFormat}"); break; case VertexType.BoneWeight: - if (attribute.FormatID == BufferFormat.BytesAsFloat) + if (attribute.BufferFormat == (uint)BufferFormat.BytesAsFloat) VertBufferStride += 0x04; else - throw new Exception($"Unknown Combination! {attribute.TypeID} {attribute.FormatID}"); + throw new Exception($"Unknown Combination! {attribute.VertexType} {attribute.BufferFormat}"); + break; + case VertexType.Tangents: + if (attribute.BufferFormat == (uint)BufferFormat.HalfFloat) + VertBufferStride += 0x08; + else + throw new Exception($"Unknown Combination! {attribute.VertexType} {attribute.BufferFormat}"); break; default: - Console.WriteLine($"attribute.FormatID {attribute.FormatID}"); - if (attribute.FormatID == BufferFormat.HalfFloat) - VertBufferStride += 0x08; - else if (attribute.FormatID == BufferFormat.Float) - VertBufferStride += 0x0C; - else - throw new Exception($"Unknown Combination! {attribute.TypeID} {attribute.FormatID}"); - break; + throw new Exception($"Unknown Combination! {attribute.VertexType} {attribute.BufferFormat}"); } } @@ -109,7 +212,7 @@ namespace FirstPlugin uint VertBufferStride = GetTotalBufferStride(mesh); - using (var reader = new FileReader(mesh.GetDataArray())) + using (var reader = new FileReader(mesh.Data.ToArray())) { uint numVertex = (uint)reader.BaseStream.Length / VertBufferStride; for (int v = 0; v < numVertex; v++) @@ -117,39 +220,41 @@ namespace FirstPlugin Vertex vertex = new Vertex(); Vertices.Add(vertex); - for (int att = 0; att < mesh.AlignmentsLength; att++) + for (int att = 0; att < mesh.Attributes?.Count; att++) { - var attribute = mesh.Alignments(att).Value; + var attribute = mesh.Attributes[att]; - switch (attribute.TypeID) + switch ((VertexType)attribute.VertexType) { case VertexType.Position: - var pos = ParseBuffer(reader, attribute.FormatID, attribute.TypeID); + var pos = ParseBuffer(reader, attribute.BufferFormat, attribute.VertexType, attribute.ElementCount); vertex.pos = new OpenTK.Vector3(pos.X, pos.Y, pos.Z); vertex.pos = OpenTK.Vector3.TransformPosition(vertex.pos, transform); break; case VertexType.Normal: - var normal = ParseBuffer(reader, attribute.FormatID, attribute.TypeID); + var normal = ParseBuffer(reader, attribute.BufferFormat, attribute.VertexType, attribute.ElementCount); vertex.nrm = new OpenTK.Vector3(normal.X, normal.Y, normal.Z); + vertex.normalW = normal.W; vertex.nrm = OpenTK.Vector3.TransformNormal(vertex.nrm, transform); break; case VertexType.UV1: - var texcoord1 = ParseBuffer(reader, attribute.FormatID, attribute.TypeID); + var texcoord1 = ParseBuffer(reader, attribute.BufferFormat, attribute.VertexType, attribute.ElementCount); vertex.uv0 = new OpenTK.Vector2(texcoord1.X, texcoord1.Y); break; case VertexType.UV2: - var texcoord2 = ParseBuffer(reader, attribute.FormatID, attribute.TypeID); + var texcoord2 = ParseBuffer(reader, attribute.BufferFormat, attribute.VertexType, attribute.ElementCount); vertex.uv1 = new OpenTK.Vector2(texcoord2.X, texcoord2.Y); break; case VertexType.UV3: - var texcoord3 = ParseBuffer(reader, attribute.FormatID, attribute.TypeID); + var texcoord3 = ParseBuffer(reader, attribute.BufferFormat, attribute.VertexType, attribute.ElementCount); vertex.uv2 = new OpenTK.Vector2(texcoord3.X, texcoord3.Y); break; case VertexType.UV4: - var texcoord4 = ParseBuffer(reader, attribute.FormatID, attribute.TypeID); + var texcoord4 = ParseBuffer(reader, attribute.BufferFormat, attribute.VertexType, attribute.ElementCount); + vertex.uv3 = new OpenTK.Vector2(texcoord4.X, texcoord4.Y); break; case VertexType.BoneWeight: - var weights = ParseBuffer(reader, attribute.FormatID, attribute.TypeID); + var weights = ParseBuffer(reader, attribute.BufferFormat, attribute.VertexType, attribute.ElementCount); vertex.boneWeights.AddRange(new float[] { weights.X, @@ -159,7 +264,7 @@ namespace FirstPlugin }); break; case VertexType.BoneID: - var boneIndices = ParseBuffer(reader, attribute.FormatID, attribute.TypeID); + var boneIndices = ParseBuffer(reader, attribute.BufferFormat, attribute.VertexType, attribute.ElementCount); vertex.boneIds.AddRange(new int[] { boneSkinningIds[(int)boneIndices.X], @@ -170,24 +275,29 @@ namespace FirstPlugin break; case VertexType.Color1: OpenTK.Vector4 colors1 = new OpenTK.Vector4(1, 1, 1, 1); - if (attribute.FormatID == BufferFormat.Byte) - colors1 = ParseBuffer(reader, attribute.FormatID, attribute.TypeID); + if (attribute.BufferFormat == (uint)BufferFormat.Byte) + colors1 = ParseBuffer(reader, attribute.BufferFormat, attribute.VertexType, attribute.ElementCount); vertex.col = colors1 / 255f; break; case VertexType.Color2: OpenTK.Vector4 colors2 = new OpenTK.Vector4(1, 1, 1, 1); - if (attribute.FormatID == BufferFormat.Byte) - colors2 = ParseBuffer(reader, attribute.FormatID, attribute.TypeID); + if (attribute.BufferFormat == (uint)BufferFormat.Byte) + colors2 = ParseBuffer(reader, attribute.BufferFormat, attribute.VertexType, attribute.ElementCount); + vertex.col2 = colors2 / 255f; break; case VertexType.Binormal: - var binormals = ParseBuffer(reader, attribute.FormatID, attribute.TypeID); - + var binormals = ParseBuffer(reader, attribute.BufferFormat, attribute.VertexType, attribute.ElementCount); vertex.bitan = new OpenTK.Vector4(binormals.X, binormals.Y, binormals.Z, binormals.W); break; + case VertexType.Tangents: + var tans = ParseBuffer(reader, attribute.BufferFormat, attribute.VertexType, attribute.ElementCount); + vertex.tan = new OpenTK.Vector4(tans.X, tans.Y, tans.Z, tans.W); + break; default: - ParseBuffer(reader, attribute.FormatID, attribute.TypeID); + var values = ParseBuffer(reader, attribute.BufferFormat, attribute.VertexType, attribute.ElementCount); + vertex.Unknowns.Add(values); break; } } @@ -197,8 +307,11 @@ namespace FirstPlugin return Vertices; } - private static OpenTK.Vector4 ParseBuffer(FileReader reader, BufferFormat Format, VertexType AttributeType) + private static OpenTK.Vector4 ParseBuffer(FileReader reader, uint format, uint attType, uint numElements) { + VertexType AttributeType = (VertexType)attType; + BufferFormat Format = (BufferFormat)format; + if (AttributeType == VertexType.Position) { switch (Format) @@ -292,8 +405,34 @@ namespace FirstPlugin switch (Format) { case BufferFormat.HalfFloat: - return new OpenTK.Vector4(reader.ReadHalfSingle(), reader.ReadHalfSingle(), - reader.ReadHalfSingle(), reader.ReadHalfSingle()); + float[] values = new float[4]; + for (int i = 0; i < numElements; i++) + values[i] = reader.ReadHalfSingle(); + + return new OpenTK.Vector4(values[0], values[1], values[2], values[3]); + default: + throw new Exception($"Unknown Combination! {AttributeType} {Format}"); + } + } + } + + + private static void WriteBuffer(FileWriter writer, uint ElementCount, float[] value, BufferFormat Format, VertexType AttributeType) + { + for (int i = 0; i < ElementCount; i++) + { + switch (Format) + { + case BufferFormat.Float: + writer.Write(value[i]); break; + case BufferFormat.HalfFloat: + writer.WriteHalfFloat(value[i]); break; + case BufferFormat.Byte: + writer.Write((byte)value[i]); break; + case BufferFormat.Short: + writer.Write((short)value[i]); break; + case BufferFormat.BytesAsFloat: + writer.Write((byte)(value[i] * 255)); break; default: throw new Exception($"Unknown Combination! {AttributeType} {Format}"); } diff --git a/File_Format_Library/FileFormats/Pokemon/GFLX/GFBMDL/GFLXModel.cs b/File_Format_Library/FileFormats/Pokemon/GFLX/GFBMDL/GFLXModel.cs new file mode 100644 index 00000000..a71894b1 --- /dev/null +++ b/File_Format_Library/FileFormats/Pokemon/GFLX/GFBMDL/GFLXModel.cs @@ -0,0 +1,508 @@ +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.IO; +using Toolbox.Library.Rendering; +using FirstPlugin.Forms; +using FirstPlugin.GFMDLStructs; +using Newtonsoft.Json; + +namespace FirstPlugin +{ + public class GFLXModel + { + public GFBMDL ParentFile; + + public List GenericMaterials = new List(); + public List GenericMeshes = new List(); + + public STSkeleton Skeleton = new STSkeleton(); + + public Model Model; + + public IList Textures + { + get { return Model.TextureNames; } + set { Model.TextureNames = value; } + } + + public IList Shaders + { + get { return Model.ShaderNames; } + set { Model.ShaderNames = value; } + } + + public T LoadEditor() where T : + System.Windows.Forms.UserControl, new() + { + return ParentFile.LoadEditor(); + } + + public void UpdateVertexData(bool updateViewport) { + ParentFile.Renderer.UpdateVertexData(); + + if (updateViewport) + LibraryGUI.UpdateViewport(); + } + + public void LoadFile(Model model, GFBMDL file, GFBMDL_Render Renderer) { + Model = model; + ParentFile = file; + + for (int m = 0; m < Model.Materials?.Count; m++) { + GenericMaterials.Add(new GFLXMaterialData(this, Model.Materials[m])); + } + + List SkinningIndices = new List(); + + for (int b = 0; b < Model.Bones?.Count; b++) { + var bone = Model.Bones[b]; + Skeleton.bones.Add(new GFLXBone(this, bone)); + + if (bone.RigidCheck == null) + SkinningIndices.Add(b); + } + + Skeleton.reset(); + Skeleton.update(); + + for (int g = 0; g < Model.Groups?.Count; g++) { + var group = Model.Groups[g]; + var mesh = Model.Meshes[g]; + + OpenTK.Matrix4 transform = OpenTK.Matrix4.Identity; + + GFLXMesh genericMesh = new GFLXMesh(this, group, mesh); + genericMesh.Checked = true; + genericMesh.ImageKey = "model"; + genericMesh.SelectedImageKey = "model"; + + int boneIndex = (int)group.BoneIndex; + if (boneIndex < Skeleton.bones.Count && boneIndex > 0) + { + genericMesh.BoneIndex = boneIndex; + transform = Skeleton.bones[boneIndex].Transform; + + genericMesh.Text = Skeleton.bones[boneIndex].Text; + } + + // if (group.MeshID < Skeleton.bones.Count && group.MeshID > 0) + // genericMesh.Text = Skeleton.bones[(int)group.MeshID].Text; + + Renderer.Meshes.Add(genericMesh); + GenericMeshes.Add(genericMesh); + + //Load the vertex data + genericMesh.Transform = transform; + genericMesh.vertices = GFLXMeshBufferHelper.LoadVertexData(mesh, transform, SkinningIndices); + genericMesh.FlipUvsVertical(); + + //Load faces + for (int p = 0; p < mesh.Polygons?.Count; p++) + { + var poly = mesh.Polygons[p]; + + var polygonGroup = new STGenericPolygonGroup(); + polygonGroup.MaterialIndex = (int)poly.MaterialIndex; + genericMesh.PolygonGroups.Add(polygonGroup); + + if (GenericMaterials.Count > poly.MaterialIndex) + polygonGroup.Material = GenericMaterials[(int)poly.MaterialIndex]; + + for (int f = 0; f < poly.Faces?.Count; f++) + polygonGroup.faces.Add((int)poly.Faces[f]); + } + } + } + + + public void SaveFile(System.IO.Stream stream) + { + + } + + public List GenerateSkinningIndices() + { + List indices = new List(); + for (int i = 0; i < Model.Bones?.Count; i++) + { + if (Model.Bones[i].RigidCheck == null) + indices.Add(Model.Bones.IndexOf(Model.Bones[i])); + } + return indices; + } + + public GFMDLStructs.BoundingBox GenerateBoundingBox(STGenericObject mesh) + { + float minX = 0; + float minY = 0; + float minZ = 0; + float maxX = 0; + float maxY = 0; + float maxZ = 0; + + for (int v = 0; v < mesh.vertices.Count; v++) + { + minX = Math.Min(minX, mesh.vertices[v].pos.X); + minY = Math.Min(minY, mesh.vertices[v].pos.Y); + minZ = Math.Min(minZ, mesh.vertices[v].pos.Z); + maxX = Math.Max(maxX, mesh.vertices[v].pos.X); + maxY = Math.Max(maxY, mesh.vertices[v].pos.Y); + maxZ = Math.Max(maxZ, mesh.vertices[v].pos.Z); + } + + var bounding = new GFMDLStructs.BoundingBox(); + bounding.MinX = minX; + bounding.MinY = minY; + bounding.MinZ = minZ; + bounding.MaxX = maxX; + bounding.MaxY = maxY; + bounding.MaxZ = maxZ; + return bounding; + } + + public void GenerateBoundingBox() + { + float minX = 0; + float minY = 0; + float minZ = 0; + float maxX = 0; + float maxY = 0; + float maxZ = 0; + + foreach (var mesh in GenericMeshes) + { + for (int v = 0; v < mesh.vertices.Count; v++) + { + minX = Math.Min(minX, mesh.vertices[v].pos.X); + minY = Math.Min(minY, mesh.vertices[v].pos.Y); + minZ = Math.Min(minZ, mesh.vertices[v].pos.Z); + maxX = Math.Max(maxX, mesh.vertices[v].pos.X); + maxY = Math.Max(maxY, mesh.vertices[v].pos.Y); + maxZ = Math.Max(maxZ, mesh.vertices[v].pos.Z); + } + } + + Model.Bounding = new GFMDLStructs.BoundingBox(); + Model.Bounding.MinX = minX; + Model.Bounding.MinY = minY; + Model.Bounding.MinZ = minZ; + Model.Bounding.MaxX = maxX; + Model.Bounding.MaxY = maxY; + Model.Bounding.MaxZ = maxZ; + } + } + + public class GFLXMaterialData : STGenericMaterial, IContextMenuNode + { + private Material Material; + public GFLXModel ParentModel; + + public Dictionary SwitchParams = new Dictionary(); + public Dictionary ValueParams = new Dictionary(); + public Dictionary ColorParams = new Dictionary(); + + public override void OnClick(TreeView treeView) { + var editor = ParentModel.LoadEditor(); + editor.LoadMaterial(this); + } + + public string ConvertToJson() { + return JsonConvert.SerializeObject(Material, Formatting.Indented); + } + + public void ConvertFromJson(string text) + { + Material = JsonConvert.DeserializeObject(text); + ReloadMaterial(); + + var editor = ParentModel.LoadEditor(); + editor.LoadMaterial(this); + } + + public ToolStripItem[] GetContextMenuItems() + { + List Items = new List(); + Items.Add(new ToolStripMenuItem("Export", null, ExportAction, Keys.Control | Keys.E)); + Items.Add(new ToolStripMenuItem("Replace", null, ReplaceAction, Keys.Control | Keys.R)); + return Items.ToArray(); + } + + private void ExportAction(object sender, EventArgs args) + { + SaveFileDialog sfd = new SaveFileDialog(); + sfd.Filter = "Supported Formats|*.json;"; + sfd.FileName = Text; + sfd.DefaultExt = "json"; + if (sfd.ShowDialog() == DialogResult.OK) { + string json = JsonConvert.SerializeObject(Material, Formatting.Indented); + System.IO.File.WriteAllText(sfd.FileName, json); + } + } + + private void ReplaceAction(object sender, EventArgs args) + { + OpenFileDialog ofd = new OpenFileDialog(); + ofd.Filter = "Supported Formats|*.json;"; + if (ofd.ShowDialog() == DialogResult.OK) + { + Material = JsonConvert.DeserializeObject( + System.IO.File.ReadAllText(ofd.FileName)); + + ReloadMaterial(); + + var editor = ParentModel.LoadEditor(); + editor.LoadMaterial(this); + } + } + + public GFLXMaterialData(GFLXModel parent, Material mat) + { + ParentModel = parent; + Material = mat; + Text = mat.Name; + + ReloadMaterial(); + } + + private void ReloadMaterial() + { + SwitchParams.Clear(); + ValueParams.Clear(); + ColorParams.Clear(); + TextureMaps.Clear(); + + for (int i = 0; i < Material.Switches?.Count; i++) + { + var val = Material.Switches[i]; + SwitchParams.Add(val.Name, new GFLXSwitchParam(val)); + } + + for (int i = 0; i < Material.Values?.Count; i++) + { + var val = Material.Values[i]; + ValueParams.Add(val.Name, new GFLXValueParam(val)); + } + + for (int i = 0; i < Material.Colors?.Count; i++) + { + var val = Material.Colors[i]; + ColorParams.Add(val.Name, new GFLXColorParam(val)); + } + + int textureUnit = 1; + for (int t = 0; t < Material.TextureMaps?.Count; t++) + { + var tex = Material.TextureMaps[t]; + string name = ParentModel.Textures[(int)tex.Index]; + + GFLXTextureMap matTexture = new GFLXTextureMap(); + matTexture.gflxTextureMap = tex; + matTexture.Name = name; + matTexture.Transform = new STTextureTransform(); + matTexture.SamplerName = tex.Sampler; + matTexture.textureUnit = textureUnit++; + matTexture.WrapModeS = STTextureWrapMode.Mirror; + matTexture.WrapModeT = STTextureWrapMode.Repeat; + TextureMaps.Add(matTexture); + + switch (tex.Sampler) + { + case "BaseColor0": + matTexture.Type = STGenericMatTexture.TextureType.Diffuse; + break; + case "Col0Tex": + matTexture.Type = STGenericMatTexture.TextureType.Diffuse; + break; + case "EmissionMaskTex": + // matTexture.Type = STGenericMatTexture.TextureType.Emission; + break; + case "LyCol0Tex": + break; + case "NormalMapTex": + matTexture.WrapModeT = STTextureWrapMode.Repeat; + matTexture.WrapModeT = STTextureWrapMode.Repeat; + matTexture.Type = STGenericMatTexture.TextureType.Normal; + break; + case "AmbientTex": + break; + case "LightTblTex": + break; + case "SphereMapTex": + break; + case "EffectTex": + break; + } + + + float ScaleX = 1; + float ScaleY = 1; + float TransX = 0; + float TransY = 0; + + //Lookup the uniforms and apply a transform to the texture map + //Used for the UV viewer + if (matTexture.Type == STGenericMatTexture.TextureType.Diffuse) + { + if (ValueParams.ContainsKey("ColorUVScaleU")) + ScaleX = ValueParams["ColorUVScaleU"].Value; + if (ValueParams.ContainsKey("ColorUVScaleV")) + ScaleY = ValueParams["ColorUVScaleV"].Value; + + if (ValueParams.ContainsKey("ColorUVTranslateU")) + TransX = ValueParams["ColorUVTranslateU"].Value; + if (ValueParams.ContainsKey("ColorUVTranslateV")) + TransY = ValueParams["ColorUVTranslateV"].Value; + } + if (matTexture.Type == STGenericMatTexture.TextureType.Normal) + { + + } + + matTexture.Transform.Scale = new OpenTK.Vector2(ScaleX, ScaleY); + matTexture.Transform.Translate = new OpenTK.Vector2(TransX, TransY); + } + } + } + + public class GFLXTextureMap : STGenericMatTexture + { + public TextureMap gflxTextureMap; + + public override STGenericTexture GetTexture() + { + foreach (var bntx in PluginRuntime.bntxContainers) + { + if (bntx.Textures.ContainsKey(Name)) + return bntx.Textures[Name]; + } + + return base.GetTexture(); + } + } + + public class GFLXBone : STBone + { + public Bone Bone; + public GFLXModel ParentModel; + + public bool HasSkinning => Bone.RigidCheck == null; + + public GFLXBone(GFLXModel parent, Bone bone) : base(parent.Skeleton) + { + ParentModel = parent; + Bone = bone; + + Text = bone.Name; + parentIndex = bone.Parent; + + if (bone.Translation != null) + { + position = new float[3] + { bone.Translation.X, + bone.Translation.Y, + bone.Translation.Z + }; + } + + if (bone.Rotation != null) + { + rotation = new float[4] + { bone.Rotation.X, + bone.Rotation.Y, + bone.Rotation.Z, + 1.0f, + }; + } + + if (bone.Scale != null) + { + scale = new float[3] + { bone.Scale.X, + bone.Scale.Y, + bone.Scale.Z + }; + } + } + } + + public class GFLXColorParam + { + private MatColor Param; + + public GFLXColorParam(MatColor param) + { + Param = param; + } + + public string Name + { + get { return Param.Name; } + set { Param.Name = value; } + } + + public OpenTK.Vector3 Value + { + get { return new OpenTK.Vector3( + Param.Color.R, + Param.Color.G, + Param.Color.B); + } + set + { + var vec3 = value; + + Param.Color.R = vec3.X; + Param.Color.G = vec3.Y; + Param.Color.B = vec3.Z; + } + } + } + + public class GFLXValueParam + { + private MatFloat Param; + + public GFLXValueParam(MatFloat param) { + Param = param; + } + + public string Name + { + get { return Param.Name; } + set { Param.Name = value; } + } + + public float Value + { + get { return Param.Value; } + set { Param.Value = value; } + } + } + + public class GFLXSwitchParam + { + private MatSwitch Param; + + public GFLXSwitchParam(MatSwitch param) + { + Param = param; + } + + public string Name + { + get { return Param.Name; } + set { Param.Name = value; } + } + + public bool Value + { + get { return Param.Value; } + set { Param.Value = value; } + } + } +} diff --git a/File_Format_Library/FileFormats/Pokemon/GFLX/GFBMDL/GFMDLStructs.cs b/File_Format_Library/FileFormats/Pokemon/GFLX/GFBMDL/GFMDLStructs.cs new file mode 100644 index 00000000..21afc3d7 --- /dev/null +++ b/File_Format_Library/FileFormats/Pokemon/GFLX/GFBMDL/GFMDLStructs.cs @@ -0,0 +1,276 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Newtonsoft.Json; + +namespace FirstPlugin.GFMDLStructs +{ + public enum VertexType + { + Position = 0, + Normal = 1, + Binormal = 2, + UV1 = 3, + UV2 = 4, + UV3 = 5, + UV4 = 6, + Color1 = 7, + Color2 = 8, + Color3 = 9, + Color4 = 10, + BoneID = 11, + BoneWeight = 12, + Tangents = 13, + Unknown2 = 14, + } + + public enum BufferFormat : uint + { + Float = 0, + HalfFloat = 1, + Byte = 3, + Short = 5, + BytesAsFloat = 8, + } + + public class Model + { + public uint Version { get; set; } + + public BoundingBox Bounding { get; set; } + + public IList TextureNames { get; set; } + public IList ShaderNames { get; set; } + public IList Unknown { get; set; } + public IList MaterialNames { get; set; } + public IList Materials { get; set; } + public IList Groups { get; set; } + public IList Meshes { get; set; } + public IList Bones { get; set; } + public IList CollisionGroups { get; set; } + } + + public class Material + { + public string Name { get; set; } + public string ShaderGroup { get; set; } + + public int RenderLayer { get; set; } + + public byte Unknown1 { get; set; } + public byte Unknown2 { get; set; } + + public int Parameter1 { get; set; } + public int Parameter2 { get; set; } + public int Parameter3 { get; set; } + public int Parameter4 { get; set; } + public int Parameter5 { get; set; } + public int Parameter6 { get; set; } + + public IList TextureMaps { get; set; } + + public IList Switches { get; set; } + public IList Values { get; set; } + public IList Colors { get; set; } + + public byte Unknown3 { get; set; } + public byte Unknown4 { get; set; } + public byte Unknown5 { get; set; } + public byte Unknown6 { get; set; } + public byte Unknown7 { get; set; } + + public MaterialCommon Common { get; set; } + + public void Export(string name) + { + string json = JsonConvert.SerializeObject(this, Formatting.Indented); + System.IO.File.WriteAllText($"mat_{name}.json", json); + } + + public static Material Replace(string filePath) + { + string json = System.IO.File.ReadAllText(filePath); + return JsonConvert.DeserializeObject(json); + } + } + + public class TextureMap + { + public string Sampler { get; set; } + public uint Index { get; set; } + public TextureParams Params { get; set; } + } + + public class TextureParams + { + public uint Unknown1 { get; set; } + public uint Unknown2 { get; set; } + public uint Unknown3 { get; set; } + public uint Unknown4 { get; set; } + public uint Unknown5 { get; set; } + public uint Unknown6 { get; set; } + public uint Unknown7 { get; set; } + public uint Unknown8 { get; set; } + + public float lodBias { get; set; } + } + + public class MatInt + { + public string Name { get; set; } + public int Value { get; set; } + } + + public class MatFloat + { + public string Name { get; set; } + public float Value { get; set; } + } + + public class MatColor + { + public string Name { get; set; } + public ColorRGB32 Color { get; set; } + } + + public class MatSwitch + { + public string Name { get; set; } + public bool Value { get; set; } + } + + public class MaterialCommon + { + public IList Switches { get; set; } + public IList Values { get; set; } + public IList Colors { get; set; } + } + + public class UnknownEmpty + { + public uint Zero { get; set; } + } + + public class Group + { + public uint BoneIndex { get; set; } + public uint MeshIndex { get; set; } + + public BoundingBox Bounding { get; set; } + + public uint Layer { get; set; } + } + + public class Mesh + { + public IList Polygons { get; set; } + public IList Attributes { get; set; } + public IList Data { get; set; } + + public void SetData(byte[] data) + { + if (Data == null) + Data = new List(); + + Data.Clear(); + for (int i = 0; i < data.Length; i++) + Data.Add(data[i]); + } + } + + public class MeshPolygon + { + public uint MaterialIndex { get; set; } + + public IList Faces { get; set; } + } + + public class MeshAttribute + { + public uint VertexType { get; set; } + public uint BufferFormat { get; set; } + public uint ElementCount { get; set; } + } + + public class Bone + { + public string Name { get; set; } + + public uint BoneType { get; set; } + public int Parent { get; set; } + public uint Zero { get; set; } + public bool Visible { get; set; } + + public Vector3 Scale { get; set; } + public Vector3 Rotation { get; set; } + public Vector3 Translation { get; set; } + public Vector3 RadiusStart { get; set; } + public Vector3 RadiusEnd { get; set; } + + public BoneRigidData RigidCheck { get; set; } + } + + public class BoneRigidData + { + public uint Unknown1 { get; set; } + } + + public class CollisionGroup + { + public uint BoneIndex { get; set; } + public uint Unknown1 { get; set; } + + public IList BoneChildren { get; set; } + public BoundingBox Bounding { get; set; } + } + + public class BoundingBox + { + public float MinX { get; set; } + public float MinY { get; set; } + public float MinZ { get; set; } + + public float MaxX { get; set; } + public float MaxY { get; set; } + public float MaxZ { get; set; } + } + + public class Vector3 + { + public float X { get; set; } + public float Y { get; set; } + public float Z { get; set; } + + public Vector3() { } + public Vector3(float x, float y, float z) { + X = x; Y = y; Z = z; + } + } + + public class ColorRGB32 + { + public float R { get; set; } + public float G { get; set; } + public float B { get; set; } + + public ColorRGB32() { } + public ColorRGB32(float r, float g, float b) { + R = r; G = g; B = b; + } + } + + public class Vector4 + { + public float X { get; set; } + public float Y { get; set; } + public float Z { get; set; } + public float W { get; set; } + + public Vector4() { } + public Vector4(float x, float y, float z, float w) { + X = x; Y = y; Z = z; W = w; + } + } +} diff --git a/File_Format_Library/FileFormats/Pokemon/GFLX/GFBMDL/GfbmdlImportSettings.cs b/File_Format_Library/FileFormats/Pokemon/GFLX/GFBMDL/GfbmdlImportSettings.cs new file mode 100644 index 00000000..bcb84dfb --- /dev/null +++ b/File_Format_Library/FileFormats/Pokemon/GFLX/GFBMDL/GfbmdlImportSettings.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using FirstPlugin.GFMDLStructs; + +namespace FirstPlugin +{ + public class GfbmdlImportSettings + { + public List MeshSettings = new List(); + + public class MeshSetting + { + public bool FlipUVsVertical { get; set; } + + public bool HasNormals { get; set; } + public bool HasBitangents { get; set; } + public bool HasTangents { get; set; } + public bool HasTexCoord1 { get; set; } + public bool HasTexCoord2 { get; set; } + public bool HasTexCoord3 { get; set; } + public bool HasTexCoord4 { get; set; } + public bool HasColor1 { get; set; } + public bool HasColor2 { get; set; } + public bool HasColor3 { get; set; } + public bool HasColor4 { get; set; } + public bool HasBoneIndices { get; set; } + public bool HasWeights { get; set; } + + public BufferFormat PositionFormat { get; set; } = BufferFormat.Float; + public BufferFormat NormalFormat { get; set; } = BufferFormat.HalfFloat; + public BufferFormat BitangentnFormat { get; set; } = BufferFormat.HalfFloat; + public BufferFormat TexCoord1Format { get; set; } = BufferFormat.Float; + public BufferFormat TexCoord2Format { get; set; } = BufferFormat.Float; + public BufferFormat TexCoord3Format { get; set; } = BufferFormat.Float; + public BufferFormat TexCoord4Format { get; set; } = BufferFormat.Float; + public BufferFormat Color1Format { get; set; } = BufferFormat.Byte; + public BufferFormat Color2Format { get; set; } = BufferFormat.Byte; + public BufferFormat Color3Format { get; set; } = BufferFormat.Byte; + public BufferFormat Color4Format { get; set; } = BufferFormat.Byte; + public BufferFormat BoneIndexFormat { get; set; } = BufferFormat.Byte; + public BufferFormat BoneWeightFormat { get; set; } = BufferFormat.BytesAsFloat; + public BufferFormat TangentsFormat { get; set; } = BufferFormat.HalfFloat; + + public string Material { get; set; } + + public string MaterialFile { get; set; } + } + } +} diff --git a/File_Format_Library/FileFormats/Pokemon/GFBPMCATALOG/FlatBuffers/gfbpmcatalog.cs b/File_Format_Library/FileFormats/Pokemon/GFLX/GFBPMCATALOG/FlatBuffers/gfbpmcatalog.cs similarity index 100% rename from File_Format_Library/FileFormats/Pokemon/GFBPMCATALOG/FlatBuffers/gfbpmcatalog.cs rename to File_Format_Library/FileFormats/Pokemon/GFLX/GFBPMCATALOG/FlatBuffers/gfbpmcatalog.cs diff --git a/File_Format_Library/FileFormats/Pokemon/PokemonTable.cs b/File_Format_Library/FileFormats/Pokemon/GFLX/PokemonTable.cs similarity index 100% rename from File_Format_Library/FileFormats/Pokemon/PokemonTable.cs rename to File_Format_Library/FileFormats/Pokemon/GFLX/PokemonTable.cs diff --git a/File_Format_Library/File_Format_Library.csproj b/File_Format_Library/File_Format_Library.csproj index 7799d1b1..211e3af4 100644 --- a/File_Format_Library/File_Format_Library.csproj +++ b/File_Format_Library/File_Format_Library.csproj @@ -233,7 +233,7 @@ - + @@ -358,16 +358,21 @@ - - - - - - - - - - + + + + + + + + + + + + + + + @@ -392,6 +397,12 @@ + + UserControl + + + PaneAnimationController.cs + UserControl @@ -404,6 +415,18 @@ GFLXMaterialParamEditor.cs + + UserControl + + + GFLXMeshEditor.cs + + + Form + + + GFLXModelImporter.cs + Form @@ -441,7 +464,7 @@ LayoutAnimEditor.cs - Form + UserControl LayoutAnimEditorBasic.cs @@ -670,7 +693,7 @@ BMDModelImportSettings.cs - + @@ -1441,12 +1464,21 @@ AttributeEditor.cs + + PaneAnimationController.cs + GFLXMaterialEditor.cs GFLXMaterialParamEditor.cs + + GFLXMeshEditor.cs + + + GFLXModelImporter.cs + PokemonLoaderSwSh.cs @@ -1940,6 +1972,7 @@ + diff --git a/File_Format_Library/GL/GFBMDL_Render.cs b/File_Format_Library/GL/GFBMDL_Render.cs index b1ab76f6..f55630db 100644 --- a/File_Format_Library/GL/GFBMDL_Render.cs +++ b/File_Format_Library/GL/GFBMDL_Render.cs @@ -15,6 +15,8 @@ namespace FirstPlugin { public class GFBMDL_Render : AbstractGlDrawable, IMeshContainer { + public GFBMDL GfbmdlFile; + public List Meshes { get; set; } = new List(); public Matrix4 ModelTransform = Matrix4.Identity; @@ -399,7 +401,7 @@ namespace FirstPlugin shader.EnableVertexAttributes(); foreach (GFLXMesh shp in Meshes) { - if (shp.Checked) + if (shp.Checked && shp.AnimationController.IsVisible) DrawModel(control, shp, shader); } shader.DisableVertexAttributes(); diff --git a/File_Format_Library/GUI/BFLYT/Animations/Basic/LayoutAnimEditorBasic.Designer.cs b/File_Format_Library/GUI/BFLYT/Animations/Basic/LayoutAnimEditorBasic.Designer.cs index 55a3c3c4..ec772eed 100644 --- a/File_Format_Library/GUI/BFLYT/Animations/Basic/LayoutAnimEditorBasic.Designer.cs +++ b/File_Format_Library/GUI/BFLYT/Animations/Basic/LayoutAnimEditorBasic.Designer.cs @@ -80,10 +80,9 @@ // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(800, 450); this.Controls.Add(this.splitContainer1); this.Name = "LayoutAnimEditorBasic"; - this.Text = "LayoutAnimEditorBasic"; + this.Size = new System.Drawing.Size(800, 450); this.splitContainer1.Panel1.ResumeLayout(false); this.splitContainer1.Panel2.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); diff --git a/File_Format_Library/GUI/BFLYT/Animations/Basic/LayoutAnimEditorBasic.cs b/File_Format_Library/GUI/BFLYT/Animations/Basic/LayoutAnimEditorBasic.cs index 1f7c2d17..54aae075 100644 --- a/File_Format_Library/GUI/BFLYT/Animations/Basic/LayoutAnimEditorBasic.cs +++ b/File_Format_Library/GUI/BFLYT/Animations/Basic/LayoutAnimEditorBasic.cs @@ -12,7 +12,7 @@ using Toolbox.Library; namespace LayoutBXLYT { - public partial class LayoutAnimEditorBasic : LayoutDocked + public partial class LayoutAnimEditorBasic : UserControl { private BxlytHeader ParentLayout; private BxlanHeader ActiveAnim; @@ -54,10 +54,19 @@ namespace LayoutBXLYT } } + public void LoadAnimationEntry(BxlanHeader bxlan, BxlanPaiEntry entry) + { + ActiveAnim = bxlan; + LoadAnimationEntry(entry, null); + } + private void LoadAnimationEntry(BxlanPaiEntry entry, TreeNode root) { var nodeEntry = new GroupAnimWrapper(entry.Name) { Tag = entry }; - root.Nodes.Add(nodeEntry); + if (root != null) + root.Nodes.Add(nodeEntry); + else + treeView1.Nodes.Add(nodeEntry); for (int i = 0; i < entry.Tags.Count; i++) { diff --git a/File_Format_Library/GUI/BFLYT/Editor/PaneAnimationController.Designer.cs b/File_Format_Library/GUI/BFLYT/Editor/PaneAnimationController.Designer.cs new file mode 100644 index 00000000..9c1a5497 --- /dev/null +++ b/File_Format_Library/GUI/BFLYT/Editor/PaneAnimationController.Designer.cs @@ -0,0 +1,147 @@ +namespace LayoutBXLYT +{ + partial class PaneAnimationController + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.stFlowLayoutPanel1 = new Toolbox.Library.Forms.STFlowLayoutPanel(); + this.stDropDownPanel1 = new Toolbox.Library.Forms.STDropDownPanel(); + this.listViewCustom1 = new Toolbox.Library.Forms.ListViewCustom(); + this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.stDropDownPanel2 = new Toolbox.Library.Forms.STDropDownPanel(); + this.stPanel1 = new Toolbox.Library.Forms.STPanel(); + this.stFlowLayoutPanel1.SuspendLayout(); + this.stDropDownPanel1.SuspendLayout(); + this.stDropDownPanel2.SuspendLayout(); + this.SuspendLayout(); + // + // stFlowLayoutPanel1 + // + this.stFlowLayoutPanel1.Controls.Add(this.stDropDownPanel1); + this.stFlowLayoutPanel1.Controls.Add(this.stDropDownPanel2); + this.stFlowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.stFlowLayoutPanel1.FixedHeight = false; + this.stFlowLayoutPanel1.FixedWidth = true; + this.stFlowLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.stFlowLayoutPanel1.Margin = new System.Windows.Forms.Padding(0); + this.stFlowLayoutPanel1.Name = "stFlowLayoutPanel1"; + this.stFlowLayoutPanel1.Size = new System.Drawing.Size(348, 599); + this.stFlowLayoutPanel1.TabIndex = 0; + // + // stDropDownPanel1 + // + this.stDropDownPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.stDropDownPanel1.Controls.Add(this.listViewCustom1); + this.stDropDownPanel1.ExpandedHeight = 0; + this.stDropDownPanel1.IsExpanded = true; + this.stDropDownPanel1.Location = new System.Drawing.Point(0, 0); + this.stDropDownPanel1.Margin = new System.Windows.Forms.Padding(0); + this.stDropDownPanel1.Name = "stDropDownPanel1"; + this.stDropDownPanel1.PanelName = "Animation References"; + this.stDropDownPanel1.PanelValueName = ""; + this.stDropDownPanel1.SetIcon = null; + this.stDropDownPanel1.SetIconAlphaColor = System.Drawing.SystemColors.Control; + this.stDropDownPanel1.SetIconColor = System.Drawing.SystemColors.Control; + this.stDropDownPanel1.Size = new System.Drawing.Size(348, 195); + this.stDropDownPanel1.TabIndex = 0; + // + // listViewCustom1 + // + this.listViewCustom1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.listViewCustom1.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.listViewCustom1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnHeader1}); + this.listViewCustom1.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None; + this.listViewCustom1.HideSelection = false; + this.listViewCustom1.Location = new System.Drawing.Point(3, 26); + this.listViewCustom1.Name = "listViewCustom1"; + this.listViewCustom1.OwnerDraw = true; + this.listViewCustom1.Size = new System.Drawing.Size(342, 158); + this.listViewCustom1.TabIndex = 1; + this.listViewCustom1.UseCompatibleStateImageBehavior = false; + this.listViewCustom1.View = System.Windows.Forms.View.Details; + this.listViewCustom1.SelectedIndexChanged += new System.EventHandler(this.listViewCustom1_SelectedIndexChanged); + // + // columnHeader1 + // + this.columnHeader1.Width = 342; + // + // stDropDownPanel2 + // + this.stDropDownPanel2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.stDropDownPanel2.Controls.Add(this.stPanel1); + this.stDropDownPanel2.ExpandedHeight = 0; + this.stDropDownPanel2.IsExpanded = true; + this.stDropDownPanel2.Location = new System.Drawing.Point(0, 195); + this.stDropDownPanel2.Margin = new System.Windows.Forms.Padding(0); + this.stDropDownPanel2.Name = "stDropDownPanel2"; + this.stDropDownPanel2.PanelName = "Animation Data"; + this.stDropDownPanel2.PanelValueName = ""; + this.stDropDownPanel2.SetIcon = null; + this.stDropDownPanel2.SetIconAlphaColor = System.Drawing.SystemColors.Control; + this.stDropDownPanel2.SetIconColor = System.Drawing.SystemColors.Control; + this.stDropDownPanel2.Size = new System.Drawing.Size(348, 404); + this.stDropDownPanel2.TabIndex = 2; + // + // stPanel1 + // + this.stPanel1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.stPanel1.Location = new System.Drawing.Point(3, 25); + this.stPanel1.Name = "stPanel1"; + this.stPanel1.Size = new System.Drawing.Size(345, 385); + this.stPanel1.TabIndex = 1; + // + // PaneAnimationController + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.stFlowLayoutPanel1); + this.Name = "PaneAnimationController"; + this.Size = new System.Drawing.Size(348, 599); + this.stFlowLayoutPanel1.ResumeLayout(false); + this.stDropDownPanel1.ResumeLayout(false); + this.stDropDownPanel1.PerformLayout(); + this.stDropDownPanel2.ResumeLayout(false); + this.stDropDownPanel2.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private Toolbox.Library.Forms.STFlowLayoutPanel stFlowLayoutPanel1; + private Toolbox.Library.Forms.STDropDownPanel stDropDownPanel1; + private Toolbox.Library.Forms.ListViewCustom listViewCustom1; + private System.Windows.Forms.ColumnHeader columnHeader1; + private Toolbox.Library.Forms.STDropDownPanel stDropDownPanel2; + private Toolbox.Library.Forms.STPanel stPanel1; + } +} diff --git a/File_Format_Library/GUI/BFLYT/Editor/PaneAnimationController.cs b/File_Format_Library/GUI/BFLYT/Editor/PaneAnimationController.cs new file mode 100644 index 00000000..3a311c85 --- /dev/null +++ b/File_Format_Library/GUI/BFLYT/Editor/PaneAnimationController.cs @@ -0,0 +1,87 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Toolbox.Library; + +namespace LayoutBXLYT +{ + public partial class PaneAnimationController : UserControl + { + private PaneEditor ParentEditor; + private LayoutAnimEditorBasic AnimEditor; + + public PaneAnimationController() + { + InitializeComponent(); + + AnimEditor = new LayoutAnimEditorBasic(); + AnimEditor.Dock = DockStyle.Fill; + stPanel1.Controls.Add(AnimEditor); + + stDropDownPanel1.ResetColors(); + stDropDownPanel2.ResetColors(); + } + + public void LoadPane(BasePane pane, PaneEditor paneEditor) + { + ParentEditor = paneEditor; + + var animations = ParentEditor.GetAnimations(); + var material = pane.TryGetActiveMaterial(); + string matName = material != null ? material.Name : ""; + + listViewCustom1.Items.Clear(); + + var archive = pane.LayoutFile.FileInfo.IFileInfo.ArchiveParent; + if (archive != null) + { + foreach (var file in archive.Files) { + if (Utils.GetExtension(file.FileName) == ".bflan" && + !animations.Any(x => x.FileName == file.FileName)) + { + if (BxlanHeader.ContainsEntry(file.FileData, new string[2] { pane.Name, matName })) + listViewCustom1.Items.Add(new ListViewItem(file.FileName) { Tag = file }); + } + } + } + + for (int i = 0; i < animations?.Count; i++) { + if (animations[i].ContainsEntry(pane.Name) || animations[i].ContainsEntry(matName)) + { + listViewCustom1.Items.Add(new ListViewItem(animations[i].FileName) { Tag = animations[i] }); + } + } + LayoutAnimEditorBasic editor = new LayoutAnimEditorBasic(); + stPanel1.Controls.Add(editor); + } + + private void listViewCustom1_SelectedIndexChanged(object sender, EventArgs e) + { + if (listViewCustom1.SelectedIndices.Count > 0) + { + var item = listViewCustom1.SelectedItems[0]; + BxlanHeader bxlan = null; + + if (item.Tag is ArchiveFileInfo) { + var fileFormat = ((ArchiveFileInfo)item.Tag).OpenFile(); + bxlan = ((BXLAN)fileFormat).BxlanHeader; + } + else { + bxlan = (BxlanHeader)item.Tag; + } + + if (bxlan == null) return; + + for (int i = 0; i < bxlan.AnimationInfo.Entries.Count; i++) + if (bxlan.AnimationInfo.Entries[i].Name == item.Text) + AnimEditor.LoadAnimationEntry(bxlan, bxlan.AnimationInfo.Entries[i]); + } + } + } +} diff --git a/Switch_Toolbox_Library/Forms/Editors/UV/UVEditor2.resx b/File_Format_Library/GUI/BFLYT/Editor/PaneAnimationController.resx similarity index 100% rename from Switch_Toolbox_Library/Forms/Editors/UV/UVEditor2.resx rename to File_Format_Library/GUI/BFLYT/Editor/PaneAnimationController.resx diff --git a/File_Format_Library/GUI/BFLYT/Editor/PaneEditor.Designer.cs b/File_Format_Library/GUI/BFLYT/Editor/PaneEditor.Designer.cs index 486fe44b..8094795c 100644 --- a/File_Format_Library/GUI/BFLYT/Editor/PaneEditor.Designer.cs +++ b/File_Format_Library/GUI/BFLYT/Editor/PaneEditor.Designer.cs @@ -28,40 +28,45 @@ /// private void InitializeComponent() { - this.stPanel3 = new Toolbox.Library.Forms.STPanel(); - this.stPanel2 = new Toolbox.Library.Forms.STPanel(); + this.stPanel4 = new Toolbox.Library.Forms.STPanel(); + this.miniToolStrip = new Toolbox.Library.Forms.STToolStrip(); this.stToolStrip1 = new Toolbox.Library.Forms.STToolStrip(); this.stPanel1 = new Toolbox.Library.Forms.STPanel(); - this.stPanel3.SuspendLayout(); - this.stPanel2.SuspendLayout(); + this.stPanel4.SuspendLayout(); this.SuspendLayout(); // - // stPanel3 + // stPanel4 // - this.stPanel3.Controls.Add(this.stPanel2); - this.stPanel3.Controls.Add(this.stPanel1); - this.stPanel3.Dock = System.Windows.Forms.DockStyle.Fill; - this.stPanel3.Location = new System.Drawing.Point(0, 0); - this.stPanel3.Name = "stPanel3"; - this.stPanel3.Size = new System.Drawing.Size(411, 288); - this.stPanel3.TabIndex = 2; + this.stPanel4.Controls.Add(this.stToolStrip1); + this.stPanel4.Dock = System.Windows.Forms.DockStyle.Top; + this.stPanel4.Location = new System.Drawing.Point(0, 0); + this.stPanel4.Name = "stPanel4"; + this.stPanel4.Size = new System.Drawing.Size(462, 31); + this.stPanel4.TabIndex = 2; // - // stPanel2 + // miniToolStrip // - this.stPanel2.Controls.Add(this.stToolStrip1); - this.stPanel2.Dock = System.Windows.Forms.DockStyle.Top; - this.stPanel2.Location = new System.Drawing.Point(0, 0); - this.stPanel2.Name = "stPanel2"; - this.stPanel2.Size = new System.Drawing.Size(411, 27); - this.stPanel2.TabIndex = 0; + this.miniToolStrip.AccessibleName = "New item selection"; + this.miniToolStrip.AccessibleRole = System.Windows.Forms.AccessibleRole.ButtonDropDown; + this.miniToolStrip.AutoSize = false; + this.miniToolStrip.CanOverflow = false; + this.miniToolStrip.Dock = System.Windows.Forms.DockStyle.None; + this.miniToolStrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; + this.miniToolStrip.HighlightSelectedTab = false; + this.miniToolStrip.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.Flow; + this.miniToolStrip.Location = new System.Drawing.Point(0, 0); + this.miniToolStrip.Name = "miniToolStrip"; + this.miniToolStrip.Size = new System.Drawing.Size(411, 0); + this.miniToolStrip.TabIndex = 0; // // stToolStrip1 // + this.stToolStrip1.Dock = System.Windows.Forms.DockStyle.Fill; this.stToolStrip1.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; this.stToolStrip1.HighlightSelectedTab = false; this.stToolStrip1.Location = new System.Drawing.Point(0, 0); this.stToolStrip1.Name = "stToolStrip1"; - this.stToolStrip1.Size = new System.Drawing.Size(411, 25); + this.stToolStrip1.Size = new System.Drawing.Size(462, 31); this.stToolStrip1.TabIndex = 0; this.stToolStrip1.Text = "stToolStrip1"; // @@ -70,29 +75,29 @@ this.stPanel1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.stPanel1.Location = new System.Drawing.Point(3, 26); + this.stPanel1.Location = new System.Drawing.Point(0, 31); this.stPanel1.Name = "stPanel1"; - this.stPanel1.Size = new System.Drawing.Size(411, 262); + this.stPanel1.Size = new System.Drawing.Size(462, 298); this.stPanel1.TabIndex = 1; // // PaneEditor // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(411, 288); - this.Controls.Add(this.stPanel3); + this.ClientSize = new System.Drawing.Size(462, 324); + this.Controls.Add(this.stPanel4); + this.Controls.Add(this.stPanel1); this.Name = "PaneEditor"; - this.stPanel3.ResumeLayout(false); - this.stPanel2.ResumeLayout(false); - this.stPanel2.PerformLayout(); + this.stPanel4.ResumeLayout(false); + this.stPanel4.PerformLayout(); this.ResumeLayout(false); } #endregion - private Toolbox.Library.Forms.STPanel stPanel1; - private Toolbox.Library.Forms.STPanel stPanel2; - private Toolbox.Library.Forms.STPanel stPanel3; + private Toolbox.Library.Forms.STPanel stPanel4; + private Toolbox.Library.Forms.STToolStrip miniToolStrip; private Toolbox.Library.Forms.STToolStrip stToolStrip1; + private Toolbox.Library.Forms.STPanel stPanel1; } } diff --git a/File_Format_Library/GUI/BFLYT/Editor/PaneEditor.cs b/File_Format_Library/GUI/BFLYT/Editor/PaneEditor.cs index c97d7e15..5f383e54 100644 --- a/File_Format_Library/GUI/BFLYT/Editor/PaneEditor.cs +++ b/File_Format_Library/GUI/BFLYT/Editor/PaneEditor.cs @@ -21,6 +21,8 @@ namespace LayoutBXLYT InitializeComponent(); stToolStrip1.HighlightSelectedTab = true; stToolStrip1.ItemClicked += tabMenu_SelectedIndexChanged; + + stToolStrip1.CanOverflow = false; } public Dictionary GetTextures() @@ -95,6 +97,11 @@ namespace LayoutBXLYT ((BasePaneEditor)editor).RefreshEditor(); } + public List GetAnimations() + { + return ParentEditor.AnimationFiles; + } + public void LoadMaterial(BxlytMaterial material, LayoutEditor parentEditor) { ActiveMaterial = material; @@ -159,6 +166,7 @@ namespace LayoutBXLYT } AddTab("User Data", LoadUserData); + AddTab("Anims", LoadAnimationData); int tabIndex; if (pane is IPicturePane) @@ -206,6 +214,13 @@ namespace LayoutBXLYT Runtime.LayoutEditor.NullPaneTabIndex = tabIndex; } + public void LoadAnimationData(object sender, EventArgs e) + { + UpdateTabIndex(); + var animEditor = GetActiveEditor(); + animEditor.LoadPane(ActivePane, this); + } + private void LoadUserData(object sender, EventArgs e) { UpdateTabIndex(); @@ -340,5 +355,10 @@ namespace LayoutBXLYT private void tabMenu_SelectedIndexChanged(object sender, EventArgs e) { } + + private void stToolStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e) + { + + } } } diff --git a/File_Format_Library/GUI/BFLYT/Editor/PaneEditor.resx b/File_Format_Library/GUI/BFLYT/Editor/PaneEditor.resx index 3d8e968b..78e6bba4 100644 --- a/File_Format_Library/GUI/BFLYT/Editor/PaneEditor.resx +++ b/File_Format_Library/GUI/BFLYT/Editor/PaneEditor.resx @@ -120,7 +120,7 @@ 17, 17 - + 17, 17 \ No newline at end of file diff --git a/File_Format_Library/GUI/BFLYT/LayoutEditor.cs b/File_Format_Library/GUI/BFLYT/LayoutEditor.cs index c6325124..fce68218 100644 --- a/File_Format_Library/GUI/BFLYT/LayoutEditor.cs +++ b/File_Format_Library/GUI/BFLYT/LayoutEditor.cs @@ -431,10 +431,14 @@ namespace LayoutBXLYT public void ShowBxlanEditor(BxlanHeader bxlan) { + LayoutDocked dock = new LayoutDocked(); LayoutAnimEditorBasic editor = new LayoutAnimEditorBasic(); editor.LoadAnim(bxlan, ActiveLayout); editor.OnPropertyChanged += AnimPropertyChanged; - editor.Show(this); + editor.Dock = DockStyle.Fill; + dock.Controls.Add(editor); + + dock.Show(this); /* if (LayoutAnimEditor != null) { LayoutAnimEditor.LoadFile(bxlan.GetGenericAnimation()); diff --git a/File_Format_Library/GUI/GFBMDL/GFLXMaterialEditor.Designer.cs b/File_Format_Library/GUI/GFBMDL/GFLXMaterialEditor.Designer.cs index 82eff5e1..ab4f33a0 100644 --- a/File_Format_Library/GUI/GFBMDL/GFLXMaterialEditor.Designer.cs +++ b/File_Format_Library/GUI/GFBMDL/GFLXMaterialEditor.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(GFLXMaterialEditor)); this.stTabControl1 = new Toolbox.Library.Forms.STTabControl(); this.tabPage1 = new System.Windows.Forms.TabPage(); this.stPanel1 = new Toolbox.Library.Forms.STPanel(); @@ -37,35 +36,56 @@ this.listViewCustom1 = new Toolbox.Library.Forms.ListViewCustom(); this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.stDropDownPanel2 = new Toolbox.Library.Forms.STDropDownPanel(); - this.stLabel2 = new Toolbox.Library.Forms.STLabel(); - this.stTextBox2 = new Toolbox.Library.Forms.STTextBox(); - this.stLabel1 = new Toolbox.Library.Forms.STLabel(); - this.stTextBox1 = new Toolbox.Library.Forms.STTextBox(); - this.tabPage2 = new System.Windows.Forms.TabPage(); - this.pictureBoxCustom1 = new Toolbox.Library.Forms.PictureBoxCustom(); - this.stLabel3 = new Toolbox.Library.Forms.STLabel(); - this.stLabel4 = new Toolbox.Library.Forms.STLabel(); - this.stComboBox1 = new Toolbox.Library.Forms.STComboBox(); - this.stComboBox2 = new Toolbox.Library.Forms.STComboBox(); - this.barSlider1 = new BarSlider.BarSlider(); - this.barSlider2 = new BarSlider.BarSlider(); - this.barSlider3 = new BarSlider.BarSlider(); - this.barSlider4 = new BarSlider.BarSlider(); + this.stPanel3 = new Toolbox.Library.Forms.STPanel(); + this.stPanel5 = new Toolbox.Library.Forms.STPanel(); + this.uvViewport1 = new Toolbox.Library.Forms.UVViewport(); + this.splitter1 = new System.Windows.Forms.Splitter(); + this.stPanel4 = new Toolbox.Library.Forms.STPanel(); + this.stTabControl2 = new Toolbox.Library.Forms.STTabControl(); + this.TransformTabPage = new System.Windows.Forms.TabPage(); + this.stPanel6 = new Toolbox.Library.Forms.STPanel(); + this.transformParamTB = new Toolbox.Library.Forms.STTextBox(); + this.translateYUD = new BarSlider.BarSlider(); + this.translateXUD = new BarSlider.BarSlider(); + this.scaleYUD = new BarSlider.BarSlider(); + this.scaleXUD = new BarSlider.BarSlider(); this.stPanel2 = new Toolbox.Library.Forms.STPanel(); + this.ParamsTabPage = new System.Windows.Forms.TabPage(); + this.stTextBox2 = new Toolbox.Library.Forms.STTextBox(); + this.stTextBox1 = new Toolbox.Library.Forms.STTextBox(); + this.param4CB = new BarSlider.BarSlider(); + this.param2CB = new BarSlider.BarSlider(); + this.param3CB = new BarSlider.BarSlider(); + this.param1CB = new BarSlider.BarSlider(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.tabPage3 = new System.Windows.Forms.TabPage(); + this.stPanel7 = new Toolbox.Library.Forms.STPanel(); + this.param5CB = new BarSlider.BarSlider(); + this.param9CB = new BarSlider.BarSlider(); + this.param8CB = new BarSlider.BarSlider(); + this.param6CB = new BarSlider.BarSlider(); + this.param7CB = new BarSlider.BarSlider(); this.stTabControl1.SuspendLayout(); this.tabPage1.SuspendLayout(); this.stPanel1.SuspendLayout(); this.stFlowLayoutPanel1.SuspendLayout(); this.stDropDownPanel1.SuspendLayout(); this.stDropDownPanel2.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBoxCustom1)).BeginInit(); - this.stPanel2.SuspendLayout(); + this.stPanel3.SuspendLayout(); + this.stPanel5.SuspendLayout(); + this.stPanel4.SuspendLayout(); + this.stTabControl2.SuspendLayout(); + this.TransformTabPage.SuspendLayout(); + this.stPanel6.SuspendLayout(); + this.ParamsTabPage.SuspendLayout(); + this.tabPage3.SuspendLayout(); this.SuspendLayout(); // // stTabControl1 // this.stTabControl1.Controls.Add(this.tabPage1); this.stTabControl1.Controls.Add(this.tabPage2); + this.stTabControl1.Controls.Add(this.tabPage3); this.stTabControl1.Dock = System.Windows.Forms.DockStyle.Fill; this.stTabControl1.Location = new System.Drawing.Point(0, 0); this.stTabControl1.myBackColor = System.Drawing.Color.Empty; @@ -73,6 +93,7 @@ this.stTabControl1.SelectedIndex = 0; this.stTabControl1.Size = new System.Drawing.Size(575, 769); this.stTabControl1.TabIndex = 0; + this.stTabControl1.SelectedIndexChanged += new System.EventHandler(this.stTabControl1_SelectedIndexChanged); // // tabPage1 // @@ -99,7 +120,7 @@ this.stFlowLayoutPanel1.Controls.Add(this.stDropDownPanel1); this.stFlowLayoutPanel1.Controls.Add(this.stDropDownPanel2); this.stFlowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.stFlowLayoutPanel1.FixedHeight = false; + this.stFlowLayoutPanel1.FixedHeight = true; this.stFlowLayoutPanel1.FixedWidth = true; this.stFlowLayoutPanel1.Location = new System.Drawing.Point(0, 0); this.stFlowLayoutPanel1.Margin = new System.Windows.Forms.Padding(0); @@ -151,16 +172,7 @@ // stDropDownPanel2 // this.stDropDownPanel2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; - this.stDropDownPanel2.Controls.Add(this.stPanel2); - this.stDropDownPanel2.Controls.Add(this.stComboBox2); - this.stDropDownPanel2.Controls.Add(this.stComboBox1); - this.stDropDownPanel2.Controls.Add(this.stLabel4); - this.stDropDownPanel2.Controls.Add(this.stLabel3); - this.stDropDownPanel2.Controls.Add(this.pictureBoxCustom1); - this.stDropDownPanel2.Controls.Add(this.stLabel2); - this.stDropDownPanel2.Controls.Add(this.stTextBox2); - this.stDropDownPanel2.Controls.Add(this.stLabel1); - this.stDropDownPanel2.Controls.Add(this.stTextBox1); + this.stDropDownPanel2.Controls.Add(this.stPanel3); this.stDropDownPanel2.ExpandedHeight = 0; this.stDropDownPanel2.IsExpanded = true; this.stDropDownPanel2.Location = new System.Drawing.Point(0, 207); @@ -174,284 +186,735 @@ this.stDropDownPanel2.Size = new System.Drawing.Size(561, 495); this.stDropDownPanel2.TabIndex = 1; // - // stLabel2 + // stPanel3 // - this.stLabel2.AutoSize = true; - this.stLabel2.Location = new System.Drawing.Point(14, 62); - this.stLabel2.Name = "stLabel2"; - this.stLabel2.Size = new System.Drawing.Size(38, 13); - this.stLabel2.TabIndex = 4; - this.stLabel2.Text = "Effect:"; + this.stPanel3.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.stPanel3.Controls.Add(this.stPanel5); + this.stPanel3.Controls.Add(this.splitter1); + this.stPanel3.Controls.Add(this.stPanel4); + this.stPanel3.Location = new System.Drawing.Point(3, 28); + this.stPanel3.Name = "stPanel3"; + this.stPanel3.Size = new System.Drawing.Size(555, 467); + this.stPanel3.TabIndex = 15; + // + // stPanel5 + // + this.stPanel5.Controls.Add(this.uvViewport1); + this.stPanel5.Dock = System.Windows.Forms.DockStyle.Fill; + this.stPanel5.Location = new System.Drawing.Point(172, 0); + this.stPanel5.Name = "stPanel5"; + this.stPanel5.Size = new System.Drawing.Size(383, 467); + this.stPanel5.TabIndex = 17; + // + // uvViewport1 + // + this.uvViewport1.ActiveTextureMap = null; + this.uvViewport1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.uvViewport1.Location = new System.Drawing.Point(-1, 0); + this.uvViewport1.Name = "uvViewport1"; + this.uvViewport1.Size = new System.Drawing.Size(381, 464); + this.uvViewport1.TabIndex = 14; + this.uvViewport1.UseGrid = true; + this.uvViewport1.UseOrtho = true; + // + // splitter1 + // + this.splitter1.Location = new System.Drawing.Point(169, 0); + this.splitter1.Name = "splitter1"; + this.splitter1.Size = new System.Drawing.Size(3, 467); + this.splitter1.TabIndex = 16; + this.splitter1.TabStop = false; + // + // stPanel4 + // + this.stPanel4.Controls.Add(this.stTabControl2); + this.stPanel4.Dock = System.Windows.Forms.DockStyle.Left; + this.stPanel4.Location = new System.Drawing.Point(0, 0); + this.stPanel4.Name = "stPanel4"; + this.stPanel4.Size = new System.Drawing.Size(169, 467); + this.stPanel4.TabIndex = 15; + // + // stTabControl2 + // + this.stTabControl2.Controls.Add(this.ParamsTabPage); + this.stTabControl2.Controls.Add(this.TransformTabPage); + this.stTabControl2.Dock = System.Windows.Forms.DockStyle.Fill; + this.stTabControl2.Location = new System.Drawing.Point(0, 0); + this.stTabControl2.myBackColor = System.Drawing.Color.Empty; + this.stTabControl2.Name = "stTabControl2"; + this.stTabControl2.SelectedIndex = 0; + this.stTabControl2.Size = new System.Drawing.Size(169, 467); + this.stTabControl2.TabIndex = 17; + // + // TransformTabPage + // + this.TransformTabPage.Controls.Add(this.stPanel6); + this.TransformTabPage.Controls.Add(this.stPanel2); + this.TransformTabPage.Location = new System.Drawing.Point(4, 25); + this.TransformTabPage.Name = "TransformTabPage"; + this.TransformTabPage.Padding = new System.Windows.Forms.Padding(3); + this.TransformTabPage.Size = new System.Drawing.Size(161, 438); + this.TransformTabPage.TabIndex = 0; + this.TransformTabPage.Text = "SRT"; + this.TransformTabPage.UseVisualStyleBackColor = true; + // + // stPanel6 + // + this.stPanel6.Controls.Add(this.transformParamTB); + this.stPanel6.Controls.Add(this.translateYUD); + this.stPanel6.Controls.Add(this.translateXUD); + this.stPanel6.Controls.Add(this.scaleYUD); + this.stPanel6.Controls.Add(this.scaleXUD); + this.stPanel6.Dock = System.Windows.Forms.DockStyle.Fill; + this.stPanel6.Location = new System.Drawing.Point(3, 3); + this.stPanel6.Name = "stPanel6"; + this.stPanel6.Size = new System.Drawing.Size(155, 432); + this.stPanel6.TabIndex = 17; + // + // transformParamTB + // + this.transformParamTB.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.transformParamTB.Location = new System.Drawing.Point(3, 3); + this.transformParamTB.Name = "transformParamTB"; + this.transformParamTB.Size = new System.Drawing.Size(149, 20); + this.transformParamTB.TabIndex = 17; + // + // translateYUD + // + this.translateYUD.ActiveEditColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40))))); + this.translateYUD.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50))))); + this.translateYUD.BarInnerColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.translateYUD.BarPenColorBottom = System.Drawing.Color.Empty; + this.translateYUD.BarPenColorMiddle = System.Drawing.Color.Empty; + this.translateYUD.BarPenColorTop = System.Drawing.Color.Empty; + this.translateYUD.BorderRoundRectSize = new System.Drawing.Size(32, 32); + this.translateYUD.DataType = null; + this.translateYUD.DrawSemitransparentThumb = false; + this.translateYUD.ElapsedInnerColor = System.Drawing.Color.FromArgb(((int)(((byte)(83)))), ((int)(((byte)(121)))), ((int)(((byte)(180))))); + this.translateYUD.ElapsedPenColorBottom = System.Drawing.Color.Empty; + this.translateYUD.ElapsedPenColorMiddle = System.Drawing.Color.Empty; + this.translateYUD.ElapsedPenColorTop = System.Drawing.Color.Empty; + this.translateYUD.Font = new System.Drawing.Font("Microsoft Sans Serif", 8F); + this.translateYUD.IncrementAmount = 0.01F; + this.translateYUD.InputName = "Translate Y"; + this.translateYUD.LargeChange = 5F; + this.translateYUD.Location = new System.Drawing.Point(3, 25); + this.translateYUD.Maximum = 100F; + this.translateYUD.Minimum = 0F; + this.translateYUD.Name = "translateYUD"; + this.translateYUD.Precision = 0.01F; + this.translateYUD.ScaleDivisions = 1; + this.translateYUD.ScaleSubDivisions = 2; + this.translateYUD.ShowDivisionsText = false; + this.translateYUD.ShowSmallScale = false; + this.translateYUD.Size = new System.Drawing.Size(149, 25); + this.translateYUD.SmallChange = 1F; + this.translateYUD.TabIndex = 14; + this.translateYUD.Text = "barSlider6"; + this.translateYUD.ThumbInnerColor = System.Drawing.Color.Empty; + this.translateYUD.ThumbPenColor = System.Drawing.Color.Empty; + this.translateYUD.ThumbRoundRectSize = new System.Drawing.Size(1, 1); + this.translateYUD.ThumbSize = new System.Drawing.Size(1, 1); + this.translateYUD.TickAdd = 0F; + this.translateYUD.TickColor = System.Drawing.Color.White; + this.translateYUD.TickDivide = 0F; + this.translateYUD.TickStyle = System.Windows.Forms.TickStyle.None; + this.translateYUD.UseInterlapsedBar = true; + this.translateYUD.Value = 30F; + // + // translateXUD + // + this.translateXUD.ActiveEditColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40))))); + this.translateXUD.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50))))); + this.translateXUD.BarInnerColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.translateXUD.BarPenColorBottom = System.Drawing.Color.Empty; + this.translateXUD.BarPenColorMiddle = System.Drawing.Color.Empty; + this.translateXUD.BarPenColorTop = System.Drawing.Color.Empty; + this.translateXUD.BorderRoundRectSize = new System.Drawing.Size(32, 32); + this.translateXUD.DataType = null; + this.translateXUD.DrawSemitransparentThumb = false; + this.translateXUD.ElapsedInnerColor = System.Drawing.Color.FromArgb(((int)(((byte)(83)))), ((int)(((byte)(121)))), ((int)(((byte)(180))))); + this.translateXUD.ElapsedPenColorBottom = System.Drawing.Color.Empty; + this.translateXUD.ElapsedPenColorMiddle = System.Drawing.Color.Empty; + this.translateXUD.ElapsedPenColorTop = System.Drawing.Color.Empty; + this.translateXUD.Font = new System.Drawing.Font("Microsoft Sans Serif", 8F); + this.translateXUD.IncrementAmount = 0.01F; + this.translateXUD.InputName = "Translate X"; + this.translateXUD.LargeChange = 5F; + this.translateXUD.Location = new System.Drawing.Point(3, 51); + this.translateXUD.Maximum = 100F; + this.translateXUD.Minimum = 0F; + this.translateXUD.Name = "translateXUD"; + this.translateXUD.Precision = 0.01F; + this.translateXUD.ScaleDivisions = 1; + this.translateXUD.ScaleSubDivisions = 2; + this.translateXUD.ShowDivisionsText = false; + this.translateXUD.ShowSmallScale = false; + this.translateXUD.Size = new System.Drawing.Size(149, 25); + this.translateXUD.SmallChange = 1F; + this.translateXUD.TabIndex = 13; + this.translateXUD.Text = "barSlider5"; + this.translateXUD.ThumbInnerColor = System.Drawing.Color.Empty; + this.translateXUD.ThumbPenColor = System.Drawing.Color.Empty; + this.translateXUD.ThumbRoundRectSize = new System.Drawing.Size(1, 1); + this.translateXUD.ThumbSize = new System.Drawing.Size(1, 1); + this.translateXUD.TickAdd = 0F; + this.translateXUD.TickColor = System.Drawing.Color.White; + this.translateXUD.TickDivide = 0F; + this.translateXUD.TickStyle = System.Windows.Forms.TickStyle.None; + this.translateXUD.UseInterlapsedBar = true; + this.translateXUD.Value = 30F; + // + // scaleYUD + // + this.scaleYUD.ActiveEditColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40))))); + this.scaleYUD.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50))))); + this.scaleYUD.BarInnerColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.scaleYUD.BarPenColorBottom = System.Drawing.Color.Empty; + this.scaleYUD.BarPenColorMiddle = System.Drawing.Color.Empty; + this.scaleYUD.BarPenColorTop = System.Drawing.Color.Empty; + this.scaleYUD.BorderRoundRectSize = new System.Drawing.Size(32, 32); + this.scaleYUD.DataType = null; + this.scaleYUD.DrawSemitransparentThumb = false; + this.scaleYUD.ElapsedInnerColor = System.Drawing.Color.FromArgb(((int)(((byte)(83)))), ((int)(((byte)(121)))), ((int)(((byte)(180))))); + this.scaleYUD.ElapsedPenColorBottom = System.Drawing.Color.Empty; + this.scaleYUD.ElapsedPenColorMiddle = System.Drawing.Color.Empty; + this.scaleYUD.ElapsedPenColorTop = System.Drawing.Color.Empty; + this.scaleYUD.Font = new System.Drawing.Font("Microsoft Sans Serif", 8F); + this.scaleYUD.IncrementAmount = 0.01F; + this.scaleYUD.InputName = "Scale Y"; + this.scaleYUD.LargeChange = 5F; + this.scaleYUD.Location = new System.Drawing.Point(3, 103); + this.scaleYUD.Maximum = 100F; + this.scaleYUD.Minimum = 0F; + this.scaleYUD.Name = "scaleYUD"; + this.scaleYUD.Precision = 0.01F; + this.scaleYUD.ScaleDivisions = 1; + this.scaleYUD.ScaleSubDivisions = 2; + this.scaleYUD.ShowDivisionsText = false; + this.scaleYUD.ShowSmallScale = false; + this.scaleYUD.Size = new System.Drawing.Size(149, 25); + this.scaleYUD.SmallChange = 1F; + this.scaleYUD.TabIndex = 16; + this.scaleYUD.Text = "barSlider7"; + this.scaleYUD.ThumbInnerColor = System.Drawing.Color.Empty; + this.scaleYUD.ThumbPenColor = System.Drawing.Color.Empty; + this.scaleYUD.ThumbRoundRectSize = new System.Drawing.Size(1, 1); + this.scaleYUD.ThumbSize = new System.Drawing.Size(1, 1); + this.scaleYUD.TickAdd = 0F; + this.scaleYUD.TickColor = System.Drawing.Color.White; + this.scaleYUD.TickDivide = 0F; + this.scaleYUD.TickStyle = System.Windows.Forms.TickStyle.None; + this.scaleYUD.UseInterlapsedBar = true; + this.scaleYUD.Value = 30F; + this.scaleYUD.Scroll += new System.Windows.Forms.ScrollEventHandler(this.barSlider7_Scroll); + // + // scaleXUD + // + this.scaleXUD.ActiveEditColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40))))); + this.scaleXUD.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50))))); + this.scaleXUD.BarInnerColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.scaleXUD.BarPenColorBottom = System.Drawing.Color.Empty; + this.scaleXUD.BarPenColorMiddle = System.Drawing.Color.Empty; + this.scaleXUD.BarPenColorTop = System.Drawing.Color.Empty; + this.scaleXUD.BorderRoundRectSize = new System.Drawing.Size(32, 32); + this.scaleXUD.DataType = null; + this.scaleXUD.DrawSemitransparentThumb = false; + this.scaleXUD.ElapsedInnerColor = System.Drawing.Color.FromArgb(((int)(((byte)(83)))), ((int)(((byte)(121)))), ((int)(((byte)(180))))); + this.scaleXUD.ElapsedPenColorBottom = System.Drawing.Color.Empty; + this.scaleXUD.ElapsedPenColorMiddle = System.Drawing.Color.Empty; + this.scaleXUD.ElapsedPenColorTop = System.Drawing.Color.Empty; + this.scaleXUD.Font = new System.Drawing.Font("Microsoft Sans Serif", 8F); + this.scaleXUD.IncrementAmount = 0.01F; + this.scaleXUD.InputName = "Scale X"; + this.scaleXUD.LargeChange = 5F; + this.scaleXUD.Location = new System.Drawing.Point(3, 77); + this.scaleXUD.Maximum = 100F; + this.scaleXUD.Minimum = 0F; + this.scaleXUD.Name = "scaleXUD"; + this.scaleXUD.Precision = 0.01F; + this.scaleXUD.ScaleDivisions = 1; + this.scaleXUD.ScaleSubDivisions = 2; + this.scaleXUD.ShowDivisionsText = false; + this.scaleXUD.ShowSmallScale = false; + this.scaleXUD.Size = new System.Drawing.Size(149, 25); + this.scaleXUD.SmallChange = 1F; + this.scaleXUD.TabIndex = 15; + this.scaleXUD.Text = "barSlider8"; + this.scaleXUD.ThumbInnerColor = System.Drawing.Color.Empty; + this.scaleXUD.ThumbPenColor = System.Drawing.Color.Empty; + this.scaleXUD.ThumbRoundRectSize = new System.Drawing.Size(1, 1); + this.scaleXUD.ThumbSize = new System.Drawing.Size(1, 1); + this.scaleXUD.TickAdd = 0F; + this.scaleXUD.TickColor = System.Drawing.Color.White; + this.scaleXUD.TickDivide = 0F; + this.scaleXUD.TickStyle = System.Windows.Forms.TickStyle.None; + this.scaleXUD.UseInterlapsedBar = true; + this.scaleXUD.Value = 30F; + // + // stPanel2 + // + this.stPanel2.Location = new System.Drawing.Point(90, 25); + this.stPanel2.Name = "stPanel2"; + this.stPanel2.Size = new System.Drawing.Size(8, 8); + this.stPanel2.TabIndex = 0; + // + // ParamsTabPage + // + this.ParamsTabPage.Controls.Add(this.param9CB); + this.ParamsTabPage.Controls.Add(this.param8CB); + this.ParamsTabPage.Controls.Add(this.param6CB); + this.ParamsTabPage.Controls.Add(this.param7CB); + this.ParamsTabPage.Controls.Add(this.param5CB); + this.ParamsTabPage.Controls.Add(this.stTextBox2); + this.ParamsTabPage.Controls.Add(this.stTextBox1); + this.ParamsTabPage.Controls.Add(this.param4CB); + this.ParamsTabPage.Controls.Add(this.param2CB); + this.ParamsTabPage.Controls.Add(this.param3CB); + this.ParamsTabPage.Controls.Add(this.param1CB); + this.ParamsTabPage.Location = new System.Drawing.Point(4, 25); + this.ParamsTabPage.Name = "ParamsTabPage"; + this.ParamsTabPage.Padding = new System.Windows.Forms.Padding(3); + this.ParamsTabPage.Size = new System.Drawing.Size(161, 438); + this.ParamsTabPage.TabIndex = 1; + this.ParamsTabPage.Text = "Params"; + this.ParamsTabPage.UseVisualStyleBackColor = true; // // stTextBox2 // this.stTextBox2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.stTextBox2.Location = new System.Drawing.Point(67, 60); + this.stTextBox2.Location = new System.Drawing.Point(6, 32); this.stTextBox2.Name = "stTextBox2"; - this.stTextBox2.Size = new System.Drawing.Size(208, 20); - this.stTextBox2.TabIndex = 3; - // - // stLabel1 - // - this.stLabel1.AutoSize = true; - this.stLabel1.Location = new System.Drawing.Point(14, 36); - this.stLabel1.Name = "stLabel1"; - this.stLabel1.Size = new System.Drawing.Size(38, 13); - this.stLabel1.TabIndex = 2; - this.stLabel1.Text = "Name:"; + this.stTextBox2.Size = new System.Drawing.Size(149, 20); + this.stTextBox2.TabIndex = 14; // // stTextBox1 // this.stTextBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; - this.stTextBox1.Location = new System.Drawing.Point(67, 34); + this.stTextBox1.Location = new System.Drawing.Point(6, 6); this.stTextBox1.Name = "stTextBox1"; - this.stTextBox1.Size = new System.Drawing.Size(208, 20); - this.stTextBox1.TabIndex = 1; + this.stTextBox1.Size = new System.Drawing.Size(149, 20); + this.stTextBox1.TabIndex = 13; + // + // param4CB + // + this.param4CB.ActiveEditColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40))))); + this.param4CB.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50))))); + this.param4CB.BarInnerColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.param4CB.BarPenColorBottom = System.Drawing.Color.Empty; + this.param4CB.BarPenColorMiddle = System.Drawing.Color.Empty; + this.param4CB.BarPenColorTop = System.Drawing.Color.Empty; + this.param4CB.BorderRoundRectSize = new System.Drawing.Size(32, 32); + this.param4CB.DataType = null; + this.param4CB.DrawSemitransparentThumb = false; + this.param4CB.ElapsedInnerColor = System.Drawing.Color.FromArgb(((int)(((byte)(83)))), ((int)(((byte)(121)))), ((int)(((byte)(180))))); + this.param4CB.ElapsedPenColorBottom = System.Drawing.Color.Empty; + this.param4CB.ElapsedPenColorMiddle = System.Drawing.Color.Empty; + this.param4CB.ElapsedPenColorTop = System.Drawing.Color.Empty; + this.param4CB.Font = new System.Drawing.Font("Microsoft Sans Serif", 8F); + this.param4CB.IncrementAmount = 0.01F; + this.param4CB.InputName = "Param4"; + this.param4CB.LargeChange = 5F; + this.param4CB.Location = new System.Drawing.Point(6, 156); + this.param4CB.Maximum = 100F; + this.param4CB.Minimum = 0F; + this.param4CB.Name = "param4CB"; + this.param4CB.Precision = 0.01F; + this.param4CB.ScaleDivisions = 1; + this.param4CB.ScaleSubDivisions = 2; + this.param4CB.ShowDivisionsText = false; + this.param4CB.ShowSmallScale = false; + this.param4CB.Size = new System.Drawing.Size(149, 25); + this.param4CB.SmallChange = 1F; + this.param4CB.TabIndex = 12; + this.param4CB.Text = "barSlider3"; + this.param4CB.ThumbInnerColor = System.Drawing.Color.Empty; + this.param4CB.ThumbPenColor = System.Drawing.Color.Empty; + this.param4CB.ThumbRoundRectSize = new System.Drawing.Size(1, 1); + this.param4CB.ThumbSize = new System.Drawing.Size(1, 1); + this.param4CB.TickAdd = 0F; + this.param4CB.TickColor = System.Drawing.Color.White; + this.param4CB.TickDivide = 0F; + this.param4CB.TickStyle = System.Windows.Forms.TickStyle.None; + this.param4CB.UseInterlapsedBar = true; + this.param4CB.Value = 30F; + // + // param2CB + // + this.param2CB.ActiveEditColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40))))); + this.param2CB.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50))))); + this.param2CB.BarInnerColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.param2CB.BarPenColorBottom = System.Drawing.Color.Empty; + this.param2CB.BarPenColorMiddle = System.Drawing.Color.Empty; + this.param2CB.BarPenColorTop = System.Drawing.Color.Empty; + this.param2CB.BorderRoundRectSize = new System.Drawing.Size(32, 32); + this.param2CB.DataType = null; + this.param2CB.DrawSemitransparentThumb = false; + this.param2CB.ElapsedInnerColor = System.Drawing.Color.FromArgb(((int)(((byte)(83)))), ((int)(((byte)(121)))), ((int)(((byte)(180))))); + this.param2CB.ElapsedPenColorBottom = System.Drawing.Color.Empty; + this.param2CB.ElapsedPenColorMiddle = System.Drawing.Color.Empty; + this.param2CB.ElapsedPenColorTop = System.Drawing.Color.Empty; + this.param2CB.Font = new System.Drawing.Font("Microsoft Sans Serif", 8F); + this.param2CB.IncrementAmount = 0.01F; + this.param2CB.InputName = "Param2"; + this.param2CB.LargeChange = 5F; + this.param2CB.Location = new System.Drawing.Point(6, 94); + this.param2CB.Maximum = 100F; + this.param2CB.Minimum = 0F; + this.param2CB.Name = "param2CB"; + this.param2CB.Precision = 0.01F; + this.param2CB.ScaleDivisions = 1; + this.param2CB.ScaleSubDivisions = 2; + this.param2CB.ShowDivisionsText = false; + this.param2CB.ShowSmallScale = false; + this.param2CB.Size = new System.Drawing.Size(149, 25); + this.param2CB.SmallChange = 1F; + this.param2CB.TabIndex = 10; + this.param2CB.Text = "barSlider2"; + this.param2CB.ThumbInnerColor = System.Drawing.Color.Empty; + this.param2CB.ThumbPenColor = System.Drawing.Color.Empty; + this.param2CB.ThumbRoundRectSize = new System.Drawing.Size(1, 1); + this.param2CB.ThumbSize = new System.Drawing.Size(1, 1); + this.param2CB.TickAdd = 0F; + this.param2CB.TickColor = System.Drawing.Color.White; + this.param2CB.TickDivide = 0F; + this.param2CB.TickStyle = System.Windows.Forms.TickStyle.None; + this.param2CB.UseInterlapsedBar = true; + this.param2CB.Value = 30F; + // + // param3CB + // + this.param3CB.ActiveEditColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40))))); + this.param3CB.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50))))); + this.param3CB.BarInnerColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.param3CB.BarPenColorBottom = System.Drawing.Color.Empty; + this.param3CB.BarPenColorMiddle = System.Drawing.Color.Empty; + this.param3CB.BarPenColorTop = System.Drawing.Color.Empty; + this.param3CB.BorderRoundRectSize = new System.Drawing.Size(32, 32); + this.param3CB.DataType = null; + this.param3CB.DrawSemitransparentThumb = false; + this.param3CB.ElapsedInnerColor = System.Drawing.Color.FromArgb(((int)(((byte)(83)))), ((int)(((byte)(121)))), ((int)(((byte)(180))))); + this.param3CB.ElapsedPenColorBottom = System.Drawing.Color.Empty; + this.param3CB.ElapsedPenColorMiddle = System.Drawing.Color.Empty; + this.param3CB.ElapsedPenColorTop = System.Drawing.Color.Empty; + this.param3CB.Font = new System.Drawing.Font("Microsoft Sans Serif", 8F); + this.param3CB.IncrementAmount = 0.01F; + this.param3CB.InputName = "Param3"; + this.param3CB.LargeChange = 5F; + this.param3CB.Location = new System.Drawing.Point(6, 125); + this.param3CB.Maximum = 100F; + this.param3CB.Minimum = 0F; + this.param3CB.Name = "param3CB"; + this.param3CB.Precision = 0.01F; + this.param3CB.ScaleDivisions = 1; + this.param3CB.ScaleSubDivisions = 2; + this.param3CB.ShowDivisionsText = false; + this.param3CB.ShowSmallScale = false; + this.param3CB.Size = new System.Drawing.Size(149, 25); + this.param3CB.SmallChange = 1F; + this.param3CB.TabIndex = 11; + this.param3CB.Text = "barSlider4"; + this.param3CB.ThumbInnerColor = System.Drawing.Color.Empty; + this.param3CB.ThumbPenColor = System.Drawing.Color.Empty; + this.param3CB.ThumbRoundRectSize = new System.Drawing.Size(1, 1); + this.param3CB.ThumbSize = new System.Drawing.Size(1, 1); + this.param3CB.TickAdd = 0F; + this.param3CB.TickColor = System.Drawing.Color.White; + this.param3CB.TickDivide = 0F; + this.param3CB.TickStyle = System.Windows.Forms.TickStyle.None; + this.param3CB.UseInterlapsedBar = true; + this.param3CB.Value = 30F; + // + // param1CB + // + this.param1CB.ActiveEditColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40))))); + this.param1CB.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50))))); + this.param1CB.BarInnerColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.param1CB.BarPenColorBottom = System.Drawing.Color.Empty; + this.param1CB.BarPenColorMiddle = System.Drawing.Color.Empty; + this.param1CB.BarPenColorTop = System.Drawing.Color.Empty; + this.param1CB.BorderRoundRectSize = new System.Drawing.Size(32, 32); + this.param1CB.DataType = null; + this.param1CB.DrawSemitransparentThumb = false; + this.param1CB.ElapsedInnerColor = System.Drawing.Color.FromArgb(((int)(((byte)(83)))), ((int)(((byte)(121)))), ((int)(((byte)(180))))); + this.param1CB.ElapsedPenColorBottom = System.Drawing.Color.Empty; + this.param1CB.ElapsedPenColorMiddle = System.Drawing.Color.Empty; + this.param1CB.ElapsedPenColorTop = System.Drawing.Color.Empty; + this.param1CB.Font = new System.Drawing.Font("Microsoft Sans Serif", 8F); + this.param1CB.IncrementAmount = 0.01F; + this.param1CB.InputName = "Param1"; + this.param1CB.LargeChange = 5F; + this.param1CB.Location = new System.Drawing.Point(6, 63); + this.param1CB.Maximum = 100F; + this.param1CB.Minimum = 0F; + this.param1CB.Name = "param1CB"; + this.param1CB.Precision = 0.01F; + this.param1CB.ScaleDivisions = 1; + this.param1CB.ScaleSubDivisions = 2; + this.param1CB.ShowDivisionsText = false; + this.param1CB.ShowSmallScale = false; + this.param1CB.Size = new System.Drawing.Size(149, 25); + this.param1CB.SmallChange = 1F; + this.param1CB.TabIndex = 1; + this.param1CB.Text = "barSlider1"; + this.param1CB.ThumbInnerColor = System.Drawing.Color.Empty; + this.param1CB.ThumbPenColor = System.Drawing.Color.Empty; + this.param1CB.ThumbRoundRectSize = new System.Drawing.Size(1, 1); + this.param1CB.ThumbSize = new System.Drawing.Size(1, 1); + this.param1CB.TickAdd = 0F; + this.param1CB.TickColor = System.Drawing.Color.White; + this.param1CB.TickDivide = 0F; + this.param1CB.TickStyle = System.Windows.Forms.TickStyle.None; + this.param1CB.UseInterlapsedBar = true; + this.param1CB.Value = 30F; // // tabPage2 // this.tabPage2.Location = new System.Drawing.Point(4, 25); this.tabPage2.Name = "tabPage2"; this.tabPage2.Padding = new System.Windows.Forms.Padding(3); - this.tabPage2.Size = new System.Drawing.Size(529, 525); + this.tabPage2.Size = new System.Drawing.Size(567, 740); this.tabPage2.TabIndex = 1; this.tabPage2.Text = "Params"; this.tabPage2.UseVisualStyleBackColor = true; // - // pictureBoxCustom1 + // tabPage3 // - this.pictureBoxCustom1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.pictureBoxCustom1.BackColor = System.Drawing.Color.Transparent; - this.pictureBoxCustom1.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pictureBoxCustom1.BackgroundImage"))); - this.pictureBoxCustom1.Location = new System.Drawing.Point(17, 133); - this.pictureBoxCustom1.Name = "pictureBoxCustom1"; - this.pictureBoxCustom1.Size = new System.Drawing.Size(508, 378); - this.pictureBoxCustom1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; - this.pictureBoxCustom1.TabIndex = 5; - this.pictureBoxCustom1.TabStop = false; + this.tabPage3.Controls.Add(this.stPanel7); + this.tabPage3.Location = new System.Drawing.Point(4, 25); + this.tabPage3.Name = "tabPage3"; + this.tabPage3.Padding = new System.Windows.Forms.Padding(3); + this.tabPage3.Size = new System.Drawing.Size(567, 740); + this.tabPage3.TabIndex = 2; + this.tabPage3.Text = "Json Editor"; + this.tabPage3.UseVisualStyleBackColor = true; // - // stLabel3 + // stPanel7 // - this.stLabel3.AutoSize = true; - this.stLabel3.Location = new System.Drawing.Point(292, 36); - this.stLabel3.Name = "stLabel3"; - this.stLabel3.Size = new System.Drawing.Size(74, 13); - this.stLabel3.TabIndex = 6; - this.stLabel3.Text = "Wrap Mode U"; + this.stPanel7.Dock = System.Windows.Forms.DockStyle.Fill; + this.stPanel7.Location = new System.Drawing.Point(3, 3); + this.stPanel7.Name = "stPanel7"; + this.stPanel7.Size = new System.Drawing.Size(561, 734); + this.stPanel7.TabIndex = 0; // - // stLabel4 + // param5CB // - this.stLabel4.AutoSize = true; - this.stLabel4.Location = new System.Drawing.Point(292, 62); - this.stLabel4.Name = "stLabel4"; - this.stLabel4.Size = new System.Drawing.Size(73, 13); - this.stLabel4.TabIndex = 7; - this.stLabel4.Text = "Wrap Mode V"; + this.param5CB.ActiveEditColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40))))); + this.param5CB.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50))))); + this.param5CB.BarInnerColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.param5CB.BarPenColorBottom = System.Drawing.Color.Empty; + this.param5CB.BarPenColorMiddle = System.Drawing.Color.Empty; + this.param5CB.BarPenColorTop = System.Drawing.Color.Empty; + this.param5CB.BorderRoundRectSize = new System.Drawing.Size(32, 32); + this.param5CB.DataType = null; + this.param5CB.DrawSemitransparentThumb = false; + this.param5CB.ElapsedInnerColor = System.Drawing.Color.FromArgb(((int)(((byte)(83)))), ((int)(((byte)(121)))), ((int)(((byte)(180))))); + this.param5CB.ElapsedPenColorBottom = System.Drawing.Color.Empty; + this.param5CB.ElapsedPenColorMiddle = System.Drawing.Color.Empty; + this.param5CB.ElapsedPenColorTop = System.Drawing.Color.Empty; + this.param5CB.Font = new System.Drawing.Font("Microsoft Sans Serif", 8F); + this.param5CB.IncrementAmount = 0.01F; + this.param5CB.InputName = "Param5"; + this.param5CB.LargeChange = 5F; + this.param5CB.Location = new System.Drawing.Point(6, 187); + this.param5CB.Maximum = 100F; + this.param5CB.Minimum = 0F; + this.param5CB.Name = "param5CB"; + this.param5CB.Precision = 0.01F; + this.param5CB.ScaleDivisions = 1; + this.param5CB.ScaleSubDivisions = 2; + this.param5CB.ShowDivisionsText = false; + this.param5CB.ShowSmallScale = false; + this.param5CB.Size = new System.Drawing.Size(149, 25); + this.param5CB.SmallChange = 1F; + this.param5CB.TabIndex = 15; + this.param5CB.Text = "barSlider3"; + this.param5CB.ThumbInnerColor = System.Drawing.Color.Empty; + this.param5CB.ThumbPenColor = System.Drawing.Color.Empty; + this.param5CB.ThumbRoundRectSize = new System.Drawing.Size(1, 1); + this.param5CB.ThumbSize = new System.Drawing.Size(1, 1); + this.param5CB.TickAdd = 0F; + this.param5CB.TickColor = System.Drawing.Color.White; + this.param5CB.TickDivide = 0F; + this.param5CB.TickStyle = System.Windows.Forms.TickStyle.None; + this.param5CB.UseInterlapsedBar = true; + this.param5CB.Value = 30F; // - // stComboBox1 + // param9CB // - this.stComboBox1.BorderColor = System.Drawing.Color.Empty; - this.stComboBox1.BorderStyle = System.Windows.Forms.ButtonBorderStyle.Solid; - this.stComboBox1.ButtonColor = System.Drawing.Color.Empty; - this.stComboBox1.FormattingEnabled = true; - this.stComboBox1.IsReadOnly = false; - this.stComboBox1.Location = new System.Drawing.Point(372, 33); - this.stComboBox1.Name = "stComboBox1"; - this.stComboBox1.Size = new System.Drawing.Size(153, 21); - this.stComboBox1.TabIndex = 8; + this.param9CB.ActiveEditColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40))))); + this.param9CB.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50))))); + this.param9CB.BarInnerColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.param9CB.BarPenColorBottom = System.Drawing.Color.Empty; + this.param9CB.BarPenColorMiddle = System.Drawing.Color.Empty; + this.param9CB.BarPenColorTop = System.Drawing.Color.Empty; + this.param9CB.BorderRoundRectSize = new System.Drawing.Size(32, 32); + this.param9CB.DataType = null; + this.param9CB.DrawSemitransparentThumb = false; + this.param9CB.ElapsedInnerColor = System.Drawing.Color.FromArgb(((int)(((byte)(83)))), ((int)(((byte)(121)))), ((int)(((byte)(180))))); + this.param9CB.ElapsedPenColorBottom = System.Drawing.Color.Empty; + this.param9CB.ElapsedPenColorMiddle = System.Drawing.Color.Empty; + this.param9CB.ElapsedPenColorTop = System.Drawing.Color.Empty; + this.param9CB.Font = new System.Drawing.Font("Microsoft Sans Serif", 8F); + this.param9CB.IncrementAmount = 0.01F; + this.param9CB.InputName = "Param9"; + this.param9CB.LargeChange = 5F; + this.param9CB.Location = new System.Drawing.Point(6, 311); + this.param9CB.Maximum = 100F; + this.param9CB.Minimum = 0F; + this.param9CB.Name = "param9CB"; + this.param9CB.Precision = 0.01F; + this.param9CB.ScaleDivisions = 1; + this.param9CB.ScaleSubDivisions = 2; + this.param9CB.ShowDivisionsText = false; + this.param9CB.ShowSmallScale = false; + this.param9CB.Size = new System.Drawing.Size(149, 25); + this.param9CB.SmallChange = 1F; + this.param9CB.TabIndex = 19; + this.param9CB.Text = "barSlider3"; + this.param9CB.ThumbInnerColor = System.Drawing.Color.Empty; + this.param9CB.ThumbPenColor = System.Drawing.Color.Empty; + this.param9CB.ThumbRoundRectSize = new System.Drawing.Size(1, 1); + this.param9CB.ThumbSize = new System.Drawing.Size(1, 1); + this.param9CB.TickAdd = 0F; + this.param9CB.TickColor = System.Drawing.Color.White; + this.param9CB.TickDivide = 0F; + this.param9CB.TickStyle = System.Windows.Forms.TickStyle.None; + this.param9CB.UseInterlapsedBar = true; + this.param9CB.Value = 30F; // - // stComboBox2 + // param8CB // - this.stComboBox2.BorderColor = System.Drawing.Color.Empty; - this.stComboBox2.BorderStyle = System.Windows.Forms.ButtonBorderStyle.Solid; - this.stComboBox2.ButtonColor = System.Drawing.Color.Empty; - this.stComboBox2.FormattingEnabled = true; - this.stComboBox2.IsReadOnly = false; - this.stComboBox2.Location = new System.Drawing.Point(371, 60); - this.stComboBox2.Name = "stComboBox2"; - this.stComboBox2.Size = new System.Drawing.Size(154, 21); - this.stComboBox2.TabIndex = 9; + this.param8CB.ActiveEditColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40))))); + this.param8CB.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50))))); + this.param8CB.BarInnerColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.param8CB.BarPenColorBottom = System.Drawing.Color.Empty; + this.param8CB.BarPenColorMiddle = System.Drawing.Color.Empty; + this.param8CB.BarPenColorTop = System.Drawing.Color.Empty; + this.param8CB.BorderRoundRectSize = new System.Drawing.Size(32, 32); + this.param8CB.DataType = null; + this.param8CB.DrawSemitransparentThumb = false; + this.param8CB.ElapsedInnerColor = System.Drawing.Color.FromArgb(((int)(((byte)(83)))), ((int)(((byte)(121)))), ((int)(((byte)(180))))); + this.param8CB.ElapsedPenColorBottom = System.Drawing.Color.Empty; + this.param8CB.ElapsedPenColorMiddle = System.Drawing.Color.Empty; + this.param8CB.ElapsedPenColorTop = System.Drawing.Color.Empty; + this.param8CB.Font = new System.Drawing.Font("Microsoft Sans Serif", 8F); + this.param8CB.IncrementAmount = 0.01F; + this.param8CB.InputName = "Param8"; + this.param8CB.LargeChange = 5F; + this.param8CB.Location = new System.Drawing.Point(6, 280); + this.param8CB.Maximum = 100F; + this.param8CB.Minimum = 0F; + this.param8CB.Name = "param8CB"; + this.param8CB.Precision = 0.01F; + this.param8CB.ScaleDivisions = 1; + this.param8CB.ScaleSubDivisions = 2; + this.param8CB.ShowDivisionsText = false; + this.param8CB.ShowSmallScale = false; + this.param8CB.Size = new System.Drawing.Size(149, 25); + this.param8CB.SmallChange = 1F; + this.param8CB.TabIndex = 18; + this.param8CB.Text = "barSlider3"; + this.param8CB.ThumbInnerColor = System.Drawing.Color.Empty; + this.param8CB.ThumbPenColor = System.Drawing.Color.Empty; + this.param8CB.ThumbRoundRectSize = new System.Drawing.Size(1, 1); + this.param8CB.ThumbSize = new System.Drawing.Size(1, 1); + this.param8CB.TickAdd = 0F; + this.param8CB.TickColor = System.Drawing.Color.White; + this.param8CB.TickDivide = 0F; + this.param8CB.TickStyle = System.Windows.Forms.TickStyle.None; + this.param8CB.UseInterlapsedBar = true; + this.param8CB.Value = 30F; // - // barSlider1 + // param6CB // - this.barSlider1.ActiveEditColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40))))); - this.barSlider1.BarInnerColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); - this.barSlider1.BarPenColorBottom = System.Drawing.Color.Empty; - this.barSlider1.BarPenColorMiddle = System.Drawing.Color.Empty; - this.barSlider1.BarPenColorTop = System.Drawing.Color.Empty; - this.barSlider1.BorderRoundRectSize = new System.Drawing.Size(32, 32); - this.barSlider1.DataType = null; - this.barSlider1.DrawSemitransparentThumb = false; - this.barSlider1.ElapsedInnerColor = System.Drawing.Color.FromArgb(((int)(((byte)(83)))), ((int)(((byte)(121)))), ((int)(((byte)(180))))); - this.barSlider1.ElapsedPenColorBottom = System.Drawing.Color.Empty; - this.barSlider1.ElapsedPenColorMiddle = System.Drawing.Color.Empty; - this.barSlider1.ElapsedPenColorTop = System.Drawing.Color.Empty; - this.barSlider1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8F); - this.barSlider1.IncrementAmount = 0.01F; - this.barSlider1.InputName = "Param1"; - this.barSlider1.LargeChange = 5F; - this.barSlider1.Location = new System.Drawing.Point(6, 4); - this.barSlider1.Maximum = 100F; - this.barSlider1.Minimum = 0F; - this.barSlider1.Name = "barSlider1"; - this.barSlider1.Precision = 0.01F; - this.barSlider1.ScaleDivisions = 1; - this.barSlider1.ScaleSubDivisions = 2; - this.barSlider1.ShowDivisionsText = false; - this.barSlider1.ShowSmallScale = false; - this.barSlider1.Size = new System.Drawing.Size(122, 25); - this.barSlider1.SmallChange = 1F; - this.barSlider1.TabIndex = 1; - this.barSlider1.Text = "barSlider1"; - this.barSlider1.ThumbInnerColor = System.Drawing.Color.Empty; - this.barSlider1.ThumbPenColor = System.Drawing.Color.Empty; - this.barSlider1.ThumbRoundRectSize = new System.Drawing.Size(1, 1); - this.barSlider1.ThumbSize = new System.Drawing.Size(1, 1); - this.barSlider1.TickAdd = 0F; - this.barSlider1.TickColor = System.Drawing.Color.White; - this.barSlider1.TickDivide = 0F; - this.barSlider1.TickStyle = System.Windows.Forms.TickStyle.None; - this.barSlider1.UseInterlapsedBar = true; - this.barSlider1.Value = 30F; + this.param6CB.ActiveEditColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40))))); + this.param6CB.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50))))); + this.param6CB.BarInnerColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.param6CB.BarPenColorBottom = System.Drawing.Color.Empty; + this.param6CB.BarPenColorMiddle = System.Drawing.Color.Empty; + this.param6CB.BarPenColorTop = System.Drawing.Color.Empty; + this.param6CB.BorderRoundRectSize = new System.Drawing.Size(32, 32); + this.param6CB.DataType = null; + this.param6CB.DrawSemitransparentThumb = false; + this.param6CB.ElapsedInnerColor = System.Drawing.Color.FromArgb(((int)(((byte)(83)))), ((int)(((byte)(121)))), ((int)(((byte)(180))))); + this.param6CB.ElapsedPenColorBottom = System.Drawing.Color.Empty; + this.param6CB.ElapsedPenColorMiddle = System.Drawing.Color.Empty; + this.param6CB.ElapsedPenColorTop = System.Drawing.Color.Empty; + this.param6CB.Font = new System.Drawing.Font("Microsoft Sans Serif", 8F); + this.param6CB.IncrementAmount = 0.01F; + this.param6CB.InputName = "Param6"; + this.param6CB.LargeChange = 5F; + this.param6CB.Location = new System.Drawing.Point(6, 218); + this.param6CB.Maximum = 100F; + this.param6CB.Minimum = 0F; + this.param6CB.Name = "param6CB"; + this.param6CB.Precision = 0.01F; + this.param6CB.ScaleDivisions = 1; + this.param6CB.ScaleSubDivisions = 2; + this.param6CB.ShowDivisionsText = false; + this.param6CB.ShowSmallScale = false; + this.param6CB.Size = new System.Drawing.Size(149, 25); + this.param6CB.SmallChange = 1F; + this.param6CB.TabIndex = 16; + this.param6CB.Text = "barSlider2"; + this.param6CB.ThumbInnerColor = System.Drawing.Color.Empty; + this.param6CB.ThumbPenColor = System.Drawing.Color.Empty; + this.param6CB.ThumbRoundRectSize = new System.Drawing.Size(1, 1); + this.param6CB.ThumbSize = new System.Drawing.Size(1, 1); + this.param6CB.TickAdd = 0F; + this.param6CB.TickColor = System.Drawing.Color.White; + this.param6CB.TickDivide = 0F; + this.param6CB.TickStyle = System.Windows.Forms.TickStyle.None; + this.param6CB.UseInterlapsedBar = true; + this.param6CB.Value = 30F; // - // barSlider2 + // param7CB // - this.barSlider2.ActiveEditColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40))))); - this.barSlider2.BarInnerColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); - this.barSlider2.BarPenColorBottom = System.Drawing.Color.Empty; - this.barSlider2.BarPenColorMiddle = System.Drawing.Color.Empty; - this.barSlider2.BarPenColorTop = System.Drawing.Color.Empty; - this.barSlider2.BorderRoundRectSize = new System.Drawing.Size(32, 32); - this.barSlider2.DataType = null; - this.barSlider2.DrawSemitransparentThumb = false; - this.barSlider2.ElapsedInnerColor = System.Drawing.Color.FromArgb(((int)(((byte)(83)))), ((int)(((byte)(121)))), ((int)(((byte)(180))))); - this.barSlider2.ElapsedPenColorBottom = System.Drawing.Color.Empty; - this.barSlider2.ElapsedPenColorMiddle = System.Drawing.Color.Empty; - this.barSlider2.ElapsedPenColorTop = System.Drawing.Color.Empty; - this.barSlider2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8F); - this.barSlider2.IncrementAmount = 0.01F; - this.barSlider2.InputName = "Param2"; - this.barSlider2.LargeChange = 5F; - this.barSlider2.Location = new System.Drawing.Point(134, 4); - this.barSlider2.Maximum = 100F; - this.barSlider2.Minimum = 0F; - this.barSlider2.Name = "barSlider2"; - this.barSlider2.Precision = 0.01F; - this.barSlider2.ScaleDivisions = 1; - this.barSlider2.ScaleSubDivisions = 2; - this.barSlider2.ShowDivisionsText = false; - this.barSlider2.ShowSmallScale = false; - this.barSlider2.Size = new System.Drawing.Size(122, 25); - this.barSlider2.SmallChange = 1F; - this.barSlider2.TabIndex = 10; - this.barSlider2.Text = "barSlider2"; - this.barSlider2.ThumbInnerColor = System.Drawing.Color.Empty; - this.barSlider2.ThumbPenColor = System.Drawing.Color.Empty; - this.barSlider2.ThumbRoundRectSize = new System.Drawing.Size(1, 1); - this.barSlider2.ThumbSize = new System.Drawing.Size(1, 1); - this.barSlider2.TickAdd = 0F; - this.barSlider2.TickColor = System.Drawing.Color.White; - this.barSlider2.TickDivide = 0F; - this.barSlider2.TickStyle = System.Windows.Forms.TickStyle.None; - this.barSlider2.UseInterlapsedBar = true; - this.barSlider2.Value = 30F; - // - // barSlider3 - // - this.barSlider3.ActiveEditColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40))))); - this.barSlider3.BarInnerColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); - this.barSlider3.BarPenColorBottom = System.Drawing.Color.Empty; - this.barSlider3.BarPenColorMiddle = System.Drawing.Color.Empty; - this.barSlider3.BarPenColorTop = System.Drawing.Color.Empty; - this.barSlider3.BorderRoundRectSize = new System.Drawing.Size(32, 32); - this.barSlider3.DataType = null; - this.barSlider3.DrawSemitransparentThumb = false; - this.barSlider3.ElapsedInnerColor = System.Drawing.Color.FromArgb(((int)(((byte)(83)))), ((int)(((byte)(121)))), ((int)(((byte)(180))))); - this.barSlider3.ElapsedPenColorBottom = System.Drawing.Color.Empty; - this.barSlider3.ElapsedPenColorMiddle = System.Drawing.Color.Empty; - this.barSlider3.ElapsedPenColorTop = System.Drawing.Color.Empty; - this.barSlider3.Font = new System.Drawing.Font("Microsoft Sans Serif", 8F); - this.barSlider3.IncrementAmount = 0.01F; - this.barSlider3.InputName = "Param4"; - this.barSlider3.LargeChange = 5F; - this.barSlider3.Location = new System.Drawing.Point(392, 5); - this.barSlider3.Maximum = 100F; - this.barSlider3.Minimum = 0F; - this.barSlider3.Name = "barSlider3"; - this.barSlider3.Precision = 0.01F; - this.barSlider3.ScaleDivisions = 1; - this.barSlider3.ScaleSubDivisions = 2; - this.barSlider3.ShowDivisionsText = false; - this.barSlider3.ShowSmallScale = false; - this.barSlider3.Size = new System.Drawing.Size(122, 25); - this.barSlider3.SmallChange = 1F; - this.barSlider3.TabIndex = 12; - this.barSlider3.Text = "barSlider3"; - this.barSlider3.ThumbInnerColor = System.Drawing.Color.Empty; - this.barSlider3.ThumbPenColor = System.Drawing.Color.Empty; - this.barSlider3.ThumbRoundRectSize = new System.Drawing.Size(1, 1); - this.barSlider3.ThumbSize = new System.Drawing.Size(1, 1); - this.barSlider3.TickAdd = 0F; - this.barSlider3.TickColor = System.Drawing.Color.White; - this.barSlider3.TickDivide = 0F; - this.barSlider3.TickStyle = System.Windows.Forms.TickStyle.None; - this.barSlider3.UseInterlapsedBar = true; - this.barSlider3.Value = 30F; - // - // barSlider4 - // - this.barSlider4.ActiveEditColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40))))); - this.barSlider4.BarInnerColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); - this.barSlider4.BarPenColorBottom = System.Drawing.Color.Empty; - this.barSlider4.BarPenColorMiddle = System.Drawing.Color.Empty; - this.barSlider4.BarPenColorTop = System.Drawing.Color.Empty; - this.barSlider4.BorderRoundRectSize = new System.Drawing.Size(32, 32); - this.barSlider4.DataType = null; - this.barSlider4.DrawSemitransparentThumb = false; - this.barSlider4.ElapsedInnerColor = System.Drawing.Color.FromArgb(((int)(((byte)(83)))), ((int)(((byte)(121)))), ((int)(((byte)(180))))); - this.barSlider4.ElapsedPenColorBottom = System.Drawing.Color.Empty; - this.barSlider4.ElapsedPenColorMiddle = System.Drawing.Color.Empty; - this.barSlider4.ElapsedPenColorTop = System.Drawing.Color.Empty; - this.barSlider4.Font = new System.Drawing.Font("Microsoft Sans Serif", 8F); - this.barSlider4.IncrementAmount = 0.01F; - this.barSlider4.InputName = "Param3"; - this.barSlider4.LargeChange = 5F; - this.barSlider4.Location = new System.Drawing.Point(264, 5); - this.barSlider4.Maximum = 100F; - this.barSlider4.Minimum = 0F; - this.barSlider4.Name = "barSlider4"; - this.barSlider4.Precision = 0.01F; - this.barSlider4.ScaleDivisions = 1; - this.barSlider4.ScaleSubDivisions = 2; - this.barSlider4.ShowDivisionsText = false; - this.barSlider4.ShowSmallScale = false; - this.barSlider4.Size = new System.Drawing.Size(122, 25); - this.barSlider4.SmallChange = 1F; - this.barSlider4.TabIndex = 11; - this.barSlider4.Text = "barSlider4"; - this.barSlider4.ThumbInnerColor = System.Drawing.Color.Empty; - this.barSlider4.ThumbPenColor = System.Drawing.Color.Empty; - this.barSlider4.ThumbRoundRectSize = new System.Drawing.Size(1, 1); - this.barSlider4.ThumbSize = new System.Drawing.Size(1, 1); - this.barSlider4.TickAdd = 0F; - this.barSlider4.TickColor = System.Drawing.Color.White; - this.barSlider4.TickDivide = 0F; - this.barSlider4.TickStyle = System.Windows.Forms.TickStyle.None; - this.barSlider4.UseInterlapsedBar = true; - this.barSlider4.Value = 30F; - // - // stPanel2 - // - this.stPanel2.Controls.Add(this.barSlider2); - this.stPanel2.Controls.Add(this.barSlider1); - this.stPanel2.Controls.Add(this.barSlider3); - this.stPanel2.Controls.Add(this.barSlider4); - this.stPanel2.Location = new System.Drawing.Point(3, 87); - this.stPanel2.Name = "stPanel2"; - this.stPanel2.Size = new System.Drawing.Size(555, 40); - this.stPanel2.TabIndex = 13; + this.param7CB.ActiveEditColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40))))); + this.param7CB.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50))))); + this.param7CB.BarInnerColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80))))); + this.param7CB.BarPenColorBottom = System.Drawing.Color.Empty; + this.param7CB.BarPenColorMiddle = System.Drawing.Color.Empty; + this.param7CB.BarPenColorTop = System.Drawing.Color.Empty; + this.param7CB.BorderRoundRectSize = new System.Drawing.Size(32, 32); + this.param7CB.DataType = null; + this.param7CB.DrawSemitransparentThumb = false; + this.param7CB.ElapsedInnerColor = System.Drawing.Color.FromArgb(((int)(((byte)(83)))), ((int)(((byte)(121)))), ((int)(((byte)(180))))); + this.param7CB.ElapsedPenColorBottom = System.Drawing.Color.Empty; + this.param7CB.ElapsedPenColorMiddle = System.Drawing.Color.Empty; + this.param7CB.ElapsedPenColorTop = System.Drawing.Color.Empty; + this.param7CB.Font = new System.Drawing.Font("Microsoft Sans Serif", 8F); + this.param7CB.IncrementAmount = 0.01F; + this.param7CB.InputName = "Param7"; + this.param7CB.LargeChange = 5F; + this.param7CB.Location = new System.Drawing.Point(6, 249); + this.param7CB.Maximum = 100F; + this.param7CB.Minimum = 0F; + this.param7CB.Name = "param7CB"; + this.param7CB.Precision = 0.01F; + this.param7CB.ScaleDivisions = 1; + this.param7CB.ScaleSubDivisions = 2; + this.param7CB.ShowDivisionsText = false; + this.param7CB.ShowSmallScale = false; + this.param7CB.Size = new System.Drawing.Size(149, 25); + this.param7CB.SmallChange = 1F; + this.param7CB.TabIndex = 17; + this.param7CB.Text = "barSlider4"; + this.param7CB.ThumbInnerColor = System.Drawing.Color.Empty; + this.param7CB.ThumbPenColor = System.Drawing.Color.Empty; + this.param7CB.ThumbRoundRectSize = new System.Drawing.Size(1, 1); + this.param7CB.ThumbSize = new System.Drawing.Size(1, 1); + this.param7CB.TickAdd = 0F; + this.param7CB.TickColor = System.Drawing.Color.White; + this.param7CB.TickDivide = 0F; + this.param7CB.TickStyle = System.Windows.Forms.TickStyle.None; + this.param7CB.UseInterlapsedBar = true; + this.param7CB.Value = 30F; // // GFLXMaterialEditor // @@ -468,8 +931,16 @@ this.stDropDownPanel1.PerformLayout(); this.stDropDownPanel2.ResumeLayout(false); this.stDropDownPanel2.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBoxCustom1)).EndInit(); - this.stPanel2.ResumeLayout(false); + this.stPanel3.ResumeLayout(false); + this.stPanel5.ResumeLayout(false); + this.stPanel4.ResumeLayout(false); + this.stTabControl2.ResumeLayout(false); + this.TransformTabPage.ResumeLayout(false); + this.stPanel6.ResumeLayout(false); + this.stPanel6.PerformLayout(); + this.ParamsTabPage.ResumeLayout(false); + this.ParamsTabPage.PerformLayout(); + this.tabPage3.ResumeLayout(false); this.ResumeLayout(false); } @@ -484,20 +955,34 @@ private Toolbox.Library.Forms.STDropDownPanel stDropDownPanel1; private Toolbox.Library.Forms.STDropDownPanel stDropDownPanel2; private Toolbox.Library.Forms.ListViewCustom listViewCustom1; - private Toolbox.Library.Forms.STLabel stLabel2; - private Toolbox.Library.Forms.STTextBox stTextBox2; - private Toolbox.Library.Forms.STLabel stLabel1; - private Toolbox.Library.Forms.STTextBox stTextBox1; private System.Windows.Forms.ColumnHeader columnHeader1; - private Toolbox.Library.Forms.PictureBoxCustom pictureBoxCustom1; - private Toolbox.Library.Forms.STComboBox stComboBox2; - private Toolbox.Library.Forms.STComboBox stComboBox1; - private Toolbox.Library.Forms.STLabel stLabel4; - private Toolbox.Library.Forms.STLabel stLabel3; - private BarSlider.BarSlider barSlider3; - private BarSlider.BarSlider barSlider4; - private BarSlider.BarSlider barSlider2; - private BarSlider.BarSlider barSlider1; + private BarSlider.BarSlider param4CB; + private BarSlider.BarSlider param3CB; + private BarSlider.BarSlider param2CB; + private BarSlider.BarSlider param1CB; + private Toolbox.Library.Forms.UVViewport uvViewport1; + private BarSlider.BarSlider scaleYUD; + private BarSlider.BarSlider scaleXUD; + private BarSlider.BarSlider translateYUD; + private BarSlider.BarSlider translateXUD; + private Toolbox.Library.Forms.STPanel stPanel3; + private Toolbox.Library.Forms.STPanel stPanel5; + private System.Windows.Forms.Splitter splitter1; + private Toolbox.Library.Forms.STPanel stPanel4; + private Toolbox.Library.Forms.STTabControl stTabControl2; + private System.Windows.Forms.TabPage TransformTabPage; + private System.Windows.Forms.TabPage ParamsTabPage; + private Toolbox.Library.Forms.STTextBox stTextBox2; + private Toolbox.Library.Forms.STTextBox stTextBox1; + private Toolbox.Library.Forms.STPanel stPanel6; private Toolbox.Library.Forms.STPanel stPanel2; + private System.Windows.Forms.TabPage tabPage3; + private Toolbox.Library.Forms.STPanel stPanel7; + private Toolbox.Library.Forms.STTextBox transformParamTB; + private BarSlider.BarSlider param5CB; + private BarSlider.BarSlider param9CB; + private BarSlider.BarSlider param8CB; + private BarSlider.BarSlider param6CB; + private BarSlider.BarSlider param7CB; } } diff --git a/File_Format_Library/GUI/GFBMDL/GFLXMaterialEditor.cs b/File_Format_Library/GUI/GFBMDL/GFLXMaterialEditor.cs index 466c535f..d1c97cd3 100644 --- a/File_Format_Library/GUI/GFBMDL/GFLXMaterialEditor.cs +++ b/File_Format_Library/GUI/GFBMDL/GFLXMaterialEditor.cs @@ -18,11 +18,22 @@ namespace FirstPlugin.Forms private ImageList TextureIconList; + private TextEditor JsonTextEditor; + public GFLXMaterialEditor() { InitializeComponent(); + JsonTextEditor = new TextEditor(); + JsonTextEditor.Dock = DockStyle.Fill; + JsonTextEditor.IsJson = true; + stPanel7.Controls.Add(JsonTextEditor); + stTabControl1.myBackColor = FormThemes.BaseTheme.FormBackColor; + stTabControl2.myBackColor = FormThemes.BaseTheme.FormBackColor; + + stPanel6.BackColor = FormThemes.BaseTheme.ListViewBackColor; + TextureIconList = new ImageList() { ColorDepth = ColorDepth.Depth32Bit, @@ -35,20 +46,27 @@ namespace FirstPlugin.Forms stDropDownPanel1.ResetColors(); stDropDownPanel2.ResetColors(); + uvViewport1.UseGrid = false; + ResetSliders(); } private void ResetSliders() { - barSlider1.SetTheme(); - barSlider2.SetTheme(); - barSlider3.SetTheme(); - barSlider4.SetTheme(); + param1CB.SetTheme(); + param2CB.SetTheme(); + param4CB.SetTheme(); + param3CB.SetTheme(); - barSlider1.Value = 0; - barSlider2.Value = 0; - barSlider3.Value = 0; - barSlider4.Value = 0; + param1CB.Value = 0; + param2CB.Value = 0; + param4CB.Value = 0; + param3CB.Value = 0; + + translateXUD.Value = 0; + translateYUD.Value = 0; + scaleXUD.Value = 1; + scaleYUD.Value = 1; } public void LoadMaterial(GFLXMaterialData materialData) @@ -107,40 +125,69 @@ namespace FirstPlugin.Forms if (listViewCustom1.SelectedIndices.Count > 0) { int index = listViewCustom1.SelectedIndices[0]; var tex = MaterialData.TextureMaps[index]; + var gflxTex = ((GFLXTextureMap)tex).gflxTextureMap; stTextBox1.Text = tex.Name; stTextBox2.Text = tex.SamplerName; + uvViewport1.ActiveTextureMap = tex; - foreach (var bntx in PluginRuntime.bntxContainers) { - if (bntx.Textures.ContainsKey(tex.Name)) - UpdateTexturePreview(bntx.Textures[tex.Name]); + translateXUD.Value = tex.Transform.Translate.X; + translateYUD.Value = tex.Transform.Translate.Y; + scaleXUD.Value = tex.Transform.Scale.X; + scaleYUD.Value = tex.Transform.Scale.Y; + + if (gflxTex.Params != null) + { + param1CB.Value = gflxTex.Params.Unknown1; + param2CB.Value = gflxTex.Params.Unknown2; + param3CB.Value = gflxTex.Params.Unknown3; + param4CB.Value = gflxTex.Params.Unknown4; + param5CB.Value = gflxTex.Params.Unknown5; + param6CB.Value = gflxTex.Params.Unknown6; + param7CB.Value = gflxTex.Params.Unknown7; + param8CB.Value = gflxTex.Params.Unknown8; + param9CB.Value = gflxTex.Params.lodBias; } + + if (tex.Type == STGenericMatTexture.TextureType.Diffuse) { + transformParamTB.Text = "ColorUV"; + } + else + transformParamTB.Text = ""; + + //Load mapped meshes + uvViewport1.ActiveObjects.Clear(); + foreach (var mesh in MaterialData.ParentModel.GenericMeshes) + { + foreach (var poly in mesh.PolygonGroups) + { + if (poly.Material == MaterialData) + uvViewport1.ActiveObjects.Add(mesh); + } + } + + uvViewport1.UpdateViewport(); } else { ResetSliders(); - pictureBoxCustom1.Image = null; + transformParamTB.Text = ""; + uvViewport1.ActiveTextureMap = null; + uvViewport1.UpdateViewport(); } } - private void UpdateTexturePreview(STGenericTexture texture) + private void barSlider7_Scroll(object sender, ScrollEventArgs e) { - Thread Thread = new Thread((ThreadStart)(() => + + } + + private void stTabControl1_SelectedIndexChanged(object sender, EventArgs e) + { + if (stTabControl1.SelectedIndex == 2) { - Bitmap image = null; - - try { - image = texture.GetBitmap(); - } - catch { - image = Properties.Resources.TextureError; - } - - pictureBoxCustom1.Invoke((MethodInvoker)delegate { - // Running on the UI thread - pictureBoxCustom1.Image = image; - }); - })); - Thread.Start(); + var text = MaterialData.ConvertToJson(); + JsonTextEditor.FillEditor(text); + } } } } diff --git a/File_Format_Library/GUI/GFBMDL/GFLXMaterialEditor.resx b/File_Format_Library/GUI/GFBMDL/GFLXMaterialEditor.resx index 87e8cbc9..1af7de15 100644 --- a/File_Format_Library/GUI/GFBMDL/GFLXMaterialEditor.resx +++ b/File_Format_Library/GUI/GFBMDL/GFLXMaterialEditor.resx @@ -117,212 +117,4 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - iVBORw0KGgoAAAANSUhEUgAAAlgAAAJYCAMAAACJuGjuAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6 - JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAADAFBMVEXMzMzNzc3Ozs7Pz8/Q0NDR0dHS - 0tLT09PU1NTV1dXW1tbX19fY2NjZ2dna2trb29vc3Nzd3d3e3t7f39/g4ODh4eHi4uLj4+Pk5OTl5eXm - 5ubn5+fo6Ojp6enq6urr6+vs7Ozt7e3u7u7v7+/w8PDx8fHy8vLz8/P09PT19fX29vb39/f4+Pj5+fn6 - +vr7+/v8/Pz9/f3+/v7///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDTbOhAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAGXRF - 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 - - \ No newline at end of file diff --git a/File_Format_Library/GUI/GFBMDL/GFLXMeshEditor.Designer.cs b/File_Format_Library/GUI/GFBMDL/GFLXMeshEditor.Designer.cs new file mode 100644 index 00000000..b2d979d0 --- /dev/null +++ b/File_Format_Library/GUI/GFBMDL/GFLXMeshEditor.Designer.cs @@ -0,0 +1,140 @@ +namespace FirstPlugin.Forms +{ + partial class GFLXMeshEditor + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.materialCB = new Toolbox.Library.Forms.STComboBox(); + this.stLabel1 = new Toolbox.Library.Forms.STLabel(); + this.stFlowLayoutPanel1 = new Toolbox.Library.Forms.STFlowLayoutPanel(); + this.stDropDownPanel1 = new Toolbox.Library.Forms.STDropDownPanel(); + this.polyGroupCB = new Toolbox.Library.Forms.STComboBox(); + this.stLabel2 = new Toolbox.Library.Forms.STLabel(); + this.stFlowLayoutPanel1.SuspendLayout(); + this.stDropDownPanel1.SuspendLayout(); + this.SuspendLayout(); + // + // materialCB + // + this.materialCB.BorderColor = System.Drawing.Color.Empty; + this.materialCB.BorderStyle = System.Windows.Forms.ButtonBorderStyle.Solid; + this.materialCB.ButtonColor = System.Drawing.Color.Empty; + this.materialCB.FormattingEnabled = true; + this.materialCB.IsReadOnly = false; + this.materialCB.Location = new System.Drawing.Point(96, 68); + this.materialCB.Name = "materialCB"; + this.materialCB.Size = new System.Drawing.Size(139, 21); + this.materialCB.TabIndex = 0; + this.materialCB.SelectedIndexChanged += new System.EventHandler(this.materialCB_SelectedIndexChanged); + // + // stLabel1 + // + this.stLabel1.AutoSize = true; + this.stLabel1.Location = new System.Drawing.Point(16, 68); + this.stLabel1.Name = "stLabel1"; + this.stLabel1.Size = new System.Drawing.Size(47, 13); + this.stLabel1.TabIndex = 1; + this.stLabel1.Text = "Material:"; + // + // stFlowLayoutPanel1 + // + this.stFlowLayoutPanel1.Controls.Add(this.stDropDownPanel1); + this.stFlowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.stFlowLayoutPanel1.FixedHeight = false; + this.stFlowLayoutPanel1.FixedWidth = true; + this.stFlowLayoutPanel1.Location = new System.Drawing.Point(0, 0); + this.stFlowLayoutPanel1.Margin = new System.Windows.Forms.Padding(0); + this.stFlowLayoutPanel1.Name = "stFlowLayoutPanel1"; + this.stFlowLayoutPanel1.Size = new System.Drawing.Size(440, 404); + this.stFlowLayoutPanel1.TabIndex = 2; + // + // stDropDownPanel1 + // + this.stDropDownPanel1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.stDropDownPanel1.Controls.Add(this.stLabel2); + this.stDropDownPanel1.Controls.Add(this.polyGroupCB); + this.stDropDownPanel1.Controls.Add(this.stLabel1); + this.stDropDownPanel1.Controls.Add(this.materialCB); + this.stDropDownPanel1.ExpandedHeight = 0; + this.stDropDownPanel1.IsExpanded = true; + this.stDropDownPanel1.Location = new System.Drawing.Point(0, 0); + this.stDropDownPanel1.Margin = new System.Windows.Forms.Padding(0); + this.stDropDownPanel1.Name = "stDropDownPanel1"; + this.stDropDownPanel1.PanelName = "Polygon Group"; + this.stDropDownPanel1.PanelValueName = ""; + this.stDropDownPanel1.SetIcon = null; + this.stDropDownPanel1.SetIconAlphaColor = System.Drawing.SystemColors.Control; + this.stDropDownPanel1.SetIconColor = System.Drawing.SystemColors.Control; + this.stDropDownPanel1.Size = new System.Drawing.Size(440, 164); + this.stDropDownPanel1.TabIndex = 0; + // + // polyGroupCB + // + this.polyGroupCB.BorderColor = System.Drawing.Color.Empty; + this.polyGroupCB.BorderStyle = System.Windows.Forms.ButtonBorderStyle.Solid; + this.polyGroupCB.ButtonColor = System.Drawing.Color.Empty; + this.polyGroupCB.FormattingEnabled = true; + this.polyGroupCB.IsReadOnly = false; + this.polyGroupCB.Location = new System.Drawing.Point(96, 38); + this.polyGroupCB.Name = "polyGroupCB"; + this.polyGroupCB.Size = new System.Drawing.Size(139, 21); + this.polyGroupCB.TabIndex = 2; + this.polyGroupCB.SelectedIndexChanged += new System.EventHandler(this.polyGroupCB_SelectedIndexChanged); + // + // stLabel2 + // + this.stLabel2.AutoSize = true; + this.stLabel2.Location = new System.Drawing.Point(16, 38); + this.stLabel2.Name = "stLabel2"; + this.stLabel2.Size = new System.Drawing.Size(39, 13); + this.stLabel2.TabIndex = 3; + this.stLabel2.Text = "Group:"; + // + // GFLXMeshEditor + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.stFlowLayoutPanel1); + this.Name = "GFLXMeshEditor"; + this.Size = new System.Drawing.Size(440, 404); + this.stFlowLayoutPanel1.ResumeLayout(false); + this.stDropDownPanel1.ResumeLayout(false); + this.stDropDownPanel1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private Toolbox.Library.Forms.STComboBox materialCB; + private Toolbox.Library.Forms.STLabel stLabel1; + private Toolbox.Library.Forms.STFlowLayoutPanel stFlowLayoutPanel1; + private Toolbox.Library.Forms.STDropDownPanel stDropDownPanel1; + private Toolbox.Library.Forms.STLabel stLabel2; + private Toolbox.Library.Forms.STComboBox polyGroupCB; + } +} diff --git a/File_Format_Library/GUI/GFBMDL/GFLXMeshEditor.cs b/File_Format_Library/GUI/GFBMDL/GFLXMeshEditor.cs new file mode 100644 index 00000000..d3a0f1dc --- /dev/null +++ b/File_Format_Library/GUI/GFBMDL/GFLXMeshEditor.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace FirstPlugin.Forms +{ + public partial class GFLXMeshEditor : UserControl + { + private bool Loaded = false; + private GFLXMesh ActiveMesh; + + public GFLXMeshEditor() + { + InitializeComponent(); + + stDropDownPanel1.ResetColors(); + } + + public void LoadMesh(GFLXMesh mesh) + { + polyGroupCB.Items.Clear(); + materialCB.Items.Clear(); + + ActiveMesh = mesh; + Loaded = false; + + var materials = mesh.ParentModel.GenericMaterials; + for (int i = 0; i < materials.Count; i++) + materialCB.Items.Add(materials[i].Text); + + for (int i = 0; i < mesh.PolygonGroups.Count; i++) { + polyGroupCB.Items.Add($"{i}"); + } + + polyGroupCB.SelectedIndex = 0; + + Loaded = true; + } + + private void polyGroupCB_SelectedIndexChanged(object sender, EventArgs e) + { + int index = polyGroupCB.SelectedIndex; + if (index >= 0) + { + var poly = ActiveMesh.PolygonGroups[index]; + var mat = ActiveMesh.ParentModel.GenericMaterials[poly.MaterialIndex]; + materialCB.SelectedItem = mat.Text; + } + } + + private void materialCB_SelectedIndexChanged(object sender, EventArgs e) { + if (!Loaded) return; + + int index = polyGroupCB.SelectedIndex; + if (index >= 0) + { + var poly = ActiveMesh.PolygonGroups[index]; + var materials = ActiveMesh.ParentModel.GenericMaterials; + var mappedMat = materials.First(x => x.Text == materialCB.GetSelectedText()); + if (mappedMat != null) { + var matIndex = materials.IndexOf(mappedMat); + poly.MaterialIndex = matIndex; + ActiveMesh.MeshData.Polygons[index].MaterialIndex = (uint)matIndex; + + Toolbox.Library.LibraryGUI.UpdateViewport(); + } + } + } + } +} diff --git a/Switch_Toolbox_Library/Forms/Editors/UV/UVEditorAdvanced.resx b/File_Format_Library/GUI/GFBMDL/GFLXMeshEditor.resx similarity index 100% rename from Switch_Toolbox_Library/Forms/Editors/UV/UVEditorAdvanced.resx rename to File_Format_Library/GUI/GFBMDL/GFLXMeshEditor.resx diff --git a/File_Format_Library/GUI/GFBMDL/GFLXModelImporter.Designer.cs b/File_Format_Library/GUI/GFBMDL/GFLXModelImporter.Designer.cs new file mode 100644 index 00000000..5485d7d0 --- /dev/null +++ b/File_Format_Library/GUI/GFBMDL/GFLXModelImporter.Designer.cs @@ -0,0 +1,600 @@ +namespace FirstPlugin.Forms +{ + partial class GFLXModelImporter + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.presetCB = new Toolbox.Library.Forms.STComboBox(); + this.stLabel1 = new Toolbox.Library.Forms.STLabel(); + this.chkUseNormals = new Toolbox.Library.Forms.STCheckBox(); + this.chkHasUv1 = new Toolbox.Library.Forms.STCheckBox(); + this.chkUseBoneIndex = new Toolbox.Library.Forms.STCheckBox(); + this.chkUseColor1 = new Toolbox.Library.Forms.STCheckBox(); + this.normalFormatCB = new Toolbox.Library.Forms.STComboBox(); + this.uv0FormatCB = new Toolbox.Library.Forms.STComboBox(); + this.boneFormatCB = new Toolbox.Library.Forms.STComboBox(); + this.color0FormatCB = new Toolbox.Library.Forms.STComboBox(); + this.uv1FormatCB = new Toolbox.Library.Forms.STComboBox(); + this.chkHasUv2 = new Toolbox.Library.Forms.STCheckBox(); + this.color1FormatCB = new Toolbox.Library.Forms.STComboBox(); + this.chkUseColor2 = new Toolbox.Library.Forms.STCheckBox(); + this.bitangentFormatCB = new Toolbox.Library.Forms.STComboBox(); + this.chkBitangents = new Toolbox.Library.Forms.STCheckBox(); + this.positionFormatCB = new Toolbox.Library.Forms.STComboBox(); + this.stCheckBox8 = new Toolbox.Library.Forms.STCheckBox(); + this.stLabel2 = new Toolbox.Library.Forms.STLabel(); + this.materiialPresetCB = new Toolbox.Library.Forms.STComboBox(); + this.stButton1 = new Toolbox.Library.Forms.STButton(); + this.listViewCustom1 = new Toolbox.Library.Forms.ListViewCustom(); + this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.weightFormatCB = new Toolbox.Library.Forms.STComboBox(); + this.stPanel1 = new Toolbox.Library.Forms.STPanel(); + this.tangentFormatCB = new Toolbox.Library.Forms.STComboBox(); + this.chkTangents = new Toolbox.Library.Forms.STCheckBox(); + this.chkUseBoneWeights = new Toolbox.Library.Forms.STCheckBox(); + this.stLabel3 = new Toolbox.Library.Forms.STLabel(); + this.stLabel4 = new Toolbox.Library.Forms.STLabel(); + this.rotateModel90YUD = new Toolbox.Library.Forms.NumericUpDownFloat(); + this.stLabel5 = new Toolbox.Library.Forms.STLabel(); + this.stPanel2 = new Toolbox.Library.Forms.STPanel(); + this.chkMatchAttributes = new Toolbox.Library.Forms.STCheckBox(); + this.chkUseOriginalBones = new Toolbox.Library.Forms.STCheckBox(); + this.stCheckBox7 = new Toolbox.Library.Forms.STCheckBox(); + this.stButton2 = new Toolbox.Library.Forms.STButton(); + this.contentContainer.SuspendLayout(); + this.stPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.rotateModel90YUD)).BeginInit(); + this.stPanel2.SuspendLayout(); + this.SuspendLayout(); + // + // contentContainer + // + this.contentContainer.Controls.Add(this.stButton2); + this.contentContainer.Controls.Add(this.stPanel2); + this.contentContainer.Controls.Add(this.stPanel1); + this.contentContainer.Controls.Add(this.listViewCustom1); + this.contentContainer.Size = new System.Drawing.Size(605, 601); + this.contentContainer.Controls.SetChildIndex(this.listViewCustom1, 0); + this.contentContainer.Controls.SetChildIndex(this.stPanel1, 0); + this.contentContainer.Controls.SetChildIndex(this.stPanel2, 0); + this.contentContainer.Controls.SetChildIndex(this.stButton2, 0); + // + // presetCB + // + this.presetCB.BorderColor = System.Drawing.Color.Empty; + this.presetCB.BorderStyle = System.Windows.Forms.ButtonBorderStyle.Solid; + this.presetCB.ButtonColor = System.Drawing.Color.Empty; + this.presetCB.FormattingEnabled = true; + this.presetCB.IsReadOnly = false; + this.presetCB.Location = new System.Drawing.Point(153, 42); + this.presetCB.Name = "presetCB"; + this.presetCB.Size = new System.Drawing.Size(120, 21); + this.presetCB.TabIndex = 11; + // + // stLabel1 + // + this.stLabel1.AutoSize = true; + this.stLabel1.Location = new System.Drawing.Point(13, 45); + this.stLabel1.Name = "stLabel1"; + this.stLabel1.Size = new System.Drawing.Size(40, 13); + this.stLabel1.TabIndex = 12; + this.stLabel1.Text = "Preset:"; + // + // chkUseNormals + // + this.chkUseNormals.AutoSize = true; + this.chkUseNormals.Location = new System.Drawing.Point(12, 104); + this.chkUseNormals.Name = "chkUseNormals"; + this.chkUseNormals.Size = new System.Drawing.Size(86, 17); + this.chkUseNormals.TabIndex = 14; + this.chkUseNormals.Text = "Use Normals"; + this.chkUseNormals.UseVisualStyleBackColor = true; + this.chkUseNormals.CheckedChanged += new System.EventHandler(this.ApplySettings); + // + // chkHasUv1 + // + this.chkHasUv1.AutoSize = true; + this.chkHasUv1.Location = new System.Drawing.Point(12, 187); + this.chkHasUv1.Name = "chkHasUv1"; + this.chkHasUv1.Size = new System.Drawing.Size(114, 17); + this.chkHasUv1.TabIndex = 15; + this.chkHasUv1.Text = "Use UV Channel 1"; + this.chkHasUv1.UseVisualStyleBackColor = true; + this.chkHasUv1.CheckedChanged += new System.EventHandler(this.ApplySettings); + // + // chkUseBoneIndex + // + this.chkUseBoneIndex.AutoSize = true; + this.chkUseBoneIndex.Location = new System.Drawing.Point(12, 301); + this.chkUseBoneIndex.Name = "chkUseBoneIndex"; + this.chkUseBoneIndex.Size = new System.Drawing.Size(110, 17); + this.chkUseBoneIndex.TabIndex = 16; + this.chkUseBoneIndex.Text = "Use Bone Indices"; + this.chkUseBoneIndex.UseVisualStyleBackColor = true; + this.chkUseBoneIndex.CheckedChanged += new System.EventHandler(this.ApplySettings); + // + // chkUseColor1 + // + this.chkUseColor1.AutoSize = true; + this.chkUseColor1.Location = new System.Drawing.Point(12, 247); + this.chkUseColor1.Name = "chkUseColor1"; + this.chkUseColor1.Size = new System.Drawing.Size(123, 17); + this.chkUseColor1.TabIndex = 17; + this.chkUseColor1.Text = "Use Color Channel 1"; + this.chkUseColor1.UseVisualStyleBackColor = true; + this.chkUseColor1.CheckedChanged += new System.EventHandler(this.ApplySettings); + // + // normalFormatCB + // + this.normalFormatCB.BorderColor = System.Drawing.Color.Empty; + this.normalFormatCB.BorderStyle = System.Windows.Forms.ButtonBorderStyle.Solid; + this.normalFormatCB.ButtonColor = System.Drawing.Color.Empty; + this.normalFormatCB.FormattingEnabled = true; + this.normalFormatCB.IsReadOnly = false; + this.normalFormatCB.Location = new System.Drawing.Point(147, 102); + this.normalFormatCB.Name = "normalFormatCB"; + this.normalFormatCB.Size = new System.Drawing.Size(131, 21); + this.normalFormatCB.TabIndex = 18; + this.normalFormatCB.SelectedIndexChanged += new System.EventHandler(this.ApplySettings); + // + // uv0FormatCB + // + this.uv0FormatCB.BorderColor = System.Drawing.Color.Empty; + this.uv0FormatCB.BorderStyle = System.Windows.Forms.ButtonBorderStyle.Solid; + this.uv0FormatCB.ButtonColor = System.Drawing.Color.Empty; + this.uv0FormatCB.FormattingEnabled = true; + this.uv0FormatCB.IsReadOnly = false; + this.uv0FormatCB.Location = new System.Drawing.Point(147, 183); + this.uv0FormatCB.Name = "uv0FormatCB"; + this.uv0FormatCB.Size = new System.Drawing.Size(131, 21); + this.uv0FormatCB.TabIndex = 19; + this.uv0FormatCB.SelectedIndexChanged += new System.EventHandler(this.ApplySettings); + // + // boneFormatCB + // + this.boneFormatCB.BorderColor = System.Drawing.Color.Empty; + this.boneFormatCB.BorderStyle = System.Windows.Forms.ButtonBorderStyle.Solid; + this.boneFormatCB.ButtonColor = System.Drawing.Color.Empty; + this.boneFormatCB.FormattingEnabled = true; + this.boneFormatCB.IsReadOnly = false; + this.boneFormatCB.Location = new System.Drawing.Point(143, 297); + this.boneFormatCB.Name = "boneFormatCB"; + this.boneFormatCB.Size = new System.Drawing.Size(133, 21); + this.boneFormatCB.TabIndex = 21; + this.boneFormatCB.SelectedIndexChanged += new System.EventHandler(this.ApplySettings); + // + // color0FormatCB + // + this.color0FormatCB.BorderColor = System.Drawing.Color.Empty; + this.color0FormatCB.BorderStyle = System.Windows.Forms.ButtonBorderStyle.Solid; + this.color0FormatCB.ButtonColor = System.Drawing.Color.Empty; + this.color0FormatCB.FormattingEnabled = true; + this.color0FormatCB.IsReadOnly = false; + this.color0FormatCB.Location = new System.Drawing.Point(145, 245); + this.color0FormatCB.Name = "color0FormatCB"; + this.color0FormatCB.Size = new System.Drawing.Size(131, 21); + this.color0FormatCB.TabIndex = 20; + this.color0FormatCB.SelectedIndexChanged += new System.EventHandler(this.ApplySettings); + // + // uv1FormatCB + // + this.uv1FormatCB.BorderColor = System.Drawing.Color.Empty; + this.uv1FormatCB.BorderStyle = System.Windows.Forms.ButtonBorderStyle.Solid; + this.uv1FormatCB.ButtonColor = System.Drawing.Color.Empty; + this.uv1FormatCB.FormattingEnabled = true; + this.uv1FormatCB.IsReadOnly = false; + this.uv1FormatCB.Location = new System.Drawing.Point(147, 210); + this.uv1FormatCB.Name = "uv1FormatCB"; + this.uv1FormatCB.Size = new System.Drawing.Size(131, 21); + this.uv1FormatCB.TabIndex = 23; + this.uv1FormatCB.SelectedIndexChanged += new System.EventHandler(this.ApplySettings); + // + // chkHasUv2 + // + this.chkHasUv2.AutoSize = true; + this.chkHasUv2.Location = new System.Drawing.Point(12, 214); + this.chkHasUv2.Name = "chkHasUv2"; + this.chkHasUv2.Size = new System.Drawing.Size(114, 17); + this.chkHasUv2.TabIndex = 22; + this.chkHasUv2.Text = "Use UV Channel 2"; + this.chkHasUv2.UseVisualStyleBackColor = true; + this.chkHasUv2.CheckedChanged += new System.EventHandler(this.ApplySettings); + // + // color1FormatCB + // + this.color1FormatCB.BorderColor = System.Drawing.Color.Empty; + this.color1FormatCB.BorderStyle = System.Windows.Forms.ButtonBorderStyle.Solid; + this.color1FormatCB.ButtonColor = System.Drawing.Color.Empty; + this.color1FormatCB.FormattingEnabled = true; + this.color1FormatCB.IsReadOnly = false; + this.color1FormatCB.Location = new System.Drawing.Point(145, 272); + this.color1FormatCB.Name = "color1FormatCB"; + this.color1FormatCB.Size = new System.Drawing.Size(131, 21); + this.color1FormatCB.TabIndex = 25; + this.color1FormatCB.SelectedIndexChanged += new System.EventHandler(this.ApplySettings); + // + // chkUseColor2 + // + this.chkUseColor2.AutoSize = true; + this.chkUseColor2.Location = new System.Drawing.Point(12, 274); + this.chkUseColor2.Name = "chkUseColor2"; + this.chkUseColor2.Size = new System.Drawing.Size(123, 17); + this.chkUseColor2.TabIndex = 24; + this.chkUseColor2.Text = "Use Color Channel 2"; + this.chkUseColor2.UseVisualStyleBackColor = true; + this.chkUseColor2.CheckedChanged += new System.EventHandler(this.ApplySettings); + // + // bitangentFormatCB + // + this.bitangentFormatCB.BorderColor = System.Drawing.Color.Empty; + this.bitangentFormatCB.BorderStyle = System.Windows.Forms.ButtonBorderStyle.Solid; + this.bitangentFormatCB.ButtonColor = System.Drawing.Color.Empty; + this.bitangentFormatCB.FormattingEnabled = true; + this.bitangentFormatCB.IsReadOnly = false; + this.bitangentFormatCB.Location = new System.Drawing.Point(147, 129); + this.bitangentFormatCB.Name = "bitangentFormatCB"; + this.bitangentFormatCB.Size = new System.Drawing.Size(131, 21); + this.bitangentFormatCB.TabIndex = 27; + this.bitangentFormatCB.SelectedIndexChanged += new System.EventHandler(this.ApplySettings); + // + // chkBitangents + // + this.chkBitangents.AutoSize = true; + this.chkBitangents.Location = new System.Drawing.Point(12, 131); + this.chkBitangents.Name = "chkBitangents"; + this.chkBitangents.Size = new System.Drawing.Size(98, 17); + this.chkBitangents.TabIndex = 26; + this.chkBitangents.Text = "Use Bitangents"; + this.chkBitangents.UseVisualStyleBackColor = true; + this.chkBitangents.CheckedChanged += new System.EventHandler(this.ApplySettings); + // + // positionFormatCB + // + this.positionFormatCB.BorderColor = System.Drawing.Color.Empty; + this.positionFormatCB.BorderStyle = System.Windows.Forms.ButtonBorderStyle.Solid; + this.positionFormatCB.ButtonColor = System.Drawing.Color.Empty; + this.positionFormatCB.FormattingEnabled = true; + this.positionFormatCB.IsReadOnly = false; + this.positionFormatCB.Location = new System.Drawing.Point(147, 75); + this.positionFormatCB.Name = "positionFormatCB"; + this.positionFormatCB.Size = new System.Drawing.Size(131, 21); + this.positionFormatCB.TabIndex = 29; + this.positionFormatCB.SelectedIndexChanged += new System.EventHandler(this.ApplySettings); + // + // stCheckBox8 + // + this.stCheckBox8.AutoSize = true; + this.stCheckBox8.Checked = true; + this.stCheckBox8.CheckState = System.Windows.Forms.CheckState.Checked; + this.stCheckBox8.Enabled = false; + this.stCheckBox8.Location = new System.Drawing.Point(12, 77); + this.stCheckBox8.Name = "stCheckBox8"; + this.stCheckBox8.Size = new System.Drawing.Size(63, 17); + this.stCheckBox8.TabIndex = 28; + this.stCheckBox8.Text = "Position"; + this.stCheckBox8.UseVisualStyleBackColor = true; + // + // stLabel2 + // + this.stLabel2.AutoSize = true; + this.stLabel2.Location = new System.Drawing.Point(9, 39); + this.stLabel2.Name = "stLabel2"; + this.stLabel2.Size = new System.Drawing.Size(47, 13); + this.stLabel2.TabIndex = 31; + this.stLabel2.Text = "Material:"; + // + // materiialPresetCB + // + this.materiialPresetCB.BorderColor = System.Drawing.Color.Empty; + this.materiialPresetCB.BorderStyle = System.Windows.Forms.ButtonBorderStyle.Solid; + this.materiialPresetCB.ButtonColor = System.Drawing.Color.Empty; + this.materiialPresetCB.FormattingEnabled = true; + this.materiialPresetCB.IsReadOnly = false; + this.materiialPresetCB.Location = new System.Drawing.Point(145, 36); + this.materiialPresetCB.Name = "materiialPresetCB"; + this.materiialPresetCB.Size = new System.Drawing.Size(131, 21); + this.materiialPresetCB.TabIndex = 32; + this.materiialPresetCB.SelectedIndexChanged += new System.EventHandler(this.ApplySettings); + // + // stButton1 + // + this.stButton1.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.stButton1.Location = new System.Drawing.Point(282, 34); + this.stButton1.Name = "stButton1"; + this.stButton1.Size = new System.Drawing.Size(31, 23); + this.stButton1.TabIndex = 33; + this.stButton1.Text = "+"; + this.stButton1.UseVisualStyleBackColor = false; + this.stButton1.Click += new System.EventHandler(this.stButton1_Click); + // + // listViewCustom1 + // + this.listViewCustom1.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.listViewCustom1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnHeader1}); + this.listViewCustom1.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None; + this.listViewCustom1.HideSelection = false; + this.listViewCustom1.Location = new System.Drawing.Point(5, 31); + this.listViewCustom1.Name = "listViewCustom1"; + this.listViewCustom1.OwnerDraw = true; + this.listViewCustom1.Size = new System.Drawing.Size(208, 499); + this.listViewCustom1.TabIndex = 34; + this.listViewCustom1.UseCompatibleStateImageBehavior = false; + this.listViewCustom1.View = System.Windows.Forms.View.Details; + this.listViewCustom1.SelectedIndexChanged += new System.EventHandler(this.listViewCustom1_SelectedIndexChanged); + // + // columnHeader1 + // + this.columnHeader1.Width = 202; + // + // weightFormatCB + // + this.weightFormatCB.BorderColor = System.Drawing.Color.Empty; + this.weightFormatCB.BorderStyle = System.Windows.Forms.ButtonBorderStyle.Solid; + this.weightFormatCB.ButtonColor = System.Drawing.Color.Empty; + this.weightFormatCB.FormattingEnabled = true; + this.weightFormatCB.IsReadOnly = false; + this.weightFormatCB.Location = new System.Drawing.Point(143, 324); + this.weightFormatCB.Name = "weightFormatCB"; + this.weightFormatCB.Size = new System.Drawing.Size(135, 21); + this.weightFormatCB.TabIndex = 35; + this.weightFormatCB.SelectedIndexChanged += new System.EventHandler(this.ApplySettings); + // + // stPanel1 + // + this.stPanel1.Controls.Add(this.tangentFormatCB); + this.stPanel1.Controls.Add(this.chkTangents); + this.stPanel1.Controls.Add(this.chkUseBoneWeights); + this.stPanel1.Controls.Add(this.stLabel2); + this.stPanel1.Controls.Add(this.stLabel3); + this.stPanel1.Controls.Add(this.weightFormatCB); + this.stPanel1.Controls.Add(this.chkUseNormals); + this.stPanel1.Controls.Add(this.chkHasUv1); + this.stPanel1.Controls.Add(this.stButton1); + this.stPanel1.Controls.Add(this.chkUseBoneIndex); + this.stPanel1.Controls.Add(this.materiialPresetCB); + this.stPanel1.Controls.Add(this.chkUseColor1); + this.stPanel1.Controls.Add(this.normalFormatCB); + this.stPanel1.Controls.Add(this.positionFormatCB); + this.stPanel1.Controls.Add(this.uv0FormatCB); + this.stPanel1.Controls.Add(this.stCheckBox8); + this.stPanel1.Controls.Add(this.color0FormatCB); + this.stPanel1.Controls.Add(this.bitangentFormatCB); + this.stPanel1.Controls.Add(this.boneFormatCB); + this.stPanel1.Controls.Add(this.chkBitangents); + this.stPanel1.Controls.Add(this.chkHasUv2); + this.stPanel1.Controls.Add(this.color1FormatCB); + this.stPanel1.Controls.Add(this.uv1FormatCB); + this.stPanel1.Controls.Add(this.chkUseColor2); + this.stPanel1.Location = new System.Drawing.Point(219, 206); + this.stPanel1.Name = "stPanel1"; + this.stPanel1.Size = new System.Drawing.Size(378, 356); + this.stPanel1.TabIndex = 36; + // + // tangentFormatCB + // + this.tangentFormatCB.BorderColor = System.Drawing.Color.Empty; + this.tangentFormatCB.BorderStyle = System.Windows.Forms.ButtonBorderStyle.Solid; + this.tangentFormatCB.ButtonColor = System.Drawing.Color.Empty; + this.tangentFormatCB.FormattingEnabled = true; + this.tangentFormatCB.IsReadOnly = false; + this.tangentFormatCB.Location = new System.Drawing.Point(147, 156); + this.tangentFormatCB.Name = "tangentFormatCB"; + this.tangentFormatCB.Size = new System.Drawing.Size(131, 21); + this.tangentFormatCB.TabIndex = 40; + this.tangentFormatCB.SelectedIndexChanged += new System.EventHandler(this.ApplySettings); + // + // chkTangents + // + this.chkTangents.AutoSize = true; + this.chkTangents.Location = new System.Drawing.Point(12, 158); + this.chkTangents.Name = "chkTangents"; + this.chkTangents.Size = new System.Drawing.Size(93, 17); + this.chkTangents.TabIndex = 39; + this.chkTangents.Text = "Use Tangents"; + this.chkTangents.UseVisualStyleBackColor = true; + this.chkTangents.CheckedChanged += new System.EventHandler(this.ApplySettings); + // + // chkUseBoneWeights + // + this.chkUseBoneWeights.AutoSize = true; + this.chkUseBoneWeights.Location = new System.Drawing.Point(12, 328); + this.chkUseBoneWeights.Name = "chkUseBoneWeights"; + this.chkUseBoneWeights.Size = new System.Drawing.Size(115, 17); + this.chkUseBoneWeights.TabIndex = 38; + this.chkUseBoneWeights.Text = "Use Bone Weights"; + this.chkUseBoneWeights.UseVisualStyleBackColor = true; + this.chkUseBoneWeights.CheckedChanged += new System.EventHandler(this.ApplySettings); + // + // stLabel3 + // + this.stLabel3.AutoSize = true; + this.stLabel3.Location = new System.Drawing.Point(140, 10); + this.stLabel3.Name = "stLabel3"; + this.stLabel3.Size = new System.Drawing.Size(77, 13); + this.stLabel3.TabIndex = 37; + this.stLabel3.Text = "Mesh Settings:"; + // + // stLabel4 + // + this.stLabel4.AutoSize = true; + this.stLabel4.Location = new System.Drawing.Point(137, 11); + this.stLabel4.Name = "stLabel4"; + this.stLabel4.Size = new System.Drawing.Size(81, 13); + this.stLabel4.TabIndex = 38; + this.stLabel4.Text = "Global Settings:"; + // + // rotateModel90YUD + // + this.rotateModel90YUD.DecimalPlaces = 5; + this.rotateModel90YUD.Increment = new decimal(new int[] { + 5, + 0, + 0, + 196608}); + this.rotateModel90YUD.Location = new System.Drawing.Point(153, 75); + this.rotateModel90YUD.Maximum = new decimal(new int[] { + 1000000000, + 0, + 0, + 0}); + this.rotateModel90YUD.Minimum = new decimal(new int[] { + 100000000, + 0, + 0, + -2147483648}); + this.rotateModel90YUD.Name = "rotateModel90YUD"; + this.rotateModel90YUD.Size = new System.Drawing.Size(120, 20); + this.rotateModel90YUD.TabIndex = 39; + this.rotateModel90YUD.ValueChanged += new System.EventHandler(this.numericUpDownFloat1_ValueChanged); + // + // stLabel5 + // + this.stLabel5.AutoSize = true; + this.stLabel5.Location = new System.Drawing.Point(13, 77); + this.stLabel5.Name = "stLabel5"; + this.stLabel5.Size = new System.Drawing.Size(52, 13); + this.stLabel5.TabIndex = 40; + this.stLabel5.Text = "Rotate Y:"; + // + // stPanel2 + // + this.stPanel2.Controls.Add(this.chkMatchAttributes); + this.stPanel2.Controls.Add(this.chkUseOriginalBones); + this.stPanel2.Controls.Add(this.stCheckBox7); + this.stPanel2.Controls.Add(this.stLabel1); + this.stPanel2.Controls.Add(this.presetCB); + this.stPanel2.Controls.Add(this.stLabel5); + this.stPanel2.Controls.Add(this.stLabel4); + this.stPanel2.Controls.Add(this.rotateModel90YUD); + this.stPanel2.Location = new System.Drawing.Point(222, 31); + this.stPanel2.Name = "stPanel2"; + this.stPanel2.Size = new System.Drawing.Size(375, 169); + this.stPanel2.TabIndex = 41; + // + // chkMatchAttributes + // + this.chkMatchAttributes.AutoSize = true; + this.chkMatchAttributes.Location = new System.Drawing.Point(9, 111); + this.chkMatchAttributes.Name = "chkMatchAttributes"; + this.chkMatchAttributes.Size = new System.Drawing.Size(141, 17); + this.chkMatchAttributes.TabIndex = 44; + this.chkMatchAttributes.Text = "Match Original Attributes"; + this.chkMatchAttributes.UseVisualStyleBackColor = true; + this.chkMatchAttributes.CheckedChanged += new System.EventHandler(this.chkMatchAttributes_CheckedChanged); + // + // chkUseOriginalBones + // + this.chkUseOriginalBones.AutoSize = true; + this.chkUseOriginalBones.Checked = true; + this.chkUseOriginalBones.CheckState = System.Windows.Forms.CheckState.Checked; + this.chkUseOriginalBones.Location = new System.Drawing.Point(157, 134); + this.chkUseOriginalBones.Name = "chkUseOriginalBones"; + this.chkUseOriginalBones.Size = new System.Drawing.Size(116, 17); + this.chkUseOriginalBones.TabIndex = 43; + this.chkUseOriginalBones.Text = "Use Original Bones"; + this.chkUseOriginalBones.UseVisualStyleBackColor = true; + // + // stCheckBox7 + // + this.stCheckBox7.AutoSize = true; + this.stCheckBox7.Location = new System.Drawing.Point(157, 111); + this.stCheckBox7.Name = "stCheckBox7"; + this.stCheckBox7.Size = new System.Drawing.Size(103, 17); + this.stCheckBox7.TabIndex = 41; + this.stCheckBox7.Text = "Flip UVs Vertical"; + this.stCheckBox7.UseVisualStyleBackColor = true; + // + // stButton2 + // + this.stButton2.DialogResult = System.Windows.Forms.DialogResult.OK; + this.stButton2.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.stButton2.Location = new System.Drawing.Point(522, 568); + this.stButton2.Name = "stButton2"; + this.stButton2.Size = new System.Drawing.Size(75, 23); + this.stButton2.TabIndex = 42; + this.stButton2.Text = "Ok"; + this.stButton2.UseVisualStyleBackColor = false; + // + // GFLXModelImporter + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(611, 605); + this.Name = "GFLXModelImporter"; + this.Text = "GFBMDL Importer"; + this.contentContainer.ResumeLayout(false); + this.stPanel1.ResumeLayout(false); + this.stPanel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.rotateModel90YUD)).EndInit(); + this.stPanel2.ResumeLayout(false); + this.stPanel2.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private Toolbox.Library.Forms.STComboBox presetCB; + private Toolbox.Library.Forms.STLabel stLabel1; + private Toolbox.Library.Forms.STComboBox boneFormatCB; + private Toolbox.Library.Forms.STComboBox color0FormatCB; + private Toolbox.Library.Forms.STComboBox uv0FormatCB; + private Toolbox.Library.Forms.STComboBox normalFormatCB; + private Toolbox.Library.Forms.STCheckBox chkUseColor1; + private Toolbox.Library.Forms.STCheckBox chkUseBoneIndex; + private Toolbox.Library.Forms.STCheckBox chkHasUv1; + private Toolbox.Library.Forms.STCheckBox chkUseNormals; + private Toolbox.Library.Forms.STComboBox bitangentFormatCB; + private Toolbox.Library.Forms.STCheckBox chkBitangents; + private Toolbox.Library.Forms.STComboBox color1FormatCB; + private Toolbox.Library.Forms.STCheckBox chkUseColor2; + private Toolbox.Library.Forms.STComboBox uv1FormatCB; + private Toolbox.Library.Forms.STCheckBox chkHasUv2; + private Toolbox.Library.Forms.STComboBox positionFormatCB; + private Toolbox.Library.Forms.STCheckBox stCheckBox8; + private Toolbox.Library.Forms.STButton stButton1; + private Toolbox.Library.Forms.STComboBox materiialPresetCB; + private Toolbox.Library.Forms.STLabel stLabel2; + private Toolbox.Library.Forms.ListViewCustom listViewCustom1; + private System.Windows.Forms.ColumnHeader columnHeader1; + private Toolbox.Library.Forms.STComboBox weightFormatCB; + private Toolbox.Library.Forms.STLabel stLabel4; + private Toolbox.Library.Forms.STPanel stPanel1; + private Toolbox.Library.Forms.STLabel stLabel3; + private Toolbox.Library.Forms.STLabel stLabel5; + private Toolbox.Library.Forms.NumericUpDownFloat rotateModel90YUD; + private Toolbox.Library.Forms.STCheckBox chkUseBoneWeights; + private Toolbox.Library.Forms.STPanel stPanel2; + private Toolbox.Library.Forms.STCheckBox stCheckBox7; + private Toolbox.Library.Forms.STCheckBox chkUseOriginalBones; + private Toolbox.Library.Forms.STButton stButton2; + private Toolbox.Library.Forms.STComboBox tangentFormatCB; + private Toolbox.Library.Forms.STCheckBox chkTangents; + private Toolbox.Library.Forms.STCheckBox chkMatchAttributes; + } +} \ No newline at end of file diff --git a/File_Format_Library/GUI/GFBMDL/GFLXModelImporter.cs b/File_Format_Library/GUI/GFBMDL/GFLXModelImporter.cs new file mode 100644 index 00000000..e4fc619b --- /dev/null +++ b/File_Format_Library/GUI/GFBMDL/GFLXModelImporter.cs @@ -0,0 +1,345 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using Toolbox.Library.Forms; +using Toolbox.Library; +using FirstPlugin.GFMDLStructs; + +namespace FirstPlugin.Forms +{ + public partial class GFLXModelImporter : STForm + { + public bool ImportNewBones => !chkUseOriginalBones.Checked; + + private List Meshes; + private List OriginalMeshes; + + public GfbmdlImportSettings Settings = new GfbmdlImportSettings(); + + private bool Loaded = false; + + public int RotationY => (int)rotateModel90YUD.Value; + + public GFLXModelImporter() + { + InitializeComponent(); + + presetCB.Items.Add("Optimal"); + presetCB.SelectedIndex = 0; + + stPanel1.BackColor = FormThemes.BaseTheme.TextEditorBackColor; + stPanel2.BackColor = FormThemes.BaseTheme.TextEditorBackColor; + + CanResize = false; + } + + public void LoadMeshes(List meshes, List importedMats, + List originalMaterials, List originalMeshes) + { + Loaded = false; + + Meshes = meshes; + OriginalMeshes = originalMeshes; + + foreach (var mat in originalMaterials) + { + materiialPresetCB.Items.Add(mat.Text); + } + + materiialPresetCB.SelectedIndex = 0; + + listViewCustom1.Items.Clear(); + for (int i = 0; i < meshes.Count; i++) + { + string material = originalMaterials[0].Text; + + //Check if a material name matches one in the preset list + //Then auto match the preset + if (meshes[i].MaterialIndex < importedMats.Count && + meshes[i].MaterialIndex > 0) + { + string importedMat = importedMats[meshes[i].MaterialIndex].Text; + if (materiialPresetCB.Items.Contains(importedMat)) + material = importedMat; + } + + Settings.MeshSettings.Add(new GfbmdlImportSettings.MeshSetting() + { + HasColor1 = meshes[i].HasVertColors, + HasColor2 = meshes[i].HasVertColors, + HasTexCoord1 = meshes[i].HasUv0, + HasTexCoord2 = meshes[i].HasUv1, + HasTexCoord3 = meshes[i].HasUv2, + HasNormals = meshes[i].HasNrm, + HasBoneIndices = meshes[i].HasIndices, + HasWeights = meshes[i].HasWeights, + HasBitangents = meshes[i].HasUv0, + Material = material, + }); + listViewCustom1.Items.Add($"{meshes[i].ObjectName}"); + } + + SetDefaultFormats(); + + Loaded = true; + } + + private void SetDefaultFormats() + { + positionFormatCB.LoadEnum(typeof(BufferFormat)); + positionFormatCB.SelectedItem = BufferFormat.Float; + + normalFormatCB.LoadEnum(typeof(BufferFormat)); + normalFormatCB.SelectedItem = BufferFormat.HalfFloat; + + bitangentFormatCB.LoadEnum(typeof(BufferFormat)); + bitangentFormatCB.SelectedItem = BufferFormat.HalfFloat; + + uv0FormatCB.LoadEnum(typeof(BufferFormat)); + uv0FormatCB.SelectedItem = BufferFormat.Float; + + uv1FormatCB.LoadEnum(typeof(BufferFormat)); + uv1FormatCB.SelectedItem = BufferFormat.Float; + + color0FormatCB.LoadEnum(typeof(BufferFormat)); + color0FormatCB.SelectedItem = BufferFormat.Byte; + + color1FormatCB.LoadEnum(typeof(BufferFormat)); + color1FormatCB.SelectedItem = BufferFormat.Byte; + + boneFormatCB.LoadEnum(typeof(BufferFormat)); + boneFormatCB.SelectedItem = BufferFormat.Byte; + + weightFormatCB.LoadEnum(typeof(BufferFormat)); + weightFormatCB.SelectedItem = BufferFormat.BytesAsFloat; + + tangentFormatCB.LoadEnum(typeof(BufferFormat)); + tangentFormatCB.SelectedItem = BufferFormat.HalfFloat; + } + + private void TryMatchOriginal() + { + if (OriginalMeshes == null || OriginalMeshes?.Count == 0) + return; + + Loaded = false; + foreach (var mesh in Meshes) + { + var matchedMesh = (GFLXMesh)OriginalMeshes.FirstOrDefault(x => x.Text == mesh.ObjectName); + if (matchedMesh != null) + { + int index = Meshes.IndexOf(mesh); + var setting = Settings.MeshSettings[index]; + + foreach (var attribute in matchedMesh.MeshData.Attributes) + { + switch ((VertexType)attribute.VertexType) + { + case VertexType.Position: + setting.PositionFormat = (BufferFormat)attribute.BufferFormat; + break; + case VertexType.Normal: + setting.NormalFormat = (BufferFormat)attribute.BufferFormat; + setting.HasNormals = true; + break; + case VertexType.Color1: + setting.Color1Format = (BufferFormat)attribute.BufferFormat; + setting.HasColor1 = true; + break; + case VertexType.Color2: + setting.Color2Format = (BufferFormat)attribute.BufferFormat; + setting.HasColor2 = true; + break; + case VertexType.UV1: + setting.TexCoord1Format = (BufferFormat)attribute.BufferFormat; + setting.HasTexCoord1 = true; + break; + case VertexType.UV2: + setting.TexCoord2Format = (BufferFormat)attribute.BufferFormat; + setting.HasTexCoord2 = true; + break; + case VertexType.UV3: + setting.TexCoord3Format = (BufferFormat)attribute.BufferFormat; + setting.HasTexCoord3 = true; + break; + case VertexType.UV4: + setting.TexCoord4Format = (BufferFormat)attribute.BufferFormat; + setting.HasTexCoord4 = true; + break; + case VertexType.BoneWeight: + setting.BoneWeightFormat = (BufferFormat)attribute.BufferFormat; + if (mesh.vertices.FirstOrDefault().boneWeights.Count == 0) + { + //Fill weights with 1s + for (int v = 0; v < mesh.vertices.Count; v++) + { + for (int j = 0; j < 1; j++) + mesh.vertices[v].boneWeights.Add(1); + } + } + setting.HasWeights = true; + break; + case VertexType.BoneID: + setting.BoneIndexFormat = (BufferFormat)attribute.BufferFormat; + if (mesh.vertices.FirstOrDefault().boneNames.Count == 0) + { + //Fill indices with 1s + for (int v = 0; v < mesh.vertices.Count; v++) + { + for (int j = 0; j < 1; j++) + mesh.vertices[v].boneIds.Add(1); + } + } + setting.HasBoneIndices = true; + break; + case VertexType.Tangents: + setting.TangentsFormat = (BufferFormat)attribute.BufferFormat; + setting.HasTangents = true; + break; + case VertexType.Binormal: + setting.BitangentnFormat = (BufferFormat)attribute.BufferFormat; + setting.HasBitangents = true; + break; + } + } + } + } + Loaded = true; + } + + private void listViewCustom1_SelectedIndexChanged(object sender, EventArgs e) { + if (!Loaded) return; + + if (listViewCustom1.SelectedIndices.Count > 0) + { + Loaded = false; + + int index = listViewCustom1.SelectedIndices[0]; + var mesh = Meshes[index]; + + var settings = Settings.MeshSettings[index]; + materiialPresetCB.SelectedItem = settings.Material; + + UpdateSelectedMesh(settings); + + Loaded = true; + } + } + + private void ApplySettings(object sender, EventArgs e) + { + if (!Loaded) return; + + var indices = listViewCustom1.SelectedIndices; + for (int i = 0; i < indices?.Count; i++) + { + int index = indices[i]; + var mesh = Meshes[index]; + var settings = Settings.MeshSettings[index]; + + settings.Material = materiialPresetCB.GetSelectedText(); + settings.HasNormals = chkUseNormals.Checked; + settings.HasBitangents = chkBitangents.Checked; + settings.HasTexCoord1 = chkHasUv1.Checked; + settings.HasTexCoord2 = chkHasUv2.Checked; + settings.HasColor1 = chkUseColor1.Checked; + settings.HasColor2 = chkUseColor2.Checked; + settings.HasBoneIndices = chkUseBoneIndex.Checked; + settings.HasWeights = chkUseBoneWeights.Checked; + settings.HasTangents = chkTangents.Checked; + + settings.PositionFormat = (BufferFormat)positionFormatCB.SelectedItem; + settings.NormalFormat = (BufferFormat)normalFormatCB.SelectedItem; + settings.BitangentnFormat = (BufferFormat)bitangentFormatCB.SelectedItem; + settings.TexCoord1Format = (BufferFormat)uv0FormatCB.SelectedItem; + settings.TexCoord2Format = (BufferFormat)uv1FormatCB.SelectedItem; + settings.Color1Format = (BufferFormat)color0FormatCB.SelectedItem; + settings.Color2Format = (BufferFormat)color1FormatCB.SelectedItem; + settings.BoneIndexFormat = (BufferFormat)boneFormatCB.SelectedItem; + settings.BoneWeightFormat = (BufferFormat)weightFormatCB.SelectedItem; + settings.TangentsFormat = (BufferFormat)tangentFormatCB.SelectedItem; + } + } + + private void UpdateSelectedMesh(GfbmdlImportSettings.MeshSetting settings) { + chkUseNormals.Checked = settings.HasNormals; + chkBitangents.Checked = settings.HasBitangents; + chkHasUv1.Checked = settings.HasTexCoord1; + chkHasUv2.Checked = settings.HasTexCoord2; + chkUseColor1.Checked = settings.HasColor1; + chkUseColor2.Checked = settings.HasColor2; + chkUseBoneIndex.Checked = settings.HasBoneIndices; + chkUseBoneWeights.Checked = settings.HasWeights; + chkTangents.Checked = settings.HasTangents; + + positionFormatCB.SelectedItem = settings.PositionFormat; + normalFormatCB.SelectedItem = settings.NormalFormat; + bitangentFormatCB.SelectedItem = settings.BitangentnFormat; + uv0FormatCB.SelectedItem = settings.TexCoord1Format; + uv1FormatCB.SelectedItem = settings.TexCoord2Format; + color0FormatCB.SelectedItem = settings.Color1Format; + color1FormatCB.SelectedItem = settings.Color2Format; + boneFormatCB.SelectedItem = settings.BoneIndexFormat; + weightFormatCB.SelectedItem = settings.BoneWeightFormat; + tangentFormatCB.SelectedItem = settings.TangentsFormat; + } + + private void stButton1_Click(object sender, EventArgs e) { + if (!Loaded) return; + + if (listViewCustom1.SelectedIndices.Count == 0) return; + + OpenFileDialog ofd = new OpenFileDialog(); + ofd.Filter = "Supported Formats|*.json;"; + ofd.DefaultExt = "json"; + if (ofd.ShowDialog() == DialogResult.OK) + { + try { + Newtonsoft.Json.JsonConvert.DeserializeObject( + System.IO.File.ReadAllText(ofd.FileName)); + } + catch (Exception ex) + { + STErrorDialog.Show("Failed to load material!", "GFBMDL Importer", ex.ToString()); + return; + } + + string name = System.IO.Path.GetFileNameWithoutExtension(ofd.FileName); + materiialPresetCB.Items.Add(name); + + var indices = listViewCustom1.SelectedIndices; + for (int i = 0; i < indices?.Count; i++) + { + var settings = Settings.MeshSettings[indices[i]]; + settings.MaterialFile = ofd.FileName; + settings.Material = name; + } + + materiialPresetCB.SelectedItem = name; + } + } + + private void chkMatchAttributes_CheckedChanged(object sender, EventArgs e) { + if (chkMatchAttributes.Checked) + { + TryMatchOriginal(); + if (listViewCustom1.SelectedIndices.Count > 0) + { + int index = listViewCustom1.SelectedIndices[0]; + UpdateSelectedMesh(Settings.MeshSettings[index]); + } + } + } + + private void numericUpDownFloat1_ValueChanged(object sender, EventArgs e) + { + + } + } +} diff --git a/File_Format_Library/GUI/GFBMDL/GFLXModelImporter.resx b/File_Format_Library/GUI/GFBMDL/GFLXModelImporter.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/File_Format_Library/GUI/GFBMDL/GFLXModelImporter.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/File_Format_Library/GUI/TextureUI/Importers/GX2/GTXTextureImporter.cs b/File_Format_Library/GUI/TextureUI/Importers/GX2/GTXTextureImporter.cs index 28c6edc2..ccc24a20 100644 --- a/File_Format_Library/GUI/TextureUI/Importers/GX2/GTXTextureImporter.cs +++ b/File_Format_Library/GUI/TextureUI/Importers/GX2/GTXTextureImporter.cs @@ -85,6 +85,8 @@ namespace FirstPlugin tileModeCB.SelectedItem = GX2.GX2TileMode.MODE_DEFAULT; formatComboBox.SelectedItem = GX2.GX2SurfaceFormat.T_BC1_SRGB; + MipmapNum.Maximum = 13; + IsLoaded = true; } @@ -280,8 +282,8 @@ namespace FirstPlugin SetupSettings(SelectedTexSettings); - MipmapNum.Maximum = STGenericTexture.GenerateTotalMipCount( - SelectedTexSettings.TexWidth, SelectedTexSettings.TexHeight) + 1; + // MipmapNum.Maximum = STGenericTexture.GenerateTotalMipCount( + // SelectedTexSettings.TexWidth, SelectedTexSettings.TexHeight) + 1; //Force the mip counter to be the selected mip counter //Some textures like bflim (used for UI) only have 1 diff --git a/File_Format_Library/Main.cs b/File_Format_Library/Main.cs index dfeacb22..c9498b83 100644 --- a/File_Format_Library/Main.cs +++ b/File_Format_Library/Main.cs @@ -392,7 +392,7 @@ namespace FirstPlugin Formats.Add(typeof(IGA_PAK)); Formats.Add(typeof(MKAGPDX_Model)); Formats.Add(typeof(GFBMDL)); - // Formats.Add(typeof(GFBANM)); + // Formats.Add(typeof(GFBANM)); Formats.Add(typeof(GFBANMCFG)); Formats.Add(typeof(Turbo.Course_MapCamera_bin)); Formats.Add(typeof(SDF)); @@ -443,7 +443,7 @@ namespace FirstPlugin Formats.Add(typeof(PunchOutWii.PO_DICT)); Formats.Add(typeof(LM2_ARCADE_Model)); Formats.Add(typeof(NLG_NLOC)); - Formats.Add(typeof(NLG_PCK)); + Formats.Add(typeof(PCK)); Formats.Add(typeof(NLG.StrikersSAnim)); diff --git a/README.md b/README.md index 13325883..874e0a40 100644 --- a/README.md +++ b/README.md @@ -118,7 +118,7 @@ In the event that the tool cannot compile, check references. All the libraries u - exelix for BYAML, SARC and KCL library. - Syroot for helpful IO extensions and libraries. - GDKChan for PICA shaders stuff used with BCRES, structs for BCRES, and some DDS decode methods. -- AboodXD for some foundation stuff with exelix's SARC library, Wii U (GPU7) and Switch (Tegra X1) textures swizzling, reading/converting uncompressed types for DDS, and documentation for GTX, XTX, and BNTX. +- AboodXD for some foundation stuff with exelix's SARC library, Wii U (GPU7) and Switch (Tegra X1) textures swizzling, reading/converting uncompressed types for DDS, and documentation for GTX, XTX, and BNTX. Library for Yaz0 made by AboodXD and helped port it to the tool. - MelonSpeedruns for Switch Toolbox logo. - BrawlBox team for brawl libraries used for BRRES parsing. - Sage of Mirrors for SuperBMDLib. diff --git a/Switch_Toolbox_Library/Compression/Formats/Yaz0.cs b/Switch_Toolbox_Library/Compression/Formats/Yaz0.cs index d9feda86..d6ffc1b2 100644 --- a/Switch_Toolbox_Library/Compression/Formats/Yaz0.cs +++ b/Switch_Toolbox_Library/Compression/Formats/Yaz0.cs @@ -5,6 +5,7 @@ using System.IO; using System.IO.Compression; using System.Threading.Tasks; using Toolbox.Library.IO; +using System.Runtime.InteropServices; namespace Toolbox.Library { @@ -13,7 +14,7 @@ namespace Toolbox.Library public int Alignment = 0; public string[] Description { get; set; } = new string[] { "Yaz0" }; - public string[] Extension { get; set; } = new string[] { "*.yaz0", "*.szs",}; + public string[] Extension { get; set; } = new string[] { "*.yaz0", "*.szs", }; public override string ToString() { return "Yaz0"; } @@ -29,12 +30,250 @@ namespace Toolbox.Library public Stream Decompress(Stream stream) { - return new MemoryStream(EveryFileExplorer.YAZ0.Decompress(stream.ToArray())); + var comp = stream.ToBytes(); + UInt32 decompressedSize = (uint)(comp[4] << 24 | comp[5] << 16 | comp[6] << 8 | comp[7]); + var data = Decompress(comp); + // var data = EveryFileExplorer.YAZ0.Decompress(comp); + // System.IO.File.WriteAllBytes("testYaz0.dec", data); + return new MemoryStream(data); + } + + [DllImport("Lib/Yaz0.dll")] + static unsafe extern byte* decompress(byte* src, uint src_len, uint* dest_len); + + [DllImport("Lib/Yaz0.dll")] + static unsafe extern byte* compress(byte* src, uint src_len, uint* dest_len, byte opt_compr); + + [DllImport("Lib/Yaz0.dll")] + static unsafe extern void freePtr(void* ptr); + + private unsafe byte[] Decompress(byte[] data) + { + return EveryFileExplorer.YAZ0.Decompress(data); + + uint src_len = (uint)data.Length; + + uint dest_len; + fixed (byte* inputPtr = data) + { + byte* outputPtr = decompress(inputPtr, src_len, &dest_len); + byte[] decomp = new byte[dest_len]; + Marshal.Copy((IntPtr)outputPtr, decomp, 0, (int)dest_len); + freePtr(outputPtr); + return decomp; + } } public Stream Compress(Stream stream) { - return new MemoryStream(EveryFileExplorer.YAZ0.Compress(stream.ToArray(),Runtime.Yaz0CompressionLevel, (uint)Alignment)); + // return new MemoryStream(EveryFileExplorer.YAZ0.Compress( + // stream.ToArray(), Runtime.Yaz0CompressionLevel, (uint)Alignment)); + + var mem = new MemoryStream(); + using (var writer = new FileWriter(mem, true)) + { + writer.SetByteOrder(true); + writer.WriteSignature("Yaz0"); + writer.Write((uint)stream.Length); + writer.Write((uint)Alignment); + writer.Write(0); + writer.Write(Compress(stream.ToArray(), (byte)Runtime.Yaz0CompressionLevel)); + } + return mem; + } + + public static unsafe byte[] Compress(byte[] src, byte opt_compr) + { + uint src_len = (uint)src.Length; + + uint dest_len; + fixed (byte* inputPtr = src) + { + byte* outputPtr = compress(inputPtr, src_len, &dest_len, opt_compr); + byte[] comp = new byte[dest_len]; + Marshal.Copy((IntPtr)outputPtr, comp, 0, (int)dest_len); + freePtr(outputPtr); + return comp; + } + + Console.WriteLine($"opt_compr {opt_compr}"); + + uint range; + if (opt_compr == 0) + range = 0; + else if (opt_compr < 9) + range = (uint)(0x10e0 * opt_compr / 9 - 0x0e0); + else + range = 0x1000; + + uint pos = 0; + uint src_end = (uint)src.Length; + + byte[] dest = new byte[src_end + (src_end + 8) / 8]; + uint dest_pos = 0; + uint code_byte_pos = 0; + + ulong found = 0; + ulong found_len = 0; + uint delta; + int max_len = 0x111; + + while (pos < src_end) + { + code_byte_pos = dest_pos; + dest[dest_pos] = 0; dest_pos++; + + for (int i = 0; i < 8; i++) + { + if (pos >= src_end) + break; + + found_len = 1; + + if (range != 0) + { + // Going after speed here. + // Dunno if using a tuple is slower, so I don't want to risk it. + ulong search = compressionSearch(src, pos, max_len, range, src_end); + found = search >> 32; + found_len = search & 0xFFFFFFFF; + } + + if (found_len > 2) + { + delta = (uint)(pos - found - 1); + + if (found_len < 0x12) + { + dest[dest_pos] = (byte)(delta >> 8 | (found_len - 2) << 4); dest_pos++; + dest[dest_pos] = (byte)(delta & 0xFF); dest_pos++; + } + else + { + dest[dest_pos] = (byte)(delta >> 8); dest_pos++; + dest[dest_pos] = (byte)(delta & 0xFF); dest_pos++; + dest[dest_pos] = (byte)((found_len - 0x12) & 0xFF); dest_pos++; + } + + pos += (uint)found_len; + } + + else + { + dest[code_byte_pos] |= (byte)(1 << (7 - i)); + dest[dest_pos] = src[pos]; dest_pos++; pos++; + } + } + } + + byte[] result = new byte[dest_pos]; + Array.Copy(dest, result, dest_pos); + return result; + } + + public static ulong ReadULong(byte[] v, uint i) + { + int i1 = v[i] | (v[i + 1] << 8) | (v[i + 2] << 16) | (v[i + 3] << 24); + int i2 = v[i + 4] | (v[i + 5] << 8) | (v[i + 6] << 16) | (v[i + 7] << 24); + return (ulong)((uint)i1 | ((long)i2 << 32)); + } + + public static long IndexOfByte(byte[] src, byte v, uint i, uint c) + { + // https://stackoverflow.com/a/46678141 + + ulong t; + uint p, pEnd; + + for (p = i; ((long)p & 7) != 0; c--, p++) + if (c == 0) + return -1; + else if (src[p] == v) + return p; + + ulong r = v; r |= r << 8; r |= r << 16; r |= r << 32; + + for (pEnd = (uint)(p + (c & ~7)); p < pEnd; p += 8) + { + t = ReadULong(src, p) ^ r; + t = (t - 0x0101010101010101) & ~t & 0x8080808080808080; + if (t != 0) + { + t &= (ulong)-(long)t; + return p + dbj8[t * 0x07EDD5E59A4E28C2 >> 58]; + } + } + + for (pEnd += c & 7; p < pEnd; p++) + if (src[p] == v) + return p; + + return -1; + } + + readonly static sbyte[] dbj8 = + { + 7, -1, -1, -1, -1, 5, -1, -1, -1, 4, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 6, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 3, -1, -1, -1, -1, -1, -1, 1, -1, 2, 0, -1, -1, + }; + + public static unsafe long find(byte[] byteArray, byte byteToFind, uint start, uint length) + { + return Array.IndexOf(byteArray, byteToFind, (int)start, (int)length); + return IndexOfByte(byteArray, byteToFind, start, length); + } + + public static ulong compressionSearch(byte[] src, uint pos, int max_len, uint range, uint src_end) + { + ulong found_len = 1; + ulong found = 0; + + long search; + uint cmp_end, cmp1, cmp2; + byte c1; + uint len; + + if (pos + 2 < src_end) + { + search = ((long)pos - (long)range); + if (search < 0) + search = 0; + + cmp_end = (uint)(pos + max_len); + if (cmp_end > src_end) + cmp_end = src_end; + + c1 = src[pos]; + while (search < pos) + { + search = find(src, c1, (uint)search, (uint)(pos - search)); + if (search < 0) + break; + + cmp1 = (uint)(search + 1); + cmp2 = pos + 1; + + while (cmp2 < cmp_end && src[cmp1] == src[cmp2]) + { + cmp1++; cmp2++; + } + + len = cmp2 - pos; + if (found_len < len) + { + found_len = len; + found = (uint)search; + if ((long)found_len == max_len) + break; + } + + search++; + } + } + + return (ulong)((found << 32) | found_len); } } } diff --git a/Switch_Toolbox_Library/FileFormats/Assimp/Assimp.cs b/Switch_Toolbox_Library/FileFormats/Assimp/Assimp.cs index 3e441417..899dd08c 100644 --- a/Switch_Toolbox_Library/FileFormats/Assimp/Assimp.cs +++ b/Switch_Toolbox_Library/FileFormats/Assimp/Assimp.cs @@ -71,8 +71,7 @@ namespace Toolbox.Library Flags |= PostProcessSteps.CalculateTangentSpace; Flags |= PostProcessSteps.GenerateNormals;*/ - - + scene = Importer.ImportFile(FileName, settings.GetFlags()); if (Utils.GetExtension(FileName) == ".dae") @@ -498,6 +497,11 @@ namespace Toolbox.Library Name.Contains("Skl_Root") || Name.Contains("nw4f_root") || Name.Contains("skl_root") || Name.Contains("all_root") || Name.Contains("_root") || Name.Contains("Root"); + if (DaeHelper.VisualSceneNodeTypes.ContainsKey(Name)) { + if (DaeHelper.VisualSceneNodeTypes[Name] == "JOINT") + IsBone = true; + } + //Root set saved by this tool //Get our root manually as it's a child to this bool IsRootSkeleton = Name == "skeleton_root"; diff --git a/Switch_Toolbox_Library/FileFormats/DAE/DAE.cs b/Switch_Toolbox_Library/FileFormats/DAE/DAE.cs index adeaaa9b..4f2eac52 100644 --- a/Switch_Toolbox_Library/FileFormats/DAE/DAE.cs +++ b/Switch_Toolbox_Library/FileFormats/DAE/DAE.cs @@ -26,6 +26,8 @@ namespace Toolbox.Library public bool FlipTexCoordsVertical = true; public bool OnlyExportRiggedBones = false; + public bool AddLeafBones = false; + public Version FileVersion = new Version(); public ProgramPreset Preset = ProgramPreset.NONE; diff --git a/Switch_Toolbox_Library/Forms/Dialogs/ExportModelSettings.Designer.cs b/Switch_Toolbox_Library/Forms/Dialogs/ExportModelSettings.Designer.cs index a125feb1..bfbb5963 100644 --- a/Switch_Toolbox_Library/Forms/Dialogs/ExportModelSettings.Designer.cs +++ b/Switch_Toolbox_Library/Forms/Dialogs/ExportModelSettings.Designer.cs @@ -34,24 +34,28 @@ this.chkFlipUvsVertical = new Toolbox.Library.Forms.STCheckBox(); this.chkOldExporter = new Toolbox.Library.Forms.STCheckBox(); this.chkVertexColors = new Toolbox.Library.Forms.STCheckBox(); + this.chkExportRiggedBonesOnly = new Toolbox.Library.Forms.STCheckBox(); this.contentContainer.SuspendLayout(); this.SuspendLayout(); // // contentContainer // + this.contentContainer.Controls.Add(this.chkExportRiggedBonesOnly); this.contentContainer.Controls.Add(this.chkVertexColors); this.contentContainer.Controls.Add(this.chkOldExporter); this.contentContainer.Controls.Add(this.chkFlipUvsVertical); this.contentContainer.Controls.Add(this.stButton2); this.contentContainer.Controls.Add(this.stButton1); this.contentContainer.Controls.Add(this.exportTexturesChkBox); - this.contentContainer.Size = new System.Drawing.Size(329, 173); + this.contentContainer.Size = new System.Drawing.Size(338, 267); + this.contentContainer.Paint += new System.Windows.Forms.PaintEventHandler(this.contentContainer_Paint); this.contentContainer.Controls.SetChildIndex(this.exportTexturesChkBox, 0); this.contentContainer.Controls.SetChildIndex(this.stButton1, 0); this.contentContainer.Controls.SetChildIndex(this.stButton2, 0); this.contentContainer.Controls.SetChildIndex(this.chkFlipUvsVertical, 0); this.contentContainer.Controls.SetChildIndex(this.chkOldExporter, 0); this.contentContainer.Controls.SetChildIndex(this.chkVertexColors, 0); + this.contentContainer.Controls.SetChildIndex(this.chkExportRiggedBonesOnly, 0); // // exportTexturesChkBox // @@ -70,7 +74,7 @@ // this.stButton1.DialogResult = System.Windows.Forms.DialogResult.Cancel; this.stButton1.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.stButton1.Location = new System.Drawing.Point(244, 141); + this.stButton1.Location = new System.Drawing.Point(254, 235); this.stButton1.Name = "stButton1"; this.stButton1.Size = new System.Drawing.Size(75, 23); this.stButton1.TabIndex = 12; @@ -81,7 +85,7 @@ // this.stButton2.DialogResult = System.Windows.Forms.DialogResult.OK; this.stButton2.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.stButton2.Location = new System.Drawing.Point(163, 141); + this.stButton2.Location = new System.Drawing.Point(173, 235); this.stButton2.Name = "stButton2"; this.stButton2.Size = new System.Drawing.Size(75, 23); this.stButton2.TabIndex = 13; @@ -91,7 +95,7 @@ // chkFlipUvsVertical // this.chkFlipUvsVertical.AutoSize = true; - this.chkFlipUvsVertical.Location = new System.Drawing.Point(23, 70); + this.chkFlipUvsVertical.Location = new System.Drawing.Point(22, 126); this.chkFlipUvsVertical.Name = "chkFlipUvsVertical"; this.chkFlipUvsVertical.Size = new System.Drawing.Size(101, 17); this.chkFlipUvsVertical.TabIndex = 14; @@ -102,7 +106,7 @@ // chkOldExporter // this.chkOldExporter.AutoSize = true; - this.chkOldExporter.Location = new System.Drawing.Point(23, 104); + this.chkOldExporter.Location = new System.Drawing.Point(22, 149); this.chkOldExporter.Name = "chkOldExporter"; this.chkOldExporter.Size = new System.Drawing.Size(200, 17); this.chkOldExporter.TabIndex = 15; @@ -115,7 +119,7 @@ this.chkVertexColors.AutoSize = true; this.chkVertexColors.Checked = true; this.chkVertexColors.CheckState = System.Windows.Forms.CheckState.Checked; - this.chkVertexColors.Location = new System.Drawing.Point(132, 47); + this.chkVertexColors.Location = new System.Drawing.Point(23, 70); this.chkVertexColors.Name = "chkVertexColors"; this.chkVertexColors.Size = new System.Drawing.Size(121, 17); this.chkVertexColors.TabIndex = 16; @@ -123,11 +127,23 @@ this.chkVertexColors.UseVisualStyleBackColor = true; this.chkVertexColors.CheckedChanged += new System.EventHandler(this.chkVertexColors_CheckedChanged); // + // chkExportRiggedBonesOnly + // + this.chkExportRiggedBonesOnly.AutoSize = true; + this.chkExportRiggedBonesOnly.Enabled = false; + this.chkExportRiggedBonesOnly.Location = new System.Drawing.Point(23, 93); + this.chkExportRiggedBonesOnly.Name = "chkExportRiggedBonesOnly"; + this.chkExportRiggedBonesOnly.Size = new System.Drawing.Size(150, 17); + this.chkExportRiggedBonesOnly.TabIndex = 17; + this.chkExportRiggedBonesOnly.Text = "Export Only Rigged Bones"; + this.chkExportRiggedBonesOnly.UseVisualStyleBackColor = true; + this.chkExportRiggedBonesOnly.CheckedChanged += new System.EventHandler(this.chkExportRiggedBonesOnly_CheckedChanged); + // // ExportModelSettings // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(335, 178); + this.ClientSize = new System.Drawing.Size(344, 272); this.Name = "ExportModelSettings"; this.Text = "Export Settings"; this.contentContainer.ResumeLayout(false); @@ -144,5 +160,6 @@ private STCheckBox chkFlipUvsVertical; protected STCheckBox chkOldExporter; private STCheckBox chkVertexColors; + private STCheckBox chkExportRiggedBonesOnly; } } \ No newline at end of file diff --git a/Switch_Toolbox_Library/Forms/Dialogs/ExportModelSettings.cs b/Switch_Toolbox_Library/Forms/Dialogs/ExportModelSettings.cs index 53429616..80ad79ed 100644 --- a/Switch_Toolbox_Library/Forms/Dialogs/ExportModelSettings.cs +++ b/Switch_Toolbox_Library/Forms/Dialogs/ExportModelSettings.cs @@ -37,5 +37,14 @@ namespace Toolbox.Library.Forms private void chkVertexColors_CheckedChanged(object sender, EventArgs e) { Settings.UseVertexColors = chkVertexColors.Checked; } + + private void chkExportRiggedBonesOnly_CheckedChanged(object sender, EventArgs e) { + Settings.OnlyExportRiggedBones = chkExportRiggedBonesOnly.Checked; + } + + private void contentContainer_Paint(object sender, PaintEventArgs e) + { + + } } } diff --git a/Switch_Toolbox_Library/Forms/Editors/TextEditor/TextEditor.cs b/Switch_Toolbox_Library/Forms/Editors/TextEditor/TextEditor.cs index bb41da48..f3c91959 100644 --- a/Switch_Toolbox_Library/Forms/Editors/TextEditor/TextEditor.cs +++ b/Switch_Toolbox_Library/Forms/Editors/TextEditor/TextEditor.cs @@ -94,6 +94,32 @@ namespace Toolbox.Library.Forms } } + private bool isJson; + public bool IsJson + { + get + { + return isJson; + } + set + { + isJson = true; + + if (isJson) + { + scintilla1.Styles[Style.Json.Default].ForeColor = Color.Silver; + scintilla1.Styles[Style.Json.BlockComment].ForeColor = Color.FromArgb(0, 128, 0); // Green + scintilla1.Styles[Style.Json.LineComment].ForeColor = Color.FromArgb(0, 128, 0); // Green + scintilla1.Styles[Style.Json.Number].ForeColor = Color.Olive; + scintilla1.Styles[Style.Json.PropertyName].ForeColor = Color.Blue; + scintilla1.Styles[Style.Json.String].ForeColor = Color.FromArgb(163, 21, 21); // Red + scintilla1.Styles[Style.Json.StringEol].BackColor = Color.Pink; + scintilla1.Styles[Style.Json.Operator].ForeColor = Color.Purple; + scintilla1.Lexer = Lexer.Json; + } + } + } + private bool isYAML; public bool IsYAML { diff --git a/Switch_Toolbox_Library/Forms/Editors/UV/PickableUVMap.cs b/Switch_Toolbox_Library/Forms/Editors/UV/PickableUVMap.cs new file mode 100644 index 00000000..332505f4 --- /dev/null +++ b/Switch_Toolbox_Library/Forms/Editors/UV/PickableUVMap.cs @@ -0,0 +1,203 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Toolbox.Library; +using OpenTK; +using OpenTK.Graphics.OpenGL; +using System.Drawing; + +namespace Toolbox.Library.Forms +{ + public class PickableUVMap : IPickable2DObject + { + public bool IsSelected { get; set; } + public bool IsHovered { get; set; } + + public bool IsHit(float x, float y) + { + //Calcuate the total uv bounds + + return false; + } + + public void PickTranslate(float x, float y, float z) + { + + } + + public void PickScale(float x, float y, float z) + { + + } + + public void PickRotate(float x, float y, float z) + { + + } + + public void CalculateBoundry() + { + + } + + #region Draw UVs + + public void DrawUVs(int PolygonGroupIndex, int UvChannelIndex, List genericObjects, STGenericMatTexture textureMap) + { + if (genericObjects.Count == 0) return; + + foreach (var genericObject in genericObjects) + { + int divisions = 4; + int lineWidth = 1; + + Color uvColor = Runtime.UVEditor.UVColor; + Color gridColor = Color.Black; + + List f = new List(); + int displayFaceSize = 0; + if (genericObject.lodMeshes.Count > 0) + { + f = genericObject.lodMeshes[0].getDisplayFace(); + displayFaceSize = genericObject.lodMeshes[0].displayFaceSize; + } + if (genericObject.PolygonGroups.Count > 0) + { + if (PolygonGroupIndex == -1) + { + foreach (var group in genericObject.PolygonGroups) + { + f.AddRange(group.GetDisplayFace()); + displayFaceSize += group.displayFaceSize; + } + } + else + { + if (genericObject.PolygonGroups.Count > PolygonGroupIndex) + { + f = genericObject.PolygonGroups[PolygonGroupIndex].GetDisplayFace(); + displayFaceSize = genericObject.PolygonGroups[PolygonGroupIndex].displayFaceSize; + } + } + } + + Console.WriteLine($"displayFaceSize {f.Count} {displayFaceSize} {genericObject.vertices.Count }"); + + for (int v = 0; v < displayFaceSize; v += 3) + { + if (displayFaceSize < 3 || genericObject.vertices.Count < 3) + return; + + Vector2 v1 = new Vector2(0); + Vector2 v2 = new Vector2(0); + Vector2 v3 = new Vector2(0); + + if (f.Count < v + 2) + continue; + + if (UvChannelIndex == 0) + { + v1 = genericObject.vertices[f[v]].uv0; + v2 = genericObject.vertices[f[v + 1]].uv0; + v3 = genericObject.vertices[f[v + 2]].uv0; + } + if (UvChannelIndex == 1) + { + v1 = genericObject.vertices[f[v]].uv1; + v2 = genericObject.vertices[f[v + 1]].uv1; + v3 = genericObject.vertices[f[v + 2]].uv1; + } + if (UvChannelIndex == 2) + { + v1 = genericObject.vertices[f[v]].uv2; + v2 = genericObject.vertices[f[v + 1]].uv2; + v3 = genericObject.vertices[f[v + 2]].uv2; + } + + v1 = new Vector2(v1.X, 1 - v1.Y); + v2 = new Vector2(v2.X, 1 - v2.Y); + v3 = new Vector2(v3.X, 1 - v3.Y); + + DrawUVTriangleAndGrid(v1, v2, v3, divisions, uvColor, lineWidth, gridColor, textureMap); + } + } + } + private void DrawUVTriangleAndGrid(Vector2 v1, Vector2 v2, Vector2 v3, int divisions, + Color uvColor, int lineWidth, Color gridColor, STGenericMatTexture textureMap) + { + GL.UseProgram(0); + + float bounds = 1; + Vector2 scaleUv = new Vector2(2); + Vector2 transUv = new Vector2(-1f); + + if (textureMap != null && textureMap.Transform != null) + { + scaleUv *= textureMap.Transform.Scale; + transUv += textureMap.Transform.Translate; + } + + //Disable textures so they don't affect color + GL.Disable(EnableCap.Texture2D); + DrawUvTriangle(v1, v2, v3, uvColor, scaleUv, transUv); + + // Draw Grid + GL.Color3(gridColor); + GL.LineWidth(1); + + // DrawHorizontalGrid(divisions, bounds, scaleUv); + // DrawVerticalGrid(divisions, bounds, scaleUv); + } + + private static void DrawUvTriangle(Vector2 v1, Vector2 v2, Vector2 v3, Color uvColor, Vector2 scaleUv, Vector2 transUv) + { + GL.Color3(uvColor); + GL.Begin(PrimitiveType.Lines); + GL.LineWidth(3); + GL.Vertex2(v1 * scaleUv + transUv); + GL.Vertex2(v2 * scaleUv + transUv); + GL.End(); + + GL.Begin(PrimitiveType.Lines); + GL.LineWidth(3); + GL.Vertex2(v2 * scaleUv + transUv); + GL.Vertex2(v3 * scaleUv + transUv); + GL.End(); + + GL.Begin(PrimitiveType.Lines); + GL.LineWidth(3); + GL.Vertex2(v3 * scaleUv + transUv); + GL.Vertex2(v1 * scaleUv + transUv); + GL.End(); + } + + private static void DrawVerticalGrid(int divisions, float bounds, Vector2 scaleUv) + { + int verticalCount = divisions; + for (int i = 0; i < verticalCount * bounds; i++) + { + GL.Begin(PrimitiveType.Lines); + GL.Vertex2(new Vector2((1.0f / verticalCount) * i, -bounds) * scaleUv); + GL.Vertex2(new Vector2((1.0f / verticalCount) * i, bounds) * scaleUv); + GL.End(); + } + } + + private static void DrawHorizontalGrid(int divisions, float bounds, Vector2 scaleUv) + { + int horizontalCount = divisions; + for (int i = 0; i < horizontalCount * bounds; i++) + { + GL.Begin(PrimitiveType.Lines); + GL.Vertex2(new Vector2(-bounds, (1.0f / horizontalCount) * i) * scaleUv); + GL.Vertex2(new Vector2(bounds, (1.0f / horizontalCount) * i) * scaleUv); + GL.End(); + } + } + + #endregion + + } +} diff --git a/Switch_Toolbox_Library/Forms/Editors/UV/UVEditor.Designer.cs b/Switch_Toolbox_Library/Forms/Editors/UV/UVEditor.Designer.cs index ba02aeb7..ad1f10d6 100644 --- a/Switch_Toolbox_Library/Forms/Editors/UV/UVEditor.Designer.cs +++ b/Switch_Toolbox_Library/Forms/Editors/UV/UVEditor.Designer.cs @@ -28,7 +28,6 @@ /// private void InitializeComponent() { - this.gL_ControlLegacy2D1 = new OpenTK.GLControl(); this.scaleYUD = new Toolbox.Library.Forms.NumericUpDownFloat(); this.transYUD = new Toolbox.Library.Forms.NumericUpDownFloat(); this.transXUD = new Toolbox.Library.Forms.NumericUpDownFloat(); @@ -48,6 +47,7 @@ this.stButton1 = new Toolbox.Library.Forms.STButton(); this.splitter1 = new System.Windows.Forms.Splitter(); this.stPanel3 = new Toolbox.Library.Forms.STPanel(); + this.uvViewport1 = new Toolbox.Library.Forms.UVViewport(); ((System.ComponentModel.ISupportInitialize)(this.scaleYUD)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.transYUD)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.transXUD)).BeginInit(); @@ -57,21 +57,6 @@ this.stPanel3.SuspendLayout(); this.SuspendLayout(); // - // gL_ControlLegacy2D1 - // - this.gL_ControlLegacy2D1.BackColor = System.Drawing.Color.Black; - this.gL_ControlLegacy2D1.Dock = System.Windows.Forms.DockStyle.Fill; - this.gL_ControlLegacy2D1.Location = new System.Drawing.Point(0, 0); - this.gL_ControlLegacy2D1.Name = "gL_ControlLegacy2D1"; - this.gL_ControlLegacy2D1.Size = new System.Drawing.Size(443, 454); - this.gL_ControlLegacy2D1.TabIndex = 2; - this.gL_ControlLegacy2D1.VSync = false; - this.gL_ControlLegacy2D1.Paint += new System.Windows.Forms.PaintEventHandler(this.gL_ControlLegacy2D1_Paint); - this.gL_ControlLegacy2D1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.gL_ControlLegacy2D1_MouseDown); - this.gL_ControlLegacy2D1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.gL_ControlLegacy2D1_MouseMove); - this.gL_ControlLegacy2D1.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.OnMouseWheel); - this.gL_ControlLegacy2D1.Resize += new System.EventHandler(this.gL_ControlLegacy2D1_Resize); - // // scaleYUD // this.scaleYUD.DecimalPlaces = 5; @@ -209,6 +194,7 @@ this.drawableContainerCB.BorderStyle = System.Windows.Forms.ButtonBorderStyle.Solid; this.drawableContainerCB.ButtonColor = System.Drawing.Color.Empty; this.drawableContainerCB.FormattingEnabled = true; + this.drawableContainerCB.IsReadOnly = false; this.drawableContainerCB.Location = new System.Drawing.Point(294, 7); this.drawableContainerCB.Name = "drawableContainerCB"; this.drawableContainerCB.Size = new System.Drawing.Size(146, 21); @@ -223,6 +209,7 @@ this.meshesCB.BorderStyle = System.Windows.Forms.ButtonBorderStyle.Solid; this.meshesCB.ButtonColor = System.Drawing.Color.Empty; this.meshesCB.FormattingEnabled = true; + this.meshesCB.IsReadOnly = false; this.meshesCB.Location = new System.Drawing.Point(294, 34); this.meshesCB.Name = "meshesCB"; this.meshesCB.Size = new System.Drawing.Size(146, 21); @@ -280,6 +267,7 @@ this.textureCB.BorderStyle = System.Windows.Forms.ButtonBorderStyle.Solid; this.textureCB.ButtonColor = System.Drawing.Color.Empty; this.textureCB.FormattingEnabled = true; + this.textureCB.IsReadOnly = false; this.textureCB.Location = new System.Drawing.Point(446, 34); this.textureCB.Name = "textureCB"; this.textureCB.Size = new System.Drawing.Size(156, 21); @@ -293,6 +281,7 @@ this.comboBox1.BorderStyle = System.Windows.Forms.ButtonBorderStyle.Solid; this.comboBox1.ButtonColor = System.Drawing.Color.Empty; this.comboBox1.FormattingEnabled = true; + this.comboBox1.IsReadOnly = false; this.comboBox1.Location = new System.Drawing.Point(550, 7); this.comboBox1.Name = "comboBox1"; this.comboBox1.Size = new System.Drawing.Size(52, 21); @@ -312,7 +301,7 @@ // btnApplyTransform // this.btnApplyTransform.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.btnApplyTransform.Location = new System.Drawing.Point(3, 138); + this.btnApplyTransform.Location = new System.Drawing.Point(6, 279); this.btnApplyTransform.Name = "btnApplyTransform"; this.btnApplyTransform.Size = new System.Drawing.Size(119, 23); this.btnApplyTransform.TabIndex = 9; @@ -357,13 +346,24 @@ // // stPanel3 // - this.stPanel3.Controls.Add(this.gL_ControlLegacy2D1); + this.stPanel3.Controls.Add(this.uvViewport1); this.stPanel3.Dock = System.Windows.Forms.DockStyle.Fill; this.stPanel3.Location = new System.Drawing.Point(162, 70); this.stPanel3.Name = "stPanel3"; this.stPanel3.Size = new System.Drawing.Size(443, 454); this.stPanel3.TabIndex = 5; // + // uvViewport1 + // + this.uvViewport1.ActiveTextureMap = null; + this.uvViewport1.Dock = System.Windows.Forms.DockStyle.Fill; + this.uvViewport1.Location = new System.Drawing.Point(0, 0); + this.uvViewport1.Name = "uvViewport1"; + this.uvViewport1.Size = new System.Drawing.Size(443, 454); + this.uvViewport1.TabIndex = 0; + this.uvViewport1.UseGrid = false; + this.uvViewport1.UseOrtho = true; + // // UVEditor // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -391,7 +391,6 @@ private STPanel stPanel1; private STLabel stLabel1; private Toolbox.Library.Forms.STComboBox comboBox1; - private OpenTK.GLControl gL_ControlLegacy2D1; private Toolbox.Library.Forms.STComboBox textureCB; private STLabel stLabel2; private NumericUpDownFloat scaleXUD; @@ -408,5 +407,6 @@ private STPanel stPanel3; private STButton stButton1; private STComboBox drawableContainerCB; + private UVViewport uvViewport1; } } \ No newline at end of file diff --git a/Switch_Toolbox_Library/Forms/Editors/UV/UVEditor.cs b/Switch_Toolbox_Library/Forms/Editors/UV/UVEditor.cs index 768095d8..8675cdda 100644 --- a/Switch_Toolbox_Library/Forms/Editors/UV/UVEditor.cs +++ b/Switch_Toolbox_Library/Forms/Editors/UV/UVEditor.cs @@ -23,11 +23,13 @@ namespace Toolbox.Library.Forms comboBox1.Items.Add(2); comboBox1.SelectedIndex = 0; - barSlider1.Value = 0; + barSlider1.Value = barSlider1.Maximum; } public class ActiveTexture { + public STGenericMatTexture MatTexture; + public Vector2 UVScale = new Vector2(1); public Vector2 UVTranslate = new Vector2(0); public float UVRotate = 0; @@ -46,7 +48,7 @@ namespace Toolbox.Library.Forms } public ActiveTexture activeTexture = new ActiveTexture(); - public float brightness = 0.5f; //To see uv maps easier + public float brightness = 1.0f; //To see uv maps easier public int UvChannelIndex = 0; public List Objects = new List(); @@ -58,10 +60,7 @@ namespace Toolbox.Library.Forms { List objects = new List(); for (int i = 0; i < Objects.Count; i++) - { - if (Objects[i].GetMaterial() == ActiveMaterial) - objects.Add(Objects[i]); - } + objects.Add(Objects[i]); return objects; } @@ -84,11 +83,11 @@ namespace Toolbox.Library.Forms drawableContainerCB.SelectedIndex = 0; } + public int texid; + bool IsSRTLoaded = false; public void Reset() { - barSlider1.Value = (int)(brightness * 100); - scaleXUD.Value = 1; scaleYUD.Value = 1; transXUD.Value = 0; @@ -110,212 +109,8 @@ namespace Toolbox.Library.Forms meshesCB.SelectedIndex = 0; } - public int texid; - public void DrawUVs(List genericObjects) + private void BindTexture() { - foreach (var genericObject in genericObjects) - { - int divisions = 4; - int lineWidth = 1; - - Color uvColor = Color.LightGreen; - Color gridColor = Color.Black; - - List f = new List(); - int displayFaceSize = 0; - if (genericObject.lodMeshes.Count > 0) - { - f = genericObject.lodMeshes[0].getDisplayFace(); - displayFaceSize = genericObject.lodMeshes[0].displayFaceSize; - } - if (genericObject.PolygonGroups.Count > 0) - { - f = genericObject.PolygonGroups[0].GetDisplayFace(); - displayFaceSize = genericObject.PolygonGroups[0].displayFaceSize; - } - - for (int v = 0; v < displayFaceSize; v += 3) - { - if (displayFaceSize < 3 || - genericObject.vertices.Count < 3) - return; - - Vector2 v1 = new Vector2(0); - Vector2 v2 = new Vector2(0); - Vector2 v3 = new Vector2(0); - - if (f.Count < v + 2) - continue; - - if (UvChannelIndex == 0) - { - v1 = genericObject.vertices[f[v]].uv0; - v2 = genericObject.vertices[f[v + 1]].uv0; - v3 = genericObject.vertices[f[v + 2]].uv0; - } - if (UvChannelIndex == 1) - { - v1 = genericObject.vertices[f[v]].uv1; - v2 = genericObject.vertices[f[v + 1]].uv1; - v3 = genericObject.vertices[f[v + 2]].uv1; - } - if (UvChannelIndex == 2) - { - v1 = genericObject.vertices[f[v]].uv2; - v2 = genericObject.vertices[f[v + 1]].uv2; - v3 = genericObject.vertices[f[v + 2]].uv2; - } - - v1 = new Vector2(v1.X, 1 - v1.Y); - v2 = new Vector2(v2.X, 1 - v2.Y); - v3 = new Vector2(v3.X, 1 - v3.Y); - - DrawUVTriangleAndGrid(v1, v2, v3, divisions, uvColor, lineWidth, gridColor); - } - } - } - private void DrawUVTriangleAndGrid(Vector2 v1, Vector2 v2, Vector2 v3, int divisions, - Color uvColor, int lineWidth, Color gridColor) - { - GL.UseProgram(0); - - float bounds = 1; - Vector2 scaleUv = activeTexture.UVScale * new Vector2(2); - Vector2 transUv = activeTexture.UVTranslate - new Vector2(1f); - - //Disable textures so they don't affect color - GL.Disable(EnableCap.Texture2D); - DrawUvTriangle(v1, v2, v3, uvColor, scaleUv, transUv); - - // Draw Grid - GL.Color3(gridColor); - // DrawHorizontalGrid(divisions, bounds, scaleUv); - // DrawVerticalGrid(divisions, bounds, scaleUv); - } - - private static void DrawUvTriangle(Vector2 v1, Vector2 v2, Vector2 v3, Color uvColor, Vector2 scaleUv, Vector2 transUv) - { - GL.Color3(uvColor); - GL.Begin(PrimitiveType.Lines); - GL.LineWidth(3); - GL.Vertex2(v1 * scaleUv + transUv); - GL.Vertex2(v2 * scaleUv + transUv); - GL.End(); - - GL.Begin(PrimitiveType.Lines); - GL.LineWidth(3); - GL.Vertex2(v2 * scaleUv + transUv); - GL.Vertex2(v3 * scaleUv + transUv); - GL.End(); - - GL.Begin(PrimitiveType.Lines); - GL.LineWidth(3); - GL.Vertex2(v3 * scaleUv + transUv); - GL.Vertex2(v1 * scaleUv + transUv); - GL.End(); - } - - private void SetupRendering(float lineWidth) - { - // Go to 2D - GL.Viewport(0, 0, gL_ControlLegacy2D1.Width, gL_ControlLegacy2D1.Height); - GL.MatrixMode(MatrixMode.Projection); - GL.PushMatrix(); - GL.LoadIdentity(); - float aspect = (float)gL_ControlLegacy2D1.Width / (float)gL_ControlLegacy2D1.Height; - GL.Ortho(-aspect, aspect, -1, 1, -1, 1); - GL.MatrixMode(MatrixMode.Modelview); - GL.PushMatrix(); - GL.LoadIdentity(); - GL.LineWidth(lineWidth); - - // Draw over everything - GL.Disable(EnableCap.DepthTest); - GL.Disable(EnableCap.CullFace); - } - - private static void DrawVerticalGrid(int divisions, float bounds, Vector2 scaleUv) - { - int verticalCount = divisions; - for (int i = 0; i < verticalCount * bounds; i++) - { - GL.Begin(PrimitiveType.Lines); - GL.Vertex2(new Vector2((1.0f / verticalCount) * i, -bounds) * scaleUv); - GL.Vertex2(new Vector2((1.0f / verticalCount) * i, bounds) * scaleUv); - GL.End(); - } - } - - private static void DrawHorizontalGrid(int divisions, float bounds, Vector2 scaleUv) - { - int horizontalCount = divisions; - for (int i = 0; i < horizontalCount * bounds; i++) - { - GL.Begin(PrimitiveType.Lines); - GL.Vertex2(new Vector2(-bounds, (1.0f / horizontalCount) * i) * scaleUv); - GL.Vertex2(new Vector2(bounds, (1.0f / horizontalCount) * i) * scaleUv); - GL.End(); - } - } - - int PlaneSize = 1; - float PosX; - float PosY; - float ZoomValue = 1; - - Point MouseDownPos; - - private float FindHCF(float m, float n) - { - float temp, remainder; - if (m < n) - { - temp = m; - m = n; - n = temp; - } - while (true) - { - remainder = m % n; - if (remainder == 0) - return n; - else - m = n; - n = remainder; - } - } - - private void gL_ControlLegacy2D1_Paint(object sender, PaintEventArgs e) - { - if (!Runtime.OpenTKInitialized) - return; - - gL_ControlLegacy2D1.MakeCurrent(); - - SetupRendering(1); - - GL.ClearColor(System.Drawing.Color.FromArgb(40, 40, 40)); - GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); - - GL.Disable(EnableCap.Texture2D); - - //This usually won't be seen unless the textures aren't repeating much - DrawBackdrop(); - - float PlaneScaleX = gL_ControlLegacy2D1.Width / 512; - float PlaneScaleY = gL_ControlLegacy2D1.Height / 512; - - if (activeTexture.Width != 0 && activeTexture.Height != 0) - { - PlaneScaleX = (float)gL_ControlLegacy2D1.Width / (float)activeTexture.Width; - PlaneScaleY = (float)gL_ControlLegacy2D1.Height / (float)activeTexture.Height; - } - - //Now do the plane with uvs - GL.PushMatrix(); - GL.Scale(PlaneScaleY * ZoomValue, -PlaneScaleX * ZoomValue, 1); - GL.Translate(PosX, PosY, 0); - if (activeTexture.TextureIndex != -1) { //Draws a textured plan for our uvs to show on @@ -327,104 +122,7 @@ namespace Toolbox.Library.Forms // GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)STGenericMatTexture.wrapmode[activeTexture.wrapModeT]); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)STGenericMatTexture.minfilter[activeTexture.MinFilter]); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)STGenericMatTexture.magfilter[activeTexture.MagFilter]); - } - - //Params include Amount to repeat - DrawTexturedPlane(5); - - if (ActiveObjects.Count > 0) - DrawUVs(ActiveObjects); - - GL.UseProgram(0); - GL.PopMatrix(); - - gL_ControlLegacy2D1.SwapBuffers(); - } - private void DrawTexturedPlane(float scale) - { - Vector2 scaleCenter = new Vector2(0.5f, 0.5f); - - Vector2[] TexCoords = new Vector2[] { - new Vector2(1,1), - new Vector2(0,1), - new Vector2(0,0), - new Vector2(1,0), - }; - Vector2[] Positions = new Vector2[] { - new Vector2(1,-1), - new Vector2(-1,-1), - new Vector2(-1,1), - new Vector2(1,1), - }; - - TexCoords[0] = (TexCoords[0] - scaleCenter) * scale + scaleCenter; - TexCoords[1] = (TexCoords[1] - scaleCenter) * scale + scaleCenter; - TexCoords[2] = (TexCoords[2] - scaleCenter) * scale + scaleCenter; - TexCoords[3] = (TexCoords[3] - scaleCenter) * scale + scaleCenter; - Positions[0] = Positions[0] * scale; - Positions[1] = Positions[1] * scale; - Positions[2] = Positions[2] * scale; - Positions[3] = Positions[3] * scale; - - GL.Begin(PrimitiveType.Quads); - GL.Color3(brightness, brightness, brightness); - GL.TexCoord2(TexCoords[0]); - GL.Vertex2(Positions[0]); - GL.TexCoord2(TexCoords[1]); - GL.Vertex2(Positions[1]); - GL.TexCoord2(TexCoords[2]); - GL.Vertex2(Positions[2]); - GL.TexCoord2(TexCoords[3]); - GL.Vertex2(Positions[3]); - GL.End(); - } - private void DrawBackdrop() - { - //Background - GL.Begin(PrimitiveType.Quads); - GL.Color3(Color.FromArgb(40, 40, 40)); - GL.TexCoord2(1, 1); - GL.Vertex2(PlaneSize, -PlaneSize); - GL.TexCoord2(0, 1); - GL.Vertex2(-PlaneSize, -PlaneSize); - GL.TexCoord2(0, 0); - GL.Vertex2(-PlaneSize, PlaneSize); - GL.TexCoord2(1, 0); - GL.Vertex2(PlaneSize, PlaneSize); - GL.End(); - } - - private void OnMouseWheel(object sender, System.Windows.Forms.MouseEventArgs e) - { - if (e.Delta > 0 && ZoomValue > 0) ZoomValue += 0.1f; - if (e.Delta < 0 && ZoomValue < 30 && ZoomValue > 0.1) ZoomValue -= 0.1f; - - gL_ControlLegacy2D1.Invalidate(); - } - - private void gL_ControlLegacy2D1_MouseDown(object sender, MouseEventArgs e) - { - if (e.Button == MouseButtons.Left) - { - MouseDownPos = MousePosition; - } - } - - private void gL_ControlLegacy2D1_MouseMove(object sender, MouseEventArgs e) - { - if (e.Button != MouseButtons.Left) - return; - - Point temp = Control.MousePosition; - Point res = new Point(MouseDownPos.X - temp.X, MouseDownPos.Y - temp.Y); - - PosX -= res.X * 0.001f; - PosY -= res.Y * 0.001f; - - gL_ControlLegacy2D1.Invalidate(); - - MouseDownPos = temp; } private void comboBox2_SelectedIndexChanged(object sender, EventArgs e) @@ -439,6 +137,8 @@ namespace Toolbox.Library.Forms transXUD.Value = (decimal)activeTexture.UVTranslate.X; transYUD.Value = (decimal)activeTexture.UVTranslate.Y; + uvViewport1.ActiveTextureMap = activeTexture.MatTexture; + var texture = Textures[activeTexture.TextureIndex]; if (texture.RenderableTex == null) @@ -448,7 +148,7 @@ namespace Toolbox.Library.Forms activeTexture.Width = texture.Width; activeTexture.Height = texture.Height; - gL_ControlLegacy2D1.Invalidate(); + uvViewport1.UpdateViewport(); IsSRTLoaded = true; } @@ -458,8 +158,8 @@ namespace Toolbox.Library.Forms { if (comboBox1.SelectedIndex >= 0) { - UvChannelIndex = comboBox1.SelectedIndex; - gL_ControlLegacy2D1.Invalidate(); + uvViewport1.UvChannelIndex = comboBox1.SelectedIndex; + uvViewport1.UpdateViewport(); } } @@ -470,7 +170,8 @@ namespace Toolbox.Library.Forms private void barSlider1_ValueChanged(object sender, EventArgs e) { brightness = (float)barSlider1.Value / 100; - gL_ControlLegacy2D1.Invalidate(); + uvViewport1.Brightness = brightness; + uvViewport1.UpdateViewport(); } private void OnNumbicValueSRT_ValueChanged(object sender, EventArgs e) @@ -494,18 +195,16 @@ namespace Toolbox.Library.Forms transXUD.Value = 0; transYUD.Value = 0; - gL_ControlLegacy2D1.Invalidate(); - } - - private void gL_ControlLegacy2D1_Resize(object sender, EventArgs e) - { - gL_ControlLegacy2D1.Invalidate(); + uvViewport1.UpdateViewport(); } private void meshesCB_SelectedIndexChanged(object sender, EventArgs e) { if (meshesCB.SelectedIndex >= 0) { + uvViewport1.ActiveObjects.Clear(); + uvViewport1.ActiveObjects.Add(Objects[meshesCB.SelectedIndex]); + ActiveMaterial = Materials[meshesCB.SelectedIndex]; ChannelTextures.Clear(); @@ -521,6 +220,7 @@ namespace Toolbox.Library.Forms Textures.Add(texture); ActiveTexture tex = new ActiveTexture(); + tex.MatTexture = texMap; tex.TextureIndex = Textures.IndexOf(texture); tex.Width = texture.Width; tex.Height = texture.Height; @@ -564,9 +264,18 @@ namespace Toolbox.Library.Forms for (int m = 0; m < ((IMeshContainer)container.Drawables[i]).Meshes.Count; m++) { var mesh = ((IMeshContainer)container.Drawables[i]).Meshes[m]; - if (mesh.GetMaterial() != null) + Objects.Add(mesh); + + if (mesh.PolygonGroups.Count > 0) + { + foreach (var group in mesh.PolygonGroups) { + var mat = group.Material; + if (mat != null && !Materials.Contains(mat)) + Materials.Add(mat); + } + } + else if (mesh.GetMaterial() != null) { - Objects.Add(mesh); var mat = mesh.GetMaterial(); if (!Materials.Contains(mat)) { @@ -595,7 +304,7 @@ namespace Toolbox.Library.Forms Reset(); Refresh(); - gL_ControlLegacy2D1.Invalidate(); + uvViewport1.UpdateViewport(); } } } diff --git a/Switch_Toolbox_Library/Forms/Editors/UV/UVEditor2.Designer.cs b/Switch_Toolbox_Library/Forms/Editors/UV/UVEditor2.Designer.cs deleted file mode 100644 index 45afd856..00000000 --- a/Switch_Toolbox_Library/Forms/Editors/UV/UVEditor2.Designer.cs +++ /dev/null @@ -1,326 +0,0 @@ -namespace Toolbox.Library.Forms.test -{ - partial class UVEditor - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.gL_ControlLegacy2D1 = new OpenTK.GLControl(); - this.scaleYUD = new Toolbox.Library.Forms.NumericUpDownFloat(); - this.transYUD = new Toolbox.Library.Forms.NumericUpDownFloat(); - this.transXUD = new Toolbox.Library.Forms.NumericUpDownFloat(); - this.stLabel4 = new Toolbox.Library.Forms.STLabel(); - this.stLabel3 = new Toolbox.Library.Forms.STLabel(); - this.scaleXUD = new Toolbox.Library.Forms.NumericUpDownFloat(); - this.stPanel1 = new Toolbox.Library.Forms.STPanel(); - this.barSlider1 = new ColorSlider.ColorSlider(); - this.btnApplyTransform = new Toolbox.Library.Forms.STButton(); - this.stLabel2 = new Toolbox.Library.Forms.STLabel(); - this.comboBox2 = new Toolbox.Library.Forms.STComboBox(); - this.comboBox1 = new Toolbox.Library.Forms.STComboBox(); - this.stLabel1 = new Toolbox.Library.Forms.STLabel(); - ((System.ComponentModel.ISupportInitialize)(this.scaleYUD)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.transYUD)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.transXUD)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.scaleXUD)).BeginInit(); - this.stPanel1.SuspendLayout(); - this.SuspendLayout(); - // - // gL_ControlLegacy2D1 - // - this.gL_ControlLegacy2D1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.gL_ControlLegacy2D1.BackColor = System.Drawing.Color.Black; - this.gL_ControlLegacy2D1.Location = new System.Drawing.Point(0, 70); - this.gL_ControlLegacy2D1.Name = "gL_ControlLegacy2D1"; - this.gL_ControlLegacy2D1.Size = new System.Drawing.Size(605, 454); - this.gL_ControlLegacy2D1.TabIndex = 2; - this.gL_ControlLegacy2D1.VSync = false; - this.gL_ControlLegacy2D1.Paint += new System.Windows.Forms.PaintEventHandler(this.gL_ControlLegacy2D1_Paint); - this.gL_ControlLegacy2D1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.gL_ControlLegacy2D1_MouseDown); - this.gL_ControlLegacy2D1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.gL_ControlLegacy2D1_MouseMove); - this.gL_ControlLegacy2D1.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.OnMouseWheel); - this.gL_ControlLegacy2D1.Resize += new System.EventHandler(this.gL_ControlLegacy2D1_Resize); - // - // scaleYUD - // - this.scaleYUD.DecimalPlaces = 5; - this.scaleYUD.Increment = new decimal(new int[] { - 5, - 0, - 0, - 196608}); - this.scaleYUD.Location = new System.Drawing.Point(135, 43); - this.scaleYUD.Maximum = new decimal(new int[] { - 1000000000, - 0, - 0, - 0}); - this.scaleYUD.Minimum = new decimal(new int[] { - 100000000, - 0, - 0, - -2147483648}); - this.scaleYUD.Name = "scaleYUD"; - this.scaleYUD.Size = new System.Drawing.Size(64, 20); - this.scaleYUD.TabIndex = 8; - this.scaleYUD.ValueChanged += new System.EventHandler(this.OnNumbicValueSRT_ValueChanged); - // - // transYUD - // - this.transYUD.DecimalPlaces = 5; - this.transYUD.Increment = new decimal(new int[] { - 5, - 0, - 0, - 196608}); - this.transYUD.Location = new System.Drawing.Point(360, 43); - this.transYUD.Maximum = new decimal(new int[] { - 1000000000, - 0, - 0, - 0}); - this.transYUD.Minimum = new decimal(new int[] { - 100000000, - 0, - 0, - -2147483648}); - this.transYUD.Name = "transYUD"; - this.transYUD.Size = new System.Drawing.Size(64, 20); - this.transYUD.TabIndex = 7; - this.transYUD.ValueChanged += new System.EventHandler(this.OnNumbicValueSRT_ValueChanged); - // - // transXUD - // - this.transXUD.DecimalPlaces = 5; - this.transXUD.Increment = new decimal(new int[] { - 5, - 0, - 0, - 196608}); - this.transXUD.Location = new System.Drawing.Point(281, 43); - this.transXUD.Maximum = new decimal(new int[] { - 1000000000, - 0, - 0, - 0}); - this.transXUD.Minimum = new decimal(new int[] { - 100000000, - 0, - 0, - -2147483648}); - this.transXUD.Name = "transXUD"; - this.transXUD.Size = new System.Drawing.Size(64, 20); - this.transXUD.TabIndex = 6; - this.transXUD.ValueChanged += new System.EventHandler(this.OnNumbicValueSRT_ValueChanged); - // - // stLabel4 - // - this.stLabel4.AutoSize = true; - this.stLabel4.Location = new System.Drawing.Point(205, 45); - this.stLabel4.Name = "stLabel4"; - this.stLabel4.Size = new System.Drawing.Size(51, 13); - this.stLabel4.TabIndex = 5; - this.stLabel4.Text = "Translate"; - // - // stLabel3 - // - this.stLabel3.AutoSize = true; - this.stLabel3.Location = new System.Drawing.Point(25, 45); - this.stLabel3.Name = "stLabel3"; - this.stLabel3.Size = new System.Drawing.Size(34, 13); - this.stLabel3.TabIndex = 4; - this.stLabel3.Text = "Scale"; - // - // scaleXUD - // - this.scaleXUD.DecimalPlaces = 5; - this.scaleXUD.Increment = new decimal(new int[] { - 5, - 0, - 0, - 196608}); - this.scaleXUD.Location = new System.Drawing.Point(65, 43); - this.scaleXUD.Maximum = new decimal(new int[] { - 1000000000, - 0, - 0, - 0}); - this.scaleXUD.Minimum = new decimal(new int[] { - 100000000, - 0, - 0, - -2147483648}); - this.scaleXUD.Name = "scaleXUD"; - this.scaleXUD.Size = new System.Drawing.Size(64, 20); - this.scaleXUD.TabIndex = 3; - this.scaleXUD.ValueChanged += new System.EventHandler(this.OnNumbicValueSRT_ValueChanged); - // - // stPanel1 - // - this.stPanel1.Controls.Add(this.barSlider1); - this.stPanel1.Controls.Add(this.btnApplyTransform); - this.stPanel1.Controls.Add(this.scaleYUD); - this.stPanel1.Controls.Add(this.transYUD); - this.stPanel1.Controls.Add(this.stLabel2); - this.stPanel1.Controls.Add(this.transXUD); - this.stPanel1.Controls.Add(this.comboBox2); - this.stPanel1.Controls.Add(this.stLabel4); - this.stPanel1.Controls.Add(this.comboBox1); - this.stPanel1.Controls.Add(this.stLabel3); - this.stPanel1.Controls.Add(this.scaleXUD); - this.stPanel1.Controls.Add(this.stLabel1); - this.stPanel1.Dock = System.Windows.Forms.DockStyle.Top; - this.stPanel1.Location = new System.Drawing.Point(0, 0); - this.stPanel1.Name = "stPanel1"; - this.stPanel1.Size = new System.Drawing.Size(605, 70); - this.stPanel1.TabIndex = 1; - // - // barSlider1 - // - this.barSlider1.BarInnerColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); - this.barSlider1.BarPenColorBottom = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); - this.barSlider1.BarPenColorTop = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); - this.barSlider1.BorderRoundRectSize = new System.Drawing.Size(8, 8); - this.barSlider1.ElapsedInnerColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); - this.barSlider1.ElapsedPenColorBottom = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); - this.barSlider1.ElapsedPenColorTop = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); - this.barSlider1.Font = new System.Drawing.Font("Microsoft Sans Serif", 6F); - this.barSlider1.ForeColor = System.Drawing.Color.White; - this.barSlider1.LargeChange = ((uint)(5u)); - this.barSlider1.Location = new System.Drawing.Point(56, 7); - this.barSlider1.MouseEffects = false; - this.barSlider1.Name = "barSlider1"; - this.barSlider1.ScaleDivisions = 10; - this.barSlider1.ScaleSubDivisions = 5; - this.barSlider1.ShowDivisionsText = true; - this.barSlider1.ShowSmallScale = false; - this.barSlider1.Size = new System.Drawing.Size(160, 25); - this.barSlider1.SmallChange = ((uint)(1u)); - this.barSlider1.TabIndex = 17; - this.barSlider1.Text = "colorSlider1"; - this.barSlider1.ThumbInnerColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224))))); - this.barSlider1.ThumbPenColor = System.Drawing.Color.Silver; - this.barSlider1.ThumbRoundRectSize = new System.Drawing.Size(8, 8); - this.barSlider1.ThumbSize = new System.Drawing.Size(8, 8); - this.barSlider1.TickAdd = 0F; - this.barSlider1.TickColor = System.Drawing.Color.White; - this.barSlider1.TickDivide = 0F; - this.barSlider1.TickStyle = System.Windows.Forms.TickStyle.None; - this.barSlider1.Scroll += new System.Windows.Forms.ScrollEventHandler(this.barSlider1_Scroll); - // - // btnApplyTransform - // - this.btnApplyTransform.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.btnApplyTransform.Location = new System.Drawing.Point(430, 41); - this.btnApplyTransform.Name = "btnApplyTransform"; - this.btnApplyTransform.Size = new System.Drawing.Size(119, 23); - this.btnApplyTransform.TabIndex = 9; - this.btnApplyTransform.Text = "Apply Transform"; - this.btnApplyTransform.UseVisualStyleBackColor = false; - this.btnApplyTransform.Click += new System.EventHandler(this.btnApplyTransform_Click); - // - // stLabel2 - // - this.stLabel2.AutoSize = true; - this.stLabel2.Location = new System.Drawing.Point(3, 13); - this.stLabel2.Name = "stLabel2"; - this.stLabel2.Size = new System.Drawing.Size(56, 13); - this.stLabel2.TabIndex = 2; - this.stLabel2.Text = "Brightness"; - // - // comboBox2 - // - this.comboBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.comboBox2.BorderColor = System.Drawing.Color.Empty; - this.comboBox2.BorderStyle = System.Windows.Forms.ButtonBorderStyle.Solid; - this.comboBox2.ButtonColor = System.Drawing.Color.Empty; - this.comboBox2.FormattingEnabled = true; - this.comboBox2.Location = new System.Drawing.Point(290, 7); - this.comboBox2.Name = "comboBox2"; - this.comboBox2.Size = new System.Drawing.Size(166, 21); - this.comboBox2.TabIndex = 5; - this.comboBox2.SelectedIndexChanged += new System.EventHandler(this.comboBox2_SelectedIndexChanged); - // - // comboBox1 - // - this.comboBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.comboBox1.BorderColor = System.Drawing.Color.Empty; - this.comboBox1.BorderStyle = System.Windows.Forms.ButtonBorderStyle.Solid; - this.comboBox1.ButtonColor = System.Drawing.Color.Empty; - this.comboBox1.FormattingEnabled = true; - this.comboBox1.Location = new System.Drawing.Point(550, 7); - this.comboBox1.Name = "comboBox1"; - this.comboBox1.Size = new System.Drawing.Size(52, 21); - this.comboBox1.TabIndex = 3; - this.comboBox1.SelectedIndexChanged += new System.EventHandler(this.comboBox1_SelectedIndexChanged); - // - // stLabel1 - // - this.stLabel1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.stLabel1.AutoSize = true; - this.stLabel1.Location = new System.Drawing.Point(462, 10); - this.stLabel1.Name = "stLabel1"; - this.stLabel1.Size = new System.Drawing.Size(82, 13); - this.stLabel1.TabIndex = 4; - this.stLabel1.Text = "Active Channel:"; - // - // UVEditor - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Controls.Add(this.gL_ControlLegacy2D1); - this.Controls.Add(this.stPanel1); - this.Name = "UVEditor"; - this.Size = new System.Drawing.Size(605, 524); - ((System.ComponentModel.ISupportInitialize)(this.scaleYUD)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.transYUD)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.transXUD)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.scaleXUD)).EndInit(); - this.stPanel1.ResumeLayout(false); - this.stPanel1.PerformLayout(); - this.ResumeLayout(false); - - } - - #endregion - private STPanel stPanel1; - private STLabel stLabel1; - private Toolbox.Library.Forms.STComboBox comboBox1; - private OpenTK.GLControl gL_ControlLegacy2D1; - private Toolbox.Library.Forms.STComboBox comboBox2; - private STLabel stLabel2; - private NumericUpDownFloat scaleXUD; - private STLabel stLabel3; - private STLabel stLabel4; - private NumericUpDownFloat transXUD; - private NumericUpDownFloat transYUD; - private NumericUpDownFloat scaleYUD; - private STButton btnApplyTransform; - private ColorSlider.ColorSlider barSlider1; - } -} diff --git a/Switch_Toolbox_Library/Forms/Editors/UV/UVEditor2.cs b/Switch_Toolbox_Library/Forms/Editors/UV/UVEditor2.cs deleted file mode 100644 index cf1bfc05..00000000 --- a/Switch_Toolbox_Library/Forms/Editors/UV/UVEditor2.cs +++ /dev/null @@ -1,532 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; -using OpenTK; -using OpenTK.Graphics.OpenGL; - -namespace Toolbox.Library.Forms.test -{ - public partial class UVEditor : UserControl - { - public UVEditor() - { - InitializeComponent(); - - comboBox1.Items.Add(0); - comboBox1.Items.Add(1); - comboBox1.Items.Add(2); - - comboBox1.SelectedIndex = 0; - barSlider1.Value = 0; - } - - public class ActiveTexture - { - public Vector2 UVScale = new Vector2(1); - public Vector2 UVTranslate = new Vector2(0); - public float UVRotate = 0; - public STGenericTexture texture; - public int UvChannelIndex; - public int mapMode = 0; - public int wrapModeS = 1; - public int wrapModeT = 1; - public int minFilter = 3; - public int magFilter = 2; - public int mipDetail = 6; - public uint texWidth = 0; - public uint texHeight = 0; - } - public ActiveTexture activeTexture = new ActiveTexture(); - - public int brightness = 50; //To see uv maps easier - public int UvChannelIndex = 0; - public STGenericMaterial ActiveMaterial; - - public List ActiveObjects = new List(); - - public List Textures = new List(); - - bool IsSRTLoaded = false; - public void Reset() - { - barSlider1.Value = brightness; - - scaleXUD.Value = 1; - scaleYUD.Value = 1; - transXUD.Value = 0; - transYUD.Value = 0; - - IsSRTLoaded = false; - - comboBox2.Items.Clear(); - - if (RenderTools.defaultTex != null) - texid = RenderTools.defaultTex.RenderableTex.TexID; - - foreach (var item in Textures) - comboBox2.Items.Add(item.texture.Text); - - if (comboBox2.Items.Count > 0) - comboBox2.SelectedIndex = 0; - } - - public int texid; - public void DrawUVs(List genericObjects) - { - foreach (var genericObject in genericObjects) - { - int divisions = 4; - int lineWidth = 1; - - Color uvColor = Color.LightGreen; - Color gridColor = Color.Black; - - - - List f = genericObject.lodMeshes[0].getDisplayFace(); - - for (int v = 0; v < genericObject.lodMeshes[0].displayFaceSize; v += 3) - { - if (genericObject.lodMeshes[0].displayFaceSize < 3 || - genericObject.vertices.Count < 3) - return; - - Vector2 v1 = new Vector2(0); - Vector2 v2 = new Vector2(0); - Vector2 v3 = new Vector2(0); - - if (UvChannelIndex == 0) - { - v1 = genericObject.vertices[f[v]].uv0; - v2 = genericObject.vertices[f[v + 1]].uv0; - v3 = genericObject.vertices[f[v + 2]].uv0; - } - if (UvChannelIndex == 1) - { - v1 = genericObject.vertices[f[v]].uv1; - v2 = genericObject.vertices[f[v + 1]].uv1; - v3 = genericObject.vertices[f[v + 2]].uv1; - } - if (UvChannelIndex == 2) - { - v1 = genericObject.vertices[f[v]].uv2; - v2 = genericObject.vertices[f[v + 1]].uv2; - v3 = genericObject.vertices[f[v + 2]].uv2; - } - - v1 = new Vector2(v1.X, 1 - v1.Y); - v2 = new Vector2(v2.X, 1 - v2.Y); - v3 = new Vector2(v3.X, 1 - v3.Y); - - DrawUVTriangleAndGrid(v1, v2, v3, divisions, uvColor, lineWidth, gridColor); - } - } - } - private void DrawUVTriangleAndGrid(Vector2 v1, Vector2 v2, Vector2 v3, int divisions, - Color uvColor, int lineWidth, Color gridColor) - { - GL.UseProgram(0); - - float bounds = 1; - Vector2 scaleUv = activeTexture.UVScale * new Vector2(2); - Vector2 transUv = activeTexture.UVTranslate - new Vector2(1f); - - //Disable textures so they don't affect color - GL.Disable(EnableCap.Texture2D); - DrawUvTriangle(v1, v2, v3, uvColor, scaleUv, transUv); - - // Draw Grid - GL.Color3(gridColor); - // DrawHorizontalGrid(divisions, bounds, scaleUv); - // DrawVerticalGrid(divisions, bounds, scaleUv); - } - - private static void DrawUvTriangle(Vector2 v1, Vector2 v2, Vector2 v3, Color uvColor, Vector2 scaleUv, Vector2 transUv) - { - GL.Color3(uvColor); - GL.Begin(PrimitiveType.Lines); - GL.LineWidth(3); - GL.Vertex2(v1 * scaleUv + transUv); - GL.Vertex2(v2 * scaleUv + transUv); - GL.End(); - - GL.Begin(PrimitiveType.Lines); - GL.LineWidth(3); - GL.Vertex2(v2 * scaleUv + transUv); - GL.Vertex2(v3 * scaleUv + transUv); - GL.End(); - - GL.Begin(PrimitiveType.Lines); - GL.LineWidth(3); - GL.Vertex2(v3 * scaleUv + transUv); - GL.Vertex2(v1 * scaleUv + transUv); - GL.End(); - } - - private void SetupRendering(float lineWidth) - { - // Go to 2D - GL.Viewport(0, 0, gL_ControlLegacy2D1.Width, gL_ControlLegacy2D1.Height); - GL.MatrixMode(MatrixMode.Projection); - GL.PushMatrix(); - GL.LoadIdentity(); - float aspect = (float)gL_ControlLegacy2D1.Width / (float)gL_ControlLegacy2D1.Height; - GL.Ortho(-aspect, aspect, -1, 1, -1, 1); - GL.MatrixMode(MatrixMode.Modelview); - GL.PushMatrix(); - GL.LoadIdentity(); - GL.LineWidth(lineWidth); - - // Draw over everything - GL.Disable(EnableCap.DepthTest); - GL.Disable(EnableCap.CullFace); - } - - private static void DrawVerticalGrid(int divisions, float bounds, Vector2 scaleUv) - { - int verticalCount = divisions; - for (int i = 0; i < verticalCount * bounds; i++) - { - GL.Begin(PrimitiveType.Lines); - GL.Vertex2(new Vector2((1.0f / verticalCount) * i, -bounds) * scaleUv); - GL.Vertex2(new Vector2((1.0f / verticalCount) * i, bounds) * scaleUv); - GL.End(); - } - } - - private static void DrawHorizontalGrid(int divisions, float bounds, Vector2 scaleUv) - { - int horizontalCount = divisions; - for (int i = 0; i < horizontalCount * bounds; i++) - { - GL.Begin(PrimitiveType.Lines); - GL.Vertex2(new Vector2(-bounds, (1.0f / horizontalCount) * i) * scaleUv); - GL.Vertex2(new Vector2(bounds, (1.0f / horizontalCount) * i) * scaleUv); - GL.End(); - } - } - - int PlaneSize = 1; - float PosX; - float PosY; - float ZoomValue = 1; - - Point MouseDownPos; - - private float FindHCF(float m, float n) - { - float temp, remainder; - if (m < n) - { - temp = m; - m = n; - n = temp; - } - while (true) - { - remainder = m % n; - if (remainder == 0) - return n; - else - m = n; - n = remainder; - } - } - - private void gL_ControlLegacy2D1_Paint(object sender, PaintEventArgs e) - { - if (ActiveObjects.Count <= 0 || ActiveMaterial == null || Runtime.OpenTKInitialized == false) - return; - - gL_ControlLegacy2D1.MakeCurrent(); - - SetupRendering(1); - - GL.ClearColor(System.Drawing.Color.FromArgb(40, 40, 40)); - GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); - - GL.Disable(EnableCap.Texture2D); - - //This usually won't be seen unless the textures aren't repeating much - DrawBackdrop(); - - float PlaneScaleX = 0.5f; - float PlaneScaleY = 0.5f; - - float HalfWidth = (float)gL_ControlLegacy2D1.Width / 2.0f; - float HalfHeight = (float)gL_ControlLegacy2D1.Height / 2.0f; - - if (activeTexture.texWidth != 0 && activeTexture.texHeight != 0) - { - PlaneScaleX = (float)gL_ControlLegacy2D1.Width / (float)activeTexture.texWidth; - PlaneScaleY = (float)gL_ControlLegacy2D1.Height / (float)activeTexture.texHeight; - } - - - - //Now do the plane with uvs - GL.PushMatrix(); - GL.Scale(PlaneScaleY * ZoomValue, -PlaneScaleX * ZoomValue, 1); - GL.Translate(PosX, PosY, 0); - - GL.MatrixMode(MatrixMode.Modelview); - GL.LoadIdentity(); - GL.MatrixMode(MatrixMode.Texture); - GL.LoadIdentity(); - - bool UseBackground = true; - - if (UseBackground) - { - float BrightnessAmount = (float)brightness / 100f; - int brightnessScale = (int)(BrightnessAmount * 255); - - GL.PushAttrib(AttribMask.TextureBit); - - var background = new GenericBitmapTexture(Properties.Resources.CheckerBackground); - background.LoadOpenGLTexture(); - - //Draws a textured plan for our uvs to show on - GL.Enable(EnableCap.Texture2D); - GL.BindTexture(TextureTarget.Texture2D, background.RenderableTex.TexID); - - GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)TextureWrapMode.Repeat); - GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)TextureWrapMode.Repeat); - GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Nearest); - GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Nearest); - - GL.Begin(PrimitiveType.Quads); - // GL.Color3(brightnessScale, brightnessScale, brightnessScale); - GL.TexCoord2(0.0f, 0.0f); - GL.Vertex2(-HalfWidth, -HalfHeight); - GL.TexCoord2(PlaneScaleX, 0.0f); - GL.Vertex2(HalfWidth, -HalfHeight); - GL.TexCoord2(PlaneScaleX, PlaneScaleY); - GL.Vertex2(HalfWidth, HalfHeight); - GL.TexCoord2(0.0f, PlaneScaleY); - GL.Vertex2(-HalfWidth, HalfHeight); - GL.End(); - GL.PopAttrib(); - } - - if (activeTexture.texture != null) - { - // DrawTexturedPlane(1, activeTexture.texWidth, activeTexture.texHeight); - } - - GL.MatrixMode(MatrixMode.Modelview); - GL.LoadIdentity(); - - DrawUVs(ActiveObjects); - - GL.PopMatrix(); - - gL_ControlLegacy2D1.SwapBuffers(); - } - - - //Aspect ratio stuff from https://github.com/libertyernie/brawltools/blob/40d7431b1a01ef4a0411cd69e51411bd581e93e2/BrawlLib/System/Windows/Controls/TexCoordRenderer.cs - private void DrawTexturedPlane(float scale, uint TextureWidth, uint TextureHeight) - { - //Draws a textured plan for our uvs to show on - /* GL.Enable(EnableCap.Texture2D); - GL.BindTexture(TextureTarget.Texture2D, texid); - GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (float)STGenericMatTexture.wrapmode[activeTexture.wrapModeS]); - GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (float)STGenericMatTexture.wrapmode[activeTexture.wrapModeT]); - GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)STGenericMatTexture.minfilter[activeTexture.minFilter]); - GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)STGenericMatTexture.magfilter[activeTexture.magFilter]); - */ - - float HalfWidth = (float)gL_ControlLegacy2D1.Width / 2.0f; - float HalfHeight = (float)gL_ControlLegacy2D1.Height / 2.0f; - - Vector2 scaleCenter = new Vector2(0.5f, 0.5f); - - float[] texCoord = new float[8]; - - float tAspect = (float)TextureWidth / TextureHeight; - float wAspect = (float)gL_ControlLegacy2D1.Width / gL_ControlLegacy2D1.Height; - - Vector2 topLeft = new Vector2(); - Vector2 bottomRight = new Vector2(); - - float xCorrect = 1.0f, yCorrect = 1.0f; - if (tAspect > wAspect) - { - //Texture is wider, use horizontal fit - //X touches the edges of the window, Y has top and bottom padding - - texCoord[0] = texCoord[6] = 0.0f; - texCoord[2] = texCoord[4] = 1.0f; - - texCoord[1] = texCoord[3] = (yCorrect = tAspect / wAspect) / 2.0f + 0.5f; - texCoord[5] = texCoord[7] = 1.0f - texCoord[1]; - - bottomRight = new Vector2(HalfWidth, (((float)gL_ControlLegacy2D1.Height - ((float)gL_ControlLegacy2D1.Width / - TextureWidth * TextureHeight)) / (float)gL_ControlLegacy2D1.Height / 2.0f - 0.5f) * - (float)gL_ControlLegacy2D1.Height); - - topLeft = new Vector2(-HalfHeight, -bottomRight.Y); - } - else - { - //Window is wider, use vertical fit - //Y touches the edges of the window, X has left and right padding - - texCoord[1] = texCoord[3] = 1.0f; - texCoord[5] = texCoord[7] = 0.0f; - - //X - texCoord[2] = texCoord[4] = (xCorrect = wAspect / tAspect) / 2.0f + 0.5f; - texCoord[0] = texCoord[6] = 1.0f - texCoord[2]; - - bottomRight = new Vector2(1.0f - (((float)gL_ControlLegacy2D1.Width - - ((float)gL_ControlLegacy2D1.Height / TextureHeight * TextureWidth)) / gL_ControlLegacy2D1.Width / 2.0f - 0.5f) * - (float)gL_ControlLegacy2D1.Width, -HalfHeight); - - topLeft = new Vector2(-bottomRight.X, HalfHeight); - } - - GL.Begin(PrimitiveType.Quads); - GL.TexCoord2(texCoord[0], texCoord[1]); - GL.Vertex2(-HalfWidth, -HalfHeight); - GL.TexCoord2(texCoord[2], texCoord[3]); - GL.Vertex2(HalfWidth, -HalfHeight); - GL.TexCoord2(texCoord[4], texCoord[5]); - GL.Vertex2(HalfWidth, HalfHeight); - GL.TexCoord2(texCoord[6], texCoord[7]); - GL.Vertex2(-HalfWidth, HalfHeight); - GL.End(); - - - - } - private void DrawBackdrop() - { - //Background - GL.Begin(PrimitiveType.Quads); - GL.Color3(Color.FromArgb(40, 40, 40)); - GL.TexCoord2(1, 1); - GL.Vertex2(PlaneSize, -PlaneSize); - GL.TexCoord2(0, 1); - GL.Vertex2(-PlaneSize, -PlaneSize); - GL.TexCoord2(0, 0); - GL.Vertex2(-PlaneSize, PlaneSize); - GL.TexCoord2(1, 0); - GL.Vertex2(PlaneSize, PlaneSize); - GL.End(); - } - - private void OnMouseWheel(object sender, System.Windows.Forms.MouseEventArgs e) - { - if (e.Delta > 0 && ZoomValue > 0) ZoomValue += 0.1f; - if (e.Delta < 0 && ZoomValue < 30 && ZoomValue > 0.1) ZoomValue -= 0.1f; - - gL_ControlLegacy2D1.Invalidate(); - } - - private void gL_ControlLegacy2D1_MouseDown(object sender, MouseEventArgs e) - { - if (e.Button == MouseButtons.Left) - { - MouseDownPos = MousePosition; - } - } - - private void gL_ControlLegacy2D1_MouseMove(object sender, MouseEventArgs e) - { - if (e.Button != MouseButtons.Left) - return; - - Point temp = Control.MousePosition; - Point res = new Point(MouseDownPos.X - temp.X, MouseDownPos.Y - temp.Y); - - PosX -= res.X * 0.001f; - PosY -= res.Y * 0.001f; - - gL_ControlLegacy2D1.Invalidate(); - - MouseDownPos = temp; - } - - private void comboBox2_SelectedIndexChanged(object sender, EventArgs e) - { - if (comboBox2.SelectedIndex >= 0) - { - activeTexture = Textures[comboBox2.SelectedIndex]; - UvChannelIndex = activeTexture.UvChannelIndex; - - scaleXUD.Value = (decimal)activeTexture.UVScale.X; - scaleYUD.Value = (decimal)activeTexture.UVScale.Y; - transXUD.Value = (decimal)activeTexture.UVTranslate.X; - transYUD.Value = (decimal)activeTexture.UVTranslate.Y; - - var texture = activeTexture.texture; - - if (texture.RenderableTex == null) - texture.LoadOpenGLTexture(); - - texid = texture.RenderableTex.TexID; - activeTexture.texWidth = texture.Width; - activeTexture.texHeight = texture.Height; - - gL_ControlLegacy2D1.Invalidate(); - - IsSRTLoaded = true; - } - } - - private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) - { - if (comboBox1.SelectedIndex >= 0) - { - UvChannelIndex = comboBox1.SelectedIndex; - gL_ControlLegacy2D1.Invalidate(); - } - } - - private void OnNumbicValueSRT_ValueChanged(object sender, EventArgs e) - { - } - - private void btnApplyTransform_Click(object sender, EventArgs e) - { - foreach (var shape in ActiveObjects) - { - Vector2 Scale = new Vector2((float)scaleXUD.Value, (float)scaleYUD.Value); - Vector2 Translate = new Vector2((float)transXUD.Value, (float)transYUD.Value); - - shape.TransformUVs(Translate, Scale, UvChannelIndex); - } - - scaleXUD.Value = 1; - scaleYUD.Value = 1; - transXUD.Value = 0; - transYUD.Value = 0; - - gL_ControlLegacy2D1.Invalidate(); - } - - private void gL_ControlLegacy2D1_Resize(object sender, EventArgs e) - { - gL_ControlLegacy2D1.Invalidate(); - } - - private void stTrackBar1_Scroll(object sender, ScrollEventArgs e) - { - - } - - private void barSlider1_Scroll(object sender, ScrollEventArgs e) - { - brightness = barSlider1.Value; - gL_ControlLegacy2D1.Invalidate(); - } - } -} diff --git a/Switch_Toolbox_Library/Forms/Editors/UV/UVEditorAdvanced.Designer.cs b/Switch_Toolbox_Library/Forms/Editors/UV/UVEditorAdvanced.Designer.cs deleted file mode 100644 index 0112eb92..00000000 --- a/Switch_Toolbox_Library/Forms/Editors/UV/UVEditorAdvanced.Designer.cs +++ /dev/null @@ -1,45 +0,0 @@ -namespace Toolbox.Library.Forms -{ - partial class UVEditorAdvanced - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.SuspendLayout(); - // - // UVEditorAdvanced - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.Name = "UVEditorAdvanced"; - this.Size = new System.Drawing.Size(444, 351); - this.ResumeLayout(false); - - } - - #endregion - } -} diff --git a/Switch_Toolbox_Library/Forms/Editors/UV/UVEditorAdvanced.cs b/Switch_Toolbox_Library/Forms/Editors/UV/UVEditorAdvanced.cs deleted file mode 100644 index ad59fc10..00000000 --- a/Switch_Toolbox_Library/Forms/Editors/UV/UVEditorAdvanced.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Data; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; - -namespace Toolbox.Library.Forms -{ - public partial class UVEditorAdvanced : UserControl - { - public UVViewport Viewport; - - public UVEditorAdvanced() - { - InitializeComponent(); - - Viewport = new UVViewport(); - Viewport.Dock = DockStyle.Fill; - Controls.Add(Viewport); - } - } -} diff --git a/Switch_Toolbox_Library/Forms/Editors/UV/UVEditorForm.Designer.cs b/Switch_Toolbox_Library/Forms/Editors/UV/UVEditorForm.Designer.cs index 3ff75f43..a2f610f0 100644 --- a/Switch_Toolbox_Library/Forms/Editors/UV/UVEditorForm.Designer.cs +++ b/Switch_Toolbox_Library/Forms/Editors/UV/UVEditorForm.Designer.cs @@ -44,9 +44,9 @@ // uvEditor1 // this.uvEditor1.Dock = System.Windows.Forms.DockStyle.Fill; - this.uvEditor1.Location = new System.Drawing.Point(0, 25); + this.uvEditor1.Location = new System.Drawing.Point(0, 0); this.uvEditor1.Name = "uvEditor1"; - this.uvEditor1.Size = new System.Drawing.Size(595, 443); + this.uvEditor1.Size = new System.Drawing.Size(595, 468); this.uvEditor1.TabIndex = 11; // // UVEditorForm diff --git a/Switch_Toolbox_Library/Forms/Editors/UV/UVViewport.cs b/Switch_Toolbox_Library/Forms/Editors/UV/UVViewport.cs index 6ae0caea..1fa002e0 100644 --- a/Switch_Toolbox_Library/Forms/Editors/UV/UVViewport.cs +++ b/Switch_Toolbox_Library/Forms/Editors/UV/UVViewport.cs @@ -6,33 +6,125 @@ using System.Threading.Tasks; using OpenTK; using OpenTK.Graphics.OpenGL; using System.Drawing; +using Toolbox.Library.IO; namespace Toolbox.Library.Forms { public class UVViewport : Viewport2D { + public STGenericMatTexture ActiveTextureMap { get; set; } + + public UVViewport() + { + } + public List ActiveObjects = new List(); + /// + /// Selectes the group of polygons to display UVs for. -1 set to use all of them. + /// + public int PolygonGroupIndex = -1; + public int UvChannelIndex = 0; + public bool Repeat = true; + public float Brightness = 1.0f; + public PickableUVMap PickableUVMap = new PickableUVMap(); + + public override List GetPickableObjects() + { + return new List() { PickableUVMap }; + } + public override void RenderSceme() { - DrawTexturedPlane(1); - DrawUVs(ActiveObjects); + GL.PushMatrix(); + Vector3 Scale = new Vector3(30, 30, 30); + + //Scale the plane by aspect ratio + GL.PushMatrix(); + + bool useTextures = false; + if (ActiveTextureMap != null) { + var tex = ActiveTextureMap.GetTexture(); + + //Bind texture if not null + if (tex != null) + { + //Adjust scale via aspect ratio + if (Width > Height) + { + float aspect = (float)tex.Width / (float)tex.Height; + Console.WriteLine($"aspect w {aspect}"); + Scale.X *= aspect; + } + else + { + float aspect = (float)tex.Height / (float)tex.Width; + Console.WriteLine($"aspect h {aspect}"); + Scale.Y *= aspect; + } + + if (tex.RenderableTex == null || !tex.RenderableTex.GLInitialized) + tex.LoadOpenGLTexture(); + + GL.Enable(EnableCap.Texture2D); + GL.BindTexture(TextureTarget.Texture2D, tex.RenderableTex.TexID); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (float)STGenericMatTexture.wrapmode[ActiveTextureMap.WrapModeS]); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (float)STGenericMatTexture.wrapmode[ActiveTextureMap.WrapModeT]); + // GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)STGenericMatTexture.wrapmode[activeTexture.wrapModeS]); + // GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)STGenericMatTexture.wrapmode[activeTexture.wrapModeT]); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)STGenericMatTexture.minfilter[ActiveTextureMap.MinFilter]); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)STGenericMatTexture.magfilter[ActiveTextureMap.MagFilter]); + + useTextures = true; + } + } + + GL.Scale(Scale); + + if (useTextures) + { + GL.Enable(EnableCap.Texture2D); + if (Repeat) + { + DrawPlane(50, Color.FromArgb(128, 128,128)); + DrawPlane(1, Color.White); + } + else + DrawPlane(1, Color.White); + } + else + { + DrawPlane(1, BackgroundColor.Lighten(40)); + } + + GL.Disable(EnableCap.Texture2D); + + PickableUVMap.DrawUVs(PolygonGroupIndex, UvChannelIndex, ActiveObjects, ActiveTextureMap); + DrawPlane(1, Color.Black, true); + + GL.PopMatrix(); } - private void DrawTexturedPlane(float scale) + private void DrawPlane(float scale, Color color, bool Outlines = false) { Vector2 scaleCenter = new Vector2(0.5f, 0.5f); + color = Color.FromArgb( + (byte)(color.R * Brightness), + (byte)(color.G * Brightness), + (byte)(color.B * Brightness)); + Vector2[] TexCoords = new Vector2[] { new Vector2(1,1), new Vector2(0,1), new Vector2(0,0), new Vector2(1,0), }; + Vector2[] Positions = new Vector2[] { new Vector2(1,-1), new Vector2(-1,-1), @@ -49,149 +141,44 @@ namespace Toolbox.Library.Forms Positions[2] = Positions[2] * scale; Positions[3] = Positions[3] * scale; - GL.Begin(PrimitiveType.Quads); - GL.Color3(Brightness, Brightness, Brightness); - GL.TexCoord2(TexCoords[0]); - GL.Vertex2(Positions[0]); - GL.TexCoord2(TexCoords[1]); - GL.Vertex2(Positions[1]); - GL.TexCoord2(TexCoords[2]); - GL.Vertex2(Positions[2]); - GL.TexCoord2(TexCoords[3]); - GL.Vertex2(Positions[3]); - GL.End(); - } - - public void DrawUVs(List genericObjects) - { - if (genericObjects.Count == 0) return; - - foreach (var genericObject in genericObjects) + if (Outlines) { - int divisions = 4; - int lineWidth = 1; - - Color uvColor = Color.LightGreen; - Color gridColor = Color.Black; - - List f = new List(); - int displayFaceSize = 0; - if (genericObject.lodMeshes.Count > 0) - { - f = genericObject.lodMeshes[0].getDisplayFace(); - displayFaceSize = genericObject.lodMeshes[0].displayFaceSize; - } - if (genericObject.PolygonGroups.Count > 0) - { - foreach (var group in genericObject.PolygonGroups) - { - f.AddRange(genericObject.PolygonGroups[0].GetDisplayFace()); - displayFaceSize += genericObject.PolygonGroups[0].displayFaceSize; - } - } - - for (int v = 0; v < displayFaceSize; v += 3) - { - if (displayFaceSize < 3 || genericObject.vertices.Count < 3) - return; - - Vector2 v1 = new Vector2(0); - Vector2 v2 = new Vector2(0); - Vector2 v3 = new Vector2(0); - - if (f.Count < v + 2) - continue; - - if (UvChannelIndex == 0) - { - v1 = genericObject.vertices[f[v]].uv0; - v2 = genericObject.vertices[f[v + 1]].uv0; - v3 = genericObject.vertices[f[v + 2]].uv0; - } - if (UvChannelIndex == 1) - { - v1 = genericObject.vertices[f[v]].uv1; - v2 = genericObject.vertices[f[v + 1]].uv1; - v3 = genericObject.vertices[f[v + 2]].uv1; - } - if (UvChannelIndex == 2) - { - v1 = genericObject.vertices[f[v]].uv2; - v2 = genericObject.vertices[f[v + 1]].uv2; - v3 = genericObject.vertices[f[v + 2]].uv2; - } - - v1 = new Vector2(v1.X, 1 - v1.Y); - v2 = new Vector2(v2.X, 1 - v2.Y); - v3 = new Vector2(v3.X, 1 - v3.Y); - - DrawUVTriangleAndGrid(v1, v2, v3, divisions, uvColor, lineWidth, gridColor); - } - } - } - private void DrawUVTriangleAndGrid(Vector2 v1, Vector2 v2, Vector2 v3, int divisions, - Color uvColor, int lineWidth, Color gridColor) - { - GL.UseProgram(0); - - float bounds = 1; - Vector2 scaleUv = new Vector2(2); - Vector2 transUv = new Vector2(1f); - - //Disable textures so they don't affect color - GL.Disable(EnableCap.Texture2D); - DrawUvTriangle(v1, v2, v3, uvColor, scaleUv, transUv); - - // Draw Grid - GL.Color3(gridColor); - // DrawHorizontalGrid(divisions, bounds, scaleUv); - // DrawVerticalGrid(divisions, bounds, scaleUv); - } - - private static void DrawUvTriangle(Vector2 v1, Vector2 v2, Vector2 v3, Color uvColor, Vector2 scaleUv, Vector2 transUv) - { - GL.Color3(uvColor); - GL.Begin(PrimitiveType.Lines); - GL.LineWidth(3); - GL.Vertex2(v1 * scaleUv + transUv); - GL.Vertex2(v2 * scaleUv + transUv); - GL.End(); - - GL.Begin(PrimitiveType.Lines); - GL.LineWidth(3); - GL.Vertex2(v2 * scaleUv + transUv); - GL.Vertex2(v3 * scaleUv + transUv); - GL.End(); - - GL.Begin(PrimitiveType.Lines); - GL.LineWidth(3); - GL.Vertex2(v3 * scaleUv + transUv); - GL.Vertex2(v1 * scaleUv + transUv); - GL.End(); - } - - private static void DrawVerticalGrid(int divisions, float bounds, Vector2 scaleUv) - { - int verticalCount = divisions; - for (int i = 0; i < verticalCount * bounds; i++) - { - GL.Begin(PrimitiveType.Lines); - GL.Vertex2(new Vector2((1.0f / verticalCount) * i, -bounds) * scaleUv); - GL.Vertex2(new Vector2((1.0f / verticalCount) * i, bounds) * scaleUv); + GL.LineWidth(1); + GL.Begin(PrimitiveType.LineLoop); + GL.Color3(color); + GL.Vertex2(Positions[0]); + GL.Vertex2(Positions[1]); + GL.Vertex2(Positions[2]); + GL.Vertex2(Positions[3]); GL.End(); } - } - - private static void DrawHorizontalGrid(int divisions, float bounds, Vector2 scaleUv) - { - int horizontalCount = divisions; - for (int i = 0; i < horizontalCount * bounds; i++) + else { - GL.Begin(PrimitiveType.Lines); - GL.Vertex2(new Vector2(-bounds, (1.0f / horizontalCount) * i) * scaleUv); - GL.Vertex2(new Vector2(bounds, (1.0f / horizontalCount) * i) * scaleUv); + GL.Begin(PrimitiveType.Quads); + GL.Color3(color); + GL.TexCoord2(TexCoords[0]); + GL.Vertex2(Positions[0]); + GL.TexCoord2(TexCoords[1]); + GL.Vertex2(Positions[1]); + GL.TexCoord2(TexCoords[2]); + GL.Vertex2(Positions[2]); + GL.TexCoord2(TexCoords[3]); + GL.Vertex2(Positions[3]); GL.End(); } + + + } + + private void InitializeComponent() + { + this.SuspendLayout(); + // + // UVViewport + // + this.Name = "UVViewport"; + this.ResumeLayout(false); + } } } diff --git a/Switch_Toolbox_Library/Forms/Editors/UV/UVViewport.resx b/Switch_Toolbox_Library/Forms/Editors/UV/UVViewport.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/Switch_Toolbox_Library/Forms/Editors/UV/UVViewport.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Switch_Toolbox_Library/Generics/GenericObject.cs b/Switch_Toolbox_Library/Generics/GenericObject.cs index dfe56cda..217314f6 100644 --- a/Switch_Toolbox_Library/Generics/GenericObject.cs +++ b/Switch_Toolbox_Library/Generics/GenericObject.cs @@ -278,7 +278,15 @@ namespace Toolbox.Library if (vertices.Count < 3) return; - List f = lodMeshes[DisplayLODIndex].getDisplayFace(); + List f = new List(); + if (lodMeshes.Count > 0) + f = lodMeshes[DisplayLODIndex].getDisplayFace(); + if (PolygonGroups.Count > 0) + { + foreach (var group in PolygonGroups) + f.AddRange(group.GetDisplayFace()); + } + Vector3[] tanArray = new Vector3[vertices.Count]; Vector3[] bitanArray = new Vector3[vertices.Count]; diff --git a/Switch_Toolbox_Library/Generics/GenericPolygonGroup.cs b/Switch_Toolbox_Library/Generics/GenericPolygonGroup.cs index db131cdd..7fbd2035 100644 --- a/Switch_Toolbox_Library/Generics/GenericPolygonGroup.cs +++ b/Switch_Toolbox_Library/Generics/GenericPolygonGroup.cs @@ -18,6 +18,8 @@ namespace Toolbox.Library public class STGenericPolygonGroup { + public virtual STGenericMaterial Material { get; set; } + public int Offset { get; set; } public int MaterialIndex { get; set; } public int Index { get; set; } diff --git a/Switch_Toolbox_Library/Generics/Materials/GenericMatTexture.cs b/Switch_Toolbox_Library/Generics/Materials/GenericMatTexture.cs index 970676dc..a67084aa 100644 --- a/Switch_Toolbox_Library/Generics/Materials/GenericMatTexture.cs +++ b/Switch_Toolbox_Library/Generics/Materials/GenericMatTexture.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using OpenTK.Graphics.OpenGL; +using OpenTK; namespace Toolbox.Library { @@ -29,6 +30,13 @@ namespace Toolbox.Library NearestMipmapNearest, } + public class STTextureTransform + { + public Vector2 Scale { get; set; } + public float Rotate { get; set; } + public Vector2 Translate { get; set; } + } + public class STGenericMatTexture { public int mapMode = 0; @@ -65,6 +73,8 @@ namespace Toolbox.Library return null; } + public virtual STTextureTransform Transform { get; set; } + public TextureType Type; //An enum for the assumed texture type by sampler diff --git a/Switch_Toolbox_Library/IO/FileWriter.cs b/Switch_Toolbox_Library/IO/FileWriter.cs index befe78ef..c09f6e7b 100644 --- a/Switch_Toolbox_Library/IO/FileWriter.cs +++ b/Switch_Toolbox_Library/IO/FileWriter.cs @@ -29,6 +29,14 @@ namespace Toolbox.Library.IO { } + public void WriteHalfFloat(float v) { + Write((Syroot.IOExtension.Half)v); + } + + public void Write(Syroot.IOExtension.Half v) { + Write(v.Raw); + } + public void Write(Syroot.Maths.Vector2F v) { Write(v.X); diff --git a/Switch_Toolbox_Library/IO/FlatBuffer/FlatBufferConverter.cs b/Switch_Toolbox_Library/IO/FlatBuffer/FlatBufferConverter.cs new file mode 100644 index 00000000..46577f16 --- /dev/null +++ b/Switch_Toolbox_Library/IO/FlatBuffer/FlatBufferConverter.cs @@ -0,0 +1,217 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Threading.Tasks; +using System.Diagnostics; +using System.Windows.Forms; +using Newtonsoft.Json; + +namespace Toolbox.Library.IO +{ + //Ported from https://github.com/kwsch/pkNX/blob/58b0597feaf53b35f5c4424e5ec357f82d99c9fa/pkNX.WinForms/Dumping/FlatBufferConverter.cs + //While i could use flat buffer c# generated code, it's a giant mess code wise + public static class FlatBufferConverter + { + static FlatBufferConverter() + { + if (!Directory.Exists(FlatPath)) + return; + var files = Directory.GetFiles(FlatPath); + foreach (var f in files) + File.Delete(f); + } + + public static string DeserializeToJson(Stream stream, string fbs) + { + var path = Path.GetTempFileName(); + stream.ExportToFile(path); + return DeserializeToJson(path, fbs); + } + + public static string DeserializeToJson(string path, string fbs) + { + GenerateJsonFromFile(path, fbs); + var text = ReadDeleteJsonFromFolder(); + File.Delete(path); + return text; + } + + public static T[] DeserializeFrom(string[] files, string fbs) + { + var result = new T[files.Length]; + for (int i = 0; i < result.Length; i++) + { + var file = files[i]; + result[i] = DeserializeFrom(file, fbs); + } + return result; + } + + public static T DeserializeFrom(Stream stream, string fbs) + { + var path = Path.GetTempFileName(); + stream.ExportToFile(path); + var ret = DeserializeFrom(path, fbs); + File.Delete(path); + return ret; + } + + public static T DeserializeFrom(string file, string fbs) + { + GenerateJsonFromFile(file, fbs); + var text = ReadDeleteJsonFromFolder(); + var obj = JsonConvert.DeserializeObject(text); + Debug.Assert(obj != null); + Debug.WriteLine($"Deserialized {Path.GetFileName(file)}"); + return obj; + } + + public static byte[][] SerializeFrom(T[] obj, string fbs) + { + var result = new byte[obj.Length][]; + for (int i = 0; i < result.Length; i++) + { + var file = obj[i]; + result[i] = SerializeFrom(file, fbs); + } + return result; + } + + public static byte[] SerializeFrom(T obj, string fbs) + { + string log = GenerateBinFrom(obj, fbs); + var fileName = fbs + ".bin"; + var data = ReadDelete(fileName); + Debug.Assert(data.Length != 0); + Debug.WriteLine($"Serialized to {fileName}"); + return data; + } + + + private static string ReadDeleteJsonFromFolder() + { + var jsonPath = Directory.GetFiles(FlatPath, "*.json")[0]; + var text = File.ReadAllText(jsonPath); + File.Delete(jsonPath); + return text; + } + + private static byte[] ReadDelete(string fileName) + { + var filePath = Path.Combine(FlatPath, fileName); + + if (!System.IO.File.Exists(filePath)) + throw new Exception($"Failed to save binary. {log}"); + + var data = File.ReadAllBytes(filePath); + File.Delete(filePath); + return data; + } + + private static void GenerateJsonFromFile(string file, string fbs) + { + var fbsName = fbs + ".fbs"; + var fbsPath = Path.Combine(FlatPath, fbsName); + Directory.CreateDirectory(FlatPath); + if (!File.Exists(fbsPath)) + File.WriteAllBytes(fbsPath, GetSchema(fbs)); + + var fileName = Path.GetFileName(file); + var filePath = Path.Combine(FlatPath, fileName); + File.Copy(file, filePath, true); + + var args = GetArgumentsDeserialize(fileName, fbsName); + RunFlatC(args); + File.Delete(filePath); + } + + private static string GenerateBinFrom(T obj, string fbs) + { + var fbsName = fbs + ".fbs"; + var jsonName = fbs + ".json"; + var text = WriteJson(obj); + + var jsonPath = Path.Combine(FlatPath, jsonName); + File.WriteAllText(jsonPath, text); + var args = GetArgumentsSerialize(jsonName, fbsName); + return RunFlatC(args); + } + + public static string WriteJson(T obj) + { + var serializer = new JsonSerializer(); + using (var stringWriter = new StringWriter()) + { + using (var writer = new JsonTextWriter(stringWriter) + { + QuoteName = false, + Formatting = Formatting.Indented, + IndentChar = ' ', + Indentation = 2 + }) + serializer.Serialize(writer, obj); + return stringWriter.ToString(); + } + } + + private static string log = ""; + + private static string RunFlatC(string args) + { + var fcp = Path.Combine(FlatPath, "flatc.exe"); + if (!File.Exists(fcp)) + File.WriteAllBytes(fcp, Properties.Resources.flatc); + + var process = new Process + { + StartInfo = new ProcessStartInfo + { + WorkingDirectory = FlatPath, + WindowStyle = ProcessWindowStyle.Hidden, + CreateNoWindow = true, + FileName = "cmd.exe", + Arguments = $"/C flatc {args} & exit", + } + }; + process.EnableRaisingEvents = true; + process.StartInfo.RedirectStandardError = true; + process.StartInfo.RedirectStandardOutput = true; + process.OutputDataReceived += new System.Diagnostics.DataReceivedEventHandler(process_OutputDataReceived); + process.ErrorDataReceived += new System.Diagnostics.DataReceivedEventHandler(process_ErrorDataReceived); + process.StartInfo.UseShellExecute = false; + + process.Start(); + process.BeginErrorReadLine(); + process.BeginOutputReadLine(); + process.WaitForExit(); + + return log; + } + + private static void process_ErrorDataReceived(object sender, DataReceivedEventArgs e) { + if (e.Data != null) log = e.Data; + } + + private static void process_OutputDataReceived(object sender, DataReceivedEventArgs e) { + if (e.Data != null) log = e.Data; + } + + public static byte[] GetSchema(string name) + { + var obj = Properties.Resources.ResourceManager.GetObject(name); + if (!(obj is byte[] b)) + throw new FileNotFoundException(nameof(name)); + return b; + } + + public static readonly string WorkingDirectory = Application.StartupPath; + public static readonly string FlatPath = Path.Combine(WorkingDirectory, "flatbuffers"); + + private static string GetArgumentsDeserialize(string file, string fbs) => + $"-t {fbs} -- {file} --defaults-json --raw-binary"; + + private static string GetArgumentsSerialize(string file, string fbs) => + $"-b {fbs} {file} --defaults-json"; + } +} diff --git a/Switch_Toolbox_Library/IO/STFileSaver.cs b/Switch_Toolbox_Library/IO/STFileSaver.cs index f0b714bf..477f02c2 100644 --- a/Switch_Toolbox_Library/IO/STFileSaver.cs +++ b/Switch_Toolbox_Library/IO/STFileSaver.cs @@ -27,7 +27,9 @@ namespace Toolbox.Library.IO Cursor.Current = Cursors.WaitCursor; FileFormat.FilePath = FileName; - if (FileFormat.IFileInfo.FileIsCompressed || FileFormat.IFileInfo.InArchive || Path.GetExtension(FileName) == ".szs") + string compressionLog = ""; + if (FileFormat.IFileInfo.FileIsCompressed || FileFormat.IFileInfo.InArchive + || Path.GetExtension(FileName) == ".szs" || Path.GetExtension(FileName) == ".sbfres") { //Todo find more optmial way to handle memory with files in archives //Also make compression require streams @@ -45,16 +47,19 @@ namespace Toolbox.Library.IO FileName, EnableDialog); - FileFormat.IFileInfo.CompressedSize = (uint)finalStream.Length; - finalStream.ExportToFile(FileName); + compressionLog = finalStream.Item2; + Stream compressionStream = finalStream.Item1; - DetailsLog += "\n" + SatisfyFileTables(FileFormat, FileName, finalStream, + FileFormat.IFileInfo.CompressedSize = (uint)compressionStream.Length; + compressionStream.ExportToFile(FileName); + + DetailsLog += "\n" + SatisfyFileTables(FileFormat, FileName, compressionStream, FileFormat.IFileInfo.DecompressedSize, FileFormat.IFileInfo.CompressedSize, FileFormat.IFileInfo.FileIsCompressed); - finalStream.Flush(); - finalStream.Close(); + compressionStream.Flush(); + compressionStream.Close(); } else { @@ -85,7 +90,10 @@ namespace Toolbox.Library.IO } } - MessageBox.Show($"File has been saved to {FileName}", "Save Notification"); + if (compressionLog != string.Empty) + MessageBox.Show($"File has been saved to {FileName}. Compressed time: {compressionLog}", "Save Notification"); + else + MessageBox.Show($"File has been saved to {FileName}", "Save Notification"); // STSaveLogDialog.Show($"File has been saved to {FileName}", "Save Notification", DetailsLog); Cursor.Current = Cursors.Default; @@ -219,7 +227,10 @@ namespace Toolbox.Library.IO uint DecompressedSize = (uint)data.Length; Cursor.Current = Cursors.WaitCursor; - Stream FinalData = CompressFileFormat(CompressionFormat, new MemoryStream(data), FileIsCompressed, Alignment, FileName, EnableDialog); + var compressedData = CompressFileFormat(CompressionFormat, new MemoryStream(data), FileIsCompressed, Alignment, FileName, EnableDialog); + string compressionLog = compressedData.Item2; + Stream FinalData = compressedData.Item1; + FinalData.ExportToFile(FileName); uint CompressedSize = (uint)FinalData.Length; @@ -268,7 +279,7 @@ namespace Toolbox.Library.IO } } - private static Stream CompressFileFormat(ICompressionFormat compressionFormat, Stream data, bool FileIsCompressed, int Alignment, + private static Tuple CompressFileFormat(ICompressionFormat compressionFormat, Stream data, bool FileIsCompressed, int Alignment, string FileName, bool EnableDialog = true) { string extension = Path.GetExtension(FileName); @@ -280,7 +291,7 @@ namespace Toolbox.Library.IO } if (compressionFormat == null) - return data; + return Tuple.Create(data, ""); bool CompressFile = false; if (EnableDialog && FileIsCompressed) @@ -303,10 +314,18 @@ namespace Toolbox.Library.IO if (compressionFormat is Yaz0) ((Yaz0)compressionFormat).Alignment = Alignment; - return compressionFormat.Compress(data); + System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch(); + sw.Start(); + + var comp = compressionFormat.Compress(data); + sw.Stop(); + TimeSpan ts = sw.Elapsed; + string message = string.Format("{0:D2}:{1:D2}:{2:D2}", ts.Minutes, ts.Seconds, ts.Milliseconds); + Console.WriteLine($"Compression Time : {message}"); + return Tuple.Create(comp, message); } - return data; + return Tuple.Create(data, ""); } } diff --git a/Switch_Toolbox_Library/IO/SyrootCommon/Half.cs b/Switch_Toolbox_Library/IO/SyrootCommon/Half.cs index 1570e8ed..743070e2 100644 --- a/Switch_Toolbox_Library/IO/SyrootCommon/Half.cs +++ b/Switch_Toolbox_Library/IO/SyrootCommon/Half.cs @@ -191,7 +191,7 @@ namespace Syroot.IOExtension /// Gets the internally stored value to represent the instance. /// /// Signed to get arithmetic rather than logical shifts. - internal ushort Raw { get; private set; } + public ushort Raw { get; private set; } // ---- OPERATORS ---------------------------------------------------------------------------------------------- diff --git a/Switch_Toolbox_Library/OpenGL/Viewport2D.cs b/Switch_Toolbox_Library/OpenGL/Viewport2D.cs index fd285007..fa2b011e 100644 --- a/Switch_Toolbox_Library/OpenGL/Viewport2D.cs +++ b/Switch_Toolbox_Library/OpenGL/Viewport2D.cs @@ -41,7 +41,7 @@ namespace Toolbox.Library.Forms } private GLControl glControl1; - private Color BackgroundColor = Color.FromArgb(40, 40, 40); + public Color BackgroundColor = Color.FromArgb(40, 40, 40); private List SelectedObjects = new List(); @@ -64,6 +64,9 @@ namespace Toolbox.Library.Forms public void UpdateViewport() { + if (!Runtime.OpenTKInitialized) + return; + glControl1.Invalidate(); } @@ -157,6 +160,8 @@ namespace Toolbox.Library.Forms if (showSelectionBox) { + GL.PushAttrib(AttribMask.DepthBufferBit); + GL.Disable(EnableCap.DepthTest); GL.Begin(PrimitiveType.LineLoop); GL.Color4(Color.Red); @@ -166,6 +171,8 @@ namespace Toolbox.Library.Forms GL.Vertex2(SelectionBox.LeftPoint, SelectionBox.TopPoint); GL.End(); GL.Enable(EnableCap.DepthTest); + + GL.PopAttrib(); } if (UseOrtho) @@ -202,7 +209,7 @@ namespace Toolbox.Library.Forms showSelectionBox = true; SelectionBox = new STRectangle(left, right, top, bottom); - SetupScene(); + UpdateViewport(); } public virtual void RenderSceme() @@ -389,10 +396,13 @@ namespace Toolbox.Library.Forms if (mouseDown && !isPicked) { RenderEditor(); + var temp = e.Location; var curPos = OpenGLHelper.convertScreenToWorldCoords(temp.X, temp.Y); var prevPos = OpenGLHelper.convertScreenToWorldCoords(pickOriginMouse.X, pickOriginMouse.Y); + GL.PopMatrix(); + DrawSelectionBox(prevPos, curPos); } } diff --git a/Switch_Toolbox_Library/Properties/Resources.Designer.cs b/Switch_Toolbox_Library/Properties/Resources.Designer.cs index a4f65e60..e6295f43 100644 --- a/Switch_Toolbox_Library/Properties/Resources.Designer.cs +++ b/Switch_Toolbox_Library/Properties/Resources.Designer.cs @@ -450,6 +450,16 @@ namespace Toolbox.Library.Properties { } } + /// + /// Looks up a localized resource of type System.Byte[]. + /// + public static byte[] flatc { + get { + object obj = ResourceManager.GetObject("flatc", resourceCulture); + return ((byte[])(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// @@ -470,6 +480,26 @@ namespace Toolbox.Library.Properties { } } + /// + /// Looks up a localized resource of type System.Byte[]. + /// + public static byte[] gfbanm { + get { + object obj = ResourceManager.GetObject("gfbanm", resourceCulture); + return ((byte[])(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Byte[]. + /// + public static byte[] gfbmdl { + get { + object obj = ResourceManager.GetObject("gfbmdl", resourceCulture); + return ((byte[])(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// diff --git a/Switch_Toolbox_Library/Properties/Resources.resx b/Switch_Toolbox_Library/Properties/Resources.resx index d31f22f9..61fd31a1 100644 --- a/Switch_Toolbox_Library/Properties/Resources.resx +++ b/Switch_Toolbox_Library/Properties/Resources.resx @@ -418,4 +418,13 @@ ..\Resources\MissingTexture.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\flatc.exe;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\Resources\FlatBuffers\gfbmdl.fbs;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\Resources\FlatBuffers\gfbanm.fbs;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/Switch_Toolbox_Library/Rendering/RenderLib.cs b/Switch_Toolbox_Library/Rendering/RenderLib.cs index 0578efbc..4eb5e39b 100644 --- a/Switch_Toolbox_Library/Rendering/RenderLib.cs +++ b/Switch_Toolbox_Library/Rendering/RenderLib.cs @@ -23,15 +23,21 @@ namespace Toolbox.Library.Rendering public Vector3 pos = new Vector3(0); public Vector3 nrm = new Vector3(0); public Vector4 col = new Vector4(1); + public Vector4 col2 = new Vector4(1); + public Vector2 uv0 = new Vector2(0); public Vector2 uv1 = new Vector2(0); public Vector2 uv2 = new Vector2(0); + public Vector2 uv3 = new Vector2(0); + public Vector4 tan = new Vector4(0); public Vector4 bitan = new Vector4(0); public List boneIds = new List(); public List boneWeights = new List(); + public float normalW; + public List boneNames = new List(); public List boneList = new List(); @@ -49,5 +55,7 @@ namespace Toolbox.Library.Rendering //For vertex morphing public Vector3 pos1 = new Vector3(); public Vector3 pos2 = new Vector3(); + + public List Unknowns = new List(); } } diff --git a/Switch_Toolbox_Library/Resources/FlatBuffers/gfbanm.fbs b/Switch_Toolbox_Library/Resources/FlatBuffers/gfbanm.fbs new file mode 100644 index 00000000..d1523628 --- /dev/null +++ b/Switch_Toolbox_Library/Resources/FlatBuffers/gfbanm.fbs @@ -0,0 +1,210 @@ +namespace Gfbanim; + +union TriggerParams { +TriggerParameterInt , TriggerParameterFloat, +TriggerParameterByte, TriggerParameterString +} + +union VectorTrack { FixedVectorTrack, DynamicVectorTrack, FramedVectorTrack } +union RotationTrack { FixedRotationTrack, DynamicRotationTrack, FramedRotationTrack } +union BooleanTrack { FixedBooleanTrack, DynamicBooleanTrack, FramedBooleanTrack } +union ValueTrack { FixedValueTrack, DynamicValueTrack, FramedValueTrack } + +enum RotationFlags:ushort (bit_flags) { + Orientation = 0, + Data1, + Data2 = 3, +} + +table Animation { + AnimConfig:Config; + Bones:BoneList; + Materials:MaterialList; + Groups:GroupList; + Triggers:TriggerList; +} + +table TriggerList { + Triggers:[Trigger]; +} + +table Trigger { + Name:string; + FrameStart:int; + FrameEnd:int; + Parameter:TriggerParameter; +} + + +table TriggerParameter { + Name:string; + Params:TriggerParams; +} + + + +table TriggerParameterInt { + Value:int; +} +table TriggerParameterFloat { + Value:float; +} +table TriggerParameterByte { + Value:byte; +} +table TriggerParameterString { + Value:string; +} + + +table BoneList { + Bones:[Bone]; + Defaults:BoneDefaults; +} + +table MaterialList { + Materials:[Material]; +} + +table GroupList { + Groups:[Group]; +} + + +table Bone { + Name:string; + Scale:VectorTrack; + Rotate:RotationTrack; + Translate:VectorTrack; + ScaleFrames:FrameRanges; + RotationFrames:FrameRanges; + TranslationFrames:FrameRanges; +} + +table BoneDefaults { + Unknown:uint; + Transform:[SRT]; +} + +table Material { + Name:string; + Switches:[MatSwitch]; + Values:[MatValue]; + Vectors:[MatVector]; +} + +table MatSwitch { + Name:string; + Value:BooleanTrack; + frameRanges:FrameRanges; +} + +table MatValue { + Name:string; + Value:ValueTrack; + frameRanges:FrameRanges; +} + +table MatVector { + Name:string; + Value:VectorTrack; + frameRanges:FrameRanges; +} + +table Group { + Name:string; + Value:BooleanTrack; +} + +table Config { + Unknown:uint; + KeyFrames:uint; + FramesPerSecond:uint; +} + +table FixedVectorTrack { + Value:Vector3; +} +table DynamicVectorTrack { + Values:[Vector3]; +} +table FramedVectorTrack { + Frames:[ushort]; + Values:[Vector3]; +} + + +table FixedRotationTrack { + Value:Rotation; +} +table DynamicRotationTrack { + Values:[Rotation]; +} +table FramedRotationTrack { + Frames:[ushort]; + Values:[Rotation]; +} + +table FixedBooleanTrack { + Value:byte; +} +table DynamicBooleanTrack { + Values:[ushort]; +} +table FramedBooleanTrack { + Frames:[ushort]; + Values:[ushort]; +} + + +table FixedValueTrack { + Value:float; +} +table DynamicValueTrack { + Values:[float]; +} +table FramedValueTrack { + Frames:[ushort]; + Values:[float]; +} + + +table FrameRanges { + StartFrames:[ushort]; + EndFrames:[ushort]; +} + + +struct Vector3 { + X:float; + Y:float; + Z:float; +} + +struct Vector4 { + X:float; + Y:float; + Z:float; + W:float; +} + +struct Rotation { + X:ushort; + Y:ushort; + Z:ushort; +} + +struct SRT { + ScaleX:float; + ScaleY:float; + ScaleZ:float; + RotateX:float; + RotateY:float; + RotateZ:float; + RotateW:float; + TranslateX:float; + TranslateY:float; + TranslateZ:float; +} + +root_type Animation; diff --git a/Switch_Toolbox_Library/Resources/FlatBuffers/gfbmdl.fbs b/Switch_Toolbox_Library/Resources/FlatBuffers/gfbmdl.fbs new file mode 100644 index 00000000..25122529 --- /dev/null +++ b/Switch_Toolbox_Library/Resources/FlatBuffers/gfbmdl.fbs @@ -0,0 +1,196 @@ +namespace Gfbmdl; + +enum BoneType : uint { + NoSkinning = 0, + HasSkinning = 1, +} + +enum VertexType : uint { + Position = 0, + Normal = 1, + Binormal = 2, + UV1 = 3, + UV2 = 4, + UV3 = 5, + UV4 = 6, + Color1 = 7, + Color2 = 8, + Color3 = 9, + Color4 = 10, + BoneID = 11, + BoneWeight = 12, +} + +enum BufferFormat : uint { + Float = 0, + HalfFloat = 1, + Byte = 3, + Short = 5, + BytesAsFloat = 8, +} + +table Model { + Version:uint; + Bounding:BoundingBox; + TextureNames:[string]; + ShaderNames:[string]; + Unknown:[UnknownEmpty]; + MaterialNames:[string]; + Materials:[Material]; + Groups:[Group]; + Meshes:[Mesh]; + Bones:[Bone]; + CollisionGroups:[CollisionGroup]; +} + +table UnknownEmpty { + unk:uint; +} + +table Material { + Name:string; + ShaderGroup:string; + RenderLayer:int; + Unknown1:ubyte; + Unknown2:ubyte; + Parameter1:int; + Parameter2:int; + Parameter3:int; + Parameter4:int; + Parameter5:int; + Parameter6:int; + TextureMaps:[TextureMap]; + Switches:[MatSwitch]; + Values:[MatFloat]; + Colors:[MatColor]; + Unknown3:ubyte; + Unknown4:ubyte; + Unknown5:ubyte; + Unknown6:ubyte; + Unknown7:ubyte; + Common:MaterialCommon; +} + +table MaterialCommon { + Switches:[MatSwitch]; + Values:[MatInt]; + Colors:[MatColor]; +} + +table MatSwitch { + Name:string; + Value:bool; +} + +table MatColor { + Name:string; + Color:ColorRGB32; +} + +table MatInt { + Name:string; + Value:int; +} + +table MatFloat { + Name:string; + Value:float; +} + +table TextureMap { + Sampler:string; + Index:int; + Params:TextureMapping; +} + +table TextureMapping { + Unknown1:uint; + Unknown2:uint; + Unknown3:uint; + Unknown4:uint; + Unknown5:uint; + Unknown6:uint; + Unknown7:uint; + Unknown8:uint; + lodBias:float; +} + +table Group { + BoneIndex:uint; + MeshIndex:uint; + Bounding:BoundingBox; + Layer:uint; +} + +table Mesh { + Polygons:[MeshPolygon]; + Attributes:[MeshAttribute]; + Data:[ubyte]; +} + +table MeshPolygon { + MaterialIndex:uint; + Faces:[ushort]; +} + +table MeshAttribute { + VertexType:uint; + BufferFormat:uint; + ElementCount:uint; +} + +table Bone { + Name:string; + BoneType:uint; + Parent:int; + Zero:uint = 0; + Visible:bool; + Scale:Vector3; + Rotation:Vector3; + Translation:Vector3; + RadiusStart:Vector3; + RadiusEnd:Vector3; + RigidCheck:BoneRigidData; +} + +struct BoneRigidData { + Unknown1:byte; +} + +table CollisionGroup { + BoneIndex:uint; + Unknown1:uint; + BoneChildren:[uint]; + Bounding:BoundingBox; +} + + +struct BoundingBox { + MinX:float; + MinY:float; + MinZ:float; + MaxX:float; + MaxY:float; + MaxZ:float; +} + +struct Vector3 { + X:float; + Y:float; + Z:float; +} + +struct ColorRGB32 { + R:float; + G:float; + B:float; +} + +struct Vector4 { + X:float; + Y:float; + Z:float; + W:float; +} + +root_type Model; diff --git a/Switch_Toolbox_Library/Resources/flatc.exe b/Switch_Toolbox_Library/Resources/flatc.exe new file mode 100644 index 0000000000000000000000000000000000000000..1f6f6d764c01511eb26582022f243439b6360330 GIT binary patch literal 1536000 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%0Dl%{ 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 ve}^(~CFalse + + False + ..\Toolbox\Lib\Newtonsoft.Json.dll + ..\Toolbox\Lib\ObjectListView.dll False @@ -345,12 +349,7 @@ GenericTextureImporterList.cs - - UserControl - - - UVEditorAdvanced.cs - + Form @@ -403,6 +402,7 @@ + @@ -684,12 +684,6 @@ TimeLine.cs - - UserControl - - - UVEditor2.cs - Form @@ -1137,15 +1131,12 @@ UVEditor.cs - - UVEditor2.cs - - - UVEditorAdvanced.cs - UVEditorForm.cs + + UVViewport.cs + FileTableViewTPHD.cs @@ -1216,6 +1207,8 @@ + + @@ -1519,6 +1512,9 @@ + + + diff --git a/Toolbox/Lib/yaz0.dll b/Toolbox/Lib/yaz0.dll new file mode 100644 index 0000000000000000000000000000000000000000..aa7f1987b0ed278490f6018cf417b4417c89df1b GIT binary patch literal 49759 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 PreserveNewest + + PreserveNewest + PreserveNewest

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 R~q61)k26nBxwBNd#b7JMEa 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