Merge pull request #148 from arifsezeraktas/master

Add duplicate light button to model light form
This commit is contained in:
dexyfex 2022-03-20 11:01:17 +11:00 committed by GitHub
commit 1a11b3d7a9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 145 additions and 7 deletions

View File

@ -30,6 +30,7 @@
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ModelLightForm));
this.MainSplitContainer = new System.Windows.Forms.SplitContainer();
this.DuplicateLightButton = new System.Windows.Forms.Button();
this.DeleteLightButton = new System.Windows.Forms.Button();
this.NewLightButton = new System.Windows.Forms.Button();
this.LightsTreeView = new CodeWalker.WinForms.TreeViewFix();
@ -113,6 +114,7 @@
this.EditMenu = new System.Windows.Forms.ToolStripMenuItem();
this.EditNewLightMenu = new System.Windows.Forms.ToolStripMenuItem();
this.EditDeleteLightMenu = new System.Windows.Forms.ToolStripMenuItem();
this.EditDuplicateLightMenu = new System.Windows.Forms.ToolStripMenuItem();
this.OptionsMenu = new System.Windows.Forms.ToolStripMenuItem();
this.OptionsShowOutlinesMenu = new System.Windows.Forms.ToolStripMenuItem();
this.MoveMenuItem = new System.Windows.Forms.ToolStripMenuItem();
@ -148,6 +150,7 @@
//
// MainSplitContainer.Panel1
//
this.MainSplitContainer.Panel1.Controls.Add(this.DuplicateLightButton);
this.MainSplitContainer.Panel1.Controls.Add(this.DeleteLightButton);
this.MainSplitContainer.Panel1.Controls.Add(this.NewLightButton);
this.MainSplitContainer.Panel1.Controls.Add(this.LightsTreeView);
@ -155,10 +158,22 @@
// MainSplitContainer.Panel2
//
this.MainSplitContainer.Panel2.Controls.Add(this.LightPropertiesPanel);
this.MainSplitContainer.Size = new System.Drawing.Size(733, 523);
this.MainSplitContainer.Panel2.Paint += new System.Windows.Forms.PaintEventHandler(this.MainSplitContainer_Panel2_Paint);
this.MainSplitContainer.Size = new System.Drawing.Size(733, 561);
this.MainSplitContainer.SplitterDistance = 184;
this.MainSplitContainer.TabIndex = 0;
//
// DuplicateLightButton
//
this.DuplicateLightButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.DuplicateLightButton.Location = new System.Drawing.Point(7, 526);
this.DuplicateLightButton.Name = "DuplicateLightButton";
this.DuplicateLightButton.Size = new System.Drawing.Size(169, 23);
this.DuplicateLightButton.TabIndex = 8;
this.DuplicateLightButton.Text = "Duplicate Light";
this.DuplicateLightButton.UseVisualStyleBackColor = true;
this.DuplicateLightButton.Click += new System.EventHandler(this.DuplicateLightButton_Click);
//
// DeleteLightButton
//
this.DeleteLightButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
@ -279,7 +294,7 @@
this.LightPropertiesPanel.Controls.Add(this.label31);
this.LightPropertiesPanel.Location = new System.Drawing.Point(4, 3);
this.LightPropertiesPanel.Name = "LightPropertiesPanel";
this.LightPropertiesPanel.Size = new System.Drawing.Size(538, 517);
this.LightPropertiesPanel.Size = new System.Drawing.Size(529, 517);
this.LightPropertiesPanel.TabIndex = 1;
//
// VolumetricFadeDistanceUpDown
@ -1127,7 +1142,8 @@
//
this.EditMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.EditNewLightMenu,
this.EditDeleteLightMenu});
this.EditDeleteLightMenu,
this.EditDuplicateLightMenu});
this.EditMenu.Name = "EditMenu";
this.EditMenu.Size = new System.Drawing.Size(39, 20);
this.EditMenu.Text = "Edit";
@ -1135,7 +1151,7 @@
// EditNewLightMenu
//
this.EditNewLightMenu.Name = "EditNewLightMenu";
this.EditNewLightMenu.Size = new System.Drawing.Size(180, 22);
this.EditNewLightMenu.Size = new System.Drawing.Size(154, 22);
this.EditNewLightMenu.Text = "New Light";
this.EditNewLightMenu.Click += new System.EventHandler(this.EditNewLightMenu_Click);
//
@ -1143,10 +1159,18 @@
//
this.EditDeleteLightMenu.Enabled = false;
this.EditDeleteLightMenu.Name = "EditDeleteLightMenu";
this.EditDeleteLightMenu.Size = new System.Drawing.Size(180, 22);
this.EditDeleteLightMenu.Size = new System.Drawing.Size(154, 22);
this.EditDeleteLightMenu.Text = "Delete Light";
this.EditDeleteLightMenu.Click += new System.EventHandler(this.EditDeleteLightMenu_Click);
//
// EditDuplicateLightMenu
//
this.EditDuplicateLightMenu.Enabled = false;
this.EditDuplicateLightMenu.Name = "EditDuplicateLightMenu";
this.EditDuplicateLightMenu.Size = new System.Drawing.Size(154, 22);
this.EditDuplicateLightMenu.Text = "Duplicate Light";
this.EditDuplicateLightMenu.Click += new System.EventHandler(this.EditDuplicateLightMenu_Click);
//
// OptionsMenu
//
this.OptionsMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
@ -1193,7 +1217,7 @@
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(733, 547);
this.ClientSize = new System.Drawing.Size(733, 585);
this.Controls.Add(this.MainSplitContainer);
this.Controls.Add(this.MainMenu);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
@ -1291,6 +1315,7 @@
private System.Windows.Forms.ToolStripMenuItem EditMenu;
private System.Windows.Forms.ToolStripMenuItem EditNewLightMenu;
private System.Windows.Forms.ToolStripMenuItem EditDeleteLightMenu;
private System.Windows.Forms.ToolStripMenuItem EditDuplicateLightMenu;
private System.Windows.Forms.ToolStripMenuItem OptionsMenu;
private System.Windows.Forms.ToolStripMenuItem OptionsShowOutlinesMenu;
private System.Windows.Forms.ToolStripMenuItem MoveMenuItem;
@ -1319,5 +1344,6 @@
private System.Windows.Forms.NumericUpDown FlashinessUpDown;
private System.Windows.Forms.Button DeleteLightButton;
private System.Windows.Forms.Button NewLightButton;
private System.Windows.Forms.Button DuplicateLightButton;
}
}

