mirror of
https://github.com/KillzXGaming/Switch-Toolbox
synced 2024-11-23 04:53:09 +00:00
146 lines
No EOL
4.7 KiB
C#
146 lines
No EOL
4.7 KiB
C#
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 SPICA.Formats.CtrH3D.Model;
|
|
using SPICA.Formats.CtrH3D.Model.Mesh;
|
|
using Toolbox.Library.Forms;
|
|
|
|
namespace FirstPlugin.CtrLibrary.Forms
|
|
{
|
|
public partial class BCHModelEditor : UserControl
|
|
{
|
|
H3DModelWrapper ActiveModelWrapper;
|
|
|
|
private bool Loaded = false;
|
|
|
|
public BCHModelEditor()
|
|
{
|
|
InitializeComponent();
|
|
|
|
stDropDownPanel1.ResetColors();
|
|
stDropDownPanel2.ResetColors();
|
|
|
|
stTabControl1.myBackColor = FormThemes.BaseTheme.FormBackColor;
|
|
|
|
tranXUD.ValueChanged += OnTransformChanged;
|
|
tranYUD.ValueChanged += OnTransformChanged;
|
|
tranZUD.ValueChanged += OnTransformChanged;
|
|
rotXUD.ValueChanged += OnTransformChanged;
|
|
rotYUD.ValueChanged += OnTransformChanged;
|
|
rotZUD.ValueChanged += OnTransformChanged;
|
|
scaleXUD.ValueChanged += OnTransformChanged;
|
|
scaleYUD.ValueChanged += OnTransformChanged;
|
|
scaleZUD.ValueChanged += OnTransformChanged;
|
|
|
|
meshLayerCB.Items.Add("0 (Opaque)");
|
|
meshLayerCB.Items.Add("1 (Translucent)");
|
|
meshLayerCB.Items.Add("2 (Subtractive Blend)");
|
|
meshLayerCB.Items.Add("3 (Additive Blend)");
|
|
|
|
listViewCustom1.FullRowSelect = true;
|
|
|
|
tranXUD.SetTheme();
|
|
}
|
|
|
|
public void LoadModel(H3DModelWrapper wrapper)
|
|
{
|
|
ActiveModelWrapper = wrapper;
|
|
|
|
Loaded = false;
|
|
var model = wrapper.Model;
|
|
var transform = model.WorldTransform;
|
|
|
|
if (model.MetaData != null)
|
|
bchUserDataEditor1.LoadUserData(model.MetaData);
|
|
|
|
listViewCustom1.BeginUpdate();
|
|
listViewCustom1.Items.Clear();
|
|
for (int i = 0; i < model.Meshes.Count; i++) {
|
|
ListViewItem item = new ListViewItem();
|
|
UpdateMeshListItem(model.Meshes[i], item);
|
|
listViewCustom1.Items.Add(item);
|
|
}
|
|
listViewCustom1.EndUpdate();
|
|
|
|
if (listViewCustom1.Items.Count > 0)
|
|
listViewCustom1.TrySelectItem(0);
|
|
|
|
Loaded = true;
|
|
}
|
|
|
|
private static void UpdateMeshListItem(H3DMesh mesh, ListViewItem item)
|
|
{
|
|
string materialName = "";
|
|
if (mesh.Parent.Materials.Count > mesh.MaterialIndex)
|
|
materialName = mesh.Parent.Materials[mesh.MaterialIndex].Name;
|
|
|
|
item.SubItems.Clear();
|
|
item.Tag = mesh;
|
|
item.Text = mesh.NodeIndex.ToString();
|
|
item.SubItems.Add(materialName);
|
|
item.SubItems.Add($"mesh_{materialName}");
|
|
item.SubItems.Add(GetLayerString(mesh.Layer));
|
|
item.SubItems.Add(mesh.Priority.ToString());
|
|
}
|
|
|
|
private static string GetLayerString(int layer)
|
|
{
|
|
switch (layer)
|
|
{
|
|
case 0: return $"{layer} (Opaque)";
|
|
case 1: return $"{layer} (Translucent)";
|
|
case 2: return $"{layer} (Subtractive Blend)";
|
|
case 3: return $"{layer} (Additive Blend)";
|
|
default: return layer.ToString();
|
|
}
|
|
}
|
|
|
|
private void OnTransformChanged(object sender, EventArgs e)
|
|
{
|
|
if (!Loaded) return;
|
|
|
|
}
|
|
|
|
private void BCHModelEditor_Load(object sender, EventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
private void listViewCustom1_SelectedIndexChanged(object sender, EventArgs e) {
|
|
var mesh = GetActiveMesh();
|
|
if (mesh != null && Loaded) {
|
|
meshLayerCB.SelectedIndex = mesh.Layer;
|
|
renderPriorityUD.Value = mesh.Priority;
|
|
}
|
|
}
|
|
|
|
private void meshLayerCB_SelectedIndexChanged(object sender, EventArgs e) {
|
|
var mesh = GetActiveMesh();
|
|
if (mesh != null && Loaded) {
|
|
ActiveModelWrapper.Model.EditLayer(mesh, meshLayerCB.SelectedIndex);
|
|
UpdateMeshListItem(mesh, listViewCustom1.SelectedItems[0]);
|
|
}
|
|
}
|
|
|
|
private H3DMesh GetActiveMesh()
|
|
{
|
|
if (listViewCustom1.SelectedIndices.Count > 0)
|
|
return (H3DMesh)listViewCustom1.SelectedItems[0].Tag;
|
|
return null;
|
|
}
|
|
|
|
private void renderPriorityUD_Scroll(object sender, ScrollEventArgs e) {
|
|
var mesh = GetActiveMesh();
|
|
if (mesh != null && Loaded) {
|
|
mesh.Priority = (int)renderPriorityUD.Value;
|
|
UpdateMeshListItem(mesh, listViewCustom1.SelectedItems[0]);
|
|
}
|
|
}
|
|
}
|
|
} |