Collisions editing progress

This commit is contained in:
dexy 2020-01-13 23:31:27 +11:00
parent 741cf0ecfc
commit 3f24a234e6
11 changed files with 1116 additions and 711 deletions

View File

@ -1131,6 +1131,7 @@ namespace CodeWalker.GameFiles
BuildMaterials();
CalculateQuantum();
UpdateEdgeIndices();
UpdateTriangleAreas();
var list = new List<IResourceBlock>(base.GetReferences());
if (Vertices2 != null)
@ -1655,6 +1656,29 @@ namespace CodeWalker.GameFiles
}
public void UpdateTriangleAreas()
{
//update all triangle areas, based on vertex positions
if (Polygons == null)
{ return; }
var edgedict = new Dictionary<BoundEdgeRef, BoundEdge>();
foreach (var poly in Polygons)
{
if (poly is BoundPolygonTriangle btri)
{
var v1 = btri.Vertex1;
var v2 = btri.Vertex2;
var v3 = btri.Vertex3;
var area = TriangleMath.Area(ref v1, ref v2, ref v3);
//if (Math.Abs(btri.triArea - area) > Math.Max(area*0.1f,0.1f))
//{ }//ehh good enough
btri.triArea = area;
}
}
}
public bool DeletePolygon(BoundPolygon p)
{
@ -2261,6 +2285,9 @@ namespace CodeWalker.GameFiles
child.TransformInv = Matrix.Invert(xform);
child.CompositeFlags1 = ((ChildrenFlags1 != null) && (i < ChildrenFlags1.Length)) ? ChildrenFlags1[i] : new BoundCompositeChildrenFlags();
child.CompositeFlags2 = ((ChildrenFlags2 != null) && (i < ChildrenFlags2.Length)) ? ChildrenFlags2[i] : new BoundCompositeChildrenFlags();
//if ((child.CompositeFlags1.Flags1 != child.CompositeFlags2.Flags1) || (child.CompositeFlags1.Flags2 != child.CompositeFlags2.Flags2))
//{ } //no hits
}
}
}

View File

@ -309,6 +309,63 @@ namespace CodeWalker
return Vector3.Normalize(Vector3.Cross(Vector3.Cross(ab, av), ab));
}
public static float PointRayDist(ref Vector3 p, ref Vector3 ro, ref Vector3 rd)
{
return Vector3.Cross(rd, p - ro).Length();
}
}
public static class TriangleMath
{
public static float AreaPart(ref Vector3 v1, ref Vector3 v2, ref Vector3 v3, out float angle)
{
var va = v2 - v1;
var vb = v3 - v1;
var na = Vector3.Normalize(va);
var nb = Vector3.Normalize(vb);
var a = va.Length();
var b = vb.Length();
var c = Math.Acos(Vector3.Dot(na, nb));
var area = (float)(0.5 * a * b * Math.Sin(c));
angle = (float)Math.Abs(c);
return area;
}
public static float Area(ref Vector3 v1, ref Vector3 v2, ref Vector3 v3)
{
var a1 = AreaPart(ref v1, ref v2, ref v3, out float t1);
var a2 = AreaPart(ref v2, ref v3, ref v1, out float t2);
var a3 = AreaPart(ref v3, ref v1, ref v2, out float t3);
var fp = (float)Math.PI;
var d1 = Math.Min(t1, Math.Abs(t1 - fp));
var d2 = Math.Min(t2, Math.Abs(t2 - fp));
var d3 = Math.Min(t3, Math.Abs(t3 - fp));
if ((d1 >= d2) && (a1 != 0))
{
if ((d1 >= d3) || (a3 == 0))
{
return a1;
}
else
{
return a3;
}
}
else
{
if ((d2 >= d3) || (a3 == 0))
{
return a2;
}
else
{
return a3;
}
}
}
}

View File

