mirror of
https://mirror.ghproxy.com/https://github.com/dexyfex/CodeWalker
synced 2024-11-26 00:43:00 +08:00
140 lines
4.6 KiB
C#
140 lines
4.6 KiB
C#
using CodeWalker.GameFiles;
|
|
using CodeWalker.World;
|
|
using SharpDX;
|
|
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 EditTrainNodePanel : ProjectPanel
|
|
{
|
|
public ProjectForm ProjectForm;
|
|
public TrainTrackNode TrainNode { get; set; }
|
|
|
|
private bool populatingui = false;
|
|
|
|
public EditTrainNodePanel(ProjectForm projectForm)
|
|
{
|
|
ProjectForm = projectForm;
|
|
InitializeComponent();
|
|
}
|
|
|
|
public void SetTrainNode(TrainTrackNode node)
|
|
{
|
|
TrainNode = node;
|
|
Tag = node;
|
|
UpdateFormTitle();
|
|
UpdateTrainTrackNodeUI();
|
|
}
|
|
|
|
private void UpdateFormTitle()
|
|
{
|
|
Text = "Train Node " + TrainNode.Index.ToString();
|
|
}
|
|
|
|
public void UpdateTrainTrackNodeUI()
|
|
{
|
|
if (TrainNode == null)
|
|
{
|
|
//TrainNodePanel.Enabled = false;
|
|
TrainNodeDeleteButton.Enabled = false;
|
|
TrainNodeAddToProjectButton.Enabled = false;
|
|
TrainNodePositionTextBox.Text = string.Empty;
|
|
TrainNodeTypeComboBox.SelectedIndex = -1;
|
|
}
|
|
else
|
|
{
|
|
populatingui = true;
|
|
//TrainNodePanel.Enabled = true;
|
|
TrainNodeDeleteButton.Enabled = ProjectForm.TrainTrackExistsInProject(TrainNode.Track);
|
|
TrainNodeAddToProjectButton.Enabled = !TrainNodeDeleteButton.Enabled;
|
|
TrainNodePositionTextBox.Text = FloatUtil.GetVector3String(TrainNode.Position);
|
|
TrainNodeTypeComboBox.SelectedIndex = TrainNode.NodeType;
|
|
populatingui = false;
|
|
|
|
if (ProjectForm.WorldForm != null)
|
|
{
|
|
ProjectForm.WorldForm.SelectTrainTrackNode(TrainNode);
|
|
}
|
|
}
|
|
}
|
|
|
|
private void TrainNodePositionTextBox_TextChanged(object sender, EventArgs e)
|
|
{
|
|
if (populatingui) return;
|
|
if (TrainNode == null) return;
|
|
Vector3 v = FloatUtil.ParseVector3String(TrainNodePositionTextBox.Text);
|
|
bool change = false;
|
|
lock (ProjectForm.ProjectSyncRoot)
|
|
{
|
|
if (TrainNode.Position != v)
|
|
{
|
|
TrainNode.SetPosition(v);
|
|
ProjectForm.SetTrainTrackHasChanged(true);
|
|
change = true;
|
|
}
|
|
}
|
|
if (change)
|
|
{
|
|
if (ProjectForm.WorldForm != null)
|
|
{
|
|
ProjectForm.WorldForm.SetWidgetPosition(TrainNode.Position);
|
|
ProjectForm.WorldForm.UpdateTrainTrackNodeGraphics(TrainNode, false);
|
|
}
|
|
//TrainNodePositionTextBox.Text = FloatUtil.GetVector3String(CurrentTrainNode.Position);
|
|
}
|
|
}
|
|
|
|
private void TrainNodeGoToButton_Click(object sender, EventArgs e)
|
|
{
|
|
if (TrainNode == null) return;
|
|
if (ProjectForm.WorldForm == null) return;
|
|
ProjectForm.WorldForm.GoToPosition(TrainNode.Position);
|
|
}
|
|
|
|
private void TrainNodeTypeComboBox_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
if (populatingui) return;
|
|
if (TrainNode == null) return;
|
|
int type = TrainNodeTypeComboBox.SelectedIndex;
|
|
bool change = false;
|
|
lock (ProjectForm.ProjectSyncRoot)
|
|
{
|
|
if (TrainNode.NodeType != type)
|
|
{
|
|
TrainNode.NodeType = type;
|
|
ProjectForm.SetTrainTrackHasChanged(true);
|
|
change = true;
|
|
}
|
|
}
|
|
if (change)
|
|
{
|
|
if (ProjectForm.WorldForm != null)
|
|
{
|
|
ProjectForm.WorldForm.UpdateTrainTrackNodeGraphics(TrainNode, false); //change the colour...
|
|
}
|
|
}
|
|
ProjectForm.ProjectExplorer?.UpdateTrainNodeTreeNode(TrainNode);
|
|
}
|
|
|
|
private void TrainNodeAddToProjectButton_Click(object sender, EventArgs e)
|
|
{
|
|
ProjectForm.SetProjectItem(TrainNode);
|
|
ProjectForm.AddTrainTrackToProject(TrainNode.Track);
|
|
}
|
|
|
|
private void TrainNodeDeleteButton_Click(object sender, EventArgs e)
|
|
{
|
|
ProjectForm.SetProjectItem(TrainNode);
|
|
ProjectForm.DeleteTrainNode();
|
|
}
|
|
}
|
|
}
|