View File

@ -111,6 +111,7 @@ namespace CodeWalker.Forms
{
DeleteLightButton.Enabled = false;
EditDeleteLightMenu.Enabled = false;
EditDuplicateLightMenu.Enabled = false;
populatingui = true;
PositionTextBox.Text = "";
DirectionTextBox.Text = "";
@ -154,6 +155,7 @@ namespace CodeWalker.Forms
{
DeleteLightButton.Enabled = true;
EditDeleteLightMenu.Enabled = true;
EditDuplicateLightMenu.Enabled = true;
populatingui = true;
PositionTextBox.Text = FloatUtil.GetVector3String(light.Position);
DirectionTextBox.Text = FloatUtil.GetVector3String(light.Direction);
@ -222,6 +224,57 @@ namespace CodeWalker.Forms
light.TimeFlags = 14680191;
return light;
}
private LightAttributes DuplicateLightAttribute()
{
LightAttributes light = new LightAttributes();
light.Unknown_0h = selectedLight.Unknown_0h;
light.Unknown_4h = selectedLight.Unknown_4h;
light.Position = selectedLight.Position;
light.Unknown_14h = selectedLight.Unknown_14h;
light.ColorR = selectedLight.ColorR;
light.ColorG = selectedLight.ColorG;
light.ColorB = selectedLight.ColorB;
light.Flashiness = selectedLight.Flashiness;
light.Intensity = selectedLight.Intensity;
light.Flags = selectedLight.Flags;
light.BoneId = selectedLight.BoneId;
light.Type = selectedLight.Type;
light.GroupId = selectedLight.GroupId;
light.TimeFlags = selectedLight.TimeFlags;
light.Falloff = selectedLight.Falloff;
light.FalloffExponent = selectedLight.FalloffExponent;
light.CullingPlaneNormal = selectedLight.CullingPlaneNormal;
light.CullingPlaneOffset = selectedLight.CullingPlaneOffset;
light.ShadowBlur = selectedLight.ShadowBlur;
light.Unknown_45h = selectedLight.Unknown_45h;
light.Unknown_46h = selectedLight.Unknown_46h;
light.VolumeIntensity = selectedLight.VolumeIntensity;
light.VolumeSizeScale = selectedLight.VolumeSizeScale;
light.VolumeOuterColorR = selectedLight.VolumeOuterColorR;
light.VolumeOuterColorG = selectedLight.VolumeOuterColorG;
light.VolumeOuterColorB = selectedLight.VolumeOuterColorB;
light.LightHash = selectedLight.LightHash;
light.VolumeOuterIntensity = selectedLight.VolumeOuterIntensity;
light.CoronaSize = selectedLight.CoronaSize;
light.VolumeOuterExponent = selectedLight.VolumeOuterExponent;
light.LightFadeDistance = selectedLight.LightFadeDistance;
light.ShadowFadeDistance = selectedLight.ShadowFadeDistance;
light.SpecularFadeDistance = selectedLight.SpecularFadeDistance;
light.VolumetricFadeDistance = selectedLight.VolumetricFadeDistance;
light.ShadowNearClip = selectedLight.ShadowNearClip;
light.CoronaIntensity = selectedLight.CoronaIntensity;
light.CoronaZBias = selectedLight.CoronaZBias;
light.Direction = selectedLight.Direction;
light.Tangent = selectedLight.Tangent;
light.ConeInnerAngle = selectedLight.ConeInnerAngle;
light.ConeOuterAngle = selectedLight.ConeOuterAngle;
light.Extent = selectedLight.Extent;
light.ProjectedTextureHash = selectedLight.ProjectedTextureHash;
light.Unknown_A4h = selectedLight.Unknown_A4h;
return light;
}
private void SelectLight(LightAttributes light)
{
if (light == null)
@ -346,6 +399,50 @@ namespace CodeWalker.Forms
LoadModels(DrawableDict);
}
}
}
private void DuplicateLight()
{
if (selectedLight == null) return;
selectedLight = DuplicateLightAttribute();
if (Drawable != null)
{
if (Drawable.LightAttributes == null) Drawable.LightAttributes = new ResourceSimpleList64<LightAttributes>();
List<LightAttributes> lights = Drawable.LightAttributes.data_items?.ToList() ?? new List<LightAttributes>();
lights.Add(selectedLight);
Drawable.LightAttributes.data_items = lights.ToArray();
UpdateLightParams();
LoadModel(Drawable);
}
else if (FragDrawable != null)
{
if (FragDrawable.OwnerFragment.LightAttributes == null) FragDrawable.OwnerFragment.LightAttributes = new ResourceSimpleList64<LightAttributes>();
List<LightAttributes> lights = FragDrawable.OwnerFragment.LightAttributes.data_items?.ToList() ?? new List<LightAttributes>();
lights.Add(selectedLight);
FragDrawable.OwnerFragment.LightAttributes.data_items = lights.ToArray();
UpdateLightParams();
LoadModel(FragDrawable);
}
else
{
var n = LightsTreeView.SelectedNode;
if (n != null)
{
var dr = n.Tag as Drawable;
if (dr == null) { dr = n.Parent.Tag as Drawable; } //try parent node tag also
if (dr != null)
{
if (dr.LightAttributes == null) dr.LightAttributes = new ResourceSimpleList64<LightAttributes>();
List<LightAttributes> lights = dr.LightAttributes.data_items?.ToList() ?? new List<LightAttributes>();
lights.Add(selectedLight);
dr.LightAttributes.data_items = lights.ToArray();
UpdateLightParams();
LoadModels(DrawableDict);
}
}
}
SelectLightTreeNode(selectedLight);
}
private void UpdateFlagsCheckBoxes()
@ -933,6 +1030,11 @@ namespace CodeWalker.Forms
DeleteLight();
}
private void EditDuplicateLightMenu_Click(object sender, EventArgs e)
{
DuplicateLight();
}
private void OptionsShowOutlinesMenu_Click(object sender, EventArgs e)
{
OptionsShowOutlinesMenu.Checked = !OptionsShowOutlinesMenu.Checked;
@ -969,5 +1071,15 @@ namespace CodeWalker.Forms
{
DeleteLight();
}
private void DuplicateLightButton_Click(object sender, EventArgs e)
{
DuplicateLight();
}
private void MainSplitContainer_Panel2_Paint(object sender, PaintEventArgs e)
{
}
}
}