@ -31,45 +31,28 @@
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditYbnBoundPolyPanel));
this.PolyTabControl = new System.Windows.Forms.TabControl();
this.TriangleTabPage = new System.Windows.Forms.TabPage();
this.SphereTabPage = new System.Windows.Forms.TabPage();
this.CapsuleTabPage = new System.Windows.Forms.TabPage();
this.BoxTabPage = new System.Windows.Forms.TabPage();
this.CylinderTabPage = new System.Windows.Forms.TabPage();
this.TriFlag3CheckBox = new System.Windows.Forms.CheckBox();
this.TriFlag2CheckBox = new System.Windows.Forms.CheckBox();
this.TriFlag1CheckBox = new System.Windows.Forms.CheckBox();
this.TriVertex3TextBox = new System.Windows.Forms.TextBox();
this.label1 = new System.Windows.Forms.Label();
this.TriVertex2TextBox = new System.Windows.Forms.TextBox();
this.TriVertex1TextBox = new System.Windows.Forms.TextBox();
this.label11 = new System.Windows.Forms.Label();
this.label5 = new System.Windows.Forms.Label();
this.TriAreaTextBox = new System.Windows.Forms.TextBox();
this.label2 = new System.Windows.Forms.Label();
this.TriEdge1UpDown = new System.Windows.Forms.NumericUpDown();
this.label7 = new System.Windows.Forms.Label();
this.TriEdge2UpDown = new System.Windows.Forms.NumericUpDown();
this.label3 = new System.Windows.Forms.Label();
this.TriEdge3UpDown = new System.Windows.Forms.NumericUpDown();
this.label4 = new System.Windows.Forms.Label();
this.TriFlag1CheckBox = new System.Windows.Forms.CheckBox();
this.TriFlag2CheckBox = new System.Windows.Forms.CheckBox();
this.TriFlag3CheckBox = new System.Windows.Forms.CheckBox();
this.MaterialTabControl = new System.Windows.Forms.TabControl();
this.MaterialTabPage = new System.Windows.Forms.TabPage();
this.SphereTabPage = new System.Windows.Forms.TabPage();
this.SphRadiusTextBox = new System.Windows.Forms.TextBox();
this.SphPositionTextBox = new System.Windows.Forms.TextBox();
this.label6 = new System.Windows.Forms.Label();
this.label8 = new System.Windows.Forms.Label();
this.CapsuleTabPage = new System.Windows.Forms.TabPage();
this.CapRadiusTextBox = new System.Windows.Forms.TextBox();
this.label9 = new System.Windows.Forms.Label();
this.CapVertex2TextBox = new System.Windows.Forms.TextBox();
this.CapVertex1TextBox = new System.Windows.Forms.TextBox();
this.label10 = new System.Windows.Forms.Label();
this.label12 = new System.Windows.Forms.Label();
this.CylRadiusTextBox = new System.Windows.Forms.TextBox();
this.label13 = new System.Windows.Forms.Label();
this.CylVertex2TextBox = new System.Windows.Forms.TextBox();
this.CylVertex1TextBox = new System.Windows.Forms.TextBox();
this.label14 = new System.Windows.Forms.Label();
this.label15 = new System.Windows.Forms.Label();
this.BoxTabPage = new System.Windows.Forms.TabPage();
this.BoxVertex4TextBox = new System.Windows.Forms.TextBox();
this.label16 = new System.Windows.Forms.Label();
this.BoxVertex3TextBox = new System.Windows.Forms.TextBox();
@ -78,8 +61,19 @@
this.BoxVertex1TextBox = new System.Windows.Forms.TextBox();
this.label18 = new System.Windows.Forms.Label();
this.label19 = new System.Windows.Forms.Label();
this.MatTypeCombo = new System.Windows.Forms.ComboBox();
this.label20 = new System.Windows.Forms.Label();
this.CylinderTabPage = new System.Windows.Forms.TabPage();
this.CylRadiusTextBox = new System.Windows.Forms.TextBox();
this.label13 = new System.Windows.Forms.Label();
this.CylVertex2TextBox = new System.Windows.Forms.TextBox();
this.CylVertex1TextBox = new System.Windows.Forms.TextBox();
this.label14 = new System.Windows.Forms.Label();
this.label15 = new System.Windows.Forms.Label();
this.MaterialTabControl = new System.Windows.Forms.TabControl();
this.MaterialTabPage = new System.Windows.Forms.TabPage();
this.UpdateSharedMaterialCheckBox = new System.Windows.Forms.CheckBox();
this.MatFlagsCheckedListBox = new System.Windows.Forms.CheckedListBox();
this.MatColourUpDown = new System.Windows.Forms.NumericUpDown();
this.label25 = new System.Windows.Forms.Label();
this.MatUnkUpDown = new System.Windows.Forms.NumericUpDown();
this.label21 = new System.Windows.Forms.Label();
this.MatPedDensityUpDown = new System.Windows.Forms.NumericUpDown();
@ -88,10 +82,8 @@
this.label23 = new System.Windows.Forms.Label();
this.MatProceduralIDUpDown = new System.Windows.Forms.NumericUpDown();
this.label24 = new System.Windows.Forms.Label();
this.MatColourUpDown = new System.Windows.Forms.NumericUpDown();
this.label25 = new System.Windows.Forms.Label();
this.MatFlagsCheckedListBox = new System.Windows.Forms.CheckedListBox();
this.UpdateSharedMaterialCheckBox = new System.Windows.Forms.CheckBox();
this.MatTypeCombo = new System.Windows.Forms.ComboBox();
this.label20 = new System.Windows.Forms.Label();
this.DeleteButton = new System.Windows.Forms.Button();
this.AddToProjectButton = new System.Windows.Forms.Button();
this.PolyTabControl.SuspendLayout();
@ -100,16 +92,13 @@
this.CapsuleTabPage.SuspendLayout();
this.BoxTabPage.SuspendLayout();
this.CylinderTabPage.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.TriEdge1UpDown)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.TriEdge2UpDown)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.TriEdge3UpDown)).BeginInit();
this.MaterialTabControl.SuspendLayout();
this.MaterialTabPage.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.MatColourUpDown)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.MatUnkUpDown)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.MatPedDensityUpDown)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.MatRoomIDUpDown)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.MatProceduralIDUpDown)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.MatColourUpDown)).BeginInit();
this.SuspendLayout();
//
// PolyTabControl
@ -124,7 +113,7 @@
this.PolyTabControl.Location = new System.Drawing.Point(0, 12);
this.PolyTabControl.Name = "PolyTabControl";
this.PolyTabControl.SelectedIndex = 0;
this.PolyTabControl.Size = new System.Drawing.Size(564, 213);
this.PolyTabControl.Size = new System.Drawing.Size(564, 137);
this.PolyTabControl.TabIndex = 0;
//
// TriangleTabPage
@ -132,14 +121,6 @@
this.TriangleTabPage.Controls.Add(this.TriFlag3CheckBox);
this.TriangleTabPage.Controls.Add(this.TriFlag2CheckBox);
this.TriangleTabPage.Controls.Add(this.TriFlag1CheckBox);
this.TriangleTabPage.Controls.Add(this.TriEdge3UpDown);
this.TriangleTabPage.Controls.Add(this.label4);
this.TriangleTabPage.Controls.Add(this.TriEdge2UpDown);
this.TriangleTabPage.Controls.Add(this.label3);
this.TriangleTabPage.Controls.Add(this.TriEdge1UpDown);
this.TriangleTabPage.Controls.Add(this.label7);
this.TriangleTabPage.Controls.Add(this.TriAreaTextBox);
this.TriangleTabPage.Controls.Add(this.label2);
this.TriangleTabPage.Controls.Add(this.TriVertex3TextBox);
this.TriangleTabPage.Controls.Add(this.label1);
this.TriangleTabPage.Controls.Add(this.TriVertex2TextBox);
@ -149,71 +130,43 @@
this.TriangleTabPage.Location = new System.Drawing.Point(4, 22);
this.TriangleTabPage.Name = "TriangleTabPage";
this.TriangleTabPage.Padding = new System.Windows.Forms.Padding(3);
this.TriangleTabPage.Size = new System.Drawing.Size(556, 187);
this.TriangleTabPage.Size = new System.Drawing.Size(556, 111);
this.TriangleTabPage.TabIndex = 0;
this.TriangleTabPage.Text = "Triangle";
this.TriangleTabPage.UseVisualStyleBackColor = true;
//
// SphereTabPage
// TriFlag3CheckBox
//
this.SphereTabPage.Controls.Add(this.SphRadiusTextBox);
this.SphereTabPage.Controls.Add(this.SphPositionTextBox);
this.SphereTabPage.Controls.Add(this.label6);
this.SphereTabPage.Controls.Add(this.label8);
this.SphereTabPage.Location = new System.Drawing.Point(4, 22);
this.SphereTabPage.Name = "SphereTabPage";
this.SphereTabPage.Padding = new System.Windows.Forms.Padding(3);
this.SphereTabPage.Size = new System.Drawing.Size(556, 185);
this.SphereTabPage.TabIndex = 1;
this.SphereTabPage.Text = "Sphere";
this.SphereTabPage.UseVisualStyleBackColor = true;
this.TriFlag3CheckBox.AutoSize = true;
this.TriFlag3CheckBox.Location = new System.Drawing.Point(223, 84);
this.TriFlag3CheckBox.Name = "TriFlag3CheckBox";
this.TriFlag3CheckBox.Size = new System.Drawing.Size(55, 17);
this.TriFlag3CheckBox.TabIndex = 23;
this.TriFlag3CheckBox.Text = "Flag 3";
this.TriFlag3CheckBox.UseVisualStyleBackColor = true;
this.TriFlag3CheckBox.CheckedChanged += new System.EventHandler(this.TriFlag3CheckBox_CheckedChanged);
//
// CapsuleTabPage
// TriFlag2CheckBox
//
this.CapsuleTabPage.Controls.Add(this.CapRadiusTextBox);
this.CapsuleTabPage.Controls.Add(this.label9);
this.CapsuleTabPage.Controls.Add(this.CapVertex2TextBox);
this.CapsuleTabPage.Controls.Add(this.CapVertex1TextBox);
this.CapsuleTabPage.Controls.Add(this.label10);
this.CapsuleTabPage.Controls.Add(this.label12);
this.CapsuleTabPage.Location = new System.Drawing.Point(4, 22);
this.CapsuleTabPage.Name = "CapsuleTabPage";
this.CapsuleTabPage.Size = new System.Drawing.Size(556, 185);
this.CapsuleTabPage.TabIndex = 2;
this.CapsuleTabPage.Text = "Capsule";
this.CapsuleTabPage.UseVisualStyleBackColor = true;
this.TriFlag2CheckBox.AutoSize = true;
this.TriFlag2CheckBox.Location = new System.Drawing.Point(162, 84);
this.TriFlag2CheckBox.Name = "TriFlag2CheckBox";
this.TriFlag2CheckBox.Size = new System.Drawing.Size(55, 17);
this.TriFlag2CheckBox.TabIndex = 22;
this.TriFlag2CheckBox.Text = "Flag 2";
this.TriFlag2CheckBox.UseVisualStyleBackColor = true;
this.TriFlag2CheckBox.CheckedChanged += new System.EventHandler(this.TriFlag2CheckBox_CheckedChanged);
//
// BoxTabPage
// TriFlag1CheckBox
//
this.BoxTabPage.Controls.Add(this.BoxVertex4TextBox);
this.BoxTabPage.Controls.Add(this.label16);
this.BoxTabPage.Controls.Add(this.BoxVertex3TextBox);
this.BoxTabPage.Controls.Add(this.label17);
this.BoxTabPage.Controls.Add(this.BoxVertex2TextBox);
this.BoxTabPage.Controls.Add(this.BoxVertex1TextBox);
this.BoxTabPage.Controls.Add(this.label18);
this.BoxTabPage.Controls.Add(this.label19);
this.BoxTabPage.Location = new System.Drawing.Point(4, 22);
this.BoxTabPage.Name = "BoxTabPage";
this.BoxTabPage.Size = new System.Drawing.Size(556, 185);
this.BoxTabPage.TabIndex = 3;
this.BoxTabPage.Text = "Box";
this.BoxTabPage.UseVisualStyleBackColor = true;
//
// CylinderTabPage
//
this.CylinderTabPage.Controls.Add(this.CylRadiusTextBox);
this.CylinderTabPage.Controls.Add(this.label13);
this.CylinderTabPage.Controls.Add(this.CylVertex2TextBox);
this.CylinderTabPage.Controls.Add(this.CylVertex1TextBox);
this.CylinderTabPage.Controls.Add(this.label14);
this.CylinderTabPage.Controls.Add(this.label15);
this.CylinderTabPage.Location = new System.Drawing.Point(4, 22);
this.CylinderTabPage.Name = "CylinderTabPage";
this.CylinderTabPage.Size = new System.Drawing.Size(556, 185);
this.CylinderTabPage.TabIndex = 4;
this.CylinderTabPage.Text = "Cylinder";
this.CylinderTabPage.UseVisualStyleBackColor = true;
this.TriFlag1CheckBox.AutoSize = true;
this.TriFlag1CheckBox.Location = new System.Drawing.Point(101, 84);
this.TriFlag1CheckBox.Name = "TriFlag1CheckBox";
this.TriFlag1CheckBox.Size = new System.Drawing.Size(55, 17);
this.TriFlag1CheckBox.TabIndex = 21;
this.TriFlag1CheckBox.Text = "Flag 1";
this.TriFlag1CheckBox.UseVisualStyleBackColor = true;
this.TriFlag1CheckBox.CheckedChanged += new System.EventHandler(this.TriFlag1CheckBox_CheckedChanged);
//
// TriVertex3TextBox
//
@ -272,174 +225,19 @@
this.label5.TabIndex = 7;
this.label5.Text = "Vertex 1:";
//
// TriAreaTextBox
// SphereTabPage
//
this.TriAreaTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.TriAreaTextBox.Location = new System.Drawing.Point(92, 84);
this.TriAreaTextBox.Name = "TriAreaTextBox";
this.TriAreaTextBox.Size = new System.Drawing.Size(457, 20);
this.TriAreaTextBox.TabIndex = 14;
this.TriAreaTextBox.TextChanged += new System.EventHandler(this.TriAreaTextBox_TextChanged);
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(54, 87);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(32, 13);
this.label2.TabIndex = 13;
this.label2.Text = "Area:";
//
// TriEdge1UpDown
//
this.TriEdge1UpDown.Location = new System.Drawing.Point(92, 110);
this.TriEdge1UpDown.Maximum = new decimal(new int[] {
32767,
0,
0,
0});
this.TriEdge1UpDown.Minimum = new decimal(new int[] {
32767,
0,
0,
-2147483648});
this.TriEdge1UpDown.Name = "TriEdge1UpDown";
this.TriEdge1UpDown.Size = new System.Drawing.Size(89, 20);
this.TriEdge1UpDown.TabIndex = 16;
this.TriEdge1UpDown.ValueChanged += new System.EventHandler(this.TriEdge1UpDown_ValueChanged);
//
// label7
//
this.label7.AutoSize = true;
this.label7.Location = new System.Drawing.Point(42, 112);
this.label7.Name = "label7";
this.label7.Size = new System.Drawing.Size(44, 13);
this.label7.TabIndex = 15;
this.label7.Text = "Edge 1:";
//
// TriEdge2UpDown
//
this.TriEdge2UpDown.Location = new System.Drawing.Point(92, 136);
this.TriEdge2UpDown.Maximum = new decimal(new int[] {
32767,
0,
0,
0});
this.TriEdge2UpDown.Minimum = new decimal(new int[] {
32767,
0,
0,
-2147483648});
this.TriEdge2UpDown.Name = "TriEdge2UpDown";
this.TriEdge2UpDown.Size = new System.Drawing.Size(89, 20);
this.TriEdge2UpDown.TabIndex = 18;
this.TriEdge2UpDown.ValueChanged += new System.EventHandler(this.TriEdge2UpDown_ValueChanged);
//
// label3
//
this.label3.AutoSize = true;
this.label3.Location = new System.Drawing.Point(42, 138);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(44, 13);
this.label3.TabIndex = 17;
this.label3.Text = "Edge 2:";
//
// TriEdge3UpDown
//
this.TriEdge3UpDown.Location = new System.Drawing.Point(92, 162);
this.TriEdge3UpDown.Maximum = new decimal(new int[] {
32767,
0,
0,
0});
this.TriEdge3UpDown.Minimum = new decimal(new int[] {
32767,
0,
0,
-2147483648});
this.TriEdge3UpDown.Name = "TriEdge3UpDown";
this.TriEdge3UpDown.Size = new System.Drawing.Size(89, 20);
this.TriEdge3UpDown.TabIndex = 20;
this.TriEdge3UpDown.ValueChanged += new System.EventHandler(this.TriEdge3UpDown_ValueChanged);
//
// label4
//
this.label4.AutoSize = true;
this.label4.Location = new System.Drawing.Point(42, 164);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(44, 13);
this.label4.TabIndex = 19;
this.label4.Text = "Edge 3:";
//
// TriFlag1CheckBox
//
this.TriFlag1CheckBox.AutoSize = true;
this.TriFlag1CheckBox.Location = new System.Drawing.Point(224, 111);
this.TriFlag1CheckBox.Name = "TriFlag1CheckBox";
this.TriFlag1CheckBox.Size = new System.Drawing.Size(55, 17);
this.TriFlag1CheckBox.TabIndex = 21;
this.TriFlag1CheckBox.Text = "Flag 1";
this.TriFlag1CheckBox.UseVisualStyleBackColor = true;
this.TriFlag1CheckBox.CheckedChanged += new System.EventHandler(this.TriFlag1CheckBox_CheckedChanged);
//
// TriFlag2CheckBox
//
this.TriFlag2CheckBox.AutoSize = true;
this.TriFlag2CheckBox.Location = new System.Drawing.Point(224, 137);
this.TriFlag2CheckBox.Name = "TriFlag2CheckBox";
this.TriFlag2CheckBox.Size = new System.Drawing.Size(55, 17);
this.TriFlag2CheckBox.TabIndex = 22;
this.TriFlag2CheckBox.Text = "Flag 2";
this.TriFlag2CheckBox.UseVisualStyleBackColor = true;
this.TriFlag2CheckBox.CheckedChanged += new System.EventHandler(this.TriFlag2CheckBox_CheckedChanged);
//
// TriFlag3CheckBox
//
this.TriFlag3CheckBox.AutoSize = true;
this.TriFlag3CheckBox.Location = new System.Drawing.Point(224, 163);
this.TriFlag3CheckBox.Name = "TriFlag3CheckBox";
this.TriFlag3CheckBox.Size = new System.Drawing.Size(55, 17);
this.TriFlag3CheckBox.TabIndex = 23;
this.TriFlag3CheckBox.Text = "Flag 3";
this.TriFlag3CheckBox.UseVisualStyleBackColor = true;
this.TriFlag3CheckBox.CheckedChanged += new System.EventHandler(this.TriFlag3CheckBox_CheckedChanged);
//
// MaterialTabControl
//
this.MaterialTabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.MaterialTabControl.Controls.Add(this.MaterialTabPage);
this.MaterialTabControl.Location = new System.Drawing.Point(0, 225);
this.MaterialTabControl.Name = "MaterialTabControl";
this.MaterialTabControl.SelectedIndex = 0;
this.MaterialTabControl.Size = new System.Drawing.Size(564, 279);
this.MaterialTabControl.TabIndex = 1;
//
// MaterialTabPage
//
this.MaterialTabPage.Controls.Add(this.UpdateSharedMaterialCheckBox);
this.MaterialTabPage.Controls.Add(this.MatFlagsCheckedListBox);
this.MaterialTabPage.Controls.Add(this.MatColourUpDown);
this.MaterialTabPage.Controls.Add(this.label25);
this.MaterialTabPage.Controls.Add(this.MatUnkUpDown);
this.MaterialTabPage.Controls.Add(this.label21);
this.MaterialTabPage.Controls.Add(this.MatPedDensityUpDown);
this.MaterialTabPage.Controls.Add(this.label22);
this.MaterialTabPage.Controls.Add(this.MatRoomIDUpDown);
this.MaterialTabPage.Controls.Add(this.label23);
this.MaterialTabPage.Controls.Add(this.MatProceduralIDUpDown);
this.MaterialTabPage.Controls.Add(this.label24);
this.MaterialTabPage.Controls.Add(this.MatTypeCombo);
this.MaterialTabPage.Controls.Add(this.label20);
this.MaterialTabPage.Location = new System.Drawing.Point(4, 22);
this.MaterialTabPage.Name = "MaterialTabPage";
this.MaterialTabPage.Padding = new System.Windows.Forms.Padding(3);
this.MaterialTabPage.Size = new System.Drawing.Size(556, 253);
this.MaterialTabPage.TabIndex = 0;
this.MaterialTabPage.Text = "Material";
this.MaterialTabPage.UseVisualStyleBackColor = true;
this.SphereTabPage.Controls.Add(this.SphRadiusTextBox);
this.SphereTabPage.Controls.Add(this.SphPositionTextBox);
this.SphereTabPage.Controls.Add(this.label6);
this.SphereTabPage.Controls.Add(this.label8);
this.SphereTabPage.Location = new System.Drawing.Point(4, 22);
this.SphereTabPage.Name = "SphereTabPage";
this.SphereTabPage.Padding = new System.Windows.Forms.Padding(3);
this.SphereTabPage.Size = new System.Drawing.Size(556, 128);
this.SphereTabPage.TabIndex = 1;
this.SphereTabPage.Text = "Sphere";
this.SphereTabPage.UseVisualStyleBackColor = true;
//
// SphRadiusTextBox
//
@ -479,6 +277,21 @@
this.label8.TabIndex = 11;
this.label8.Text = "Position:";
//
// CapsuleTabPage
//
this.CapsuleTabPage.Controls.Add(this.CapRadiusTextBox);
this.CapsuleTabPage.Controls.Add(this.label9);
this.CapsuleTabPage.Controls.Add(this.CapVertex2TextBox);
this.CapsuleTabPage.Controls.Add(this.CapVertex1TextBox);
this.CapsuleTabPage.Controls.Add(this.label10);
this.CapsuleTabPage.Controls.Add(this.label12);
this.CapsuleTabPage.Location = new System.Drawing.Point(4, 22);
this.CapsuleTabPage.Name = "CapsuleTabPage";
this.CapsuleTabPage.Size = new System.Drawing.Size(556, 128);
this.CapsuleTabPage.TabIndex = 2;
this.CapsuleTabPage.Text = "Capsule";
this.CapsuleTabPage.UseVisualStyleBackColor = true;
//
// CapRadiusTextBox
//
this.CapRadiusTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
@ -536,62 +349,22 @@
this.label12.TabIndex = 13;
this.label12.Text = "Vertex 1:";
//
// CylRadiusTextBox
// BoxTabPage
//
this.CylRadiusTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.CylRadiusTextBox.Location = new System.Drawing.Point(92, 58);
this.CylRadiusTextBox.Name = "CylRadiusTextBox";
this.CylRadiusTextBox.Size = new System.Drawing.Size(457, 20);
this.CylRadiusTextBox.TabIndex = 24;
this.CylRadiusTextBox.TextChanged += new System.EventHandler(this.CylRadiusTextBox_TextChanged);
//
// label13
//
this.label13.AutoSize = true;
this.label13.Location = new System.Drawing.Point(37, 61);
this.label13.Name = "label13";
this.label13.Size = new System.Drawing.Size(43, 13);
this.label13.TabIndex = 23;
this.label13.Text = "Radius:";
//
// CylVertex2TextBox
//
this.CylVertex2TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.CylVertex2TextBox.Location = new System.Drawing.Point(92, 32);
this.CylVertex2TextBox.Name = "CylVertex2TextBox";
this.CylVertex2TextBox.Size = new System.Drawing.Size(457, 20);
this.CylVertex2TextBox.TabIndex = 22;
this.CylVertex2TextBox.TextChanged += new System.EventHandler(this.CylVertex2TextBox_TextChanged);
//
// CylVertex1TextBox
//
this.CylVertex1TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.CylVertex1TextBox.Location = new System.Drawing.Point(92, 6);
this.CylVertex1TextBox.Name = "CylVertex1TextBox";
this.CylVertex1TextBox.Size = new System.Drawing.Size(457, 20);
this.CylVertex1TextBox.TabIndex = 20;
this.CylVertex1TextBox.TextChanged += new System.EventHandler(this.CylVertex1TextBox_TextChanged);
//
// label14
//
this.label14.AutoSize = true;
this.label14.Location = new System.Drawing.Point(37, 35);
this.label14.Name = "label14";
this.label14.Size = new System.Drawing.Size(49, 13);
this.label14.TabIndex = 21;
this.label14.Text = "Vertex 2:";
//
// label15
//
this.label15.AutoSize = true;
this.label15.Location = new System.Drawing.Point(37, 9);
this.label15.Name = "label15";
this.label15.Size = new System.Drawing.Size(49, 13);
this.label15.TabIndex = 19;
this.label15.Text = "Vertex 1:";
this.BoxTabPage.Controls.Add(this.BoxVertex4TextBox);
this.BoxTabPage.Controls.Add(this.label16);
this.BoxTabPage.Controls.Add(this.BoxVertex3TextBox);
this.BoxTabPage.Controls.Add(this.label17);
this.BoxTabPage.Controls.Add(this.BoxVertex2TextBox);
this.BoxTabPage.Controls.Add(this.BoxVertex1TextBox);
this.BoxTabPage.Controls.Add(this.label18);
this.BoxTabPage.Controls.Add(this.label19);
this.BoxTabPage.Location = new System.Drawing.Point(4, 22);
this.BoxTabPage.Name = "BoxTabPage";
this.BoxTabPage.Size = new System.Drawing.Size(556, 111);
this.BoxTabPage.TabIndex = 3;
this.BoxTabPage.Text = "Box";
this.BoxTabPage.UseVisualStyleBackColor = true;
//
// BoxVertex4TextBox
//
@ -669,23 +442,174 @@
this.label19.TabIndex = 15;
this.label19.Text = "Vertex 1:";
//
// MatTypeCombo
// CylinderTabPage
//
this.MatTypeCombo.FormattingEnabled = true;
this.MatTypeCombo.Location = new System.Drawing.Point(92, 6);
this.MatTypeCombo.Name = "MatTypeCombo";
this.MatTypeCombo.Size = new System.Drawing.Size(195, 21);
this.MatTypeCombo.TabIndex = 20;
this.MatTypeCombo.SelectedIndexChanged += new System.EventHandler(this.MatTypeCombo_SelectedIndexChanged);
this.CylinderTabPage.Controls.Add(this.CylRadiusTextBox);
this.CylinderTabPage.Controls.Add(this.label13);
this.CylinderTabPage.Controls.Add(this.CylVertex2TextBox);
this.CylinderTabPage.Controls.Add(this.CylVertex1TextBox);
this.CylinderTabPage.Controls.Add(this.label14);
this.CylinderTabPage.Controls.Add(this.label15);
this.CylinderTabPage.Location = new System.Drawing.Point(4, 22);
this.CylinderTabPage.Name = "CylinderTabPage";
this.CylinderTabPage.Size = new System.Drawing.Size(556, 128);
this.CylinderTabPage.TabIndex = 4;
this.CylinderTabPage.Text = "Cylinder";
this.CylinderTabPage.UseVisualStyleBackColor = true;
//
// label20
// CylRadiusTextBox
//
this.label20.AutoSize = true;
this.label20.Location = new System.Drawing.Point(39, 9);
this.label20.Name = "label20";
this.label20.Size = new System.Drawing.Size(47, 13);
this.label20.TabIndex = 19;
this.label20.Text = "Material:";
this.CylRadiusTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.CylRadiusTextBox.Location = new System.Drawing.Point(92, 58);
this.CylRadiusTextBox.Name = "CylRadiusTextBox";
this.CylRadiusTextBox.Size = new System.Drawing.Size(457, 20);
this.CylRadiusTextBox.TabIndex = 24;
this.CylRadiusTextBox.TextChanged += new System.EventHandler(this.CylRadiusTextBox_TextChanged);
//
// label13
//
this.label13.AutoSize = true;
this.label13.Location = new System.Drawing.Point(37, 61);
this.label13.Name = "label13";
this.label13.Size = new System.Drawing.Size(43, 13);
this.label13.TabIndex = 23;
this.label13.Text = "Radius:";
//
// CylVertex2TextBox
//
this.CylVertex2TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.CylVertex2TextBox.Location = new System.Drawing.Point(92, 32);
this.CylVertex2TextBox.Name = "CylVertex2TextBox";
this.CylVertex2TextBox.Size = new System.Drawing.Size(457, 20);
this.CylVertex2TextBox.TabIndex = 22;
this.CylVertex2TextBox.TextChanged += new System.EventHandler(this.CylVertex2TextBox_TextChanged);
//
// CylVertex1TextBox
//
this.CylVertex1TextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.CylVertex1TextBox.Location = new System.Drawing.Point(92, 6);
this.CylVertex1TextBox.Name = "CylVertex1TextBox";
this.CylVertex1TextBox.Size = new System.Drawing.Size(457, 20);
this.CylVertex1TextBox.TabIndex = 20;
this.CylVertex1TextBox.TextChanged += new System.EventHandler(this.CylVertex1TextBox_TextChanged);
//
// label14
//
this.label14.AutoSize = true;
this.label14.Location = new System.Drawing.Point(37, 35);
this.label14.Name = "label14";
this.label14.Size = new System.Drawing.Size(49, 13);
this.label14.TabIndex = 21;
this.label14.Text = "Vertex 2:";
//
// label15
//
this.label15.AutoSize = true;
this.label15.Location = new System.Drawing.Point(37, 9);
this.label15.Name = "label15";
this.label15.Size = new System.Drawing.Size(49, 13);
this.label15.TabIndex = 19;
this.label15.Text = "Vertex 1:";
//
// MaterialTabControl
//
this.MaterialTabControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.MaterialTabControl.Controls.Add(this.MaterialTabPage);
this.MaterialTabControl.Location = new System.Drawing.Point(0, 151);
this.MaterialTabControl.Name = "MaterialTabControl";
this.MaterialTabControl.SelectedIndex = 0;
this.MaterialTabControl.Size = new System.Drawing.Size(564, 353);
this.MaterialTabControl.TabIndex = 1;
//
// MaterialTabPage
//
this.MaterialTabPage.Controls.Add(this.UpdateSharedMaterialCheckBox);
this.MaterialTabPage.Controls.Add(this.MatFlagsCheckedListBox);
this.MaterialTabPage.Controls.Add(this.MatColourUpDown);
this.MaterialTabPage.Controls.Add(this.label25);
this.MaterialTabPage.Controls.Add(this.MatUnkUpDown);
this.MaterialTabPage.Controls.Add(this.label21);
this.MaterialTabPage.Controls.Add(this.MatPedDensityUpDown);
this.MaterialTabPage.Controls.Add(this.label22);
this.MaterialTabPage.Controls.Add(this.MatRoomIDUpDown);
this.MaterialTabPage.Controls.Add(this.label23);
this.MaterialTabPage.Controls.Add(this.MatProceduralIDUpDown);
this.MaterialTabPage.Controls.Add(this.label24);
this.MaterialTabPage.Controls.Add(this.MatTypeCombo);
this.MaterialTabPage.Controls.Add(this.label20);
this.MaterialTabPage.Location = new System.Drawing.Point(4, 22);
this.MaterialTabPage.Name = "MaterialTabPage";
this.MaterialTabPage.Padding = new System.Windows.Forms.Padding(3);
this.MaterialTabPage.Size = new System.Drawing.Size(556, 327);
this.MaterialTabPage.TabIndex = 0;
this.MaterialTabPage.Text = "Material";
this.MaterialTabPage.UseVisualStyleBackColor = true;
//
// UpdateSharedMaterialCheckBox
//
this.UpdateSharedMaterialCheckBox.AutoSize = true;
this.UpdateSharedMaterialCheckBox.Location = new System.Drawing.Point(92, 172);
this.UpdateSharedMaterialCheckBox.Name = "UpdateSharedMaterialCheckBox";
this.UpdateSharedMaterialCheckBox.Size = new System.Drawing.Size(170, 17);
this.UpdateSharedMaterialCheckBox.TabIndex = 32;
this.UpdateSharedMaterialCheckBox.Text = "Update shared material on edit";
this.UpdateSharedMaterialCheckBox.UseVisualStyleBackColor = true;
//
// MatFlagsCheckedListBox
//
this.MatFlagsCheckedListBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)));
this.MatFlagsCheckedListBox.CheckOnClick = true;
this.MatFlagsCheckedListBox.FormattingEnabled = true;
this.MatFlagsCheckedListBox.Items.AddRange(new object[] {
"0 - Stairs",
"1 - Not Climbable",
"2 - See Through",
"3 - Shoot Through",
"4 - Not Cover",
"5 - Walkable Path",
"6 - No Cam Collision",
"7 - Shoot Through FX",
"8 - No Decal",
"9 - No Navmesh",
"10 - No Ragdoll",
"11 - Vehicle Wheel",
"12 - No PTFX",
"13 - Too Steep for Player",
"14 - No Network Spawn",
"15 - No Cam Collision Allow Clipping"});
this.MatFlagsCheckedListBox.Location = new System.Drawing.Point(326, 6);
this.MatFlagsCheckedListBox.Name = "MatFlagsCheckedListBox";
this.MatFlagsCheckedListBox.Size = new System.Drawing.Size(223, 319);
this.MatFlagsCheckedListBox.TabIndex = 31;
this.MatFlagsCheckedListBox.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.MatFlagsCheckedListBox_ItemCheck);
//
// MatColourUpDown
//
this.MatColourUpDown.Location = new System.Drawing.Point(92, 33);
this.MatColourUpDown.Maximum = new decimal(new int[] {
255,
0,
0,
0});
this.MatColourUpDown.Name = "MatColourUpDown";
this.MatColourUpDown.Size = new System.Drawing.Size(64, 20);
this.MatColourUpDown.TabIndex = 22;
this.MatColourUpDown.ValueChanged += new System.EventHandler(this.MatColourUpDown_ValueChanged);
//
// label25
//
this.label25.AutoSize = true;
this.label25.Location = new System.Drawing.Point(6, 35);
this.label25.Name = "label25";
this.label25.Size = new System.Drawing.Size(80, 13);
this.label25.TabIndex = 21;
this.label25.Text = "Material Colour:";
//
// MatUnkUpDown
//
@ -775,66 +699,23 @@
this.label24.TabIndex = 23;
this.label24.Text = "Procedural ID:";
//
// MatColourUpDown
// MatTypeCombo
//
this.MatColourUpDown.Location = new System.Drawing.Point(92, 33);
this.MatColourUpDown.Maximum = new decimal(new int[] {
255,
0,
0,
0});
this.MatColourUpDown.Name = "MatColourUpDown";
this.MatColourUpDown.Size = new System.Drawing.Size(64, 20);
this.MatColourUpDown.TabIndex = 22;
this.MatColourUpDown.ValueChanged += new System.EventHandler(this.MatColourUpDown_ValueChanged);
this.MatTypeCombo.FormattingEnabled = true;
this.MatTypeCombo.Location = new System.Drawing.Point(92, 6);
this.MatTypeCombo.Name = "MatTypeCombo";
this.MatTypeCombo.Size = new System.Drawing.Size(195, 21);
this.MatTypeCombo.TabIndex = 20;
this.MatTypeCombo.SelectedIndexChanged += new System.EventHandler(this.MatTypeCombo_SelectedIndexChanged);
//
// label25
// label20
//
this.label25.AutoSize = true;
this.label25.Location = new System.Drawing.Point(6, 35);
this.label25.Name = "label25";
this.label25.Size = new System.Drawing.Size(80, 13);
this.label25.TabIndex = 21;
this.label25.Text = "Material Colour:";
//
// MatFlagsCheckedListBox
//
this.MatFlagsCheckedListBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)));
this.MatFlagsCheckedListBox.CheckOnClick = true;
this.MatFlagsCheckedListBox.FormattingEnabled = true;
this.MatFlagsCheckedListBox.Items.AddRange(new object[] {
"0 - Stairs",
"1 - Not Climbable",
"2 - See Through",
"3 - Shoot Through",
"4 - Not Cover",
"5 - Walkable Path",
"6 - No Cam Collision",
"7 - Shoot Through FX",
"8 - No Decal",
"9 - No Navmesh",
"10 - No Ragdoll",
"11 - Vehicle Wheel",
"12 - No PTFX",
"13 - Too Steep for Player",
"14 - No Network Spawn",
"15 - No Cam Collision Allow Clipping"});
this.MatFlagsCheckedListBox.Location = new System.Drawing.Point(326, 6);
this.MatFlagsCheckedListBox.Name = "MatFlagsCheckedListBox";
this.MatFlagsCheckedListBox.Size = new System.Drawing.Size(223, 244);
this.MatFlagsCheckedListBox.TabIndex = 31;
this.MatFlagsCheckedListBox.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.MatFlagsCheckedListBox_ItemCheck);
//
// UpdateSharedMaterialCheckBox
//
this.UpdateSharedMaterialCheckBox.AutoSize = true;
this.UpdateSharedMaterialCheckBox.Location = new System.Drawing.Point(92, 172);
this.UpdateSharedMaterialCheckBox.Name = "UpdateSharedMaterialCheckBox";
this.UpdateSharedMaterialCheckBox.Size = new System.Drawing.Size(170, 17);
this.UpdateSharedMaterialCheckBox.TabIndex = 32;
this.UpdateSharedMaterialCheckBox.Text = "Update shared material on edit";
this.UpdateSharedMaterialCheckBox.UseVisualStyleBackColor = true;
this.label20.AutoSize = true;
this.label20.Location = new System.Drawing.Point(39, 9);
this.label20.Name = "label20";
this.label20.Size = new System.Drawing.Size(47, 13);
this.label20.TabIndex = 19;
this.label20.Text = "Material:";
//
// DeleteButton
//
@ -881,17 +762,14 @@
this.BoxTabPage.PerformLayout();
this.CylinderTabPage.ResumeLayout(false);
this.CylinderTabPage.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.TriEdge1UpDown)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.TriEdge2UpDown)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.TriEdge3UpDown)).EndInit();
this.MaterialTabControl.ResumeLayout(false);
this.MaterialTabPage.ResumeLayout(false);
this.MaterialTabPage.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.MatColourUpDown)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.MatUnkUpDown)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.MatPedDensityUpDown)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.MatRoomIDUpDown)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.MatProceduralIDUpDown)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.MatColourUpDown)).EndInit();
this.ResumeLayout(false);
}
@ -910,14 +788,6 @@
private System.Windows.Forms.TextBox TriVertex1TextBox;
private System.Windows.Forms.Label label11;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.TextBox TriAreaTextBox;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.NumericUpDown TriEdge1UpDown;
private System.Windows.Forms.Label label7;
private System.Windows.Forms.NumericUpDown TriEdge3UpDown;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.NumericUpDown TriEdge2UpDown;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.CheckBox TriFlag3CheckBox;
private System.Windows.Forms.CheckBox TriFlag2CheckBox;
private System.Windows.Forms.CheckBox TriFlag1CheckBox;

