mirror of
https://git.do.srb2.org/STJr/UltimateZoneBuilder.git
synced 2024-11-26 05:41:45 +00:00
a182a5098d
Added "makedoorceil" game configuration property. Works the same way as "makedoortrack" and "makedoordoor", but for ceilings of door sectors. Changed, Game configurations: the editor no longer tries to load DECORATE/MODELDEF/VOXELDEF/GLDEFS/REVERBS lumps when "decorategames" setting is not specified / is set to empty string. Changed, General interface: "Tools -> Reload MODELDEF/VOXELDEF" and "Tools -> Reload GLDEFS" menu items are no longer shown when current game configuration doesn't support DECORATE. Fixed a crash when pasting linedef/thing properties in Hexen map format. Fixed, Visual mode: Visual Thing resources were not fully unloaded when resetting D3D device leading to crash when switching to the editor from a DX-using game engine (like ZDoom) running in fullscreen. Fixed: in some cases, when current game configuration supported multiple script compilers, it was possible to open/create a map or change map options without selecting any script compiler. Fixed, New Map Options window: default map name was not updated when switching game configurations. Fixed: copied map element properties were not reset after switching to another map. Fixed: stored textures for "Make Door" action were not reset after switching to another map. Fixed, Game Configurations window: currently selected test engine name was not updated when pasting test engines from another configuration. Fixed, Game Configurations: all "Heretic in Doom map format" configurations were using Doom sector effects list. Fixed, Game Configurations: all "Strife in Doom map format" configurations were using Doom sector effects list.
185 lines
4.7 KiB
C#
185 lines
4.7 KiB
C#
#region ================== Namespaces
|
|
|
|
using System.Collections.Generic;
|
|
using System.Drawing;
|
|
using System.Windows.Forms;
|
|
using CodeImp.DoomBuilder.Actions;
|
|
using CodeImp.DoomBuilder.Plugins;
|
|
using CodeImp.DoomBuilder.VisualModes;
|
|
using CodeImp.DoomBuilder.Windows;
|
|
|
|
#endregion
|
|
|
|
namespace CodeImp.DoomBuilder.BuilderEffects
|
|
{
|
|
public class BuilderPlug : Plug
|
|
{
|
|
// Static instance
|
|
private static BuilderPlug me;
|
|
|
|
// Main objects
|
|
private MenusForm menusForm;
|
|
private Form form;
|
|
|
|
private Point formLocation; //used to keep form's location constant
|
|
|
|
public override string Name { get { return "Builder Effects"; } }
|
|
public static BuilderPlug Me { get { return me; } }
|
|
|
|
// When plugin is initialized
|
|
public override void OnInitialize()
|
|
{
|
|
// Setup
|
|
base.OnInitialize();
|
|
me = this;
|
|
|
|
// Load menus form
|
|
menusForm = new MenusForm();
|
|
|
|
General.Actions.BindMethods(this);
|
|
}
|
|
|
|
// Disposer
|
|
public override void Dispose()
|
|
{
|
|
// Not already disposed?
|
|
if(!IsDisposed)
|
|
{
|
|
menusForm.Unregister();
|
|
menusForm.Dispose();
|
|
menusForm = null;
|
|
|
|
// Done
|
|
me = null;
|
|
base.Dispose();
|
|
}
|
|
}
|
|
|
|
public override void OnMapNewEnd()
|
|
{
|
|
base.OnMapNewEnd();
|
|
menusForm.Register();
|
|
}
|
|
|
|
public override void OnMapOpenEnd()
|
|
{
|
|
base.OnMapOpenEnd();
|
|
menusForm.Register();
|
|
}
|
|
|
|
public override void OnMapCloseEnd()
|
|
{
|
|
base.OnMapCloseEnd();
|
|
menusForm.Unregister();
|
|
}
|
|
|
|
public override void OnReloadResources()
|
|
{
|
|
base.OnReloadResources();
|
|
menusForm.Register();
|
|
}
|
|
|
|
//actions
|
|
[BeginAction("applyjitter")]
|
|
private void ApplyJitterTransform()
|
|
{
|
|
if(General.Editing.Mode == null) return;
|
|
string currentModeName = General.Editing.Mode.GetType().Name;
|
|
|
|
//display one of colorPickers or tell the user why we can't do that
|
|
if(currentModeName == "ThingsMode")
|
|
{
|
|
if(General.Map.Map.SelectedThingsCount == 0)
|
|
{
|
|
General.Interface.DisplayStatus(StatusType.Warning, "Select some things first!");
|
|
return;
|
|
}
|
|
form = new JitterThingsForm(currentModeName);
|
|
}
|
|
else if(currentModeName == "SectorsMode")
|
|
{
|
|
if(General.Map.Map.SelectedSectorsCount == 0)
|
|
{
|
|
General.Interface.DisplayStatus(StatusType.Warning, "Select some sectors first!");
|
|
return;
|
|
}
|
|
form = new JitterSectorsForm(currentModeName);
|
|
}
|
|
else if(currentModeName == "LinedefsMode")
|
|
{
|
|
if(General.Map.Map.SelectedLinedefsCount == 0)
|
|
{
|
|
General.Interface.DisplayStatus(StatusType.Warning, "Select some linedefs first!");
|
|
return;
|
|
}
|
|
form = new JitterVerticesForm(currentModeName);
|
|
}
|
|
else if(currentModeName == "VerticesMode")
|
|
{
|
|
if(General.Map.Map.SelectedVerticessCount == 0)
|
|
{
|
|
General.Interface.DisplayStatus(StatusType.Warning, "Select some vertices first!");
|
|
return;
|
|
}
|
|
form = new JitterVerticesForm(currentModeName);
|
|
}
|
|
else if(currentModeName == "BaseVisualMode")
|
|
{
|
|
//no visual things selected in visual mode?
|
|
if(((VisualMode)General.Editing.Mode).GetSelectedVisualThings(true).Count == 0)
|
|
{
|
|
//check selected geometry
|
|
List<VisualGeometry> list = ((VisualMode)General.Editing.Mode).GetSelectedSurfaces();
|
|
if(list.Count > 0)
|
|
{
|
|
foreach(VisualGeometry vg in list)
|
|
{
|
|
if(vg.GeometryType == VisualGeometryType.CEILING
|
|
|| vg.GeometryType == VisualGeometryType.FLOOR)
|
|
{
|
|
form = new JitterSectorsForm(currentModeName);
|
|
break;
|
|
}
|
|
}
|
|
|
|
if(form == null) form = new JitterVerticesForm(currentModeName);
|
|
}
|
|
else
|
|
{
|
|
General.Interface.DisplayStatus(StatusType.Warning, "Select some things, sectors or surfaces first!");
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
form = new JitterThingsForm(currentModeName);
|
|
}
|
|
}
|
|
else //wrong mode
|
|
{
|
|
General.Interface.DisplayStatus(StatusType.Warning, "Switch to Sectors, Things, Vertices, Linedefs or Visual mode first!");
|
|
return;
|
|
}
|
|
|
|
//position and show form
|
|
if(formLocation.X == 0 && formLocation.Y == 0)
|
|
{
|
|
Size displaySize = General.Interface.Display.Size;
|
|
Point displayLocation = General.Interface.Display.LocationAbs;
|
|
formLocation = new Point(displayLocation.X + displaySize.Width - form.Width - 16, displayLocation.Y + 16);
|
|
}
|
|
|
|
form.Location = formLocation;
|
|
form.FormClosed += form_FormClosed;
|
|
form.ShowDialog(General.Interface);
|
|
}
|
|
|
|
//events
|
|
private void form_FormClosed(object sender, FormClosedEventArgs e)
|
|
{
|
|
formLocation = form.Location;
|
|
form.Dispose();
|
|
form = null;
|
|
}
|
|
}
|
|
}
|