mirror of
https://git.do.srb2.org/STJr/UltimateZoneBuilder.git
synced 2025-02-21 03:11:40 +00:00
GZDoom Builder 1.09a:
Added drawing modes to Mode menu, so they are much easier to spot now. Warnings notify panel blinks much more noticeable when there are warnings. UDMF Controls plugin: 3D-floor surfaces can be edited now. Relative mode is now enabled by default. Scale control now works properly in relative mode. Angle control's angle indicator in now drawn properly when value is changed using numeric control.
This commit is contained in:
parent
46642200eb
commit
7c93fad714
28 changed files with 368 additions and 164 deletions
|
@ -806,6 +806,9 @@
|
|||
<None Include="Resources\GZDB2.ico" />
|
||||
<None Include="Resources\fog.png" />
|
||||
<None Include="Resources\fx.png" />
|
||||
<Content Include="Resources\DrawEllipseMode.png" />
|
||||
<Content Include="Resources\DrawLinesMode.png" />
|
||||
<Content Include="Resources\DrawRectMode.png" />
|
||||
<Content Include="Resources\Light.png" />
|
||||
<Content Include="Resources\Light_animate.png" />
|
||||
<Content Include="Resources\Model.png" />
|
||||
|
|
|
@ -210,6 +210,16 @@ namespace CodeImp.DoomBuilder.VisualModes
|
|||
boundingBox = BoundingBoxTools.CalculateBoundingPlane(bbs);
|
||||
}
|
||||
}
|
||||
|
||||
//mxd. Used to get proper sector from 3d-floors
|
||||
public virtual Sector GetControlSector() {
|
||||
return sector.Sector;
|
||||
}
|
||||
|
||||
//mxd. Used to get proper linedef from 3d-floors
|
||||
public virtual Linedef GetControlLinedef() {
|
||||
return sidedef.Line;
|
||||
}
|
||||
|
||||
// This compares for sorting by sector
|
||||
public int CompareTo(VisualGeometry other)
|
||||
|
@ -246,12 +256,14 @@ namespace CodeImp.DoomBuilder.VisualModes
|
|||
#endregion
|
||||
}
|
||||
|
||||
public enum VisualGeometryType:int{
|
||||
FLOOR = 0,
|
||||
CEILING = 1,
|
||||
WALL_UPPER = 2,
|
||||
WALL_MIDDLE = 3,
|
||||
WALL_BOTTOM = 4,
|
||||
UNKNOWN = 5,
|
||||
//mxd
|
||||
public enum VisualGeometryType{
|
||||
FLOOR,
|
||||
CEILING,
|
||||
WALL_UPPER,
|
||||
WALL_MIDDLE,
|
||||
WALL_MIDDLE_3D,
|
||||
WALL_BOTTOM,
|
||||
UNKNOWN,
|
||||
}
|
||||
}
|
||||
|
|
|
@ -73,7 +73,6 @@ namespace CodeImp.DoomBuilder.VisualModes
|
|||
//mxd
|
||||
private List<VisualThing> selectedVisualThings;
|
||||
private List<VisualSector> selectedVisualSectors;
|
||||
private List<VisualGeometry> selectedSurfaces;
|
||||
//used in "Play From Here" Action
|
||||
private Thing playerStart;
|
||||
private Vector3D playerStartPosition;
|
||||
|
@ -170,7 +169,6 @@ namespace CodeImp.DoomBuilder.VisualModes
|
|||
//mxd
|
||||
selectedVisualSectors = null;
|
||||
selectedVisualThings = null;
|
||||
selectedSurfaces = null;
|
||||
|
||||
// Done
|
||||
base.Dispose();
|
||||
|
@ -927,23 +925,21 @@ namespace CodeImp.DoomBuilder.VisualModes
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// mxd. This returns list of selected sectors based on surfaces selected in visual mode
|
||||
/// mxd. This returns list of surfaces selected in visual mode
|
||||
/// </summary>
|
||||
public List<VisualGeometry> GetSelectedSurfaces(bool refreshSelection) {
|
||||
if (refreshSelection || selectedSurfaces == null) {
|
||||
selectedSurfaces = new List<VisualGeometry>();
|
||||
foreach (KeyValuePair<Sector, VisualSector> group in allsectors) {
|
||||
foreach (VisualGeometry vg in group.Value.AllGeometry) {
|
||||
if (vg.Selected)
|
||||
selectedSurfaces.Add(vg);
|
||||
}
|
||||
public List<VisualGeometry> GetSelectedSurfaces() {
|
||||
List<VisualGeometry> selectedSurfaces = new List<VisualGeometry>();
|
||||
foreach (KeyValuePair<Sector, VisualSector> group in allsectors) {
|
||||
foreach (VisualGeometry vg in group.Value.AllGeometry) {
|
||||
if (vg.Selected)
|
||||
selectedSurfaces.Add(vg);
|
||||
}
|
||||
}
|
||||
|
||||
//if nothing is selected - try to get hilighted surface
|
||||
if (selectedSurfaces.Count == 0) {
|
||||
VisualGeometry vg = getHilightedSurface();
|
||||
if(vg != null) selectedSurfaces.Add(vg);
|
||||
}
|
||||
//if nothing is selected - try to get hilighted surface
|
||||
if (selectedSurfaces.Count == 0) {
|
||||
VisualGeometry vg = getHilightedSurface();
|
||||
if (vg != null) selectedSurfaces.Add(vg);
|
||||
}
|
||||
return selectedSurfaces;
|
||||
}
|
||||
|
|
11
Source/Core/Windows/MainForm.Designer.cs
generated
11
Source/Core/Windows/MainForm.Designer.cs
generated
|
@ -190,6 +190,7 @@ namespace CodeImp.DoomBuilder.Windows
|
|||
this.dockerspanel = new CodeImp.DoomBuilder.Controls.DockersControl();
|
||||
this.dockerscollapser = new System.Windows.Forms.Timer(this.components);
|
||||
this.warntimer = new System.Windows.Forms.Timer(this.components);
|
||||
this.separatorDrawodes = new System.Windows.Forms.ToolStripSeparator();
|
||||
toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
|
||||
toolStripSeparator9 = new System.Windows.Forms.ToolStripSeparator();
|
||||
toolStripSeparator12 = new System.Windows.Forms.ToolStripSeparator();
|
||||
|
@ -724,6 +725,8 @@ namespace CodeImp.DoomBuilder.Windows
|
|||
//
|
||||
// menumode
|
||||
//
|
||||
this.menumode.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.separatorDrawodes});
|
||||
this.menumode.Name = "menumode";
|
||||
this.menumode.Size = new System.Drawing.Size(50, 20);
|
||||
this.menumode.Text = "&Mode";
|
||||
|
@ -1317,7 +1320,7 @@ namespace CodeImp.DoomBuilder.Windows
|
|||
this.statuslabel.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
this.statuslabel.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;
|
||||
this.statuslabel.Name = "statuslabel";
|
||||
this.statuslabel.Size = new System.Drawing.Size(309, 18);
|
||||
this.statuslabel.Size = new System.Drawing.Size(340, 18);
|
||||
this.statuslabel.Spring = true;
|
||||
this.statuslabel.Text = "Initializing user interface...";
|
||||
this.statuslabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
|
@ -1743,6 +1746,11 @@ namespace CodeImp.DoomBuilder.Windows
|
|||
this.warntimer.Interval = 500;
|
||||
this.warntimer.Tick += new System.EventHandler(this.warntimer_Tick);
|
||||
//
|
||||
// separatorDrawodes
|
||||
//
|
||||
this.separatorDrawodes.Name = "separatorDrawodes";
|
||||
this.separatorDrawodes.Size = new System.Drawing.Size(149, 6);
|
||||
//
|
||||
// MainForm
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
|
||||
|
@ -1941,5 +1949,6 @@ namespace CodeImp.DoomBuilder.Windows
|
|||
private System.Windows.Forms.ToolStripMenuItem itemReloadModedef;
|
||||
private System.Windows.Forms.ToolStripMenuItem itemReloadGldefs;
|
||||
private System.Windows.Forms.ToolStripMenuItem itemReloadMapinfo;
|
||||
private System.Windows.Forms.ToolStripSeparator separatorDrawodes;
|
||||
}
|
||||
}
|
|
@ -1838,6 +1838,9 @@ namespace CodeImp.DoomBuilder.Windows
|
|||
case MenuSection.ViewViews: menuview.DropDownItems.Insert(menuview.DropDownItems.IndexOf(seperatorviewviews), menu); break;
|
||||
case MenuSection.ViewZoom: menuview.DropDownItems.Insert(menuview.DropDownItems.IndexOf(seperatorviewzoom), menu); break;
|
||||
case MenuSection.ViewScriptEdit: menuview.DropDownItems.Add(menu); break;
|
||||
//mxd
|
||||
case MenuSection.ModeDrawModes: menumode.DropDownItems.Insert(menumode.DropDownItems.IndexOf(separatorDrawodes) + 1, menu); break;
|
||||
|
||||
case MenuSection.PrefabsInsert: menuprefabs.DropDownItems.Insert(menuprefabs.DropDownItems.IndexOf(seperatorprefabsinsert), menu); break;
|
||||
case MenuSection.PrefabsCreate: menuprefabs.DropDownItems.Add(menu); break;
|
||||
case MenuSection.ToolsResources: menutools.DropDownItems.Insert(menutools.DropDownItems.IndexOf(seperatortoolsresources), menu); break;
|
||||
|
@ -2688,6 +2691,7 @@ namespace CodeImp.DoomBuilder.Windows
|
|||
if (warnsLabel.Font.Bold) {
|
||||
warnsLabel.Font = new Font(warnsLabel.Font, FontStyle.Regular);
|
||||
warnsLabel.Image = global::CodeImp.DoomBuilder.Properties.Resources.WarningOff;
|
||||
warnsLabel.BackColor = SystemColors.Control;
|
||||
}
|
||||
warntimer.Stop();
|
||||
warnStatus = false;
|
||||
|
@ -2709,8 +2713,10 @@ namespace CodeImp.DoomBuilder.Windows
|
|||
private void warntimer_Tick(object sender, EventArgs e) {
|
||||
if (warnStatus) {
|
||||
warnsLabel.Image = global::CodeImp.DoomBuilder.Properties.Resources.WarningOff;
|
||||
warnsLabel.BackColor = Color.Red;
|
||||
} else {
|
||||
warnsLabel.Image = global::CodeImp.DoomBuilder.Properties.Resources.Warning;
|
||||
warnsLabel.BackColor = SystemColors.Control;
|
||||
}
|
||||
warnStatus = !warnStatus;
|
||||
}
|
||||
|
|
|
@ -53,6 +53,7 @@ namespace CodeImp.DoomBuilder.Windows
|
|||
ViewViews,
|
||||
ViewZoom,
|
||||
ViewScriptEdit,
|
||||
ModeDrawModes, //mxd
|
||||
PrefabsInsert,
|
||||
PrefabsCreate,
|
||||
ToolsResources,
|
||||
|
|
|
@ -336,6 +336,15 @@
|
|||
<ItemGroup>
|
||||
<EmbeddedResource Include="Resources\SnapVerts.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="Resources\DrawEllipseMode.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="Resources\DrawLinesMode.png" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="Resources\DrawRectMode.png" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
|
|
|
@ -25,7 +25,7 @@ namespace CodeImp.DoomBuilder.BuilderModes.ClassicModes {
|
|||
undoName = "Ellipse draw";
|
||||
shapeName = "ellipse";
|
||||
|
||||
subdivisions = minSubdivisions;
|
||||
subdivisions = minSubdivisions + 2;
|
||||
}
|
||||
|
||||
override protected Vector2D[] getShape(Vector2D pStart, Vector2D pEnd) {
|
||||
|
|
|
@ -77,6 +77,9 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
|||
|
||||
//mxd
|
||||
private ToolStripMenuItem snapModeMenuItem;
|
||||
private ToolStripMenuItem drawLinesModeMenuItem;
|
||||
private ToolStripMenuItem drawRectModeMenuItem;
|
||||
private ToolStripMenuItem drawEllipseModeMenuItem;
|
||||
|
||||
// Settings
|
||||
private int showvisualthings; // 0 = none, 1 = sprite only, 2 = sprite caged
|
||||
|
@ -189,6 +192,31 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
|||
snapModeMenuItem.Image = CodeImp.DoomBuilder.BuilderModes.Properties.Resources.SnapVerts;
|
||||
snapModeMenuItem.Enabled = false;
|
||||
General.Interface.AddMenu(snapModeMenuItem, MenuSection.EditGeometry);
|
||||
|
||||
//mxd. add draw modes buttons
|
||||
//draw ellipse
|
||||
drawEllipseModeMenuItem = new ToolStripMenuItem("Draw Ellipse");
|
||||
drawEllipseModeMenuItem.Tag = "drawellipsemode";
|
||||
drawEllipseModeMenuItem.Click += new EventHandler(InvokeTaggedAction);
|
||||
drawEllipseModeMenuItem.Image = CodeImp.DoomBuilder.BuilderModes.Properties.Resources.DrawEllipseMode;
|
||||
drawEllipseModeMenuItem.Enabled = false;
|
||||
General.Interface.AddMenu(drawEllipseModeMenuItem, MenuSection.ModeDrawModes);
|
||||
|
||||
//draw rectangle
|
||||
drawRectModeMenuItem = new ToolStripMenuItem("Draw Rectangle");
|
||||
drawRectModeMenuItem.Tag = "drawrectanglemode";
|
||||
drawRectModeMenuItem.Click += new EventHandler(InvokeTaggedAction);
|
||||
drawRectModeMenuItem.Image = CodeImp.DoomBuilder.BuilderModes.Properties.Resources.DrawRectMode;
|
||||
drawRectModeMenuItem.Enabled = false;
|
||||
General.Interface.AddMenu(drawRectModeMenuItem, MenuSection.ModeDrawModes);
|
||||
|
||||
//draw lines
|
||||
drawLinesModeMenuItem = new ToolStripMenuItem("Draw Lines");
|
||||
drawLinesModeMenuItem.Tag = "drawlinesmode";
|
||||
drawLinesModeMenuItem.Click += new EventHandler(InvokeTaggedAction);
|
||||
drawLinesModeMenuItem.Image = CodeImp.DoomBuilder.BuilderModes.Properties.Resources.DrawLinesMode;
|
||||
drawLinesModeMenuItem.Enabled = false;
|
||||
General.Interface.AddMenu(drawLinesModeMenuItem, MenuSection.ModeDrawModes);
|
||||
}
|
||||
|
||||
// Disposer
|
||||
|
@ -199,6 +227,13 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
|||
{
|
||||
// Clean up
|
||||
General.Interface.RemoveDocker(undoredodocker);
|
||||
|
||||
//mxd
|
||||
General.Interface.RemoveMenu(snapModeMenuItem);
|
||||
General.Interface.RemoveMenu(drawLinesModeMenuItem);
|
||||
General.Interface.RemoveMenu(drawRectModeMenuItem);
|
||||
General.Interface.RemoveMenu(drawEllipseModeMenuItem);
|
||||
|
||||
undoredopanel.Dispose();
|
||||
menusform.Unregister();
|
||||
menusform.Dispose();
|
||||
|
@ -321,6 +356,9 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
|||
|
||||
//mxd
|
||||
snapModeMenuItem.Enabled = true;
|
||||
drawLinesModeMenuItem.Enabled = true;
|
||||
drawRectModeMenuItem.Enabled = true;
|
||||
drawEllipseModeMenuItem.Enabled = true;
|
||||
}
|
||||
|
||||
// Map opened
|
||||
|
@ -332,6 +370,9 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
|||
|
||||
//mxd
|
||||
snapModeMenuItem.Enabled = true;
|
||||
drawLinesModeMenuItem.Enabled = true;
|
||||
drawRectModeMenuItem.Enabled = true;
|
||||
drawEllipseModeMenuItem.Enabled = true;
|
||||
}
|
||||
|
||||
// Map closed
|
||||
|
@ -342,6 +383,9 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
|||
|
||||
//mxd
|
||||
snapModeMenuItem.Enabled = false;
|
||||
drawLinesModeMenuItem.Enabled = false;
|
||||
drawRectModeMenuItem.Enabled = false;
|
||||
drawEllipseModeMenuItem.Enabled = false;
|
||||
}
|
||||
|
||||
// Redo performed
|
||||
|
|
|
@ -102,6 +102,27 @@ namespace CodeImp.DoomBuilder.BuilderModes.Properties {
|
|||
}
|
||||
}
|
||||
|
||||
internal static System.Drawing.Bitmap DrawEllipseMode {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("DrawEllipseMode", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
internal static System.Drawing.Bitmap DrawLinesMode {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("DrawLinesMode", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
internal static System.Drawing.Bitmap DrawRectMode {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("DrawRectMode", resourceCulture);
|
||||
return ((System.Drawing.Bitmap)(obj));
|
||||
}
|
||||
}
|
||||
|
||||
internal static System.Drawing.Bitmap FlipSelectionH {
|
||||
get {
|
||||
object obj = ResourceManager.GetObject("FlipSelectionH", resourceCulture);
|
||||
|
|
|
@ -166,4 +166,13 @@
|
|||
<data name="SnapVerts" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\SnapVerts.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="DrawEllipseMode" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\DrawEllipseMode.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="DrawLinesMode" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\DrawLinesMode.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
<data name="DrawRectMode" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
||||
<value>..\Resources\DrawRectMode.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
||||
</data>
|
||||
</root>
|
BIN
Source/Plugins/BuilderModes/Resources/DrawEllipseMode.png
Normal file
BIN
Source/Plugins/BuilderModes/Resources/DrawEllipseMode.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 460 B |
BIN
Source/Plugins/BuilderModes/Resources/DrawLinesMode.png
Normal file
BIN
Source/Plugins/BuilderModes/Resources/DrawLinesMode.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 449 B |
BIN
Source/Plugins/BuilderModes/Resources/DrawRectMode.png
Normal file
BIN
Source/Plugins/BuilderModes/Resources/DrawRectMode.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 324 B |
|
@ -92,6 +92,7 @@
|
|||
this.ShowInTaskbar = false;
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
|
||||
this.Text = "LightColorPicker";
|
||||
this.HelpRequested += new System.Windows.Forms.HelpEventHandler(this.LightColorPicker_HelpRequested);
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
|
|
|
@ -350,6 +350,11 @@ namespace CodeImp.DoomBuilder.ColorPicker.Windows {
|
|||
private void onSliderValueChanged(object sender, ColorPickerSliderEventArgs e) {
|
||||
updateLightPropsFromSliders();
|
||||
}
|
||||
|
||||
private void LightColorPicker_HelpRequested(object sender, HelpEventArgs hlpevent) {
|
||||
General.ShowHelp("gz_plug_colorpicker.html");
|
||||
hlpevent.Handled = true;
|
||||
}
|
||||
}
|
||||
|
||||
struct LightProps {
|
||||
|
|
|
@ -88,6 +88,7 @@
|
|||
this.Opacity = 0;
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
|
||||
this.Text = "SectorColorPicker";
|
||||
this.HelpRequested += new System.Windows.Forms.HelpEventHandler(this.SectorColorPicker_HelpRequested);
|
||||
this.groupBox1.ResumeLayout(false);
|
||||
this.groupBox1.PerformLayout();
|
||||
this.ResumeLayout(false);
|
||||
|
|
|
@ -163,5 +163,10 @@ namespace CodeImp.DoomBuilder.ColorPicker.Windows
|
|||
colorPickerControl1.SetCurrentColor(Color.FromArgb((int)selection[0].Fields[currentColorTag].Value));
|
||||
}
|
||||
}
|
||||
|
||||
private void SectorColorPicker_HelpRequested(object sender, HelpEventArgs hlpevent) {
|
||||
General.ShowHelp("gz_plug_colorpicker.html");
|
||||
hlpevent.Handled = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -137,6 +137,11 @@ namespace CodeImp.DoomBuilder.GZDoomEditing
|
|||
|
||||
mode.ShowTargetInfo();
|
||||
}
|
||||
|
||||
//mxd
|
||||
public override Sector GetControlSector() {
|
||||
return level.sector;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
|
|
@ -62,7 +62,7 @@ namespace CodeImp.DoomBuilder.GZDoomEditing
|
|||
public VisualMiddle3D(BaseVisualMode mode, VisualSector vs, Sidedef s) : base(mode, vs, s)
|
||||
{
|
||||
//mxd
|
||||
geoType = VisualGeometryType.WALL_MIDDLE;
|
||||
geoType = VisualGeometryType.WALL_MIDDLE_3D;
|
||||
|
||||
// We have no destructor
|
||||
GC.SuppressFinalize(this);
|
||||
|
@ -318,6 +318,11 @@ namespace CodeImp.DoomBuilder.GZDoomEditing
|
|||
float oldy = Sidedef.Fields.GetValue("offsety_mid", 0.0f);
|
||||
return new Point((int)oldx, (int)oldy);
|
||||
}
|
||||
|
||||
//mxd
|
||||
public override Linedef GetControlLinedef() {
|
||||
return extrafloor.Linedef;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
|
|
@ -70,8 +70,11 @@ namespace CodeImp.DoomBuilder.UDMFControls
|
|||
return;
|
||||
}
|
||||
|
||||
List<VisualGeometry> selectedSurfaces;
|
||||
|
||||
if (General.Editing.Mode.GetType().Name == "BaseVisualMode") {
|
||||
if (((VisualMode)General.Editing.Mode).GetSelectedSurfaces(true).Count == 0) {
|
||||
selectedSurfaces = ((VisualMode)General.Editing.Mode).GetSelectedSurfaces();
|
||||
if (selectedSurfaces.Count == 0) {
|
||||
General.Interface.DisplayStatus(StatusType.Warning, "Select some surfaces first!");
|
||||
return;
|
||||
}
|
||||
|
@ -89,6 +92,7 @@ namespace CodeImp.DoomBuilder.UDMFControls
|
|||
}
|
||||
form.Location = formLocation;
|
||||
form.FormClosed += new FormClosedEventHandler(form_FormClosed);
|
||||
form.Setup(selectedSurfaces);
|
||||
form.ShowDialog(Form.ActiveForm);
|
||||
}
|
||||
|
||||
|
|
|
@ -23,7 +23,7 @@ namespace CodeImp.DoomBuilder.UDMFControls
|
|||
//events
|
||||
public event EventHandler OnAngleChanged;
|
||||
|
||||
private float angle;
|
||||
private float angle; //it's actually 359 minus angle, displayed in control
|
||||
public float Value {
|
||||
get {
|
||||
return (float)nudAngle.Value;
|
||||
|
@ -94,7 +94,7 @@ namespace CodeImp.DoomBuilder.UDMFControls
|
|||
private void nudAngle_ValueChanged(object sender, EventArgs e) {
|
||||
if (!blockEvents) {
|
||||
prevAngle = angle;
|
||||
angle = (int)((NumericUpDown)sender).Value;
|
||||
angle = General.ClampAngle(359 - (int)((NumericUpDown)sender).Value);
|
||||
update();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -47,11 +47,6 @@
|
|||
// nudAngle
|
||||
//
|
||||
this.nudAngle.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204)));
|
||||
this.nudAngle.Increment = new decimal(new int[] {
|
||||
15,
|
||||
0,
|
||||
0,
|
||||
0});
|
||||
this.nudAngle.Location = new System.Drawing.Point(45, 102);
|
||||
this.nudAngle.Maximum = new decimal(new int[] {
|
||||
9000,
|
||||
|
|
|
@ -20,7 +20,9 @@ namespace CodeImp.DoomBuilder.UDMFControls
|
|||
}
|
||||
set {
|
||||
blockEvents = true;
|
||||
numericUpDown1.Value = (decimal)General.Clamp(value, (float)numericUpDown1.Minimum, (float)numericUpDown1.Maximum);
|
||||
float val = General.Clamp(value, (float)numericUpDown1.Minimum, (float)numericUpDown1.Maximum);
|
||||
previousValue = (int)(val * 10f);
|
||||
numericUpDown1.Value = (decimal)val;
|
||||
blockEvents = false;
|
||||
}
|
||||
}
|
||||
|
@ -60,8 +62,8 @@ namespace CodeImp.DoomBuilder.UDMFControls
|
|||
numericUpDown1.Value = (decimal)General.Clamp((float)numericUpDown1.Value, min, max);
|
||||
|
||||
if (doubledLimits) {
|
||||
numericUpDown1.Minimum = (decimal)(min * 2);
|
||||
numericUpDown1.Maximum = (decimal)(max * 2);
|
||||
numericUpDown1.Minimum = (decimal)(min * 10);
|
||||
numericUpDown1.Maximum = (decimal)(max * 10);
|
||||
} else {
|
||||
numericUpDown1.Minimum = (decimal)min;
|
||||
numericUpDown1.Maximum = (decimal)max;
|
||||
|
|
|
@ -23,7 +23,9 @@ namespace CodeImp.DoomBuilder.UDMFControls
|
|||
set
|
||||
{
|
||||
blockEvents = true;
|
||||
numericUpDown1.Value = General.Clamp(value, (int)numericUpDown1.Minimum, (int)numericUpDown1.Maximum);
|
||||
|
||||
previousValue = General.Clamp(value, (int)numericUpDown1.Minimum, (int)numericUpDown1.Maximum);
|
||||
numericUpDown1.Value = previousValue;
|
||||
blockEvents = false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,22 +11,29 @@ namespace CodeImp.DoomBuilder.UDMFControls
|
|||
{
|
||||
public partial class ScaleControl : UserControl
|
||||
{
|
||||
private bool linkSliders;
|
||||
private static bool linkSliders;
|
||||
public event EventHandler OnValueChanged;
|
||||
|
||||
public Vector2D Value {
|
||||
set {
|
||||
floatSlider1.Value = value.x;
|
||||
floatSlider2.Value = value.y;
|
||||
prevValues = value;
|
||||
delta = new Vector2D();
|
||||
}
|
||||
get {
|
||||
return new Vector2D(floatSlider1.Value, floatSlider2.Value);
|
||||
}
|
||||
}
|
||||
|
||||
public Vector2D Delta { get { return new Vector2D(floatSlider1.Delta, floatSlider2.Delta); } }
|
||||
|
||||
private Vector2D prevValues;
|
||||
private Vector2D delta;
|
||||
public Vector2D Delta { get { return delta; } }
|
||||
|
||||
public ScaleControl() {
|
||||
prevValues = new Vector2D();
|
||||
delta = new Vector2D();
|
||||
|
||||
InitializeComponent();
|
||||
|
||||
setLinkButtonIcon(linkSliders);
|
||||
|
@ -36,7 +43,7 @@ namespace CodeImp.DoomBuilder.UDMFControls
|
|||
button1.Click += new EventHandler(button1_Click);
|
||||
}
|
||||
|
||||
private void setLinkButtonIcon(bool link){
|
||||
private void setLinkButtonIcon(bool link) {
|
||||
button1.BackgroundImage = link ? Properties.Resources.Chain : Properties.Resources.Chain2;
|
||||
}
|
||||
|
||||
|
@ -45,15 +52,33 @@ namespace CodeImp.DoomBuilder.UDMFControls
|
|||
floatSlider2.SetLimits(min, max, true);
|
||||
}
|
||||
|
||||
//events
|
||||
//events
|
||||
private void floatSlider1_OnValueChanged(object sender, EventArgs e) {
|
||||
if (linkSliders) floatSlider2.Value = ((FloatSlider)sender).Value;
|
||||
float val = ((FloatSlider)sender).Value;
|
||||
|
||||
if (linkSliders) {
|
||||
delta.y = (float)Math.Round(val - floatSlider2.Value, 1);
|
||||
prevValues.y = floatSlider2.Value;
|
||||
floatSlider2.Value = val;
|
||||
}
|
||||
|
||||
if (OnValueChanged != null) OnValueChanged(this, EventArgs.Empty);
|
||||
delta.x = (float)Math.Round(val - prevValues.x, 1);
|
||||
prevValues.x = val;
|
||||
}
|
||||
|
||||
private void floatSlider2_OnValueChanged(object sender, EventArgs e) {
|
||||
if (linkSliders) floatSlider1.Value = ((FloatSlider)sender).Value;
|
||||
float val = ((FloatSlider)sender).Value;
|
||||
|
||||
if (linkSliders) {
|
||||
delta.x = (float)Math.Round(val - floatSlider1.Value, 1);
|
||||
prevValues.x = floatSlider1.Value;
|
||||
floatSlider1.Value = val;
|
||||
}
|
||||
|
||||
if (OnValueChanged != null) OnValueChanged(this, EventArgs.Empty);
|
||||
delta.y = (float)Math.Round(val - prevValues.y, 1);
|
||||
prevValues.y = val;
|
||||
}
|
||||
|
||||
private void button1_Click(object sender, EventArgs e) {
|
||||
|
|
|
@ -473,8 +473,11 @@
|
|||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
|
||||
this.Name = "UDMFControlsForm";
|
||||
this.Opacity = 0;
|
||||
this.ShowIcon = false;
|
||||
this.ShowInTaskbar = false;
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
|
||||
this.Text = "UDMF Controls";
|
||||
this.HelpRequested += new System.Windows.Forms.HelpEventHandler(this.UDMFControlsForm_HelpRequested);
|
||||
this.gbRotation.ResumeLayout(false);
|
||||
this.gbPosition.ResumeLayout(false);
|
||||
this.gbScale.ResumeLayout(false);
|
||||
|
|
|
@ -16,24 +16,24 @@ using CodeImp.DoomBuilder.Types;
|
|||
namespace CodeImp.DoomBuilder.UDMFControls
|
||||
{
|
||||
public partial class UDMFControlsForm : DelayedForm {
|
||||
private List<VisualGeometry> floors;
|
||||
private List<VisualGeometry> ceilings;
|
||||
private List<SurfaceProperties> floors;
|
||||
private List<SurfaceProperties> ceilings;
|
||||
|
||||
private List<VisualGeometry> wallsTop;
|
||||
private List<VisualGeometry> wallsMid;
|
||||
private List<VisualGeometry> wallsBottom;
|
||||
private List<SurfaceProperties> wallsTop;
|
||||
private List<SurfaceProperties> wallsMid;
|
||||
private List<SurfaceProperties> wallsBottom;
|
||||
|
||||
private List<List<VisualGeometry>> walls;
|
||||
private List<List<VisualGeometry>> ceilingsAndFloors;
|
||||
private List<List<SurfaceProperties>> walls;
|
||||
private List<List<SurfaceProperties>> ceilingsAndFloors;
|
||||
|
||||
private List<VisualSector> updateList; //list of sectors to update
|
||||
private List<SurfaceProperties> updateList; //list of sectors to update
|
||||
|
||||
private CheckBox[] wallFlags;
|
||||
private CheckBox[] sectorFlags;
|
||||
|
||||
private List<string> renderStyles;
|
||||
|
||||
private static bool relativeMode;
|
||||
private static bool relativeMode = true;
|
||||
|
||||
public UDMFControlsForm() {
|
||||
//capture keys
|
||||
|
@ -43,16 +43,16 @@ namespace CodeImp.DoomBuilder.UDMFControls
|
|||
InitializeComponent();
|
||||
|
||||
//create collections
|
||||
floors = new List<VisualGeometry>();
|
||||
ceilings = new List<VisualGeometry>();
|
||||
wallsTop = new List<VisualGeometry>();
|
||||
wallsMid = new List<VisualGeometry>();
|
||||
wallsBottom = new List<VisualGeometry>();
|
||||
floors = new List<SurfaceProperties>();
|
||||
ceilings = new List<SurfaceProperties>();
|
||||
wallsTop = new List<SurfaceProperties>();
|
||||
wallsMid = new List<SurfaceProperties>();
|
||||
wallsBottom = new List<SurfaceProperties>();
|
||||
|
||||
walls = new List<List<VisualGeometry>>() { wallsTop, wallsMid, wallsBottom };
|
||||
ceilingsAndFloors = new List<List<VisualGeometry>>() { ceilings, floors };
|
||||
|
||||
updateList = new List<VisualSector>();
|
||||
walls = new List<List<SurfaceProperties>>() { wallsTop, wallsMid, wallsBottom };
|
||||
ceilingsAndFloors = new List<List<SurfaceProperties>>() { ceilings, floors };
|
||||
|
||||
updateList = new List<SurfaceProperties>();
|
||||
|
||||
wallFlags = new CheckBox[] { cbnodecals, cbnofakecontrast, cbclipmidtex, cbsmoothlighting };
|
||||
sectorFlags = new CheckBox[] { cbsilent, cbnofallingdamage, cbdropactors, cbnorespawn };
|
||||
|
@ -63,17 +63,10 @@ namespace CodeImp.DoomBuilder.UDMFControls
|
|||
KeyUp += new KeyEventHandler(UDMFControlsForm_KeyUp);
|
||||
|
||||
cbRelativeMode.Checked = relativeMode;
|
||||
|
||||
setup();
|
||||
}
|
||||
|
||||
//we should be in Visual mode and should have some surfaces selected at this point
|
||||
private void setup() {
|
||||
VisualMode vm = (VisualMode)General.Editing.Mode;
|
||||
|
||||
//should contain something, otherwise we wouldn't be here
|
||||
List<VisualGeometry> surfaces = vm.GetSelectedSurfaces(false);
|
||||
|
||||
public void Setup(List<VisualGeometry> surfaces) {
|
||||
//create undo
|
||||
string rest = surfaces.Count + " surface" + (surfaces.Count > 1 ? "s" : "");
|
||||
General.Map.UndoRedo.CreateUndo("Edit texture properties of " + rest);
|
||||
|
@ -83,58 +76,57 @@ namespace CodeImp.DoomBuilder.UDMFControls
|
|||
List<UniversalFieldInfo> defaultLinedefFields = General.Map.Config.LinedefFields;
|
||||
List<UniversalFieldInfo> defaultSectorFields = General.Map.Config.SectorFields;
|
||||
|
||||
VisualGeometry firstWall = null;
|
||||
VisualGeometry firstFloor = null; //or ceiling!
|
||||
SurfaceProperties firstWall = null;
|
||||
SurfaceProperties firstFloor = null; //or ceiling!
|
||||
|
||||
List<int> sectorIndeces = new List<int>();
|
||||
List<int> wall3DIndeces = new List<int>();
|
||||
SurfaceProperties sp;
|
||||
int walls3dCount = 0;
|
||||
|
||||
//sort things
|
||||
foreach (VisualGeometry vg in surfaces) {
|
||||
if (sectorIndeces.IndexOf(vg.Sector.Sector.FixedIndex) == -1) {
|
||||
updateList.Add(vg.Sector);
|
||||
sectorIndeces.Add(vg.Sector.Sector.FixedIndex);
|
||||
}
|
||||
|
||||
sp = new SurfaceProperties(vg);
|
||||
updateList.Add(sp);
|
||||
|
||||
switch (vg.GeometryType) {
|
||||
case VisualGeometryType.CEILING:
|
||||
if (firstFloor == null) firstFloor = vg;
|
||||
ceilings.Add(vg);
|
||||
vg.Sector.Sector.Fields.BeforeFieldsChange();
|
||||
setDefaultUniversalProperties(vg.Sector.Sector.Fields, defaultSectorFields);
|
||||
if (firstFloor == null) firstFloor = sp;
|
||||
ceilings.Add(sp);
|
||||
setDefaultUniversalProperties(sp.Sector.Fields, defaultSectorFields);
|
||||
break;
|
||||
|
||||
case VisualGeometryType.FLOOR:
|
||||
if (firstFloor == null) firstFloor = vg;
|
||||
floors.Add(vg);
|
||||
vg.Sector.Sector.Fields.BeforeFieldsChange();
|
||||
setDefaultUniversalProperties(vg.Sector.Sector.Fields, defaultSectorFields);
|
||||
if (firstFloor == null) firstFloor = sp;
|
||||
floors.Add(sp);
|
||||
setDefaultUniversalProperties(sp.Sector.Fields, defaultSectorFields);
|
||||
break;
|
||||
|
||||
case VisualGeometryType.WALL_BOTTOM:
|
||||
if (firstWall == null) firstWall = vg;
|
||||
wallsBottom.Add(vg);
|
||||
vg.Sidedef.Fields.BeforeFieldsChange();
|
||||
vg.Sidedef.Line.Fields.BeforeFieldsChange();
|
||||
setDefaultUniversalProperties(vg.Sidedef.Fields, defaultSidedefFields);
|
||||
setDefaultUniversalProperties(vg.Sidedef.Line.Fields, defaultLinedefFields);
|
||||
if (firstWall == null) firstWall = sp;
|
||||
wallsBottom.Add(sp);
|
||||
setDefaultUniversalProperties(sp.Sidedef.Fields, defaultSidedefFields);
|
||||
setDefaultUniversalProperties(sp.Linedef.Fields, defaultLinedefFields);
|
||||
break;
|
||||
|
||||
case VisualGeometryType.WALL_MIDDLE_3D: //all 3D-walls in a sector are linked to the same sidedef of control sector, so if many are selected, we need only one.
|
||||
walls3dCount++;
|
||||
if (wall3DIndeces.IndexOf(vg.Sector.Sector.FixedIndex) != -1)
|
||||
break;
|
||||
wall3DIndeces.Add(vg.Sector.Sector.FixedIndex);
|
||||
goto case VisualGeometryType.WALL_MIDDLE;
|
||||
|
||||
case VisualGeometryType.WALL_MIDDLE:
|
||||
if (firstWall == null) firstWall = vg;
|
||||
wallsMid.Add(vg);
|
||||
vg.Sidedef.Fields.BeforeFieldsChange();
|
||||
vg.Sidedef.Line.Fields.BeforeFieldsChange();
|
||||
setDefaultUniversalProperties(vg.Sidedef.Fields, defaultSidedefFields);
|
||||
setDefaultUniversalProperties(vg.Sidedef.Line.Fields, defaultLinedefFields);
|
||||
if (firstWall == null) firstWall = sp;
|
||||
wallsMid.Add(sp);
|
||||
setDefaultUniversalProperties(sp.Sidedef.Fields, defaultSidedefFields);
|
||||
setDefaultUniversalProperties(sp.Linedef.Fields, defaultLinedefFields);
|
||||
break;
|
||||
|
||||
case VisualGeometryType.WALL_UPPER:
|
||||
if (firstWall == null) firstWall = vg;
|
||||
wallsTop.Add(vg);
|
||||
vg.Sidedef.Fields.BeforeFieldsChange();
|
||||
vg.Sidedef.Line.Fields.BeforeFieldsChange();
|
||||
setDefaultUniversalProperties(vg.Sidedef.Fields, defaultSidedefFields);
|
||||
setDefaultUniversalProperties(vg.Sidedef.Line.Fields, defaultLinedefFields);
|
||||
if (firstWall == null) firstWall = sp;
|
||||
wallsTop.Add(sp);
|
||||
setDefaultUniversalProperties(sp.Sidedef.Fields, defaultSidedefFields);
|
||||
setDefaultUniversalProperties(sp.Linedef.Fields, defaultLinedefFields);
|
||||
break;
|
||||
|
||||
default: //dbg
|
||||
|
@ -154,24 +146,24 @@ namespace CodeImp.DoomBuilder.UDMFControls
|
|||
//set initial values to controls
|
||||
if (firstFloor != null) {
|
||||
//get values
|
||||
float scaleX = (float)firstFloor.Sector.Sector.Fields[KeyNames.GetScaleX(firstFloor.GeometryType)].Value;
|
||||
float scaleY = (float)firstFloor.Sector.Sector.Fields[KeyNames.GetScaleY(firstFloor.GeometryType)].Value;
|
||||
float translateX = (float)firstFloor.Sector.Sector.Fields[KeyNames.GetTranslationX(firstFloor.GeometryType)].Value;
|
||||
float translateY = (float)firstFloor.Sector.Sector.Fields[KeyNames.GetTranslationY(firstFloor.GeometryType)].Value;
|
||||
float scaleX = (float)firstFloor.Sector.Fields[KeyNames.GetScaleX(firstFloor.GeometryType)].Value;
|
||||
float scaleY = (float)firstFloor.Sector.Fields[KeyNames.GetScaleY(firstFloor.GeometryType)].Value;
|
||||
float translateX = (float)firstFloor.Sector.Fields[KeyNames.GetTranslationX(firstFloor.GeometryType)].Value;
|
||||
float translateY = (float)firstFloor.Sector.Fields[KeyNames.GetTranslationY(firstFloor.GeometryType)].Value;
|
||||
|
||||
//set shared and sector flags
|
||||
cblightabsolute.Checked = (bool)firstFloor.Sector.Sector.Fields[KeyNames.GetLightAbsolute(firstFloor.GeometryType)].Value;
|
||||
cblightabsolute.Checked = (bool)firstFloor.Sector.Fields[KeyNames.GetLightAbsolute(firstFloor.GeometryType)].Value;
|
||||
|
||||
foreach(CheckBox cb in sectorFlags)
|
||||
cb.Checked = (bool)firstFloor.Sector.Sector.Fields[(string)cb.Tag].Value;
|
||||
cb.Checked = (bool)firstFloor.Sector.Fields[(string)cb.Tag].Value;
|
||||
|
||||
//set values to controls
|
||||
scaleControl.Value = new Vector2D(scaleX, scaleY);
|
||||
positionControl1.Value = new Vector2D(translateX, translateY);
|
||||
angleControl1.Value = (int)((float)firstFloor.Sector.Sector.Fields[KeyNames.GetRotation(firstFloor.GeometryType)].Value);
|
||||
sliderBrightness.Value = (int)firstFloor.Sector.Sector.Fields[KeyNames.GetLight(firstFloor.GeometryType)].Value;
|
||||
nudGravity.Value = (decimal)((float)firstFloor.Sector.Sector.Fields[(string)nudGravity.Tag].Value);
|
||||
sliderDesaturation.Value = (float)firstFloor.Sector.Sector.Fields[(string)sliderDesaturation.Tag].Value;
|
||||
angleControl1.Value = (int)((float)firstFloor.Sector.Fields[KeyNames.GetRotation(firstFloor.GeometryType)].Value);
|
||||
sliderBrightness.Value = (int)firstFloor.Sector.Fields[KeyNames.GetLight(firstFloor.GeometryType)].Value;
|
||||
nudGravity.Value = (decimal)((float)firstFloor.Sector.Fields[(string)nudGravity.Tag].Value);
|
||||
sliderDesaturation.Value = (float)firstFloor.Sector.Fields[(string)sliderDesaturation.Tag].Value;
|
||||
|
||||
} else {//disable floor/ceiling related controls
|
||||
gbRotation.Enabled = false;
|
||||
|
@ -196,9 +188,15 @@ namespace CodeImp.DoomBuilder.UDMFControls
|
|||
cblightabsolute.Checked = (bool)firstWall.Sidedef.Fields[KeyNames.GetLightAbsolute(firstWall.GeometryType)].Value;
|
||||
|
||||
//set linedef values
|
||||
sliderAlpha.Value = (float)firstWall.Sidedef.Line.Fields[(string)sliderAlpha.Tag].Value;
|
||||
string renderStyle = (string)firstWall.Sidedef.Line.Fields[(string)cbRenderStyle.Tag].Value;
|
||||
sliderAlpha.Value = (float)firstWall.Linedef.Fields[(string)sliderAlpha.Tag].Value;
|
||||
string renderStyle = (string)firstWall.Linedef.Fields[(string)cbRenderStyle.Tag].Value;
|
||||
cbRenderStyle.SelectedIndex = renderStyles.IndexOf(renderStyle);
|
||||
|
||||
//if we got only 3d-walls selected, disable controls, which don't affect those
|
||||
if (walls3dCount == wallsMid.Count && wallsTop.Count == 0 && wallsBottom.Count == 0) {
|
||||
gbAlpha.Enabled = false;
|
||||
bgBrightness.Enabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
//set wall flags
|
||||
|
@ -240,24 +238,24 @@ namespace CodeImp.DoomBuilder.UDMFControls
|
|||
List<UniversalFieldInfo> defaultSectorFields = General.Map.Config.SectorFields;
|
||||
|
||||
//...from floors/ceilings...
|
||||
foreach (List<VisualGeometry> list in ceilingsAndFloors) {
|
||||
foreach (VisualGeometry floor in list)
|
||||
removeDefaultUniversalProperties(floor.Sector.Sector.Fields, defaultSectorFields);
|
||||
foreach (List<SurfaceProperties> list in ceilingsAndFloors) {
|
||||
foreach (SurfaceProperties floor in list)
|
||||
removeDefaultUniversalProperties(floor.Sector.Fields, defaultSectorFields);
|
||||
}
|
||||
|
||||
//...and walls
|
||||
foreach (List<VisualGeometry> list in walls) {
|
||||
foreach (VisualGeometry wall in list) {
|
||||
foreach (List<SurfaceProperties> list in walls) {
|
||||
foreach (SurfaceProperties wall in list) {
|
||||
removeDefaultUniversalProperties(wall.Sidedef.Fields, defaultSidedefFields);
|
||||
removeDefaultUniversalProperties(wall.Sidedef.Line.Fields, defaultLinedefFields);
|
||||
removeDefaultUniversalProperties(wall.Linedef.Fields, defaultLinedefFields);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//update view
|
||||
private void update() {
|
||||
foreach (VisualSector vs in updateList)
|
||||
vs.UpdateSectorData();
|
||||
foreach (SurfaceProperties sp in updateList)
|
||||
sp.Update();
|
||||
}
|
||||
|
||||
//shared props
|
||||
|
@ -273,9 +271,9 @@ namespace CodeImp.DoomBuilder.UDMFControls
|
|||
|
||||
//linedef props
|
||||
private void setLinedefProperty(string propName, object value) {
|
||||
foreach (List<VisualGeometry> list in walls) {
|
||||
foreach (VisualGeometry vg in list)
|
||||
vg.Sidedef.Line.Fields[propName].Value = value;
|
||||
foreach (List<SurfaceProperties> list in walls) {
|
||||
foreach (SurfaceProperties vg in list)
|
||||
vg.Linedef.Fields[propName].Value = value;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -288,8 +286,8 @@ namespace CodeImp.DoomBuilder.UDMFControls
|
|||
}
|
||||
|
||||
//apply value
|
||||
foreach (List<VisualGeometry> list in walls) {
|
||||
foreach (VisualGeometry vg in list)
|
||||
foreach (List<SurfaceProperties> list in walls) {
|
||||
foreach (SurfaceProperties vg in list)
|
||||
vg.Sidedef.Fields[propName].Value = value;
|
||||
}
|
||||
}
|
||||
|
@ -311,12 +309,12 @@ namespace CodeImp.DoomBuilder.UDMFControls
|
|||
props[i] = propName + props[i];
|
||||
|
||||
int index = 0;
|
||||
|
||||
//apply values
|
||||
|
||||
if (relativeMode) {
|
||||
float val;
|
||||
foreach (List<VisualGeometry> list in walls) { //top -> middle -> bottom
|
||||
foreach (VisualGeometry vg in list) {
|
||||
foreach (List<SurfaceProperties> list in walls) { //top -> middle -> bottom
|
||||
foreach (SurfaceProperties vg in list) {
|
||||
val = (float)vg.Sidedef.Fields[props[index]].Value + value.x;
|
||||
vg.Sidedef.Fields[props[index]].Value = val;
|
||||
|
||||
|
@ -326,8 +324,8 @@ namespace CodeImp.DoomBuilder.UDMFControls
|
|||
index += 2;
|
||||
}
|
||||
} else {
|
||||
foreach (List<VisualGeometry> list in walls) { //top -> middle -> bottom
|
||||
foreach (VisualGeometry vg in list) {
|
||||
foreach (List<SurfaceProperties> list in walls) { //top -> middle -> bottom
|
||||
foreach (SurfaceProperties vg in list) {
|
||||
vg.Sidedef.Fields[props[index]].Value = value.x;
|
||||
vg.Sidedef.Fields[props[index + 1]].Value = value.y;
|
||||
}
|
||||
|
@ -360,28 +358,28 @@ namespace CodeImp.DoomBuilder.UDMFControls
|
|||
if (propName == "rotation" && relativeMode) {
|
||||
float val;
|
||||
|
||||
foreach (VisualGeometry vg in floors) {
|
||||
val = (float)vg.Sector.Sector.Fields[propFloor].Value + (float)value;
|
||||
vg.Sector.Sector.Fields[propFloor].Value = (object)val;
|
||||
foreach (SurfaceProperties vg in floors) {
|
||||
val = (float)vg.Sector.Fields[propFloor].Value + (float)value;
|
||||
vg.Sector.Fields[propFloor].Value = (object)val;
|
||||
}
|
||||
|
||||
foreach (VisualGeometry vg in ceilings) {
|
||||
val = (float)vg.Sector.Sector.Fields[propCeiling].Value + (float)value;
|
||||
vg.Sector.Sector.Fields[propCeiling].Value = (object)val;
|
||||
foreach (SurfaceProperties vg in ceilings) {
|
||||
val = (float)vg.Sector.Fields[propCeiling].Value + (float)value;
|
||||
vg.Sector.Fields[propCeiling].Value = (object)val;
|
||||
}
|
||||
} else {
|
||||
foreach (VisualGeometry vg in floors)
|
||||
vg.Sector.Sector.Fields[propFloor].Value = value;
|
||||
foreach (SurfaceProperties vg in floors)
|
||||
vg.Sector.Fields[propFloor].Value = value;
|
||||
|
||||
foreach (VisualGeometry vg in ceilings)
|
||||
vg.Sector.Sector.Fields[propCeiling].Value = value;
|
||||
foreach (SurfaceProperties vg in ceilings)
|
||||
vg.Sector.Fields[propCeiling].Value = value;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (List<VisualGeometry> list in ceilingsAndFloors) {
|
||||
foreach (VisualGeometry vg in list)
|
||||
vg.Sector.Sector.Fields[propName].Value = value;
|
||||
//apply values
|
||||
foreach (List<SurfaceProperties> list in ceilingsAndFloors) {
|
||||
foreach (SurfaceProperties vg in list)
|
||||
vg.Sector.Fields[propName].Value = value;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -404,26 +402,26 @@ namespace CodeImp.DoomBuilder.UDMFControls
|
|||
floorNameY = "ypanningfloor";
|
||||
}
|
||||
props = new string[] { ceilingNameX, ceilingNameY, floorNameX, floorNameY };
|
||||
|
||||
int index = 0;
|
||||
|
||||
//apply values
|
||||
if (relativeMode) {
|
||||
float val;
|
||||
foreach (List<VisualGeometry> list in ceilingsAndFloors) { //ceilings -> floors
|
||||
foreach (VisualGeometry vg in list) {
|
||||
val = (float)vg.Sector.Sector.Fields[props[index]].Value + value.x;
|
||||
vg.Sector.Sector.Fields[props[index]].Value = (object)val;
|
||||
foreach (List<SurfaceProperties> list in ceilingsAndFloors) { //ceilings -> floors
|
||||
foreach (SurfaceProperties vg in list) {
|
||||
val = (float)vg.Sector.Fields[props[index]].Value + value.x;
|
||||
vg.Sector.Fields[props[index]].Value = (object)val;
|
||||
|
||||
val = (float)vg.Sector.Sector.Fields[props[index + 1]].Value + value.y;
|
||||
vg.Sector.Sector.Fields[props[index + 1]].Value = (object)val;
|
||||
val = (float)vg.Sector.Fields[props[index + 1]].Value + value.y;
|
||||
vg.Sector.Fields[props[index + 1]].Value = (object)val;
|
||||
}
|
||||
index += 2;
|
||||
}
|
||||
} else {
|
||||
foreach (List<VisualGeometry> list in ceilingsAndFloors) { //ceilings -> floors
|
||||
foreach (VisualGeometry vg in list) {
|
||||
vg.Sector.Sector.Fields[props[index]].Value = value.x;
|
||||
vg.Sector.Sector.Fields[props[index + 1]].Value = value.y;
|
||||
foreach (List<SurfaceProperties> list in ceilingsAndFloors) { //ceilings -> floors
|
||||
foreach (SurfaceProperties vg in list) {
|
||||
vg.Sector.Fields[props[index]].Value = value.x;
|
||||
vg.Sector.Fields[props[index + 1]].Value = value.y;
|
||||
}
|
||||
index += 2;
|
||||
}
|
||||
|
@ -447,9 +445,11 @@ namespace CodeImp.DoomBuilder.UDMFControls
|
|||
setSectorProperty((string)cb.Tag, (object)cb.Checked);
|
||||
|
||||
//update sectors
|
||||
foreach (VisualSector vs in updateList) {
|
||||
vs.Sector.UpdateNeeded = true;
|
||||
vs.Sector.UpdateCache();
|
||||
foreach (SurfaceProperties vs in updateList) {
|
||||
if (vs.Sector != null) {
|
||||
vs.Sector.UpdateNeeded = true;
|
||||
vs.Sector.UpdateCache();
|
||||
}
|
||||
}
|
||||
|
||||
removeDefaultValues();
|
||||
|
@ -536,9 +536,46 @@ namespace CodeImp.DoomBuilder.UDMFControls
|
|||
private void cbRelativeMode_CheckedChanged(object sender, EventArgs e) {
|
||||
relativeMode = cbRelativeMode.Checked;
|
||||
}
|
||||
|
||||
private void UDMFControlsForm_HelpRequested(object sender, HelpEventArgs hlpevent) {
|
||||
General.ShowHelp("gz_plug_udmfcontrols.html");
|
||||
hlpevent.Handled = true;
|
||||
}
|
||||
}
|
||||
|
||||
public class KeyNames {
|
||||
internal class SurfaceProperties {
|
||||
private Sector sector;
|
||||
public Sector Sector { get { return sector; } }
|
||||
|
||||
private Sidedef sidedef;
|
||||
public Sidedef Sidedef { get { return sidedef; } }
|
||||
|
||||
private Linedef linedef;
|
||||
public Linedef Linedef { get { return linedef; } }
|
||||
|
||||
public VisualGeometryType GeometryType { get { return vg.GeometryType; } }
|
||||
private VisualGeometry vg;
|
||||
|
||||
public SurfaceProperties(VisualGeometry visualGeometry) {
|
||||
vg = visualGeometry;
|
||||
if (vg.GeometryType == VisualGeometryType.CEILING || vg.GeometryType == VisualGeometryType.FLOOR) {
|
||||
sector = vg.GetControlSector();
|
||||
sector.Fields.BeforeFieldsChange();
|
||||
} else {
|
||||
linedef = vg.GetControlLinedef();
|
||||
sidedef = linedef.Front;
|
||||
linedef.Fields.BeforeFieldsChange();
|
||||
sidedef.Fields.BeforeFieldsChange();
|
||||
}
|
||||
}
|
||||
|
||||
public void Update() {
|
||||
vg.Sector.UpdateSectorData();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
internal class KeyNames {
|
||||
//SCALE
|
||||
public static string GetScaleX(VisualGeometryType type) {
|
||||
return getScale(type).Replace("$", "x");
|
||||
|
@ -562,6 +599,7 @@ namespace CodeImp.DoomBuilder.UDMFControls
|
|||
return "scale$_top";
|
||||
break;
|
||||
|
||||
case VisualGeometryType.WALL_MIDDLE_3D:
|
||||
case VisualGeometryType.WALL_MIDDLE:
|
||||
return "scale$_mid";
|
||||
break;
|
||||
|
@ -596,6 +634,7 @@ namespace CodeImp.DoomBuilder.UDMFControls
|
|||
return "offset$_top";
|
||||
break;
|
||||
|
||||
case VisualGeometryType.WALL_MIDDLE_3D:
|
||||
case VisualGeometryType.WALL_MIDDLE:
|
||||
return "offset$_mid";
|
||||
break;
|
||||
|
@ -634,6 +673,7 @@ namespace CodeImp.DoomBuilder.UDMFControls
|
|||
|
||||
case VisualGeometryType.WALL_BOTTOM:
|
||||
case VisualGeometryType.WALL_MIDDLE:
|
||||
case VisualGeometryType.WALL_MIDDLE_3D:
|
||||
case VisualGeometryType.WALL_UPPER:
|
||||
return "light";
|
||||
break;
|
||||
|
@ -653,6 +693,7 @@ namespace CodeImp.DoomBuilder.UDMFControls
|
|||
|
||||
case VisualGeometryType.WALL_BOTTOM:
|
||||
case VisualGeometryType.WALL_MIDDLE:
|
||||
case VisualGeometryType.WALL_MIDDLE_3D:
|
||||
case VisualGeometryType.WALL_UPPER:
|
||||
return "lightabsolute";
|
||||
break;
|
||||
|
|
Loading…
Reference in a new issue