View File

@ -87,10 +87,6 @@ namespace CodeWalker.Project.Panels
TriVertex1TextBox.Text = string.Empty;
TriVertex2TextBox.Text = string.Empty;
TriVertex3TextBox.Text = string.Empty;
TriAreaTextBox.Text = string.Empty;
TriEdge1UpDown.Value = 0;
TriEdge2UpDown.Value = 0;
TriEdge3UpDown.Value = 0;
TriFlag1CheckBox.Checked = false;
TriFlag2CheckBox.Checked = false;
TriFlag3CheckBox.Checked = false;
@ -123,10 +119,6 @@ namespace CodeWalker.Project.Panels
TriVertex1TextBox.Text = FloatUtil.GetVector3String(CollisionTriangle.Vertex1);
TriVertex2TextBox.Text = FloatUtil.GetVector3String(CollisionTriangle.Vertex2);
TriVertex3TextBox.Text = FloatUtil.GetVector3String(CollisionTriangle.Vertex3);
TriAreaTextBox.Text = FloatUtil.ToString(CollisionTriangle.triArea);
TriEdge1UpDown.Value = CollisionTriangle.edgeIndex1;
TriEdge2UpDown.Value = CollisionTriangle.edgeIndex2;
TriEdge3UpDown.Value = CollisionTriangle.edgeIndex3;
TriFlag1CheckBox.Checked = CollisionTriangle.vertFlag1;
TriFlag2CheckBox.Checked = CollisionTriangle.vertFlag2;
TriFlag3CheckBox.Checked = CollisionTriangle.vertFlag3;
@ -301,66 +293,6 @@ namespace CodeWalker.Project.Panels
}
}
private void TriAreaTextBox_TextChanged(object sender, EventArgs e)
{
if (CollisionTriangle == null) return;
if (populatingui) return;
var v = FloatUtil.Parse(TriAreaTextBox.Text);
lock (ProjectForm.ProjectSyncRoot)
{
if (CollisionTriangle.triArea != v)
{
CollisionTriangle.triArea = v;
ProjectForm.SetYbnHasChanged(true);
}
}
}
private void TriEdge1UpDown_ValueChanged(object sender, EventArgs e)
{
if (CollisionTriangle == null) return;
if (populatingui) return;
var v = (short)TriEdge1UpDown.Value;
lock (ProjectForm.ProjectSyncRoot)
{
if (CollisionTriangle.edgeIndex1 != v)
{
CollisionTriangle.edgeIndex1 = v;
ProjectForm.SetYbnHasChanged(true);
}
}
}
private void TriEdge2UpDown_ValueChanged(object sender, EventArgs e)
{
if (CollisionTriangle == null) return;
if (populatingui) return;
var v = (short)TriEdge2UpDown.Value;
lock (ProjectForm.ProjectSyncRoot)
{
if (CollisionTriangle.edgeIndex2 != v)
{
CollisionTriangle.edgeIndex2 = v;
ProjectForm.SetYbnHasChanged(true);
}
}
}
private void TriEdge3UpDown_ValueChanged(object sender, EventArgs e)
{
if (CollisionTriangle == null) return;
if (populatingui) return;
var v = (short)TriEdge3UpDown.Value;
lock (ProjectForm.ProjectSyncRoot)
{
if (CollisionTriangle.edgeIndex3 != v)
{
CollisionTriangle.edgeIndex3 = v;
ProjectForm.SetYbnHasChanged(true);
}
}
}
private void TriFlag1CheckBox_CheckedChanged(object sender, EventArgs e)
{
if (CollisionTriangle == null) return;

View File

@ -31,6 +31,8 @@
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(EditYbnBoundsPanel));
this.BoundsTabControl = new System.Windows.Forms.TabControl();
this.BoundsTabPage = new System.Windows.Forms.TabPage();
this.DeleteButton = new System.Windows.Forms.Button();
this.AddToProjectButton = new System.Windows.Forms.Button();
this.MaterialCombo = new System.Windows.Forms.ComboBox();
this.UnkTypeUpDown = new System.Windows.Forms.NumericUpDown();
this.label16 = new System.Windows.Forms.Label();
@ -74,8 +76,18 @@
this.label18 = new System.Windows.Forms.Label();
this.CenterGeomTextBox = new System.Windows.Forms.TextBox();
this.label17 = new System.Windows.Forms.Label();
this.DeleteButton = new System.Windows.Forms.Button();
this.AddToProjectButton = new System.Windows.Forms.Button();
this.CompositeFlagsTabPage = new System.Windows.Forms.TabPage();
this.CompFlags1CheckedListBox = new System.Windows.Forms.CheckedListBox();
this.label21 = new System.Windows.Forms.Label();
this.label22 = new System.Windows.Forms.Label();
this.CompFlags2CheckedListBox = new System.Windows.Forms.CheckedListBox();
this.CompositeXformTabPage = new System.Windows.Forms.TabPage();
this.CompScaleTextBox = new System.Windows.Forms.TextBox();
this.label23 = new System.Windows.Forms.Label();
this.CompRotationTextBox = new System.Windows.Forms.TextBox();
this.CompPositionTextBox = new System.Windows.Forms.TextBox();
this.label24 = new System.Windows.Forms.Label();
this.label25 = new System.Windows.Forms.Label();
this.BoundsTabControl.SuspendLayout();
this.BoundsTabPage.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.UnkTypeUpDown)).BeginInit();
@ -86,17 +98,21 @@
((System.ComponentModel.ISupportInitialize)(this.RoomIDUpDown)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.ProceduralIDUpDown)).BeginInit();
this.GeometryTabPage.SuspendLayout();
this.CompositeFlagsTabPage.SuspendLayout();
this.CompositeXformTabPage.SuspendLayout();
this.SuspendLayout();
//
// BoundsTabControl
//
this.BoundsTabControl.Controls.Add(this.BoundsTabPage);
this.BoundsTabControl.Controls.Add(this.GeometryTabPage);
this.BoundsTabControl.Controls.Add(this.CompositeFlagsTabPage);
this.BoundsTabControl.Controls.Add(this.CompositeXformTabPage);
this.BoundsTabControl.Dock = System.Windows.Forms.DockStyle.Fill;
this.BoundsTabControl.Location = new System.Drawing.Point(0, 0);
this.BoundsTabControl.Name = "BoundsTabControl";
this.BoundsTabControl.SelectedIndex = 0;
this.BoundsTabControl.Size = new System.Drawing.Size(565, 505);
this.BoundsTabControl.Size = new System.Drawing.Size(607, 515);
this.BoundsTabControl.TabIndex = 0;
//
// BoundsTabPage
@ -138,11 +154,33 @@
this.BoundsTabPage.Location = new System.Drawing.Point(4, 22);
this.BoundsTabPage.Name = "BoundsTabPage";
this.BoundsTabPage.Padding = new System.Windows.Forms.Padding(3);
this.BoundsTabPage.Size = new System.Drawing.Size(557, 479);
this.BoundsTabPage.Size = new System.Drawing.Size(599, 489);
this.BoundsTabPage.TabIndex = 0;
this.BoundsTabPage.Text = "Bounds";
this.BoundsTabPage.UseVisualStyleBackColor = true;
//
// DeleteButton
//
this.DeleteButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.DeleteButton.Location = new System.Drawing.Point(496, 238);
this.DeleteButton.Name = "DeleteButton";
this.DeleteButton.Size = new System.Drawing.Size(95, 23);
this.DeleteButton.TabIndex = 36;
this.DeleteButton.Text = "Delete Bounds";
this.DeleteButton.UseVisualStyleBackColor = true;
this.DeleteButton.Click += new System.EventHandler(this.DeleteButton_Click);
//
// AddToProjectButton
//
this.AddToProjectButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.AddToProjectButton.Location = new System.Drawing.Point(395, 238);
this.AddToProjectButton.Name = "AddToProjectButton";
this.AddToProjectButton.Size = new System.Drawing.Size(95, 23);
this.AddToProjectButton.TabIndex = 35;
this.AddToProjectButton.Text = "Add to Project";
this.AddToProjectButton.UseVisualStyleBackColor = true;
this.AddToProjectButton.Click += new System.EventHandler(this.AddToProjectButton_Click);
//
// MaterialCombo
//
this.MaterialCombo.FormattingEnabled = true;
@ -189,7 +227,7 @@
| System.Windows.Forms.AnchorStyles.Right)));
this.UnkVectorTextBox.Location = new System.Drawing.Point(91, 188);
this.UnkVectorTextBox.Name = "UnkVectorTextBox";
this.UnkVectorTextBox.Size = new System.Drawing.Size(458, 20);
this.UnkVectorTextBox.Size = new System.Drawing.Size(500, 20);
this.UnkVectorTextBox.TabIndex = 16;
this.UnkVectorTextBox.TextChanged += new System.EventHandler(this.UnkVectorTextBox_TextChanged);
//
@ -208,7 +246,7 @@
| System.Windows.Forms.AnchorStyles.Right)));
this.VolumeTextBox.Location = new System.Drawing.Point(91, 162);
this.VolumeTextBox.Name = "VolumeTextBox";
this.VolumeTextBox.Size = new System.Drawing.Size(458, 20);
this.VolumeTextBox.Size = new System.Drawing.Size(500, 20);
this.VolumeTextBox.TabIndex = 14;
this.VolumeTextBox.TextChanged += new System.EventHandler(this.VolumeTextBox_TextChanged);
//
@ -368,7 +406,7 @@
| System.Windows.Forms.AnchorStyles.Right)));
this.MarginTextBox.Location = new System.Drawing.Point(91, 136);
this.MarginTextBox.Name = "MarginTextBox";
this.MarginTextBox.Size = new System.Drawing.Size(458, 20);
this.MarginTextBox.Size = new System.Drawing.Size(500, 20);
this.MarginTextBox.TabIndex = 12;
this.MarginTextBox.TextChanged += new System.EventHandler(this.MarginTextBox_TextChanged);
//
@ -378,7 +416,7 @@
| System.Windows.Forms.AnchorStyles.Right)));
this.BBCenterTextBox.Location = new System.Drawing.Point(91, 58);
this.BBCenterTextBox.Name = "BBCenterTextBox";
this.BBCenterTextBox.Size = new System.Drawing.Size(458, 20);
this.BBCenterTextBox.Size = new System.Drawing.Size(500, 20);
this.BBCenterTextBox.TabIndex = 6;
this.BBCenterTextBox.TextChanged += new System.EventHandler(this.BBCenterTextBox_TextChanged);
//
@ -406,7 +444,7 @@
| System.Windows.Forms.AnchorStyles.Right)));
this.BSRadiusTextBox.Location = new System.Drawing.Point(91, 110);
this.BSRadiusTextBox.Name = "BSRadiusTextBox";
this.BSRadiusTextBox.Size = new System.Drawing.Size(458, 20);
this.BSRadiusTextBox.Size = new System.Drawing.Size(500, 20);
this.BSRadiusTextBox.TabIndex = 10;
this.BSRadiusTextBox.TextChanged += new System.EventHandler(this.BSRadiusTextBox_TextChanged);
//
@ -416,7 +454,7 @@
| System.Windows.Forms.AnchorStyles.Right)));
this.BSCenterTextBox.Location = new System.Drawing.Point(91, 84);
this.BSCenterTextBox.Name = "BSCenterTextBox";
this.BSCenterTextBox.Size = new System.Drawing.Size(458, 20);
this.BSCenterTextBox.Size = new System.Drawing.Size(500, 20);
this.BSCenterTextBox.TabIndex = 8;
this.BSCenterTextBox.TextChanged += new System.EventHandler(this.BSCenterTextBox_TextChanged);
//
@ -435,7 +473,7 @@
| System.Windows.Forms.AnchorStyles.Right)));
this.BBMaxTextBox.Location = new System.Drawing.Point(91, 32);
this.BBMaxTextBox.Name = "BBMaxTextBox";
this.BBMaxTextBox.Size = new System.Drawing.Size(458, 20);
this.BBMaxTextBox.Size = new System.Drawing.Size(500, 20);
this.BBMaxTextBox.TabIndex = 4;
this.BBMaxTextBox.TextChanged += new System.EventHandler(this.BBMaxTextBox_TextChanged);
//
@ -445,7 +483,7 @@
| System.Windows.Forms.AnchorStyles.Right)));
this.BBMinTextBox.Location = new System.Drawing.Point(91, 6);
this.BBMinTextBox.Name = "BBMinTextBox";
this.BBMinTextBox.Size = new System.Drawing.Size(458, 20);
this.BBMinTextBox.Size = new System.Drawing.Size(500, 20);
this.BBMinTextBox.TabIndex = 2;
this.BBMinTextBox.TextChanged += new System.EventHandler(this.BBMinTextBox_TextChanged);
//
@ -482,7 +520,7 @@
this.GeometryTabPage.Location = new System.Drawing.Point(4, 22);
this.GeometryTabPage.Name = "GeometryTabPage";
this.GeometryTabPage.Padding = new System.Windows.Forms.Padding(3);
this.GeometryTabPage.Size = new System.Drawing.Size(557, 479);
this.GeometryTabPage.Size = new System.Drawing.Size(599, 489);
this.GeometryTabPage.TabIndex = 1;
this.GeometryTabPage.Text = "Geometry";
this.GeometryTabPage.UseVisualStyleBackColor = true;
@ -511,7 +549,7 @@
| System.Windows.Forms.AnchorStyles.Right)));
this.UnkFloat2TextBox.Location = new System.Drawing.Point(91, 84);
this.UnkFloat2TextBox.Name = "UnkFloat2TextBox";
this.UnkFloat2TextBox.Size = new System.Drawing.Size(458, 20);
this.UnkFloat2TextBox.Size = new System.Drawing.Size(500, 20);
this.UnkFloat2TextBox.TabIndex = 10;
this.UnkFloat2TextBox.TextChanged += new System.EventHandler(this.UnkFloat2TextBox_TextChanged);
//
@ -530,7 +568,7 @@
| System.Windows.Forms.AnchorStyles.Right)));
this.UnkFloat1TextBox.Location = new System.Drawing.Point(91, 58);
this.UnkFloat1TextBox.Name = "UnkFloat1TextBox";
this.UnkFloat1TextBox.Size = new System.Drawing.Size(458, 20);
this.UnkFloat1TextBox.Size = new System.Drawing.Size(500, 20);
this.UnkFloat1TextBox.TabIndex = 8;
this.UnkFloat1TextBox.TextChanged += new System.EventHandler(this.UnkFloat1TextBox_TextChanged);
//
@ -549,7 +587,7 @@
| System.Windows.Forms.AnchorStyles.Right)));
this.QuantumTextBox.Location = new System.Drawing.Point(91, 32);
this.QuantumTextBox.Name = "QuantumTextBox";
this.QuantumTextBox.Size = new System.Drawing.Size(458, 20);
this.QuantumTextBox.Size = new System.Drawing.Size(500, 20);
this.QuantumTextBox.TabIndex = 6;
this.QuantumTextBox.TextChanged += new System.EventHandler(this.QuantumTextBox_TextChanged);
//
@ -568,7 +606,7 @@
| System.Windows.Forms.AnchorStyles.Right)));
this.CenterGeomTextBox.Location = new System.Drawing.Point(91, 6);
this.CenterGeomTextBox.Name = "CenterGeomTextBox";
this.CenterGeomTextBox.Size = new System.Drawing.Size(458, 20);
this.CenterGeomTextBox.Size = new System.Drawing.Size(500, 20);
this.CenterGeomTextBox.TabIndex = 4;
this.CenterGeomTextBox.TextChanged += new System.EventHandler(this.CenterGeomTextBox_TextChanged);
//
@ -581,33 +619,204 @@
this.label17.TabIndex = 3;
this.label17.Text = "Geom Center:";
//
// DeleteButton
// CompositeFlagsTabPage
//
this.DeleteButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.DeleteButton.Location = new System.Drawing.Point(454, 238);
this.DeleteButton.Name = "DeleteButton";
this.DeleteButton.Size = new System.Drawing.Size(95, 23);
this.DeleteButton.TabIndex = 36;
this.DeleteButton.Text = "Delete Bounds";
this.DeleteButton.UseVisualStyleBackColor = true;
this.DeleteButton.Click += new System.EventHandler(this.DeleteButton_Click);
this.CompositeFlagsTabPage.Controls.Add(this.label22);
this.CompositeFlagsTabPage.Controls.Add(this.CompFlags2CheckedListBox);
this.CompositeFlagsTabPage.Controls.Add(this.label21);
this.CompositeFlagsTabPage.Controls.Add(this.CompFlags1CheckedListBox);
this.CompositeFlagsTabPage.Location = new System.Drawing.Point(4, 22);
this.CompositeFlagsTabPage.Name = "CompositeFlagsTabPage";
this.CompositeFlagsTabPage.Size = new System.Drawing.Size(599, 489);
this.CompositeFlagsTabPage.TabIndex = 2;
this.CompositeFlagsTabPage.Text = "Composite Flags";
this.CompositeFlagsTabPage.UseVisualStyleBackColor = true;
//
// AddToProjectButton
// CompFlags1CheckedListBox
//
this.AddToProjectButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.AddToProjectButton.Location = new System.Drawing.Point(353, 238);
this.AddToProjectButton.Name = "AddToProjectButton";
this.AddToProjectButton.Size = new System.Drawing.Size(95, 23);
this.AddToProjectButton.TabIndex = 35;
this.AddToProjectButton.Text = "Add to Project";
this.AddToProjectButton.UseVisualStyleBackColor = true;
this.AddToProjectButton.Click += new System.EventHandler(this.AddToProjectButton_Click);
this.CompFlags1CheckedListBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)));
this.CompFlags1CheckedListBox.CheckOnClick = true;
this.CompFlags1CheckedListBox.FormattingEnabled = true;
this.CompFlags1CheckedListBox.Items.AddRange(new object[] {
"0 - Unknown",
"1 - Map Weapon",
"2 - Map Dynamic",
"3 - Map Animal",
"4 - Map Cover",
"5 - Map Vehicle",
"6 - Vehicle Not BVH",
"7 - Vehicle BVH",
"8 - Vehicle Box",
"9 - Ped",
"10 - Ragdoll",
"11 - Animal",
"12 - Animal Ragdoll",
"13 - Object",
"14 - Object Env Cloth",
"15 - Plant",
"16 - Projectile",
"17 - Explosion",
"18 - Pickup",
"19 - Foliage",
"20 - Forklift Forks",
"21 - Test Weapon",
"22 - Test Camera",
"23 - Test AI",
"24 - Test Script",
"25 - Test Vehicle Wheel",
"26 - Glass",
"27 - Map River",
"28 - Smoke",
"29 - Unsmashed",
"30 - Map Stairs",
"31 - Map Deep Surface"});
this.CompFlags1CheckedListBox.Location = new System.Drawing.Point(53, 3);
this.CompFlags1CheckedListBox.Name = "CompFlags1CheckedListBox";
this.CompFlags1CheckedListBox.Size = new System.Drawing.Size(174, 484);
this.CompFlags1CheckedListBox.TabIndex = 32;
this.CompFlags1CheckedListBox.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.CompFlags1CheckedListBox_ItemCheck);
//
// label21
//
this.label21.AutoSize = true;
this.label21.Location = new System.Drawing.Point(3, 3);
this.label21.Name = "label21";
this.label21.Size = new System.Drawing.Size(44, 13);
this.label21.TabIndex = 33;
this.label21.Text = "Flags 1:";
//
// label22
//
this.label22.AutoSize = true;
this.label22.Location = new System.Drawing.Point(256, 3);
this.label22.Name = "label22";
this.label22.Size = new System.Drawing.Size(44, 13);
this.label22.TabIndex = 35;
this.label22.Text = "Flags 2:";
//
// CompFlags2CheckedListBox
//
this.CompFlags2CheckedListBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)));
this.CompFlags2CheckedListBox.CheckOnClick = true;
this.CompFlags2CheckedListBox.FormattingEnabled = true;
this.CompFlags2CheckedListBox.Items.AddRange(new object[] {
"0 - Unknown",
"1 - Map Weapon",
"2 - Map Dynamic",
"3 - Map Animal",
"4 - Map Cover",
"5 - Map Vehicle",
"6 - Vehicle Not BVH",
"7 - Vehicle BVH",
"8 - Vehicle Box",
"9 - Ped",
"10 - Ragdoll",
"11 - Animal",
"12 - Animal Ragdoll",
"13 - Object",
"14 - Object Env Cloth",
"15 - Plant",
"16 - Projectile",
"17 - Explosion",
"18 - Pickup",
"19 - Foliage",
"20 - Forklift Forks",
"21 - Test Weapon",
"22 - Test Camera",
"23 - Test AI",
"24 - Test Script",
"25 - Test Vehicle Wheel",
"26 - Glass",
"27 - Map River",
"28 - Smoke",
"29 - Unsmashed",
"30 - Map Stairs",
"31 - Map Deep Surface"});
this.CompFlags2CheckedListBox.Location = new System.Drawing.Point(306, 3);
this.CompFlags2CheckedListBox.Name = "CompFlags2CheckedListBox";
this.CompFlags2CheckedListBox.Size = new System.Drawing.Size(174, 484);
this.CompFlags2CheckedListBox.TabIndex = 34;
this.CompFlags2CheckedListBox.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.CompFlags2CheckedListBox_ItemCheck);
//
// CompositeXformTabPage
//
this.CompositeXformTabPage.Controls.Add(this.CompScaleTextBox);
this.CompositeXformTabPage.Controls.Add(this.label23);
this.CompositeXformTabPage.Controls.Add(this.CompRotationTextBox);
this.CompositeXformTabPage.Controls.Add(this.CompPositionTextBox);
this.CompositeXformTabPage.Controls.Add(this.label24);
this.CompositeXformTabPage.Controls.Add(this.label25);
this.CompositeXformTabPage.Location = new System.Drawing.Point(4, 22);
this.CompositeXformTabPage.Name = "CompositeXformTabPage";
this.CompositeXformTabPage.Size = new System.Drawing.Size(599, 489);
this.CompositeXformTabPage.TabIndex = 3;
this.CompositeXformTabPage.Text = "Composite Transform";
this.CompositeXformTabPage.UseVisualStyleBackColor = true;
//
// CompScaleTextBox
//
this.CompScaleTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.CompScaleTextBox.Location = new System.Drawing.Point(72, 64);
this.CompScaleTextBox.Name = "CompScaleTextBox";
this.CompScaleTextBox.Size = new System.Drawing.Size(500, 20);
this.CompScaleTextBox.TabIndex = 12;
this.CompScaleTextBox.TextChanged += new System.EventHandler(this.CompScaleTextBox_TextChanged);
//
// label23
//
this.label23.AutoSize = true;
this.label23.Location = new System.Drawing.Point(29, 67);
this.label23.Name = "label23";
this.label23.Size = new System.Drawing.Size(37, 13);
this.label23.TabIndex = 11;
this.label23.Text = "Scale:";
//
// CompRotationTextBox
//
this.CompRotationTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.CompRotationTextBox.Location = new System.Drawing.Point(72, 38);
this.CompRotationTextBox.Name = "CompRotationTextBox";
this.CompRotationTextBox.Size = new System.Drawing.Size(500, 20);
this.CompRotationTextBox.TabIndex = 10;
this.CompRotationTextBox.TextChanged += new System.EventHandler(this.CompRotationTextBox_TextChanged);
//
// CompPositionTextBox
//
this.CompPositionTextBox.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.CompPositionTextBox.Location = new System.Drawing.Point(72, 12);
this.CompPositionTextBox.Name = "CompPositionTextBox";
this.CompPositionTextBox.Size = new System.Drawing.Size(500, 20);
this.CompPositionTextBox.TabIndex = 8;
this.CompPositionTextBox.TextChanged += new System.EventHandler(this.CompPositionTextBox_TextChanged);
//
// label24
//
this.label24.AutoSize = true;
this.label24.Location = new System.Drawing.Point(16, 41);
this.label24.Name = "label24";
this.label24.Size = new System.Drawing.Size(50, 13);
this.label24.TabIndex = 9;
this.label24.Text = "Rotation:";
//
// label25
//
this.label25.AutoSize = true;
this.label25.Location = new System.Drawing.Point(19, 15);
this.label25.Name = "label25";
this.label25.Size = new System.Drawing.Size(47, 13);
this.label25.TabIndex = 7;
this.label25.Text = "Position:";
//
// EditYbnBoundsPanel
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(565, 505);
this.ClientSize = new System.Drawing.Size(607, 515);
this.Controls.Add(this.BoundsTabControl);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "EditYbnBoundsPanel";
@ -624,6 +833,10 @@
((System.ComponentModel.ISupportInitialize)(this.ProceduralIDUpDown)).EndInit();
this.GeometryTabPage.ResumeLayout(false);
this.GeometryTabPage.PerformLayout();
this.CompositeFlagsTabPage.ResumeLayout(false);
this.CompositeFlagsTabPage.PerformLayout();
this.CompositeXformTabPage.ResumeLayout(false);
this.CompositeXformTabPage.PerformLayout();
this.ResumeLayout(false);
}
@ -677,5 +890,17 @@
private System.Windows.Forms.Label VertexCountLabel;
private System.Windows.Forms.Button DeleteButton;
private System.Windows.Forms.Button AddToProjectButton;
private System.Windows.Forms.TabPage CompositeFlagsTabPage;
private System.Windows.Forms.CheckedListBox CompFlags1CheckedListBox;
private System.Windows.Forms.Label label22;
private System.Windows.Forms.CheckedListBox CompFlags2CheckedListBox;
private System.Windows.Forms.Label label21;
private System.Windows.Forms.TabPage CompositeXformTabPage;
private System.Windows.Forms.TextBox CompScaleTextBox;
private System.Windows.Forms.Label label23;
private System.Windows.Forms.TextBox CompRotationTextBox;
private System.Windows.Forms.TextBox CompPositionTextBox;
private System.Windows.Forms.Label label24;
private System.Windows.Forms.Label label25;
}
}

