mirror of
https://mirror.ghproxy.com/https://github.com/dexyfex/CodeWalker
synced 2024-11-26 17:02:53 +08:00
199 lines
6.4 KiB
C#
199 lines
6.4 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 EditYtypMloEntSetPanel : ProjectPanel
|
|
{
|
|
public ProjectForm ProjectForm;
|
|
public MCMloEntitySet CurrentEntitySet { get; set; }
|
|
|
|
private bool populatingui = false;
|
|
private bool SelectingLocation = false;
|
|
|
|
public EditYtypMloEntSetPanel(ProjectForm owner)
|
|
{
|
|
ProjectForm = owner;
|
|
InitializeComponent();
|
|
}
|
|
|
|
public void SetEntitySet(MCMloEntitySet entset)
|
|
{
|
|
CurrentEntitySet = entset;
|
|
Tag = entset;
|
|
UpdateFormTitle();
|
|
MloInstanceData instance = ProjectForm.TryGetMloInstance(entset?.OwnerMlo);
|
|
//ProjectForm.WorldForm?.SelectMloEntitySet(entset, instance);
|
|
UpdateControls();
|
|
}
|
|
|
|
private void UpdateControls()
|
|
{
|
|
|
|
if (CurrentEntitySet != null)
|
|
{
|
|
populatingui = true;
|
|
EntitySetNameTextBox.Text = CurrentEntitySet.Name;
|
|
ForceVisibleCheckBox.Checked = CurrentEntitySet.ForceVisible;
|
|
SelectedLocationGroupBox.Visible = false;
|
|
UpdateSelectedLocationRoomCombo();
|
|
populatingui = false;
|
|
}
|
|
else
|
|
{
|
|
EntitySetNameTextBox.Text = string.Empty;
|
|
ForceVisibleCheckBox.Checked = false;
|
|
SelectedLocationGroupBox.Visible = false;
|
|
SelectedLocationRoomCombo.Items.Clear();
|
|
}
|
|
|
|
UpdateLocationsListBox();
|
|
}
|
|
private void UpdateLocationsListBox()
|
|
{
|
|
LocationsListBox.Items.Clear();
|
|
if (CurrentEntitySet?.Locations != null)
|
|
{
|
|
for (int i = 0; i < CurrentEntitySet.Locations.Length; i++)
|
|
{
|
|
var loc = CurrentEntitySet.Locations[i];
|
|
var ent = ((CurrentEntitySet.Entities != null) && (i < CurrentEntitySet.Entities.Length)) ? CurrentEntitySet.Entities[i] : null;
|
|
var item = new LocationItem() { Location = loc, Entity = ent, Index = i };
|
|
LocationsListBox.Items.Add(item);
|
|
}
|
|
}
|
|
}
|
|
private void UpdateSelectedLocationRoomCombo()
|
|
{
|
|
SelectedLocationRoomCombo.Items.Clear();
|
|
if (CurrentEntitySet?.OwnerMlo?.rooms != null)
|
|
{
|
|
foreach (var room in CurrentEntitySet.OwnerMlo.rooms)
|
|
{
|
|
SelectedLocationRoomCombo.Items.Add(room);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void UpdateFormTitle()
|
|
{
|
|
Text = CurrentEntitySet?.Name ?? "Entity Set";
|
|
}
|
|
|
|
private void EntitySetNameTextBox_TextChanged(object sender, EventArgs e)
|
|
{
|
|
if (populatingui) return;
|
|
if (CurrentEntitySet == null) return;
|
|
|
|
var str = EntitySetNameTextBox.Text;
|
|
if (CurrentEntitySet.Name != str)
|
|
{
|
|
uint h = 0;
|
|
if (uint.TryParse(str, out h))
|
|
{
|
|
CurrentEntitySet._Data.name = h;
|
|
}
|
|
else
|
|
{
|
|
JenkIndex.Ensure(str);
|
|
CurrentEntitySet._Data.name = JenkHash.GenHash(str);
|
|
}
|
|
|
|
TreeNode tn = ProjectForm.ProjectExplorer?.FindMloEntitySetTreeNode(CurrentEntitySet);
|
|
if (tn != null)
|
|
{
|
|
tn.Text = CurrentEntitySet.Name;
|
|
}
|
|
|
|
UpdateFormTitle();
|
|
ProjectForm.SetYtypHasChanged(true);
|
|
|
|
}
|
|
}
|
|
|
|
private void ForceVisibleCheckBox_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
if (CurrentEntitySet == null) return;
|
|
CurrentEntitySet.ForceVisible = ForceVisibleCheckBox.Checked;
|
|
}
|
|
|
|
private void LocationsListBox_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
SelectedLocationGroupBox.Visible = false;
|
|
|
|
if (CurrentEntitySet == null) return;
|
|
|
|
var item = LocationsListBox.SelectedItem as LocationItem;
|
|
if (item == null) return;
|
|
|
|
SelectingLocation = true;
|
|
SelectedLocationEntityLabel.Text = (item.Entity != null) ? item.Entity.Name : "-";
|
|
SelectedLocationRoomCombo.SelectedIndex = (item.Location < SelectedLocationRoomCombo.Items.Count) ? (int)item.Location : 0;
|
|
SelectingLocation = false;
|
|
SelectedLocationGroupBox.Visible = true;
|
|
}
|
|
|
|
private void SelectedLocationRoomCombo_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
if (SelectingLocation) return;
|
|
if (CurrentEntitySet?.Locations == null) return;
|
|
|
|
var item = LocationsListBox.SelectedItem as LocationItem;
|
|
if (item == null) return;
|
|
|
|
item.Location = (SelectedLocationRoomCombo.SelectedIndex >= 0) ? (uint)SelectedLocationRoomCombo.SelectedIndex : 0;
|
|
|
|
var ind = item.Index;
|
|
if (ind < CurrentEntitySet.Locations.Length)
|
|
{
|
|
CurrentEntitySet.Locations[ind] = item.Location;
|
|
|
|
ProjectForm.SetYtypHasChanged(true);
|
|
|
|
if ((ind >= 0) && (ind < LocationsListBox.Items.Count))
|
|
{
|
|
LocationsListBox.Items[ind] = LocationsListBox.Items[ind];//refresh the item text...
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
private void AddEntityButton_Click(object sender, EventArgs e)
|
|
{
|
|
ProjectForm.SetProjectItem(CurrentEntitySet);
|
|
ProjectForm.NewMloEntity();
|
|
}
|
|
|
|
private void DeleteButton_Click(object sender, EventArgs e)
|
|
{
|
|
ProjectForm.SetProjectItem(CurrentEntitySet);
|
|
ProjectForm.DeleteMloEntitySet();
|
|
}
|
|
|
|
|
|
|
|
|
|
class LocationItem
|
|
{
|
|
public uint Location { get; set; }
|
|
public MCEntityDef Entity { get; set; }
|
|
public int Index { get; set; }
|
|
|
|
public override string ToString()
|
|
{
|
|
if (Entity == null) return Location.ToString();
|
|
return Location.ToString() + ": " + Entity.ToString();
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|