2014-12-03 23:15:26 +00:00
|
|
|
|
#region ================== Namespaces
|
|
|
|
|
|
|
|
|
|
using System.Drawing;
|
2012-05-11 12:28:20 +00:00
|
|
|
|
using System.Windows.Forms;
|
|
|
|
|
using CodeImp.DoomBuilder.Actions;
|
2020-09-26 15:52:23 +00:00
|
|
|
|
using CodeImp.DoomBuilder.Map;
|
2012-05-11 12:28:20 +00:00
|
|
|
|
using CodeImp.DoomBuilder.ColorPicker.Windows;
|
2014-12-03 23:15:26 +00:00
|
|
|
|
using CodeImp.DoomBuilder.Plugins;
|
|
|
|
|
using CodeImp.DoomBuilder.VisualModes;
|
|
|
|
|
using CodeImp.DoomBuilder.Windows;
|
|
|
|
|
|
|
|
|
|
#endregion
|
2012-05-11 12:28:20 +00:00
|
|
|
|
|
|
|
|
|
namespace CodeImp.DoomBuilder.ColorPicker
|
|
|
|
|
{
|
2013-09-11 09:47:53 +00:00
|
|
|
|
public class BuilderPlug : Plug
|
|
|
|
|
{
|
|
|
|
|
private static BuilderPlug me;
|
|
|
|
|
public static BuilderPlug Me { get { return me; } }
|
|
|
|
|
|
2016-07-02 22:27:20 +00:00
|
|
|
|
public override int MinimumRevision { get { return 2600; } }
|
2014-01-08 15:20:56 +00:00
|
|
|
|
|
2013-09-11 09:47:53 +00:00
|
|
|
|
public override string Name { get { return "Color Picker"; } }
|
|
|
|
|
|
|
|
|
|
private IColorPicker form;
|
|
|
|
|
private ToolsForm toolsform;
|
|
|
|
|
|
|
|
|
|
private Point formLocation; //used to keep form's location constant
|
|
|
|
|
|
2014-12-03 23:15:26 +00:00
|
|
|
|
public override void OnInitialize()
|
|
|
|
|
{
|
2013-09-11 09:47:53 +00:00
|
|
|
|
base.OnInitialize();
|
|
|
|
|
me = this;
|
|
|
|
|
|
2014-02-26 14:11:06 +00:00
|
|
|
|
// Load menus form
|
|
|
|
|
toolsform = new ToolsForm();
|
|
|
|
|
|
2013-09-11 09:47:53 +00:00
|
|
|
|
General.Actions.BindMethods(this);
|
|
|
|
|
}
|
|
|
|
|
|
2014-12-03 23:15:26 +00:00
|
|
|
|
public override void OnMapOpenEnd()
|
|
|
|
|
{
|
2014-02-26 14:11:06 +00:00
|
|
|
|
base.OnMapOpenEnd();
|
2016-07-02 22:27:20 +00:00
|
|
|
|
if(!General.Map.DOOM) toolsform.Register();
|
2013-09-11 09:47:53 +00:00
|
|
|
|
}
|
|
|
|
|
|
2014-12-03 23:15:26 +00:00
|
|
|
|
public override void OnMapNewEnd()
|
|
|
|
|
{
|
2014-02-26 14:11:06 +00:00
|
|
|
|
base.OnMapNewEnd();
|
2016-07-02 22:27:20 +00:00
|
|
|
|
if(!General.Map.DOOM) toolsform.Register();
|
2014-02-26 14:11:06 +00:00
|
|
|
|
}
|
|
|
|
|
|
2014-12-03 23:15:26 +00:00
|
|
|
|
public override void OnMapCloseEnd()
|
|
|
|
|
{
|
2014-02-26 14:11:06 +00:00
|
|
|
|
base.OnMapCloseEnd();
|
2016-07-02 22:27:20 +00:00
|
|
|
|
if(!General.Map.DOOM) toolsform.Unregister();
|
2013-09-11 09:47:53 +00:00
|
|
|
|
}
|
|
|
|
|
|
2014-12-03 23:15:26 +00:00
|
|
|
|
public override void OnReloadResources()
|
|
|
|
|
{
|
2014-03-04 09:04:43 +00:00
|
|
|
|
base.OnReloadResources();
|
2016-07-02 22:27:20 +00:00
|
|
|
|
if(!General.Map.DOOM) toolsform.Register();
|
2014-03-04 09:04:43 +00:00
|
|
|
|
}
|
|
|
|
|
|
2014-12-03 23:15:26 +00:00
|
|
|
|
public override void Dispose()
|
|
|
|
|
{
|
2013-09-11 09:47:53 +00:00
|
|
|
|
base.Dispose();
|
|
|
|
|
General.Actions.UnbindMethods(this);
|
|
|
|
|
|
2015-12-28 15:01:53 +00:00
|
|
|
|
if(form != null) form.Close();
|
2013-09-11 09:47:53 +00:00
|
|
|
|
form = null;
|
|
|
|
|
|
2015-12-28 15:01:53 +00:00
|
|
|
|
if(toolsform != null)
|
2014-12-03 23:15:26 +00:00
|
|
|
|
{
|
2014-02-26 14:11:06 +00:00
|
|
|
|
toolsform.Unregister();
|
|
|
|
|
toolsform.Dispose();
|
|
|
|
|
toolsform = null;
|
|
|
|
|
}
|
2013-09-11 09:47:53 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[BeginAction("togglelightpannel")]
|
2014-12-03 23:15:26 +00:00
|
|
|
|
private void ToggleLightPannel()
|
|
|
|
|
{
|
2020-09-26 15:52:23 +00:00
|
|
|
|
SelectableElement deselectelement = null;
|
|
|
|
|
|
2016-07-02 22:27:20 +00:00
|
|
|
|
if(General.Editing.Mode == null || General.Map.DOOM) return;
|
2013-09-11 09:47:53 +00:00
|
|
|
|
string currentModeName = General.Editing.Mode.GetType().Name;
|
|
|
|
|
|
|
|
|
|
//display one of colorPickers or tell the user why we can't do that
|
2020-09-26 15:52:23 +00:00
|
|
|
|
if(currentModeName == "ThingsMode")
|
2014-12-03 23:15:26 +00:00
|
|
|
|
{
|
|
|
|
|
if(General.Map.Map.SelectedThingsCount == 0)
|
|
|
|
|
{
|
2020-09-26 15:52:23 +00:00
|
|
|
|
// If nothing is selected try to use a highlighted object
|
|
|
|
|
if (General.Editing.Mode.HighlightedObject != null)
|
|
|
|
|
{
|
|
|
|
|
((Thing)General.Editing.Mode.HighlightedObject).Selected = true;
|
|
|
|
|
deselectelement = (Thing)General.Editing.Mode.HighlightedObject;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
General.Interface.DisplayStatus(StatusType.Warning, "Select or highlight some lights first!");
|
|
|
|
|
return;
|
|
|
|
|
}
|
2013-09-11 09:47:53 +00:00
|
|
|
|
}
|
|
|
|
|
form = new LightColorPicker();
|
2014-12-03 23:15:26 +00:00
|
|
|
|
}
|
2015-12-28 15:01:53 +00:00
|
|
|
|
else if(currentModeName == "SectorsMode")
|
2014-12-03 23:15:26 +00:00
|
|
|
|
{
|
2015-12-28 15:01:53 +00:00
|
|
|
|
if(General.Map.UDMF)
|
2014-12-03 23:15:26 +00:00
|
|
|
|
{
|
2015-12-28 15:01:53 +00:00
|
|
|
|
if(General.Map.Map.SelectedSectorsCount == 0)
|
2014-12-03 23:15:26 +00:00
|
|
|
|
{
|
2020-09-26 15:52:23 +00:00
|
|
|
|
if (General.Editing.Mode.HighlightedObject != null)
|
|
|
|
|
((Sector)General.Editing.Mode.HighlightedObject).Selected = true;
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
General.Interface.DisplayStatus(StatusType.Warning, "Select or highlight some sectors first!");
|
|
|
|
|
return;
|
|
|
|
|
}
|
2013-09-11 09:47:53 +00:00
|
|
|
|
}
|
|
|
|
|
form = new SectorColorPicker();
|
2014-12-03 23:15:26 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2013-09-11 09:47:53 +00:00
|
|
|
|
General.Interface.DisplayStatus(StatusType.Warning, "Sector colors can only be set if map is in UDMF format!");
|
|
|
|
|
return;
|
|
|
|
|
}
|
2014-12-03 23:15:26 +00:00
|
|
|
|
}
|
2015-12-28 15:01:53 +00:00
|
|
|
|
else if(currentModeName == "BaseVisualMode")
|
2014-12-03 23:15:26 +00:00
|
|
|
|
{
|
2013-09-11 09:47:53 +00:00
|
|
|
|
//nothing selected in visual mode?
|
2015-12-28 15:01:53 +00:00
|
|
|
|
if( ((VisualMode)General.Editing.Mode).GetSelectedVisualThings(true).Count == 0 )
|
2014-12-03 23:15:26 +00:00
|
|
|
|
{
|
2013-09-11 09:47:53 +00:00
|
|
|
|
//check sectors
|
|
|
|
|
int selectedSectorsCount = ((VisualMode)General.Editing.Mode).GetSelectedVisualSectors(true).Count;
|
2015-12-28 15:01:53 +00:00
|
|
|
|
if(General.Map.UDMF && (selectedSectorsCount > 0 || General.Map.Map.SelectedSectorsCount > 0))
|
2014-12-03 23:15:26 +00:00
|
|
|
|
{
|
2013-09-11 09:47:53 +00:00
|
|
|
|
form = new SectorColorPicker();
|
2014-12-03 23:15:26 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2013-09-11 09:47:53 +00:00
|
|
|
|
General.Interface.DisplayStatus(StatusType.Warning, "Select some lights " + (General.Map.UDMF ? ", sectors or surfaces " : "") + "first!");
|
|
|
|
|
return;
|
|
|
|
|
}
|
2014-12-03 23:15:26 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2013-09-11 09:47:53 +00:00
|
|
|
|
form = new LightColorPicker();
|
|
|
|
|
}
|
2014-12-03 23:15:26 +00:00
|
|
|
|
}
|
|
|
|
|
else //wrong mode
|
|
|
|
|
{
|
2013-09-11 09:47:53 +00:00
|
|
|
|
General.Interface.DisplayStatus(StatusType.Warning, "Switch to" + (General.Map.UDMF ? " Sectors," : "") + " Things or GZDoom Visual Mode first!");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2015-12-28 15:01:53 +00:00
|
|
|
|
if(form.Setup(currentModeName))
|
2014-12-03 23:15:26 +00:00
|
|
|
|
{
|
2015-12-28 15:01:53 +00:00
|
|
|
|
if(formLocation.X == 0 && formLocation.Y == 0)
|
2014-12-03 23:15:26 +00:00
|
|
|
|
{
|
2015-09-17 12:02:39 +00:00
|
|
|
|
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);
|
2013-09-11 09:47:53 +00:00
|
|
|
|
}
|
|
|
|
|
form.Location = formLocation;
|
2014-02-21 14:42:12 +00:00
|
|
|
|
form.FormClosed += form_FormClosed;
|
Game Configurations: added Vanilla Strife, Vanilla Heretic and Vanilla Hexen game configurations.
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.
2015-10-21 13:35:42 +00:00
|
|
|
|
form.ShowDialog(General.Interface);
|
2020-09-26 15:52:23 +00:00
|
|
|
|
|
|
|
|
|
if(deselectelement != null)
|
|
|
|
|
{
|
|
|
|
|
deselectelement.Selected = false;
|
|
|
|
|
}
|
2014-12-03 23:15:26 +00:00
|
|
|
|
}
|
2020-09-26 15:52:23 +00:00
|
|
|
|
|
|
|
|
|
General.Interface.RedrawDisplay();
|
2013-09-11 09:47:53 +00:00
|
|
|
|
}
|
|
|
|
|
|
2014-12-03 23:15:26 +00:00
|
|
|
|
private void form_FormClosed(object sender, FormClosedEventArgs e)
|
|
|
|
|
{
|
2013-09-11 09:47:53 +00:00
|
|
|
|
formLocation = form.Location;
|
|
|
|
|
}
|
|
|
|
|
}
|
2012-05-20 00:56:59 +00:00
|
|
|
|
}
|