View File

@ -93,10 +93,17 @@ namespace CodeWalker.Project.Panels
UnkFlagsUpDown.Value = 0;
UnkTypeUpDown.Value = 0;
BoundsTabControl.TabPages.Remove(GeometryTabPage);
BoundsTabControl.TabPages.Remove(CompositeFlagsTabPage);
BoundsTabControl.TabPages.Remove(CompositeXformTabPage);
CenterGeomTextBox.Text = string.Empty;
QuantumTextBox.Text = string.Empty;
UnkFloat1TextBox.Text = string.Empty;
UnkFloat2TextBox.Text = string.Empty;
SetCheckedListBoxValues(CompFlags1CheckedListBox, 0);
SetCheckedListBoxValues(CompFlags2CheckedListBox, 0);
CompPositionTextBox.Text = string.Empty;
CompRotationTextBox.Text = string.Empty;
CompScaleTextBox.Text = string.Empty;
VertexCountLabel.Text = "0 vertices";
PolyCountLabel.Text = "0 polygons";
}
@ -146,6 +153,34 @@ namespace CodeWalker.Project.Panels
PolyCountLabel.Text = "0 polygons";
}
if (b.Parent != null)
{
if (!BoundsTabControl.TabPages.Contains(CompositeFlagsTabPage))
{
BoundsTabControl.TabPages.Add(CompositeFlagsTabPage);
}
if (!BoundsTabControl.TabPages.Contains(CompositeXformTabPage))
{
BoundsTabControl.TabPages.Add(CompositeXformTabPage);
}
SetCheckedListBoxValues(CompFlags1CheckedListBox, (uint)b.CompositeFlags1.Flags1);
SetCheckedListBoxValues(CompFlags2CheckedListBox, (uint)b.CompositeFlags1.Flags2);
CompPositionTextBox.Text = FloatUtil.GetVector3String(b.Position);
CompRotationTextBox.Text = FloatUtil.GetVector4String(b.Orientation.ToVector4());
CompScaleTextBox.Text = FloatUtil.GetVector3String(b.Scale);
}
else
{
BoundsTabControl.TabPages.Remove(CompositeFlagsTabPage);
BoundsTabControl.TabPages.Remove(CompositeXformTabPage);
SetCheckedListBoxValues(CompFlags1CheckedListBox, 0);
SetCheckedListBoxValues(CompFlags2CheckedListBox, 0);
CompPositionTextBox.Text = string.Empty;
CompRotationTextBox.Text = string.Empty;
CompScaleTextBox.Text = string.Empty;
}
var ybn = b.GetRootYbn();
AddToProjectButton.Enabled = (ybn != null) ? !ProjectForm.YbnExistsInProject(ybn) : false;
DeleteButton.Enabled = !AddToProjectButton.Enabled;
@ -156,6 +191,39 @@ namespace CodeWalker.Project.Panels
}
}
private void SetCheckedListBoxValues(CheckedListBox clb, uint 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 uint GetCheckedListBoxValues(CheckedListBox clb, ItemCheckEventArgs e)
{
uint r = 0;
for (int i = 0; i < clb.Items.Count; i++)
{
if ((e != null) && (e.Index == i))
{
if (e.NewValue == CheckState.Checked)
{
r += (uint)(1 << i);
}
}
else
{
bool v = clb.GetItemChecked(i);// == CheckState.Checked;
r = BitUtil.UpdateBit(r, i, v);
}
}
return r;
}
private void BBMinTextBox_TextChanged(object sender, EventArgs e)
{
if (CollisionBounds == null) return;
@ -456,6 +524,83 @@ namespace CodeWalker.Project.Panels
}
}
private void CompFlags1CheckedListBox_ItemCheck(object sender, ItemCheckEventArgs e)
{
if (CollisionBounds == null) return;
if (populatingui) return;
var f1 = CollisionBounds.CompositeFlags1;
var f2 = CollisionBounds.CompositeFlags2;
var v = (EBoundCompositeFlags)GetCheckedListBoxValues(CompFlags1CheckedListBox, e);
if ((f1.Flags1 != v) || (f2.Flags1 != v))
{
f1.Flags1 = v;
CollisionBounds.CompositeFlags1 = f1;
CollisionBounds.CompositeFlags2 = f1;
ProjectForm.SetYbnHasChanged(true);
}
}
private void CompFlags2CheckedListBox_ItemCheck(object sender, ItemCheckEventArgs e)
{
if (CollisionBounds == null) return;
if (populatingui) return;
var f1 = CollisionBounds.CompositeFlags1;
var f2 = CollisionBounds.CompositeFlags2;
var v = (EBoundCompositeFlags)GetCheckedListBoxValues(CompFlags2CheckedListBox, e);
if ((f1.Flags2 != v) || (f2.Flags2 != v))
{
f1.Flags2 = v;
CollisionBounds.CompositeFlags1 = f1;
CollisionBounds.CompositeFlags2 = f1;
ProjectForm.SetYbnHasChanged(true);
}
}
private void CompPositionTextBox_TextChanged(object sender, EventArgs e)
{
if (CollisionBounds == null) return;
if (populatingui) return;
var v = FloatUtil.ParseVector3String(CompPositionTextBox.Text);
lock (ProjectForm.ProjectSyncRoot)
{
if (CollisionBounds.Position != v)
{
CollisionBounds.Position = v;
ProjectForm.SetYbnHasChanged(true);
}
}
}
private void CompRotationTextBox_TextChanged(object sender, EventArgs e)
{
if (CollisionBounds == null) return;
if (populatingui) return;
var q = FloatUtil.ParseVector4String(CompRotationTextBox.Text).ToQuaternion();
lock (ProjectForm.ProjectSyncRoot)
{
if (CollisionBounds.Orientation != q)
{
CollisionBounds.Orientation = q;
ProjectForm.SetYbnHasChanged(true);
}
}
}
private void CompScaleTextBox_TextChanged(object sender, EventArgs e)
{
if (CollisionBounds == null) return;
if (populatingui) return;
var v = FloatUtil.ParseVector3String(CompScaleTextBox.Text);
lock (ProjectForm.ProjectSyncRoot)
{
if (CollisionBounds.Scale != v)
{
CollisionBounds.Scale = v;
ProjectForm.SetYbnHasChanged(true);
}
}
}
private void AddToProjectButton_Click(object sender, EventArgs e)
{
ProjectForm.SetProjectItem(CollisionBounds);

View File

@ -92,6 +92,9 @@ namespace CodeWalker.Project
private Dictionary<uint, RelFile> visibleaudiofiles = new Dictionary<uint, RelFile>();
private Dictionary<uint, Archetype> projectarchetypes = new Dictionary<uint, Archetype>();//used to override archetypes in world view
private Dictionary<uint, YbnFile> projectybns = new Dictionary<uint, YbnFile>();//used for handling interior ybns
private List<YmapEntityDef> interiorslist = new List<YmapEntityDef>(); //used for handling interiors ybns
private bool ShowProjectItemInProcess = false;
@ -580,6 +583,25 @@ namespace CodeWalker.Project
{
ShowEditYtypMloEntSetPanel(promote);
}
else if (CurrentYbnFile != null)
{
if (CurrentCollisionVertex != null)
{
ShowEditYbnBoundVertexPanel(promote);
}
else if (CurrentCollisionPoly != null)
{
ShowEditYbnBoundPolyPanel(promote);
}
else if (CurrentCollisionBounds != null)
{
ShowEditYbnBoundsPanel(promote);
}
else
{
ShowEditYbnPanel(promote);
}
}
else if (CurrentEntity != null)
{
ShowEditYmapEntityPanel(promote);
@ -604,22 +626,6 @@ namespace CodeWalker.Project
{
ShowEditYtypPanel(promote);
}
else if (CurrentCollisionVertex != null)
{
ShowEditYbnBoundVertexPanel(promote);
}
else if (CurrentCollisionPoly != null)
{
ShowEditYbnBoundPolyPanel(promote);
}
else if (CurrentCollisionBounds != null)
{
ShowEditYbnBoundsPanel(promote);
}
else if (CurrentYbnFile != null)
{
ShowEditYbnPanel(promote);
}
if (CurrentPathNode != null)
{
ShowEditYndNodePanel(promote);
@ -1507,6 +1513,8 @@ namespace CodeWalker.Project
LoadProjectTree();
return objs.ToArray();
}
else if (sel.CollisionPoly != null) return NewCollisionPoly(sel.CollisionPoly.Type, sel.CollisionPoly, copyPosition, selectNew);
else if (sel.CollisionBounds != null) return NewCollisionBounds(sel.CollisionBounds.Type, sel.CollisionBounds, copyPosition, selectNew);
else if (sel.EntityDef != null) return NewEntity(sel.EntityDef, copyPosition, selectNew);
else if (sel.CarGenerator != null) return NewCarGen(sel.CarGenerator, copyPosition, selectNew);
else if (sel.PathNode != null) return NewPathNode(sel.PathNode, copyPosition, selectNew);
@ -1517,8 +1525,6 @@ namespace CodeWalker.Project
else if (sel.ScenarioNode != null) return NewScenarioNode(sel.ScenarioNode, copyPosition, selectNew);
else if (sel.Audio?.AudioZone != null) return NewAudioZone(sel.Audio, copyPosition, selectNew);
else if (sel.Audio?.AudioEmitter != null) return NewAudioEmitter(sel.Audio, copyPosition, selectNew);
else if (sel.CollisionPoly != null) return NewCollisionPoly(sel.CollisionPoly.Type, sel.CollisionPoly, copyPosition, selectNew);
else if (sel.CollisionBounds != null) return NewCollisionBounds(sel.CollisionBounds.Type, sel.CollisionBounds, copyPosition, selectNew);
return null;
}
public void DeleteObject(MapSelection sel)
@ -1531,6 +1537,9 @@ namespace CodeWalker.Project
DeleteObject(sel.MultipleSelectionItems[i]);
}
}
else if (sel.CollisionVertex != null) DeleteCollisionVertex();
else if (sel.CollisionPoly != null) DeleteCollisionPoly();
else if (sel.CollisionBounds != null) DeleteCollisionBounds();
else if (sel.EntityDef != null) DeleteEntity();
else if (sel.CarGenerator != null) DeleteCarGen();
else if (sel.PathNode != null) DeletePathNode();
@ -1541,13 +1550,13 @@ namespace CodeWalker.Project
else if (sel.ScenarioNode != null) DeleteScenarioNode();
else if (sel.Audio?.AudioZone != null) DeleteAudioZone();
else if (sel.Audio?.AudioEmitter != null) DeleteAudioEmitter();
else if (sel.CollisionVertex != null) DeleteCollisionVertex();
else if (sel.CollisionPoly != null) DeleteCollisionPoly();
else if (sel.CollisionBounds != null) DeleteCollisionBounds();
}
private void SetObject(ref MapSelection sel)
{
if (sel.MultipleSelectionItems != null) { } //todo...
else if (sel.CollisionVertex != null) SetProjectItem(sel.CollisionVertex, false);
else if (sel.CollisionPoly != null) SetProjectItem(sel.CollisionPoly, false);
else if (sel.CollisionBounds != null) SetProjectItem(sel.CollisionBounds, false);
else if (sel.EntityDef != null) SetProjectItem(sel.EntityDef, false);
else if (sel.CarGenerator != null) SetProjectItem(sel.CarGenerator, false);
else if (sel.PathNode != null) SetProjectItem(sel.PathNode, false);
@ -1558,9 +1567,6 @@ namespace CodeWalker.Project
else if (sel.ScenarioNode != null) SetProjectItem(sel.ScenarioNode, false);
else if (sel.Audio?.AudioZone != null) SetProjectItem(sel.Audio, false);
else if (sel.Audio?.AudioEmitter != null) SetProjectItem(sel.Audio, false);
else if (sel.CollisionVertex != null) SetProjectItem(sel.CollisionVertex, false);
else if (sel.CollisionPoly != null) SetProjectItem(sel.CollisionPoly, false);
else if (sel.CollisionBounds != null) SetProjectItem(sel.CollisionBounds, false);
}
@ -6436,7 +6442,7 @@ namespace CodeWalker.Project
}
}
}
public void GetVisibleYbns(Camera camera, List<YbnFile> ybns)
public void GetVisibleYbns(Camera camera, List<YbnFile> ybns, Dictionary<YmapEntityDef, YbnFile> interiors)
{
if (hidegtavmap)
{
@ -6459,7 +6465,10 @@ namespace CodeWalker.Project
var ybn = CurrentProjectFile.YbnFiles[i];
if (ybn.Loaded)
{
visibleybns[ybn.Name] = ybn;
if (!visiblemloentities.ContainsKey((ybn.RpfFileEntry != null) ? ybn.RpfFileEntry.ShortNameHash : 0))
{
visibleybns[ybn.Name] = ybn;
}
}
}
@ -6468,6 +6477,35 @@ namespace CodeWalker.Project
{
ybns.Add(ybn);
}
//messy way to gather the interior ybns!
projectybns.Clear();
for (int i = 0; i < CurrentProjectFile.YbnFiles.Count; i++)
{
var ybn = CurrentProjectFile.YbnFiles[i];
if (ybn.Loaded)
{
projectybns[ybn.RpfFileEntry?.ShortNameHash ?? JenkHash.GenHash(ybn.Name)] = ybn;
}
}
interiorslist.Clear();
interiorslist.AddRange(interiors.Keys);
for (int i = 0; i < interiorslist.Count; i++)
{
var mlo = interiorslist[i];
var hash = mlo._CEntityDef.archetypeName;
if (projectybns.TryGetValue(hash, out YbnFile ybn))
{
if ((ybn != null) && (ybn.Loaded))
{
interiors[mlo] = ybn;
}
}
}
}
}
@ -6659,12 +6697,13 @@ namespace CodeWalker.Project
public void GetMouseCollision(Camera camera, ref MapSelection curHit)
{
Ray mray = new Ray();
var mray = new Ray();
mray.Position = camera.MouseRay.Position + camera.Position;
mray.Direction = camera.MouseRay.Direction;
var bounds = curHit.CollisionBounds ?? curHit.CollisionPoly?.Owner ?? curHit.CollisionVertex?.Owner;
var curybn = bounds?.GetRootYbn();
var eray = mray;
if (hidegtavmap && (curybn != null))
{
@ -6688,7 +6727,7 @@ namespace CodeWalker.Project
if (ybn.Bounds != null)
{
var hit = ybn.Bounds.RayIntersect(ref mray); //TODO: interior ybns!
var hit = ybn.Bounds.RayIntersect(ref mray);
if (hit.Hit && (hit.HitDist < curHit.HitDist))
{
curHit.UpdateCollisionFromRayHit(ref hit, camera);
@ -6696,6 +6735,31 @@ namespace CodeWalker.Project
}
}
}
for (int i = 0; i < interiorslist.Count; i++)
{
var mlo = interiorslist[i];
var hash = mlo._CEntityDef.archetypeName;
if (projectybns.TryGetValue(hash, out YbnFile ybn))
{
if ((ybn != null) && (ybn.Loaded) && (ybn.Bounds != null))
{
var eorinv = Quaternion.Invert(mlo.Orientation);
eray.Position = eorinv.Multiply(mray.Position - mlo.Position);
eray.Direction = eorinv.Multiply(mray.Direction);
var hit = ybn.Bounds.RayIntersect(ref eray);
if (hit.Hit && (hit.HitDist < curHit.HitDist))
{
hit.HitYbn = ybn;
hit.HitEntity = mlo;
hit.Position = mlo.Orientation.Multiply(hit.Position) + mlo.Position;
hit.Normal = mlo.Orientation.Multiply(hit.Normal);
curHit.UpdateCollisionFromRayHit(ref hit, camera);
}
}
}
}
}
}
@ -6753,7 +6817,7 @@ namespace CodeWalker.Project
RelFile audiofile = audiopl?.RelFile;
bool showcurrent = false;
if (YmapExistsInProject(ymap))
if (YmapExistsInProject(ymap) && (ybn == null))
{
if (ent != CurrentEntity)
{
@ -6913,14 +6977,6 @@ namespace CodeWalker.Project
{
//TODO!!
}
else if (sel.EntityDef != null)
{
OnWorldEntityModified(sel.EntityDef);
}
else if (sel.CarGenerator != null)
{
OnWorldCarGenModified(sel.CarGenerator);
}
else if (sel.CollisionVertex != null)
{
OnWorldCollisionVertexModified(sel.CollisionVertex);
@ -6933,6 +6989,14 @@ namespace CodeWalker.Project
{
OnWorldCollisionBoundsModified(sel.CollisionBounds);
}
else if (sel.EntityDef != null)
{
OnWorldEntityModified(sel.EntityDef);
}
else if (sel.CarGenerator != null)
{
OnWorldCarGenModified(sel.CarGenerator);
}
else if (sel.PathNode != null)
{
OnWorldPathNodeModified(sel.PathNode, sel.PathLink);

View File

@ -544,12 +544,14 @@ namespace CodeWalker.Project
public class CollisionPositionUndoStep : UndoStep
{
public Bounds Bounds { get; set; }
public YmapEntityDef Entity { get; set; }
public Vector3 StartPosition { get; set; }
public Vector3 EndPosition { get; set; }
public CollisionPositionUndoStep(Bounds bounds, Vector3 startpos, WorldForm wf)
public CollisionPositionUndoStep(Bounds bounds, YmapEntityDef ent, Vector3 startpos, WorldForm wf)
{
Bounds = bounds;
Entity = ent;
StartPosition = startpos;
EndPosition = bounds?.Position ?? Vector3.Zero;
@ -560,9 +562,17 @@ namespace CodeWalker.Project
{
if (Bounds != null)
{
Bounds.Position = p;
if (Entity != null)
{
Bounds.Position = Quaternion.Invert(Entity.Orientation).Multiply(p - Entity.Position);
}
else
{
Bounds.Position = p;
}
}
if (Bounds != sel.CollisionBounds) wf.SelectCollisionBounds(Bounds);
wf.SetWidgetPosition(p);
@ -595,14 +605,20 @@ namespace CodeWalker.Project
public class CollisionRotationUndoStep : UndoStep
{
public Bounds Bounds { get; set; }
public YmapEntityDef Entity { get; set; }
public Quaternion StartRotation { get; set; }
public Quaternion EndRotation { get; set; }
public CollisionRotationUndoStep(Bounds bounds, Quaternion startrot, WorldForm wf)
public CollisionRotationUndoStep(Bounds bounds, YmapEntityDef ent, Quaternion startrot, WorldForm wf)
{
Bounds = bounds;
Entity = ent;
StartRotation = startrot;
EndRotation = bounds?.Orientation ?? Quaternion.Identity;
if (ent != null)
{
EndRotation = EndRotation * ent.Orientation;
}
UpdateGraphics(wf);
}
@ -612,7 +628,14 @@ namespace CodeWalker.Project
{
if (Bounds != null)
{
Bounds.Orientation = q;
if (Entity != null)
{
Bounds.Orientation = Quaternion.Invert(Entity.Orientation) * q;
}
else
{
Bounds.Orientation = q;
}
}
if (Bounds != sel.CollisionBounds) wf.SelectCollisionBounds(Bounds);
@ -699,12 +722,14 @@ namespace CodeWalker.Project
public class CollisionPolyPositionUndoStep : UndoStep
{
public BoundPolygon Polygon { get; set; }
public YmapEntityDef Entity { get; set; }
public Vector3 StartPosition { get; set; }
public Vector3 EndPosition { get; set; }
public CollisionPolyPositionUndoStep(BoundPolygon poly, Vector3 startpos, WorldForm wf)
public CollisionPolyPositionUndoStep(BoundPolygon poly, YmapEntityDef ent, Vector3 startpos, WorldForm wf)
{
Polygon = poly;
Entity = ent;
StartPosition = startpos;
EndPosition = poly?.Position ?? Vector3.Zero;
@ -715,7 +740,14 @@ namespace CodeWalker.Project
{
if (Polygon != null)
{
Polygon.Position = p;
if (Entity != null)
{
Polygon.Position = Quaternion.Invert(Entity.Orientation).Multiply(p - Entity.Position);
}
else
{
Polygon.Position = p;
}
}
if (Polygon != sel.CollisionPoly) wf.SelectCollisionPoly(Polygon);
@ -750,14 +782,20 @@ namespace CodeWalker.Project
public class CollisionPolyRotationUndoStep : UndoStep
{
public BoundPolygon Polygon { get; set; }
public YmapEntityDef Entity { get; set; }
public Quaternion StartRotation { get; set; }
public Quaternion EndRotation { get; set; }
public CollisionPolyRotationUndoStep(BoundPolygon poly, Quaternion startrot, WorldForm wf)
public CollisionPolyRotationUndoStep(BoundPolygon poly, YmapEntityDef ent, Quaternion startrot, WorldForm wf)
{
Polygon = poly;
Entity = ent;
StartRotation = startrot;
EndRotation = poly?.Orientation ?? Quaternion.Identity;
if (ent != null)
{
EndRotation = EndRotation * ent.Orientation;
}
UpdateGraphics(wf);
}
@ -766,7 +804,14 @@ namespace CodeWalker.Project
{
if (Polygon != null)
{
Polygon.Orientation = q;
if (Entity != null)
{
Polygon.Orientation = Quaternion.Invert(Entity.Orientation) * q;
}
else
{
Polygon.Orientation = q;
}
}
if (Polygon != sel.CollisionPoly) wf.SelectCollisionPoly(Polygon);
@ -853,12 +898,14 @@ namespace CodeWalker.Project
public class CollisionVertexPositionUndoStep : UndoStep
{
public BoundVertex Vertex { get; set; }
public YmapEntityDef Entity { get; set; }
public Vector3 StartPosition { get; set; }
public Vector3 EndPosition { get; set; }
public CollisionVertexPositionUndoStep(BoundVertex vertex, Vector3 startpos, WorldForm wf)
public CollisionVertexPositionUndoStep(BoundVertex vertex, YmapEntityDef ent, Vector3 startpos, WorldForm wf)
{
Vertex = vertex;
Entity = ent;
StartPosition = startpos;
EndPosition = vertex?.Position ?? Vector3.Zero;
@ -869,7 +916,14 @@ namespace CodeWalker.Project
{
if (Vertex != null)
{
Vertex.Position = p;
if (Entity != null)
{
Vertex.Position = Quaternion.Invert(Entity.Orientation).Multiply(p - Entity.Position);
}
else
{
Vertex.Position = p;
}
}
if (Vertex != sel.CollisionVertex) wf.SelectCollisionVertex(Vertex);

View File

@ -94,6 +94,7 @@ namespace CodeWalker.Rendering
public bool ShowScriptedYmaps = true;
public List<YmapFile> VisibleYmaps = new List<YmapFile>();
public List<YmapEntityDef> VisibleMlos = new List<YmapEntityDef>();
public rage__eLodType renderworldMaxLOD = rage__eLodType.LODTYPES_DEPTH_ORPHANHD;
public float renderworldLodDistMult = 1.0f;
@ -1646,6 +1647,7 @@ namespace CodeWalker.Rendering
renderworldentities.Clear();
renderworldrenderables.Clear();
VisibleYmaps.Clear();
VisibleMlos.Clear();
ArchetypeRenderables.Clear();
RequiredParents.Clear();
RenderEntities.Clear();
@ -1680,6 +1682,7 @@ namespace CodeWalker.Rendering
{
if (renderinteriors && (ent.MloInstance != null) && !MapViewEnabled) //render Mlo child entities...
{
VisibleMlos.Add(ent);
renderworldentities.Add(ent);//collisions rendering needs this
RenderWorldAddInteriorEntities(ent);
}
@ -2149,17 +2152,6 @@ namespace CodeWalker.Rendering
}
private void RenderWorldYmapExtras()
{
if (renderinteriors && (rendercollisionmeshes || (SelectionMode == MapSelectionMode.Collision)))
{
for (int i = 0; i < renderworldentities.Count; i++)
{
var ent = renderworldentities[i];
if (ent.IsMlo)
{
RenderInteriorCollisionMesh(ent);
}
}
}
if (rendercars)
{
for (int y = 0; y < VisibleYmaps.Count; y++)
@ -2435,10 +2427,6 @@ namespace CodeWalker.Rendering
RenderArchetype(intarch, intent);
}
}
if (rendercollisionmeshes || (SelectionMode == MapSelectionMode.Collision))
{
RenderInteriorCollisionMesh(entity);
}
}
@ -3225,20 +3213,6 @@ namespace CodeWalker.Rendering
private void RenderInteriorCollisionMesh(YmapEntityDef mlo)
{
//enqueue interior collison meshes for rendering.
if (mlo.Archetype == null) return;
var hash = mlo.Archetype.Hash;
YbnFile ybn = gameFileCache.GetYbn(hash);
if ((ybn != null) && (ybn.Loaded))
{
RenderCollisionMesh(ybn.Bounds, mlo);
}
if (ybn == null)
{ }
}
public void RenderCollisionMesh(Bounds bounds, YmapEntityDef entity)
{

View File

@ -221,13 +221,27 @@ namespace CodeWalker
public string GetNameString(string defval)
{
string name = defval;
var ename = (EntityDef != null) ? EntityDef._CEntityDef.archetypeName.ToString() : string.Empty;
var enamec = ename + ((!string.IsNullOrEmpty(ename)) ? ": " : "");
if (MultipleSelectionItems != null)
{
name = "Multiple items";
}
else if (CollisionVertex != null)
{
name = enamec + "Vertex " + CollisionVertex.Index.ToString() + ((CollisionBounds != null) ? (": " + CollisionBounds.GetName()) : string.Empty);
}
else if (CollisionPoly != null)
{
name = enamec + "Poly " + CollisionPoly.Index.ToString() + ((CollisionBounds != null) ? (": " + CollisionBounds.GetName()) : string.Empty);
}
else if (CollisionBounds != null)
{
name = enamec + CollisionBounds.GetName();
}
else if (EntityDef != null)
{
name = EntityDef._CEntityDef.archetypeName.ToString();
name = ename;
}
else if (Archetype != null)
{
@ -257,18 +271,6 @@ namespace CodeWalker
{
name = "OccludeModel " + (OccludeModel.Ymap?.Name ?? "") + ": " + OccludeModel.Index.ToString();
}
else if (CollisionVertex != null)
{
name = "Vertex " + CollisionVertex.Index.ToString() + ((CollisionBounds != null) ? (": " + CollisionBounds.GetName()) : string.Empty);
}
else if (CollisionPoly != null)
{
name = "Poly " + CollisionPoly.Index.ToString() + ((CollisionBounds != null) ? (": " + CollisionBounds.GetName()) : string.Empty);
}
else if (CollisionBounds != null)
{
name = CollisionBounds.GetName();
}
else if (WaterQuad != null)
{
name = "WaterQuad " + WaterQuad.ToString();
@ -334,6 +336,7 @@ namespace CodeWalker
if (CarGenerator != null) return true;
if (CollisionBounds != null) return true;
if (CollisionPoly != null) return true;
if (CollisionVertex != null) return true;
if (PathNode != null) return true;
//if (NavPoly != null) return true;
if (NavPoint != null) return true;
@ -354,6 +357,31 @@ namespace CodeWalker
case WidgetMode.Scale: return new MultiScaleUndoStep(this, startScale, wf);
}
}
else if (CollisionVertex != null)
{
switch (mode)
{
case WidgetMode.Position: return new CollisionVertexPositionUndoStep(CollisionVertex, EntityDef, startPos, wf);
}
}
else if (CollisionPoly != null)
{
switch (mode)
{
case WidgetMode.Position: return new CollisionPolyPositionUndoStep(CollisionPoly, EntityDef, startPos, wf);
case WidgetMode.Rotation: return new CollisionPolyRotationUndoStep(CollisionPoly, EntityDef, startRot, wf);
case WidgetMode.Scale: return new CollisionPolyScaleUndoStep(CollisionPoly, startScale, wf);
}
}
else if (CollisionBounds != null)
{
switch (mode)
{
case WidgetMode.Position: return new CollisionPositionUndoStep(CollisionBounds, EntityDef, startPos, wf);
case WidgetMode.Rotation: return new CollisionRotationUndoStep(CollisionBounds, EntityDef, startRot, wf);
case WidgetMode.Scale: return new CollisionScaleUndoStep(CollisionBounds, startScale, wf);
}
}
else if (EntityDef != null)
{
if (editPivot)
@ -383,31 +411,6 @@ namespace CodeWalker
case WidgetMode.Scale: return new CarGenScaleUndoStep(CarGenerator, startScale);
}
}
else if (CollisionVertex != null)
{
switch (mode)
{
case WidgetMode.Position: return new CollisionVertexPositionUndoStep(CollisionVertex, startPos, wf);
}
}
else if (CollisionPoly != null)
{
switch (mode)
{
case WidgetMode.Position: return new CollisionPolyPositionUndoStep(CollisionPoly, startPos, wf);
case WidgetMode.Rotation: return new CollisionPolyRotationUndoStep(CollisionPoly, startRot, wf);
case WidgetMode.Scale: return new CollisionPolyScaleUndoStep(CollisionPoly, startScale, wf);
}
}
else if (CollisionBounds != null)
{
switch (mode)
{
case WidgetMode.Position: return new CollisionPositionUndoStep(CollisionBounds, startPos, wf);
case WidgetMode.Rotation: return new CollisionRotationUndoStep(CollisionBounds, startRot, wf);
case WidgetMode.Scale: return new CollisionScaleUndoStep(CollisionBounds, startScale, wf);
}
}
else if (PathNode != null)
{
switch (mode)
@ -530,6 +533,21 @@ namespace CodeWalker
{
return MultipleSelectionCenter;
}
else if (CollisionVertex != null)
{
if (EntityDef != null) return EntityDef.Position + EntityDef.Orientation.Multiply(CollisionVertex.Position);
return CollisionVertex.Position;
}
else if (CollisionPoly != null)
{
if (EntityDef != null) return EntityDef.Position + EntityDef.Orientation.Multiply(CollisionPoly.Position);
return CollisionPoly.Position;
}
else if (CollisionBounds != null)
{
if (EntityDef != null) return EntityDef.Position + EntityDef.Orientation.Multiply(CollisionBounds.Position);
return CollisionBounds.Position;
}
else if (EntityDef != null)
{
return EntityDef.WidgetPosition;
@ -538,18 +556,6 @@ namespace CodeWalker
{
return CarGenerator.Position;
}
else if (CollisionVertex != null)
{
return CollisionVertex.Position;
}
else if (CollisionPoly != null)
{
return CollisionPoly.Position;
}
else if (CollisionBounds != null)
{
return CollisionBounds.Position;
}
else if (NavPoly != null)
{
return NavPoly.Position;
@ -589,6 +595,21 @@ namespace CodeWalker
{
return MultipleSelectionRotation;
}
else if (CollisionVertex != null)
{
if (EntityDef != null) return EntityDef.Orientation;
return Quaternion.Identity;
}
else if (CollisionPoly != null)
{
if (EntityDef != null) return CollisionPoly.Orientation * EntityDef.Orientation;
return CollisionPoly.Orientation;
}
else if (CollisionBounds != null)
{
if (EntityDef != null) return CollisionBounds.Orientation * EntityDef.Orientation;
return CollisionBounds.Orientation;
}
else if (EntityDef != null)
{
return EntityDef.WidgetOrientation;
@ -597,18 +618,6 @@ namespace CodeWalker
{
return CarGenerator.Orientation;
}
else if (CollisionVertex != null)
{
return Quaternion.Identity;
}
else if (CollisionPoly != null)
{
return CollisionPoly.Orientation;
}
else if (CollisionBounds != null)
{
return CollisionBounds.Orientation;
}
else if (NavPoly != null)
{
return Quaternion.Identity;
@ -648,14 +657,6 @@ namespace CodeWalker
{
return WidgetAxis.XYZ;
}
else if (EntityDef != null)
{
return WidgetAxis.XYZ;
}
else if (CarGenerator != null)
{
return WidgetAxis.Z;
}
else if (CollisionVertex != null)
{
return WidgetAxis.None;
@ -668,6 +669,14 @@ namespace CodeWalker
{
return WidgetAxis.XYZ;
}
else if (EntityDef != null)
{
return WidgetAxis.XYZ;
}
else if (CarGenerator != null)
{
return WidgetAxis.Z;
}
else if (NavPoly != null)
{
return WidgetAxis.XYZ;
@ -707,14 +716,6 @@ namespace CodeWalker
{
return MultipleSelectionScale;
}
else if (EntityDef != null)
{
return EntityDef.Scale;
}
else if (CarGenerator != null)
{
return new Vector3(CarGenerator.CCarGen.perpendicularLength);
}
else if (CollisionVertex != null)
{
return Vector3.One;
@ -727,6 +728,14 @@ namespace CodeWalker
{
return CollisionBounds.Scale;
}
else if (EntityDef != null)
{
return EntityDef.Scale;
}
else if (CarGenerator != null)
{
return new Vector3(CarGenerator.CCarGen.perpendicularLength);
}
else if (NavPoly != null)
{
return Vector3.One;
@ -766,7 +775,7 @@ namespace CodeWalker
{
for (int i = 0; i < MultipleSelectionItems.Length; i++)
{
if (MultipleSelectionItems[i].EntityDef != null) return true;
if ((MultipleSelectionItems[i].EntityDef != null) && (MultipleSelectionItems[i].CollisionBounds == null)) return true;
}
return false;
}
@ -794,6 +803,9 @@ namespace CodeWalker
}
return false;
}
else if (CollisionVertex != null) return false;//can't copy just a vertex..
else if (CollisionPoly != null) return true;
else if (CollisionBounds != null) return true;
else if (EntityDef != null) return true;
else if (CarGenerator != null) return true;
else if (PathNode != null) return true;
@ -804,9 +816,6 @@ namespace CodeWalker
else if (ScenarioNode != null) return true;
else if (Audio?.AudioZone != null) return true;
else if (Audio?.AudioEmitter != null) return true;
else if (CollisionVertex != null) return false;//can't copy just a vertex..
else if (CollisionPoly != null) return true;
else if (CollisionBounds != null) return true;
return false;
}
}
@ -856,6 +865,7 @@ namespace CodeWalker
{
var dpos = newpos - MultipleSelectionCenter;// oldpos;
if (dpos == Vector3.Zero) return; //nothing moved.. (probably due to snap)
YmapEntityDef ent = null;//hack to use an entity for multple selections... buggy if entities mismatch!!!
for (int i = 0; i < MultipleSelectionItems.Length; i++)
{
if (MultipleSelectionItems[i].CollisionPoly == null)//skip polys, they use gathered verts
@ -863,18 +873,36 @@ namespace CodeWalker
var refpos = MultipleSelectionItems[i].WidgetPosition;
MultipleSelectionItems[i].SetPosition(refpos + dpos, false);
}
ent = MultipleSelectionItems[i].EntityDef ?? ent;
}
if (ent != null) dpos = Quaternion.Invert(ent.Orientation).Multiply(dpos);
if (GatheredCollisionVerts != null)
{
for (int i = 0; i < GatheredCollisionVerts.Length; i++)
{
var refpos = GatheredCollisionVerts[i].Position;
GatheredCollisionVerts[i].Position = refpos + dpos;
var vnewpos = refpos + dpos;
GatheredCollisionVerts[i].Position = vnewpos;
}
}
MultipleSelectionCenter = newpos;
}
}
else if (CollisionVertex != null)
{
if (EntityDef != null) newpos = Quaternion.Invert(EntityDef.Orientation).Multiply(newpos - EntityDef.Position);
CollisionVertex.Position = newpos;
}
else if (CollisionPoly != null)
{
if (EntityDef != null) newpos = Quaternion.Invert(EntityDef.Orientation).Multiply(newpos - EntityDef.Position);
CollisionPoly.Position = newpos;
}
else if (CollisionBounds != null)
{
if (EntityDef != null) newpos = Quaternion.Invert(EntityDef.Orientation).Multiply(newpos - EntityDef.Position);
CollisionBounds.Position = newpos;
}
else if (EntityDef != null)
{
if (editPivot)
@ -894,18 +922,6 @@ namespace CodeWalker
{
PathNode.SetPosition(newpos);
}
else if (CollisionVertex != null)
{
CollisionVertex.Position = newpos;
}
else if (CollisionPoly != null)
{
CollisionPoly.Position = newpos;
}
else if (CollisionBounds != null)
{
CollisionBounds.Position = newpos;
}
else if (NavPoly != null)
{
NavPoly.SetPosition(newpos);
@ -944,6 +960,7 @@ namespace CodeWalker
var cen = MultipleSelectionCenter;
var orinv = Quaternion.Invert(MultipleSelectionRotation);
var trans = newrot * orinv;
YmapEntityDef ent = null;//hack to use an entity for multple selections... buggy if entities mismatch!!!
for (int i = 0; i < MultipleSelectionItems.Length; i++)
{
if (MultipleSelectionItems[i].CollisionPoly == null)//skip polys, they use gathered verts
@ -956,7 +973,9 @@ namespace CodeWalker
MultipleSelectionItems[i].SetPosition(newpos, false);
MultipleSelectionItems[i].SetRotation(newori, false);
}
ent = MultipleSelectionItems[i].EntityDef ?? ent;
}
var eorinv = (ent != null) ? Quaternion.Invert(ent.Orientation) : Quaternion.Identity;
if (GatheredCollisionVerts != null)
{
for (int i = 0; i < GatheredCollisionVerts.Length; i++)
@ -964,12 +983,32 @@ namespace CodeWalker
var refpos = GatheredCollisionVerts[i].Position;
var relpos = refpos - cen;
var newpos = trans.Multiply(relpos) + cen;
if (ent != null)
{
refpos = ent.Position + ent.Orientation.Multiply(refpos);
relpos = refpos - cen;
newpos = eorinv.Multiply(trans.Multiply(relpos) + cen - ent.Position);
}
GatheredCollisionVerts[i].Position = newpos;
}
}
MultipleSelectionRotation = newrot;
}
}
else if (CollisionVertex != null)
{
//do nothing, but stop any poly from being rotated also
}
else if (CollisionPoly != null)
{
if (EntityDef != null) newrot = Quaternion.Normalize(Quaternion.Invert(EntityDef.Orientation) * newrot);
CollisionPoly.Orientation = newrot;
}
else if (CollisionBounds != null)
{
if (EntityDef != null) newrot = Quaternion.Normalize(Quaternion.Invert(EntityDef.Orientation) * newrot);
CollisionBounds.Orientation = newrot;
}
else if (EntityDef != null)
{
if (editPivot)
@ -985,18 +1024,6 @@ namespace CodeWalker
{
CarGenerator.SetOrientation(newrot);
}
else if (CollisionVertex != null)
{
//do nothing, but stop any poly from being rotated also
}
else if (CollisionPoly != null)
{
CollisionPoly.Orientation = newrot;
}
else if (CollisionBounds != null)
{
CollisionBounds.Orientation = newrot;
}
else if (ScenarioNode != null)
{
ScenarioNode.SetOrientation(newrot);
@ -1027,6 +1054,7 @@ namespace CodeWalker
var ori = MultipleSelectionRotation;
var orinv = Quaternion.Invert(ori);
var rsca = newscale / MultipleSelectionScale;
YmapEntityDef ent = null;//hack to use an entity for multple selections... buggy if entities mismatch!!!
for (int i = 0; i < MultipleSelectionItems.Length; i++)
{
if (MultipleSelectionItems[i].CollisionPoly == null)//skip polys, they use gathered verts
@ -1037,7 +1065,9 @@ namespace CodeWalker
MultipleSelectionItems[i].SetPosition(newpos, false);
MultipleSelectionItems[i].SetScale(newscale, false);
}
ent = MultipleSelectionItems[i].EntityDef ?? ent;
}
var eorinv = (ent != null) ? Quaternion.Invert(ent.Orientation) : Quaternion.Identity;
if (GatheredCollisionVerts != null)
{
for (int i = 0; i < GatheredCollisionVerts.Length; i++)
@ -1045,21 +1075,19 @@ namespace CodeWalker
var refpos = GatheredCollisionVerts[i].Position;
var relpos = refpos - cen;
var newpos = ori.Multiply(orinv.Multiply(relpos) * rsca) + cen;
if (ent != null)
{
refpos = ent.Position + ent.Orientation.Multiply(refpos);
relpos = refpos - cen;
newpos = ori.Multiply(orinv.Multiply(relpos) * rsca) + cen;
newpos = eorinv.Multiply(newpos - ent.Position);
}
GatheredCollisionVerts[i].Position = newpos;
}
}
MultipleSelectionScale = newscale;
}
}
else if (EntityDef != null)
{
EntityDef.SetScale(newscale);
}
else if (CarGenerator != null)
{
CarGenerator.SetScale(newscale);
AABB = new BoundingBox(CarGenerator.BBMin, CarGenerator.BBMax);
}
else if (CollisionVertex != null)
{
//do nothing, but stop any poly from being scaled also
@ -1072,6 +1100,15 @@ namespace CodeWalker
{
CollisionBounds.Scale = newscale;
}
else if (EntityDef != null)
{
EntityDef.SetScale(newscale);
}
else if (CarGenerator != null)
{
CarGenerator.SetScale(newscale);
AABB = new BoundingBox(CarGenerator.BBMin, CarGenerator.BBMax);
}
}

View File

@ -110,6 +110,7 @@ namespace CodeWalker
bool rendercollisionmeshes = Settings.Default.ShowCollisionMeshes;
List<BoundsStoreItem> collisionitems = new List<BoundsStoreItem>();
List<YbnFile> collisionybns = new List<YbnFile>();
Dictionary<YmapEntityDef, YbnFile> collisioninteriors = new Dictionary<YmapEntityDef, YbnFile>();
int collisionmeshrange = Settings.Default.CollisionMeshRange;
bool[] collisionmeshlayers = { true, true, true };
@ -740,9 +741,22 @@ namespace CodeWalker
}
}
collisioninteriors.Clear();
foreach (var mlo in Renderer.VisibleMlos)
{
if (mlo.Archetype == null) return;
var hash = mlo.Archetype.Hash;
YbnFile ybn = gameFileCache.GetYbn(hash);
if ((ybn != null) && (ybn.Loaded))
{
collisioninteriors[mlo] = ybn;
}
}
if (ProjectForm != null)
{
ProjectForm.GetVisibleYbns(camera, collisionybns);
ProjectForm.GetVisibleYbns(camera, collisionybns, collisioninteriors);
}
foreach (var ybn in collisionybns)
@ -753,6 +767,14 @@ namespace CodeWalker
}
}
foreach (var kvp in collisioninteriors)
{
if ((kvp.Value != null) && (kvp.Value.Loaded))
{
Renderer.RenderCollisionMesh(kvp.Value.Bounds, kvp.Key);
}
}
}
private void RenderWorldWaterQuads()
@ -2214,8 +2236,6 @@ namespace CodeWalker
ProjectForm.GetMouseCollision(camera, ref CurMouseHit);
}
}
private void UpdateMouseHits(DrawableBase drawable, Archetype arche, YmapEntityDef entity)
@ -3227,13 +3247,13 @@ namespace CodeWalker
ProjectForm.OnWorldSelectionChanged(SelectedItem);
}
}
else if (obj is Bounds bounds) SelectCollisionBounds(bounds, addSelection);
else if (obj is BoundPolygon cpoly) SelectCollisionPoly(cpoly, addSelection);
else if (obj is BoundVertex cvert) SelectCollisionVertex(cvert, addSelection);
else if (obj is YmapEntityDef ent) SelectEntity(ent, addSelection);
else if (obj is YmapCarGen cargen) SelectCarGen(cargen, addSelection);
else if (obj is YmapGrassInstanceBatch grass) SelectGrassBatch(grass, addSelection);
else if (obj is MCMloRoomDef room) SelectMloRoom(room, null, addSelection);//how to get instance?
else if (obj is Bounds bounds) SelectCollisionBounds(bounds, addSelection);
else if (obj is BoundPolygon cpoly) SelectCollisionPoly(cpoly, addSelection);
else if (obj is BoundVertex cvert) SelectCollisionVertex(cvert, addSelection);
else if (obj is YnvPoly npoly) SelectNavPoly(npoly, addSelection);
else if (obj is YnvPoint npoint) SelectNavPoint(npoint, addSelection);
else if (obj is YnvPortal nportal) SelectNavPortal(nportal, addSelection);
@ -5158,19 +5178,22 @@ namespace CodeWalker
}
else
{
DeleteItem(ref SelectedItem);
DeleteItem(SelectedItem);
SelectItem(null);
}
}
private void DeleteItem(ref MapSelection item)
private void DeleteItem(MapSelection item)
{
if (item.MultipleSelectionItems != null)
{
for (int i = 0; i < item.MultipleSelectionItems.Length; i++)
{
DeleteItem(ref item.MultipleSelectionItems[i]);
DeleteItem(item.MultipleSelectionItems[i]);
}
}
else if (item.CollisionVertex != null) DeleteCollisionVertex(item.CollisionVertex);
else if (item.CollisionPoly != null) DeleteCollisionPoly(item.CollisionPoly);
else if (item.CollisionBounds != null) DeleteCollisionBounds(item.CollisionBounds);
else if (item.EntityDef != null) DeleteEntity(item.EntityDef);
else if (item.CarGenerator != null) DeleteCarGen(item.CarGenerator);
else if (item.PathNode != null) DeletePathNode(item.PathNode);
@ -5181,9 +5204,6 @@ namespace CodeWalker
else if (item.ScenarioNode != null) DeleteScenarioNode(item.ScenarioNode);
else if (item.Audio?.AudioZone != null) DeleteAudioZone(item.Audio);
else if (item.Audio?.AudioEmitter != null) DeleteAudioEmitter(item.Audio);
else if (item.CollisionVertex != null) DeleteCollisionVertex(item.CollisionVertex);
else if (item.CollisionPoly != null) DeleteCollisionPoly(item.CollisionPoly);
else if (item.CollisionBounds != null) DeleteCollisionBounds(item.CollisionBounds);
}
private void DeleteEntity(YmapEntityDef ent)
{