Some fixes

Fixed loading files from clicked on when a single instance of the tool is used.
Fixed the UV editor, which loads materails and texture maps properly.
Adjusted loading archives which produced some duplicate file issues when the archive loads the file, and a tree node is clicked on. Ie bntx clearing, but another one would stay in memory.
Fixed bntx replacing.
This commit is contained in:
KillzXGaming 2019-08-12 15:19:30 -04:00
parent 78c7ecff71
commit cb13c0a00a
15 changed files with 237 additions and 88 deletions

View file

@ -283,6 +283,7 @@ namespace UKing.Actors
entry.Info = info.Value; entry.Info = info.Value;
entry.Text = info.Value.MessageName; entry.Text = info.Value.MessageName;
Categories[catgeory].Nodes.Add(entry); Categories[catgeory].Nodes.Add(entry);
entry.ReloadActorProperties();
} }
} }
@ -342,7 +343,30 @@ namespace UKing.Actors
Models = new ActorModel(); Models = new ActorModel();
Parameters = new ActorParameters(); Parameters = new ActorParameters();
string bfresName = Info.BfresName;
//Load our texture paths if they exist //Load our texture paths if they exist
string texPathNX = $"{Runtime.BotwGamePath}/Model/{bfresName}.Tex.sbfres";
string tex1Path = $"{Runtime.BotwGamePath}/Model/{bfresName}.Tex1.sbfres";
string tex2Path = $"{Runtime.BotwGamePath}/Model/{bfresName}.Tex2.sbfres";
if (File.Exists(texPathNX))
Textures.FilePathTex1 = texPathNX;
if (File.Exists(tex1Path))
Textures.FilePathTex1 = tex1Path;
if (File.Exists(tex2Path))
Textures.FilePathTex2 = tex2Path;
//Load model and animation paths if they exist
string modelPath = $"{Runtime.BotwGamePath}/Model/{bfresName}.sbfres";
string animationPath = $"{Runtime.BotwGamePath}/Model/{bfresName}_Animation.sbfres";
if (File.Exists(modelPath))
Models.FilePathModel = modelPath;
if (File.Exists(animationPath))
Models.FilePathAnimation = animationPath;
//Load any cached paths
} }

View file

