mirror of
https://git.do.srb2.org/STJr/ZoneBuilder.git
synced 2024-11-15 00:51:39 +00:00
185 lines
4.5 KiB
C#
185 lines
4.5 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.GetLocationAbs();
|
|
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;
|
|
}
|
|
}
|
|
}
|