mirror of
https://mirror.ghproxy.com/https://github.com/dexyfex/CodeWalker
synced 2026-05-15 06:56:15 +08:00
Added Save button to ModelForm, fixed material editor not updating all relevant geometries on parameter change
This commit is contained in:
+40
-2
@@ -15,6 +15,8 @@ namespace CodeWalker.Forms
|
||||
public partial class ModelMatForm : Form
|
||||
{
|
||||
private ModelForm ModelForm;
|
||||
private DrawableBase Drawable;
|
||||
private Dictionary<uint, Drawable> DrawableDict;
|
||||
|
||||
|
||||
public ModelMatForm(ModelForm modelForm)
|
||||
@@ -28,6 +30,7 @@ namespace CodeWalker.Forms
|
||||
|
||||
public void LoadModel(DrawableBase drawable)
|
||||
{
|
||||
Drawable = drawable;
|
||||
|
||||
ModelsTreeView.Nodes.Clear();
|
||||
ModelsTreeView.ShowRootLines = false;
|
||||
@@ -64,6 +67,8 @@ namespace CodeWalker.Forms
|
||||
}
|
||||
public void LoadModels(Dictionary<uint, Drawable> dict)
|
||||
{
|
||||
DrawableDict = dict;
|
||||
|
||||
ModelsTreeView.Nodes.Clear();
|
||||
//ModelsTreeView.ShowRootLines = true;
|
||||
|
||||
@@ -198,11 +203,16 @@ namespace CodeWalker.Forms
|
||||
if (parm.DataType == 0)//texture
|
||||
{
|
||||
var tex = parm.Data as TextureBase;
|
||||
if (!(tex is Texture))//don't do this for embedded textures!
|
||||
var ttex = tex as Texture;
|
||||
if (ttex == null)//don't do this for embedded textures!
|
||||
{
|
||||
tex.Name = txt;
|
||||
tex.NameHash = JenkHash.GenHash(txt.ToLowerInvariant());
|
||||
}
|
||||
else
|
||||
{
|
||||
//TODO: modify embedded textures!
|
||||
}
|
||||
}
|
||||
else if (parm.DataType == 1)//Vector4
|
||||
{
|
||||
@@ -228,11 +238,39 @@ namespace CodeWalker.Forms
|
||||
var geom = ModelsTreeView.SelectedNode?.Tag as DrawableGeometry;
|
||||
if (geom != null)
|
||||
{
|
||||
geom.UpdateRenderableParameters = true;
|
||||
if (Drawable != null)
|
||||
{
|
||||
UpdateRenderableParams(Drawable, geom.Shader);
|
||||
}
|
||||
if (DrawableDict != null)
|
||||
{
|
||||
foreach (var dwbl in DrawableDict.Values)
|
||||
{
|
||||
UpdateRenderableParams(dwbl, geom.Shader);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ModelForm.OnModelModified();
|
||||
|
||||
}
|
||||
|
||||
private void UpdateRenderableParams(DrawableBase dwbl, ShaderFX shader)
|
||||
{
|
||||
foreach (var model in dwbl.AllModels)
|
||||
{
|
||||
if (model?.Geometries?.data_items == null) continue;
|
||||
foreach (var geom in model.Geometries.data_items)
|
||||
{
|
||||
if (geom.Shader == shader)
|
||||
{
|
||||
geom.UpdateRenderableParameters = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void ModelMatForm_FormClosed(object sender, FormClosedEventArgs e)
|
||||
{
|
||||
ModelForm.OnMaterialFormClosed();
|
||||
|
||||
Reference in New Issue
Block a user