CodeWalker/Project/Panels/EditYnvPolyPanel.cs
2018-05-02 00:28:47 +10:00

289 lines
9.5 KiB
C#

using CodeWalker.GameFiles;
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;
namespace CodeWalker.Project.Panels
{
public partial class EditYnvPolyPanel : ProjectPanel
{
public ProjectForm ProjectForm;
public YnvPoly YnvPoly { get; set; }
private bool populatingui = false;
public EditYnvPolyPanel(ProjectForm projectForm)
{
ProjectForm = projectForm;
InitializeComponent();
}
public void SetYnvPoly(YnvPoly ynvPoly)
{
YnvPoly = ynvPoly;
Tag = ynvPoly;
UpdateFormTitle();
UpdateYnvUI();
}
private void UpdateFormTitle()
{
Text = "Nav Poly " + YnvPoly.Index.ToString();
}
public void UpdateYnvUI()
{
if (YnvPoly == null)
{
////YnvPolyPanel.Enabled = false;
DeletePolyButton.Enabled = false;
AddToProjectButton.Enabled = false;
AreaIDUpDown.Value = 0;
PartIDUpDown.Value = 0;
PortalIDUpDown.Value = 0;
PortalCountUpDown.Value = 0;
SetCheckedListBoxValues(FlagsCheckedListBox1, 0);
SetCheckedListBoxValues(FlagsCheckedListBox2, 0);
SetCheckedListBoxValues(FlagsCheckedListBox3, 0);
SetCheckedListBoxValues(FlagsCheckedListBox4, 0);
UnkXUpDown.Value = 0;
UnkYUpDown.Value = 0;
}
else
{
populatingui = true;
////YnvPolyPanel.Enabled = true;
DeletePolyButton.Enabled = ProjectForm.YnvExistsInProject(YnvPoly.Ynv);
AddToProjectButton.Enabled = !DeletePolyButton.Enabled;
AreaIDUpDown.Value = YnvPoly.AreaID;
PartIDUpDown.Value = YnvPoly.PartID;
PortalIDUpDown.Value = YnvPoly.PortalLinkID;
PortalCountUpDown.Value = YnvPoly.PortalLinkCount;
SetCheckedListBoxValues(FlagsCheckedListBox1, YnvPoly.Flags1);
SetCheckedListBoxValues(FlagsCheckedListBox2, YnvPoly.Flags2);
SetCheckedListBoxValues(FlagsCheckedListBox3, YnvPoly.Flags3);
SetCheckedListBoxValues(FlagsCheckedListBox4, YnvPoly.Flags4);
UnkXUpDown.Value = YnvPoly.UnkX;
UnkYUpDown.Value = YnvPoly.UnkY;
populatingui = false;
}
}
private void SetCheckedListBoxValues(CheckedListBox clb, byte flags)
{
for (int i = 0; i < clb.Items.Count; i++)
{
var c = ((flags & (1 << i)) > 0);
clb.SetItemCheckState(i, c ? CheckState.Checked : CheckState.Unchecked);
}
}
private byte GetCheckedListBoxValues(CheckedListBox clb, ItemCheckEventArgs e)
{
byte r = 0;
for (int i = 0; i < clb.Items.Count; i++)
{
if ((e != null) && (e.Index == i))
{
if (e.NewValue == CheckState.Checked)
{
r += (byte)(1 << i);
}
}
else
{
bool v = clb.GetItemChecked(i);// == CheckState.Checked;
r = (byte)BitUtil.UpdateBit(r, i, v);
}
}
return r;
}
private void AreaIDUpDown_ValueChanged(object sender, EventArgs e)
{
if (populatingui) return;
if (YnvPoly == null) return;
ushort areaid = (ushort)AreaIDUpDown.Value;
lock (ProjectForm.ProjectSyncRoot)
{
if (YnvPoly.AreaID != areaid)
{
YnvPoly.AreaID = areaid;
ProjectForm.SetYnvHasChanged(true);
}
}
}
private void PartIDUpDown_ValueChanged(object sender, EventArgs e)
{
if (populatingui) return;
if (YnvPoly == null) return;
ushort partid = (ushort)PartIDUpDown.Value;
lock (ProjectForm.ProjectSyncRoot)
{
if (YnvPoly.PartID != partid)
{
YnvPoly.PartID = partid;
ProjectForm.SetYnvHasChanged(true);
}
}
}
private void PortalIDUpDown_ValueChanged(object sender, EventArgs e)
{
if (populatingui) return;
if (YnvPoly == null) return;
ushort portalid = (ushort)PortalIDUpDown.Value;
lock (ProjectForm.ProjectSyncRoot)
{
if (YnvPoly.PortalLinkID != portalid)
{
YnvPoly.PortalLinkID = portalid;
ProjectForm.SetYnvHasChanged(true);
}
}
}
private void PortalCountUpDown_ValueChanged(object sender, EventArgs e)
{
if (populatingui) return;
if (YnvPoly == null) return;
byte portalcount = (byte)PortalCountUpDown.Value;
lock (ProjectForm.ProjectSyncRoot)
{
if (YnvPoly.PortalLinkCount != portalcount)
{
YnvPoly.PortalLinkCount = portalcount;
ProjectForm.SetYnvHasChanged(true);
}
}
}
private void FlagsCheckedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
{
if (populatingui) return;
if (YnvPoly == null) return;
byte flags = GetCheckedListBoxValues(FlagsCheckedListBox1, e);
lock (ProjectForm.ProjectSyncRoot)
{
if (YnvPoly.Flags1 != flags)
{
YnvPoly.Flags1 = flags;
ProjectForm.SetYnvHasChanged(true);
}
}
if (ProjectForm.WorldForm != null)
{
ProjectForm.WorldForm.UpdateNavPolyGraphics(YnvPoly, false);
}
}
private void FlagsCheckedListBox2_ItemCheck(object sender, ItemCheckEventArgs e)
{
if (populatingui) return;
if (YnvPoly == null) return;
byte flags = GetCheckedListBoxValues(FlagsCheckedListBox2, e);
lock (ProjectForm.ProjectSyncRoot)
{
if (YnvPoly.Flags2 != flags)
{
YnvPoly.Flags2 = flags;
ProjectForm.SetYnvHasChanged(true);
}
}
if (ProjectForm.WorldForm != null)
{
ProjectForm.WorldForm.UpdateNavPolyGraphics(YnvPoly, false);
}
}
private void FlagsCheckedListBox3_ItemCheck(object sender, ItemCheckEventArgs e)
{
if (populatingui) return;
if (YnvPoly == null) return;
byte flags = GetCheckedListBoxValues(FlagsCheckedListBox3, e);
lock (ProjectForm.ProjectSyncRoot)
{
if (YnvPoly.Flags3 != flags)
{
YnvPoly.Flags3 = flags;
ProjectForm.SetYnvHasChanged(true);
}
}
if (ProjectForm.WorldForm != null)
{
ProjectForm.WorldForm.UpdateNavPolyGraphics(YnvPoly, false);
}
}
private void FlagsCheckedListBox4_ItemCheck(object sender, ItemCheckEventArgs e)
{
if (populatingui) return;
if (YnvPoly == null) return;
byte flags = GetCheckedListBoxValues(FlagsCheckedListBox4, e);
lock (ProjectForm.ProjectSyncRoot)
{
if (YnvPoly.Flags4 != flags)
{
YnvPoly.Flags4 = flags;
ProjectForm.SetYnvHasChanged(true);
}
}
if (ProjectForm.WorldForm != null)
{
ProjectForm.WorldForm.UpdateNavPolyGraphics(YnvPoly, false);
}
}
private void UnkXUpDown_ValueChanged(object sender, EventArgs e)
{
if (populatingui) return;
if (YnvPoly == null) return;
byte unkx = (byte)UnkXUpDown.Value;
lock (ProjectForm.ProjectSyncRoot)
{
if (YnvPoly.UnkX != unkx)
{
YnvPoly.UnkX = unkx;
ProjectForm.SetYnvHasChanged(true);
}
}
}
private void UnkYUpDown_ValueChanged(object sender, EventArgs e)
{
if (populatingui) return;
if (YnvPoly == null) return;
byte unky = (byte)UnkYUpDown.Value;
lock (ProjectForm.ProjectSyncRoot)
{
if (YnvPoly.UnkY != unky)
{
YnvPoly.UnkY = unky;
ProjectForm.SetYnvHasChanged(true);
}
}
}
private void AddToProjectButton_Click(object sender, EventArgs e)
{
if (YnvPoly == null) return;
ProjectForm.SetProjectItem(YnvPoly);
ProjectForm.AddYnvToProject(YnvPoly.Ynv);
}
private void DeletePolyButton_Click(object sender, EventArgs e)
{
MessageBox.Show("Delete Polygon TODO!");
}
}
}