@ -769,7 +769,6 @@ namespace FirstPlugin
reader.Position = 0; reader.Position = 0;
} }
LoadMenus(IsWiiU); LoadMenus(IsWiiU);
@ -1783,7 +1782,7 @@ namespace FirstPlugin
public static void SetShaderAssignAttributes(FSHP shape) public static void SetShaderAssignAttributes(FSHP shape)
{ {
var shd = shape.GetMaterial().shaderassign; var shd = shape.GetFMAT().shaderassign;
foreach (var att in shape.vertexAttributes) foreach (var att in shape.vertexAttributes)
{ {
@ -1913,7 +1912,7 @@ namespace FirstPlugin
if (!IsWiiU) if (!IsWiiU)
{ {
Syroot.NintenTools.NSW.Bfres.VertexBuffer vtx = shp.VertexBuffer; Syroot.NintenTools.NSW.Bfres.VertexBuffer vtx = shp.VertexBuffer;
Syroot.NintenTools.NSW.Bfres.Material mat = shp.GetMaterial().Material; Syroot.NintenTools.NSW.Bfres.Material mat = shp.GetFMAT().Material;
Syroot.NintenTools.NSW.Bfres.ShaderAssign shdr = mat.ShaderAssign; Syroot.NintenTools.NSW.Bfres.ShaderAssign shdr = mat.ShaderAssign;
for (int att = 0; att < vtx.Attributes.Count; att++) for (int att = 0; att < vtx.Attributes.Count; att++)
@ -1930,7 +1929,7 @@ namespace FirstPlugin
else else
{ {
Syroot.NintenTools.Bfres.VertexBuffer vtx = shp.VertexBufferU; Syroot.NintenTools.Bfres.VertexBuffer vtx = shp.VertexBufferU;
Syroot.NintenTools.Bfres.Material mat = shp.GetMaterial().MaterialU; Syroot.NintenTools.Bfres.Material mat = shp.GetFMAT().MaterialU;
Syroot.NintenTools.Bfres.ShaderAssign shdr = mat.ShaderAssign; Syroot.NintenTools.Bfres.ShaderAssign shdr = mat.ShaderAssign;
for (int att = 0; att < vtx.Attributes.Count; att++) for (int att = 0; att < vtx.Attributes.Count; att++)

View file

@ -384,8 +384,8 @@ namespace Bfres.Structs
bool UseUVLayer2 = false; bool UseUVLayer2 = false;
//for BOTW if it uses UV layer 2 for normal maps use second UV map //for BOTW if it uses UV layer 2 for normal maps use second UV map
if (shp.GetMaterial().shaderassign.options.ContainsKey("uking_texture2_texcoord")) { if (shp.GetFMAT().shaderassign.options.ContainsKey("uking_texture2_texcoord")) {
float value = float.Parse(shp.GetMaterial().shaderassign.options["uking_texture2_texcoord"]); float value = float.Parse(shp.GetFMAT().shaderassign.options["uking_texture2_texcoord"]);
if (value == 1) if (value == 1)
UseUVLayer2 = true; UseUVLayer2 = true;

View file

@ -736,6 +736,19 @@ namespace Bfres.Structs
public float MaxLod; public float MaxLod;
public float BiasLod; public float BiasLod;
public override STGenericTexture GetTexture()
{
foreach (var bntx in PluginRuntime.bntxContainers)
if (bntx.Textures.ContainsKey(this.Name))
return bntx.Textures[this.Name];
foreach (var ftexCont in PluginRuntime.ftexContainers)
if (ftexCont.ResourceNodes.ContainsKey(this.Name))
return (FTEX)ftexCont.ResourceNodes[this.Name];
return null;
}
public MatTexture() public MatTexture()
{ {

View file

@ -228,7 +228,12 @@ namespace Bfres.Structs
return ((FMDL)Parent.Parent); return ((FMDL)Parent.Parent);
} }
public FMAT GetMaterial() public FMAT GetFMAT()
{
return (FMAT)GetMaterial();
}
public override STGenericMaterial GetMaterial()
{ {
if (Parent == null) if (Parent == null)
STErrorDialog.Show($"Error! Shape {Text} has no parent node!", "GetMaterial", ""); STErrorDialog.Show($"Error! Shape {Text} has no parent node!", "GetMaterial", "");
@ -611,7 +616,7 @@ namespace Bfres.Structs
//check second UV layer //check second UV layer
if (Parent != null) { if (Parent != null) {
UseUVLayer2 = GetMaterial().IsNormalMapTexCoord2(); UseUVLayer2 = GetFMAT().IsNormalMapTexCoord2();
} }
CalculateTangentBitangent(UseUVLayer2); CalculateTangentBitangent(UseUVLayer2);
@ -720,9 +725,9 @@ namespace Bfres.Structs
bool UseUVLayer2 = false; bool UseUVLayer2 = false;
//for BOTW if it uses UV layer 2 for normal maps use second UV map //for BOTW if it uses UV layer 2 for normal maps use second UV map
if (GetMaterial().shaderassign.options.ContainsKey("uking_texture2_texcoord")) if (GetFMAT().shaderassign.options.ContainsKey("uking_texture2_texcoord"))
{ {
float value = float.Parse(GetMaterial().shaderassign.options["uking_texture2_texcoord"]); float value = float.Parse(GetFMAT().shaderassign.options["uking_texture2_texcoord"]);
if (value == 1) if (value == 1)
UseUVLayer2 = true; UseUVLayer2 = true;
@ -778,7 +783,7 @@ namespace Bfres.Structs
if (sfd.ShowDialog() == DialogResult.OK) if (sfd.ShowDialog() == DialogResult.OK)
{ {
GetMaterial().Material.Export(sfd.FileName, GetResFile()); GetFMAT().Material.Export(sfd.FileName, GetResFile());
} }
} }
public void ReplaceMaterials(object sender, EventArgs args) public void ReplaceMaterials(object sender, EventArgs args)
@ -790,7 +795,7 @@ namespace Bfres.Structs
if (ofd.ShowDialog() == DialogResult.OK) if (ofd.ShowDialog() == DialogResult.OK)
{ {
GetMaterial().Material.Import(ofd.FileName); GetFMAT().Material.Import(ofd.FileName);
} }
} }
public void Export(object sender, EventArgs args) public void Export(object sender, EventArgs args)
@ -909,7 +914,7 @@ namespace Bfres.Structs
CreateIndexList(obj, (FMDL)Parent.Parent, settings.LimitSkinCount, ForceSkinInfluenceMax); CreateIndexList(obj, (FMDL)Parent.Parent, settings.LimitSkinCount, ForceSkinInfluenceMax);
BoneIndices = GetIndices(GetParentModel().Skeleton); BoneIndices = GetIndices(GetParentModel().Skeleton);
ApplyImportSettings(settings, GetMaterial()); ApplyImportSettings(settings, GetFMAT());
OptmizeAttributeFormats(); OptmizeAttributeFormats();
SaveShape(IsWiiU); SaveShape(IsWiiU);

View file

@ -238,7 +238,8 @@ namespace FirstPlugin
if (ContainerArray.Count == 0) if (ContainerArray.Count == 0)
LoadFile(stream, Name); LoadFile(stream, Name);
PluginRuntime.bntxContainers.Add(this); if (!PluginRuntime.bntxContainers.Contains(this))
PluginRuntime.bntxContainers.Add(this);
} }
static bool IsLoadingArray = false; static bool IsLoadingArray = false;
@ -492,11 +493,20 @@ namespace FirstPlugin
BinaryTexFile = new BntxFile(stream); BinaryTexFile = new BntxFile(stream);
Text = BinaryTexFile.Name; Text = BinaryTexFile.Name;
//Dispose previous entries if bntx is being replaced or reloaded
foreach (var tex in Textures.Values)
{
tex.Texture.TextureData.Clear();
tex.Texture = null;
tex.DisposeRenderable();
}
Nodes.Clear();
Textures.Clear();
foreach (Texture tex in BinaryTexFile.Textures) foreach (Texture tex in BinaryTexFile.Textures)
{ {
TextureData texData = new TextureData(tex, BinaryTexFile); TextureData texData = new TextureData(tex, BinaryTexFile);
Nodes.Add(texData); Nodes.Add(texData);
Textures.Add(tex.Name, texData); Textures.Add(tex.Name, texData);
} }
@ -768,8 +778,16 @@ namespace FirstPlugin
if (result == DialogResult.Yes) if (result == DialogResult.Yes)
{ {
Nodes.Clear(); foreach (var tex in Textures.Values)
{
tex.DisposeRenderable();
tex.Texture.TextureData.Clear();
tex.Texture = null;
}
Textures.Clear(); Textures.Clear();
Nodes.Clear();
GC.Collect(); GC.Collect();
} }
} }
@ -976,6 +994,7 @@ namespace FirstPlugin
private void Import(object sender, EventArgs args) private void Import(object sender, EventArgs args)
{ {
OpenFileDialog ofd = new OpenFileDialog(); OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "BNTX |*.bntx;";
if (ofd.ShowDialog() == DialogResult.OK) if (ofd.ShowDialog() == DialogResult.OK)
{ {

View file

@ -332,7 +332,7 @@ namespace FirstPlugin
{ {
if (models[0].shapes.Count > 0) if (models[0].shapes.Count > 0)
{ {
if (models[0].shapes[0].GetMaterial().shaderassign.ShaderModel == "uking_mat") if (models[0].shapes[0].GetFMAT().shaderassign.ShaderModel == "uking_mat")
{ {
shader = OpenTKSharedResources.shaders["BFRES_Botw"]; shader = OpenTKSharedResources.shaders["BFRES_Botw"];
@ -424,7 +424,7 @@ namespace FirstPlugin
for (int shp = 0; shp < models[m].shapes.Count; shp++) for (int shp = 0; shp < models[m].shapes.Count; shp++)
{ {
if (models[m].shapes[shp].GetMaterial().isTransparent) if (models[m].shapes[shp].GetFMAT().isTransparent)
transparent.Add(models[m].shapes[shp]); transparent.Add(models[m].shapes[shp]);
else else
opaque.Add(models[m].shapes[shp]); opaque.Add(models[m].shapes[shp]);
@ -715,7 +715,7 @@ namespace FirstPlugin
if (m.lodMeshes[m.DisplayLODIndex].faces.Count <= 3) if (m.lodMeshes[m.DisplayLODIndex].faces.Count <= 3)
return; return;
var mat = m.GetMaterial(); var mat = m.GetFMAT();
if (shader != OpenTKSharedResources.shaders["BFRES_Normals"]) if (shader != OpenTKSharedResources.shaders["BFRES_Normals"])
{ {
@ -832,7 +832,7 @@ namespace FirstPlugin
for (int shp = 0; shp < models[m].shapes.Count; shp++) for (int shp = 0; shp < models[m].shapes.Count; shp++)
{ {
//Update render pass aswell //Update render pass aswell
CheckRenderPass(models[m].shapes[shp].GetMaterial()); CheckRenderPass(models[m].shapes[shp].GetFMAT());
models[m].shapes[shp].Offset = poffset * 4; models[m].shapes[shp].Offset = poffset * 4;
List<DisplayVertex> pv = models[m].shapes[shp].CreateDisplayVertices(models[m]); List<DisplayVertex> pv = models[m].shapes[shp].CreateDisplayVertices(models[m]);

View file

@ -118,7 +118,6 @@ namespace FirstPlugin.Forms
TextureMap.MinFilter = texmap.MinFilter; TextureMap.MinFilter = texmap.MinFilter;
TextureMap.MagFilter = texmap.MagFilter; TextureMap.MagFilter = texmap.MagFilter;
TextureMap.texture = genericTexture;
return TextureMap; return TextureMap;
} }
private void SetActiveGameByShader(string ShaderName, string ShaderMdlName) private void SetActiveGameByShader(string ShaderName, string ShaderMdlName)

View file

@ -36,17 +36,17 @@
this.stLabel3 = new Toolbox.Library.Forms.STLabel(); this.stLabel3 = new Toolbox.Library.Forms.STLabel();
this.scaleXUD = new Toolbox.Library.Forms.NumericUpDownFloat(); this.scaleXUD = new Toolbox.Library.Forms.NumericUpDownFloat();
this.stPanel1 = new Toolbox.Library.Forms.STPanel(); this.stPanel1 = new Toolbox.Library.Forms.STPanel();
this.btnApplyTransform = new Toolbox.Library.Forms.STButton(); this.stComboBox1 = new Toolbox.Library.Forms.STComboBox();
this.barSlider1 = new ColorSlider.ColorSlider(); this.barSlider1 = new ColorSlider.ColorSlider();
this.stLabel2 = new Toolbox.Library.Forms.STLabel(); this.stLabel2 = new Toolbox.Library.Forms.STLabel();
this.comboBox2 = new Toolbox.Library.Forms.STComboBox(); this.comboBox2 = new Toolbox.Library.Forms.STComboBox();
this.comboBox1 = new Toolbox.Library.Forms.STComboBox(); this.comboBox1 = new Toolbox.Library.Forms.STComboBox();
this.stLabel1 = new Toolbox.Library.Forms.STLabel(); this.stLabel1 = new Toolbox.Library.Forms.STLabel();
this.btnApplyTransform = new Toolbox.Library.Forms.STButton();
this.stPanel2 = new Toolbox.Library.Forms.STPanel(); this.stPanel2 = new Toolbox.Library.Forms.STPanel();
this.stComboBox1 = new Toolbox.Library.Forms.STComboBox(); this.stButton1 = new Toolbox.Library.Forms.STButton();
this.splitter1 = new System.Windows.Forms.Splitter(); this.splitter1 = new System.Windows.Forms.Splitter();
this.stPanel3 = new Toolbox.Library.Forms.STPanel(); this.stPanel3 = new Toolbox.Library.Forms.STPanel();
this.stButton1 = new Toolbox.Library.Forms.STButton();
((System.ComponentModel.ISupportInitialize)(this.scaleYUD)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.scaleYUD)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.transYUD)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.transYUD)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.transXUD)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.transXUD)).BeginInit();
@ -199,16 +199,20 @@
this.stPanel1.Size = new System.Drawing.Size(605, 70); this.stPanel1.Size = new System.Drawing.Size(605, 70);
this.stPanel1.TabIndex = 1; this.stPanel1.TabIndex = 1;
// //
// btnApplyTransform // stComboBox1
// //
this.btnApplyTransform.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.stComboBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
this.btnApplyTransform.Location = new System.Drawing.Point(3, 138); | System.Windows.Forms.AnchorStyles.Right)));
this.btnApplyTransform.Name = "btnApplyTransform"; this.stComboBox1.BorderColor = System.Drawing.Color.Empty;
this.btnApplyTransform.Size = new System.Drawing.Size(119, 23); this.stComboBox1.BorderStyle = System.Windows.Forms.ButtonBorderStyle.Solid;
this.btnApplyTransform.TabIndex = 9; this.stComboBox1.ButtonColor = System.Drawing.Color.Empty;
this.btnApplyTransform.Text = "Apply Transform"; this.stComboBox1.FormattingEnabled = true;
this.btnApplyTransform.UseVisualStyleBackColor = false; this.stComboBox1.Location = new System.Drawing.Point(290, 7);
this.btnApplyTransform.Click += new System.EventHandler(this.btnApplyTransform_Click); this.stComboBox1.Name = "stComboBox1";
this.stComboBox1.ReadOnly = true;
this.stComboBox1.Size = new System.Drawing.Size(166, 21);
this.stComboBox1.TabIndex = 19;
this.stComboBox1.SelectedIndexChanged += new System.EventHandler(this.stComboBox1_SelectedIndexChanged);
// //
// barSlider1 // barSlider1
// //
@ -292,6 +296,17 @@
this.stLabel1.TabIndex = 4; this.stLabel1.TabIndex = 4;
this.stLabel1.Text = "Active Channel:"; this.stLabel1.Text = "Active Channel:";
// //
// btnApplyTransform
//
this.btnApplyTransform.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnApplyTransform.Location = new System.Drawing.Point(3, 138);
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);
//
// stPanel2 // stPanel2
// //
this.stPanel2.Controls.Add(this.stButton1); this.stPanel2.Controls.Add(this.stButton1);
@ -308,19 +323,16 @@
this.stPanel2.Size = new System.Drawing.Size(159, 454); this.stPanel2.Size = new System.Drawing.Size(159, 454);
this.stPanel2.TabIndex = 3; this.stPanel2.TabIndex = 3;
// //
// stComboBox1 // stButton1
// //
this.stComboBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) this.stButton1.Dock = System.Windows.Forms.DockStyle.Right;
| System.Windows.Forms.AnchorStyles.Right))); this.stButton1.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.stComboBox1.BorderColor = System.Drawing.Color.Empty; this.stButton1.Location = new System.Drawing.Point(145, 0);
this.stComboBox1.BorderStyle = System.Windows.Forms.ButtonBorderStyle.Solid; this.stButton1.Name = "stButton1";
this.stComboBox1.ButtonColor = System.Drawing.Color.Empty; this.stButton1.Size = new System.Drawing.Size(14, 454);
this.stComboBox1.FormattingEnabled = true; this.stButton1.TabIndex = 10;
this.stComboBox1.Location = new System.Drawing.Point(290, 7); this.stButton1.UseVisualStyleBackColor = false;
this.stComboBox1.Name = "stComboBox1"; this.stButton1.Click += new System.EventHandler(this.stButton1_Click);
this.stComboBox1.ReadOnly = true;
this.stComboBox1.Size = new System.Drawing.Size(166, 21);
this.stComboBox1.TabIndex = 19;
// //
// splitter1 // splitter1
// //
@ -339,16 +351,6 @@
this.stPanel3.Size = new System.Drawing.Size(443, 454); this.stPanel3.Size = new System.Drawing.Size(443, 454);
this.stPanel3.TabIndex = 5; this.stPanel3.TabIndex = 5;
// //
// stButton1
//
this.stButton1.Dock = System.Windows.Forms.DockStyle.Right;
this.stButton1.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.stButton1.Location = new System.Drawing.Point(145, 0);
this.stButton1.Name = "stButton1";
this.stButton1.Size = new System.Drawing.Size(14, 454);
this.stButton1.TabIndex = 10;
this.stButton1.UseVisualStyleBackColor = false;
//
// UVEditor // UVEditor
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);

View file

@ -31,9 +31,8 @@ namespace Toolbox.Library.Forms
public Vector2 UVScale = new Vector2(1); public Vector2 UVScale = new Vector2(1);
public Vector2 UVTranslate = new Vector2(0); public Vector2 UVTranslate = new Vector2(0);
public float UVRotate = 0; public float UVRotate = 0;
public STGenericTexture texture;
public int UvChannelIndex; public int UvChannelIndex;
public int mapMode = 0; public int TextureIndex = -1;
public STTextureWrapMode WrapModeS = STTextureWrapMode.Repeat; public STTextureWrapMode WrapModeS = STTextureWrapMode.Repeat;
public STTextureWrapMode WrapModeT = STTextureWrapMode.Repeat; public STTextureWrapMode WrapModeT = STTextureWrapMode.Repeat;
@ -42,18 +41,37 @@ namespace Toolbox.Library.Forms
public STTextureMinFilter MinFilter = STTextureMinFilter.Linear; public STTextureMinFilter MinFilter = STTextureMinFilter.Linear;
public STTextureMagFilter MagFilter = STTextureMagFilter.Linear; public STTextureMagFilter MagFilter = STTextureMagFilter.Linear;
public uint texWidth = 0; public uint Width = 0;
public uint texHeight = 0; public uint Height = 0;
} }
public ActiveTexture activeTexture = new ActiveTexture(); public ActiveTexture activeTexture = new ActiveTexture();
public float brightness = 0.5f; //To see uv maps easier public float brightness = 0.5f; //To see uv maps easier
public int UvChannelIndex = 0; public int UvChannelIndex = 0;
public List<STGenericObject> ActiveObjects = new List<STGenericObject>(); public List<STGenericObject> Objects = new List<STGenericObject>();
public List<STGenericMaterial> ActiveMaterials = new List<STGenericMaterial>();
public List<ActiveTexture> Textures = new List<ActiveTexture>(); public List<STGenericObject> ActiveObjects
{
get
{
List<STGenericObject> objects = new List<STGenericObject>();
for (int i = 0; i < Objects.Count; i++)
{
if (Objects[i].GetMaterial() == ActiveMaterial)
objects.Add(Objects[i]);
}
return objects;
}
}
public List<STGenericMaterial> Materials = new List<STGenericMaterial>();
public List<STGenericTexture> Textures = new List<STGenericTexture>();
public List<ActiveTexture> ChannelTextures = new List<ActiveTexture>();
public STGenericMaterial ActiveMaterial;
bool IsSRTLoaded = false; bool IsSRTLoaded = false;
public void Reset() public void Reset()
@ -67,16 +85,18 @@ namespace Toolbox.Library.Forms
IsSRTLoaded = false; IsSRTLoaded = false;
comboBox2.Items.Clear(); stComboBox1.Items.Clear();
if (RenderTools.defaultTex != null) if (RenderTools.defaultTex != null)
texid = RenderTools.defaultTex.RenderableTex.TexID; texid = RenderTools.defaultTex.RenderableTex.TexID;
foreach (var item in Textures) foreach (var mat in Materials)
comboBox2.Items.Add(item.texture.Text); {
stComboBox1.Items.Add(mat.Text);
}
if (comboBox2.Items.Count > 0) if (stComboBox1.Items.Count > 0)
comboBox2.SelectedIndex = 0; stComboBox1.SelectedIndex = 0;
} }
public int texid; public int texid;
@ -262,10 +282,10 @@ namespace Toolbox.Library.Forms
float PlaneScaleX = 0.5f; float PlaneScaleX = 0.5f;
float PlaneScaleY = 0.5f; float PlaneScaleY = 0.5f;
if (activeTexture.texWidth != 0 && activeTexture.texHeight != 0) if (activeTexture.Width != 0 && activeTexture.Height != 0)
{ {
PlaneScaleX = (float)gL_ControlLegacy2D1.Width / (float)activeTexture.texWidth; PlaneScaleX = (float)gL_ControlLegacy2D1.Width / (float)activeTexture.Width;
PlaneScaleY = (float)gL_ControlLegacy2D1.Height / (float)activeTexture.texHeight; PlaneScaleY = (float)gL_ControlLegacy2D1.Height / (float)activeTexture.Height;
} }
@ -275,7 +295,7 @@ namespace Toolbox.Library.Forms
GL.Scale(PlaneScaleY * ZoomValue, -PlaneScaleX * ZoomValue, 1); GL.Scale(PlaneScaleY * ZoomValue, -PlaneScaleX * ZoomValue, 1);
GL.Translate(PosX, PosY, 0); GL.Translate(PosX, PosY, 0);
if (activeTexture.texture != null) if (activeTexture.TextureIndex != -1)
{ {
//Draws a textured plan for our uvs to show on //Draws a textured plan for our uvs to show on
GL.Enable(EnableCap.Texture2D); GL.Enable(EnableCap.Texture2D);
@ -325,8 +345,6 @@ namespace Toolbox.Library.Forms
Positions[2] = Positions[2] * scale; Positions[2] = Positions[2] * scale;
Positions[3] = Positions[3] * scale; Positions[3] = Positions[3] * scale;
int brightnessScale = (int)(brightness * 255);
GL.Begin(PrimitiveType.Quads); GL.Begin(PrimitiveType.Quads);
GL.Color3(brightness, brightness, brightness); GL.Color3(brightness, brightness, brightness);
GL.TexCoord2(TexCoords[0]); GL.TexCoord2(TexCoords[0]);
@ -390,7 +408,7 @@ namespace Toolbox.Library.Forms
{ {
if (comboBox2.SelectedIndex >= 0) if (comboBox2.SelectedIndex >= 0)
{ {
activeTexture = Textures[comboBox2.SelectedIndex]; activeTexture = ChannelTextures[comboBox2.SelectedIndex];
UvChannelIndex = activeTexture.UvChannelIndex; UvChannelIndex = activeTexture.UvChannelIndex;
scaleXUD.Value = (decimal)activeTexture.UVScale.X; scaleXUD.Value = (decimal)activeTexture.UVScale.X;
@ -398,14 +416,14 @@ namespace Toolbox.Library.Forms
transXUD.Value = (decimal)activeTexture.UVTranslate.X; transXUD.Value = (decimal)activeTexture.UVTranslate.X;
transYUD.Value = (decimal)activeTexture.UVTranslate.Y; transYUD.Value = (decimal)activeTexture.UVTranslate.Y;
var texture = activeTexture.texture; var texture = Textures[activeTexture.TextureIndex];
if (texture.RenderableTex == null) if (texture.RenderableTex == null)
texture.LoadOpenGLTexture(); texture.LoadOpenGLTexture();
texid = texture.RenderableTex.TexID; texid = texture.RenderableTex.TexID;
activeTexture.texWidth = texture.Width; activeTexture.Width = texture.Width;
activeTexture.texHeight = texture.Height; activeTexture.Height = texture.Height;
gL_ControlLegacy2D1.Invalidate(); gL_ControlLegacy2D1.Invalidate();
@ -460,5 +478,48 @@ namespace Toolbox.Library.Forms
{ {
gL_ControlLegacy2D1.Invalidate(); gL_ControlLegacy2D1.Invalidate();
} }
private void stComboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (stComboBox1.SelectedIndex >= 0)
{
ActiveMaterial = Materials[stComboBox1.SelectedIndex];
ChannelTextures.Clear();
Textures.Clear();
comboBox2.Items.Clear();
foreach (var texMap in ActiveMaterial.TextureMaps)
{
var texture = texMap.GetTexture();
if (texture != null && !Textures.Contains(texture))
{
comboBox2.Items.Add(texture.Text);
Textures.Add(texture);
ActiveTexture tex = new ActiveTexture();
tex.TextureIndex = Textures.IndexOf(texture);
tex.Width = texture.Width;
tex.Height = texture.Height;
tex.MagFilter = texMap.MagFilter;
tex.MinFilter = texMap.MinFilter;
tex.UvChannelIndex = 0;
ChannelTextures.Add(tex);
}
}
comboBox2.SelectedIndex = 0;
}
}
private void barSlider1_Scroll(object sender, ScrollEventArgs e)
{
}
private void stButton1_Click(object sender, EventArgs e)
{
}
} }
} }

View file

@ -19,18 +19,23 @@ namespace Toolbox.Library.Forms
public void LoadEditor(List<STGenericObject> Meshes) public void LoadEditor(List<STGenericObject> Meshes)
{ {
List<STGenericMaterial> materials = new List<STGenericMaterial>(); uvEditor1.Materials.Clear();
for (int i =0; i < Meshes.Count; i++) uvEditor1.Textures.Clear();
uvEditor1.Objects.Clear();
for (int i = 0; i < Meshes.Count; i++)
{ {
if (Meshes[i].GetMaterial() != null) if (Meshes[i].GetMaterial() != null)
{ {
materials.Add(Meshes[i].GetMaterial()); var mat = Meshes[i].GetMaterial();
if (!uvEditor1.Materials.Contains(mat))
{
uvEditor1.Materials.Add(mat);
}
} }
} }
uvEditor1.ActiveObjects = Meshes; uvEditor1.Objects = Meshes;
uvEditor1.ActiveMaterials = materials;
uvEditor1.Textures.Clear();
uvEditor1.Reset(); uvEditor1.Reset();
uvEditor1.Refresh(); uvEditor1.Refresh();
} }

View file

@ -398,6 +398,8 @@ namespace Toolbox.Library
{ {
if (animationPanel1.CurrentAnimation != null) if (animationPanel1.CurrentAnimation != null)
animationPanel1.ResetModels(); animationPanel1.ResetModels();
UpdateViewport();
} }
} }
@ -594,7 +596,7 @@ namespace Toolbox.Library
List<STGenericObject> meshes = new List<STGenericObject>(); List<STGenericObject> meshes = new List<STGenericObject>();
for (int i = 0; i < container.Drawables.Count; i++) for (int i = 0; i < container.Drawables.Count; i++)
{ {
if (container.Drawables[i] is IMeshContainer) if (container.Drawables[i] is IMeshContainer && container.Drawables[i].Visible)
{ {
for (int m = 0; m < ((IMeshContainer)container.Drawables[i]).Meshes.Count; m++) for (int m = 0; m < ((IMeshContainer)container.Drawables[i]).Meshes.Count; m++)
meshes.Add(((IMeshContainer)container.Drawables[i]).Meshes[m]); meshes.Add(((IMeshContainer)container.Drawables[i]).Meshes[m]);
@ -607,7 +609,7 @@ namespace Toolbox.Library
{ {
UVEditorForm uvEditor1 = new UVEditorForm(); UVEditorForm uvEditor1 = new UVEditorForm();
uvEditor1.LoadEditor(meshes); uvEditor1.LoadEditor(meshes);
uvEditor1.Show(); uvEditor1.Show(this);
} }
} }

View file

@ -55,6 +55,16 @@ namespace Toolbox.Library
Replaced, Replaced,
} }
/// <summary>
/// Gets the texture that links to this material texture map
/// Used for UV editor
/// </summary>
/// <returns></returns>
public virtual STGenericTexture GetTexture()
{
return null;
}
public TextureType Type; public TextureType Type;
//An enum for the assumed texture type by sampler //An enum for the assumed texture type by sampler

View file

@ -849,14 +849,15 @@ namespace Toolbox.Library
if (file == null) //Format not supported so return if (file == null) //Format not supported so return
return; return;
ArchiveFileInfo.FileFormat = file;
if (Utils.HasInterface(file.GetType(), typeof(IEditor<>))) if (Utils.HasInterface(file.GetType(), typeof(IEditor<>)))
{ {
OpenFormDialog(file); OpenFormDialog(file);
} }
else if (file is IArchiveFile) else if (file is IArchiveFile)
{ {
if (ArchiveFileInfo.FileFormat != null)
ArchiveFileInfo.FileFormat.Unload();
var FileRoot = new ArchiveRootNodeWrapper(file.FileName, (IArchiveFile)file); var FileRoot = new ArchiveRootNodeWrapper(file.FileName, (IArchiveFile)file);
FileRoot.FillTreeNodes(); FileRoot.FillTreeNodes();
@ -869,7 +870,16 @@ namespace Toolbox.Library
ReplaceNode(this.Parent, treeview, this, FileRoot, RootNode); ReplaceNode(this.Parent, treeview, this, FileRoot, RootNode);
} }
else if (file is TreeNode) else if (file is TreeNode)
{
if (ArchiveFileInfo.FileFormat != null)
ArchiveFileInfo.FileFormat.Unload();
ReplaceNode(this.Parent, treeview, this, (TreeNode)file, RootNode); ReplaceNode(this.Parent, treeview, this, (TreeNode)file, RootNode);
}
ArchiveFileInfo.FileFormat = file;
Console.WriteLine("replacedFileFormat ");
} }
private void OpenFormDialog(IFileFormat fileFormat) private void OpenFormDialog(IFileFormat fileFormat)

View file

@ -101,7 +101,7 @@ namespace Toolbox
protected override void OnCreateMainForm() protected override void OnCreateMainForm()
{ {
MainForm = new MainForm(); MainForm = Toolbox.MainForm.Instance;
} }
} }