- added Make Sectors mode

- added editing mode name at the bottom information bar
- some bugfixes in game configurations
This commit is contained in:
codeimp 2008-06-11 05:02:48 +00:00
parent c37b28e15f
commit 1bd143c9b3
47 changed files with 769 additions and 153 deletions

View file

@ -18,10 +18,10 @@ formatinterface = "DoomMapSetIO";
defaultlumpname = "E1M1"; defaultlumpname = "E1M1";
// Special linedefs // Special linedefs
soundlinedefflags = 64; // See linedefflags soundlinedefflag = 64; // See linedefflags
singlesidedflags = 1; // See linedefflags singlesidedflag = 1; // See linedefflags
doublesidedflags = 4; // See linedefflags doublesidedflag = 4; // See linedefflags
impassableflags = 1; impassableflag = 1;
// Generalized actions // Generalized actions
generalizedlinedefs = true; generalizedlinedefs = true;

View file

@ -18,10 +18,10 @@ formatinterface = "DoomMapSetIO";
defaultlumpname = "E1M1"; defaultlumpname = "E1M1";
// Special linedefs // Special linedefs
soundlinedefflags = 64; // See linedefflags soundlinedefflag = 64; // See linedefflags
singlesidedflags = 1; // See linedefflags singlesidedflag = 1; // See linedefflags
doublesidedflags = 4; // See linedefflags doublesidedflag = 4; // See linedefflags
impassableflags = 1; impassableflag = 1;
// Generalized actions // Generalized actions
generalizedlinedefs = false; generalizedlinedefs = false;

View file

@ -18,10 +18,10 @@ formatinterface = "DoomMapSetIO";
defaultlumpname = "MAP01"; defaultlumpname = "MAP01";
// Special linedefs // Special linedefs
soundlinedefflags = 64; // See linedefflags soundlinedefflag = 64; // See linedefflags
singlesidedflags = 1; // See linedefflags singlesidedflag = 1; // See linedefflags
doublesidedflags = 4; // See linedefflags doublesidedflag = 4; // See linedefflags
impassableflags = 1; impassableflag = 1;
// Generalized actions // Generalized actions
generalizedlinedefs = false; generalizedlinedefs = false;

View file

@ -18,10 +18,10 @@ formatinterface = "DoomMapSetIO";
defaultlumpname = "MAP01"; defaultlumpname = "MAP01";
// Special linedefs // Special linedefs
soundlinedefflags = 64; // See linedefflags soundlinedefflag = 64; // See linedefflags
singlesidedflags = 1; // See linedefflags singlesidedflag = 1; // See linedefflags
doublesidedflags = 4; // See linedefflags doublesidedflag = 4; // See linedefflags
impassableflags = 1; impassableflag = 1;
// Generalized actions // Generalized actions
generalizedlinedefs = false; generalizedlinedefs = false;

View file

@ -18,10 +18,10 @@ formatinterface = "DoomMapSetIO";
defaultlumpname = "MAP01"; defaultlumpname = "MAP01";
// Special linedefs // Special linedefs
soundlinedefflags = 64; // See linedefflags soundlinedefflag = 64; // See linedefflags
singlesidedflags = 1; // See linedefflags singlesidedflag = 1; // See linedefflags
doublesidedflags = 4; // See linedefflags doublesidedflag = 4; // See linedefflags
impassableflags = 1; impassableflag = 1;
// Generalized actions // Generalized actions
generalizedlinedefs = true; generalizedlinedefs = true;

View file

@ -18,10 +18,10 @@ formatinterface = "DoomMapSetIO";
defaultlumpname = "E1M1"; defaultlumpname = "E1M1";
// Special linedefs // Special linedefs
soundlinedefflags = 64; // See linedefflags soundlinedefflag = 64; // See linedefflags
singlesidedflags = 1; // See linedefflags singlesidedflag = 1; // See linedefflags
doublesidedflags = 4; // See linedefflags doublesidedflag = 4; // See linedefflags
impassableflags = 1; impassableflag = 1;
// Generalized actions // Generalized actions
generalizedlinedefs = false; generalizedlinedefs = false;

View file

@ -18,10 +18,10 @@ formatinterface = "HexenMapSetIO";
defaultlumpname = "MAP01"; defaultlumpname = "MAP01";
// Special linedefs // Special linedefs
soundlinedefflags = 64; // See linedefflags soundlinedefflag = 64; // See linedefflags
singlesidedflags = 1; // See linedefflags singlesidedflag = 1; // See linedefflags
doublesidedflags = 4; // See linedefflags doublesidedflag = 4; // See linedefflags
impassableflags = 1; impassableflag = 1;
// Generalized actions // Generalized actions
generalizedlinedefs = false; generalizedlinedefs = false;

View file

@ -18,10 +18,10 @@ formatinterface = "DoomMapSetIO";
defaultlumpname = "MAP01"; defaultlumpname = "MAP01";
// Special linedefs // Special linedefs
soundlinedefflags = 64; // See linedefflags soundlinedefflag = 64; // See linedefflags
singlesidedflags = 1; // See linedefflags singlesidedflag = 1; // See linedefflags
doublesidedflags = 4; // See linedefflags doublesidedflag = 4; // See linedefflags
impassableflags = 1; impassableflag = 1;
// Generalized actions // Generalized actions
generalizedlinedefs = true; generalizedlinedefs = true;

View file

@ -18,10 +18,10 @@ formatinterface = "DoomMapSetIO";
defaultlumpname = "MAP01"; defaultlumpname = "MAP01";
// Special linedefs // Special linedefs
soundlinedefflags = 64; // See linedefflags soundlinedefflag = 64; // See linedefflags
singlesidedflags = 1; // See linedefflags singlesidedflag = 1; // See linedefflags
doublesidedflags = 4; // See linedefflags doublesidedflag = 4; // See linedefflags
impassableflags = 1; impassableflag = 1;
// Generalized actions // Generalized actions
generalizedlinedefs = true; generalizedlinedefs = true;

View file

@ -18,10 +18,10 @@ formatinterface = "DoomMapSetIO";
defaultlumpname = "MAP01"; defaultlumpname = "MAP01";
// Special linedefs // Special linedefs
soundlinedefflags = 64; // See linedefflags soundlinedefflag = 64; // See linedefflags
singlesidedflags = 1; // See linedefflags singlesidedflag = 1; // See linedefflags
doublesidedflags = 4; // See linedefflags doublesidedflag = 4; // See linedefflags
impassableflags = 1; impassableflag = 1;
// Generalized actions // Generalized actions
generalizedlinedefs = true; generalizedlinedefs = true;

View file

@ -18,10 +18,10 @@ formatinterface = "HexenMapSetIO";
defaultlumpname = "MAP01"; defaultlumpname = "MAP01";
// Special linedefs // Special linedefs
soundlinedefflags = 64; // See linedefflags soundlinedefflag = 64; // See linedefflags
singlesidedflags = 1; // See linedefflags singlesidedflag = 1; // See linedefflags
doublesidedflags = 4; // See linedefflags doublesidedflag = 4; // See linedefflags
impassableflags = 1; impassableflag = 1;
// Generalized actions // Generalized actions
generalizedlinedefs = false; generalizedlinedefs = false;

View file

@ -18,10 +18,10 @@ formatinterface = "DoomMapSetIO";
defaultlumpname = "MAP01"; defaultlumpname = "MAP01";
// Special linedefs // Special linedefs
soundlinedefflags = 64; // See linedefflags soundlinedefflag = 64; // See linedefflags
singlesidedflags = 1; // See linedefflags singlesidedflag = 1; // See linedefflags
doublesidedflags = 4; // See linedefflags doublesidedflag = 4; // See linedefflags
impassableflags = 1; impassableflag = 1;
// Generalized actions // Generalized actions
generalizedlinedefs = false; generalizedlinedefs = false;

View file

@ -18,10 +18,10 @@ formatinterface = "DoomMapSetIO";
defaultlumpname = "E1M1"; defaultlumpname = "E1M1";
// Special linedefs // Special linedefs
soundlinedefflags = 64; // See linedefflags soundlinedefflag = 64; // See linedefflags
singlesidedflags = 1; // See linedefflags singlesidedflag = 1; // See linedefflags
doublesidedflags = 4; // See linedefflags doublesidedflag = 4; // See linedefflags
impassableflags = 1; impassableflag = 1;
// Generalized actions // Generalized actions
generalizedlinedefs = false; generalizedlinedefs = false;

View file

@ -18,10 +18,10 @@ formatinterface = "DoomMapSetIO";
defaultlumpname = "MAP01"; defaultlumpname = "MAP01";
// Special linedefs // Special linedefs
soundlinedefflags = 64; // See linedefflags soundlinedefflag = 64; // See linedefflags
singlesidedflags = 1; // See linedefflags singlesidedflag = 1; // See linedefflags
doublesidedflags = 4; // See linedefflags doublesidedflag = 4; // See linedefflags
impassableflags = 1; impassableflag = 1;
// Generalized actions // Generalized actions
generalizedlinedefs = true; generalizedlinedefs = true;

View file

@ -18,10 +18,10 @@ formatinterface = "HexenMapSetIO";
defaultlumpname = "E1M1"; defaultlumpname = "E1M1";
// Special linedefs // Special linedefs
soundlinedefflags = 64; // See linedefflags soundlinedefflag = 64; // See linedefflags
singlesidedflags = 1; // See linedefflags singlesidedflag = 1; // See linedefflags
doublesidedflags = 4; // See linedefflags doublesidedflag = 4; // See linedefflags
impassableflags = 1; impassableflag = 1;
// Generalized actions // Generalized actions
generalizedlinedefs = false; generalizedlinedefs = false;

View file

@ -18,10 +18,10 @@ formatinterface = "HexenMapSetIO";
defaultlumpname = "MAP01"; defaultlumpname = "MAP01";
// Special linedefs // Special linedefs
soundlinedefflags = 64; // See linedefflags soundlinedefflag = 64; // See linedefflags
singlesidedflags = 1; // See linedefflags singlesidedflag = 1; // See linedefflags
doublesidedflags = 4; // See linedefflags doublesidedflag = 4; // See linedefflags
impassableflags = 1; impassableflag = 1;
// Generalized actions // Generalized actions
generalizedlinedefs = false; generalizedlinedefs = false;

View file

@ -18,10 +18,10 @@ formatinterface = "HexenMapSetIO";
defaultlumpname = "MAP01"; defaultlumpname = "MAP01";
// Special linedefs // Special linedefs
soundlinedefflags = 64; // See linedefflags soundlinedefflag = 64; // See linedefflags
singlesidedflags = 1; // See linedefflags singlesidedflag = 1; // See linedefflags
doublesidedflags = 4; // See linedefflags doublesidedflag = 4; // See linedefflags
impassableflags = 1; impassableflag = 1;
// Generalized actions // Generalized actions
generalizedlinedefs = false; generalizedlinedefs = false;

View file

@ -18,10 +18,10 @@ formatinterface = "DoomMapSetIO";
defaultlumpname = "MAP01"; defaultlumpname = "MAP01";
// Special linedefs // Special linedefs
soundlinedefflags = 64; // See linedefflags soundlinedefflag = 64; // See linedefflags
singlesidedflags = 1; // See linedefflags singlesidedflag = 1; // See linedefflags
doublesidedflags = 4; // See linedefflags doublesidedflag = 4; // See linedefflags
impassableflags = 1; impassableflag = 1;
// Generalized actions // Generalized actions
generalizedlinedefs = false; generalizedlinedefs = false;

View file

@ -1,7 +1,3 @@
- Make "Make Sector" mode
- On mousemove (?) already show the sector outline it will create
- On click make the sector
- Show action associations when highlighting line/sector/thing - Show action associations when highlighting line/sector/thing
- Make sector gradient features - Make sector gradient features

Binary file not shown.

After

Width:  |  Height:  |  Size: 381 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 345 B

View file

@ -39,6 +39,7 @@
<Compile Include="ClassicModes\DragSectorsMode.cs" /> <Compile Include="ClassicModes\DragSectorsMode.cs" />
<Compile Include="ClassicModes\DragGeometryMode.cs" /> <Compile Include="ClassicModes\DragGeometryMode.cs" />
<Compile Include="ClassicModes\DrawGeometryMode.cs" /> <Compile Include="ClassicModes\DrawGeometryMode.cs" />
<Compile Include="ClassicModes\MakeSectorMode.cs" />
<Compile Include="General\BuilderPlug.cs" /> <Compile Include="General\BuilderPlug.cs" />
<Compile Include="Interface\CurveLinedefsForm.cs"> <Compile Include="Interface\CurveLinedefsForm.cs">
<SubType>Form</SubType> <SubType>Form</SubType>
@ -119,6 +120,9 @@
<ItemGroup> <ItemGroup>
<EmbeddedResource Include="Resources\BrightnessMode.png" /> <EmbeddedResource Include="Resources\BrightnessMode.png" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Resources\NewSector2.png" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- 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. Other similar extension points exist, see Microsoft.Common.targets.

View file

@ -38,10 +38,11 @@ using CodeImp.DoomBuilder.Data;
namespace CodeImp.DoomBuilder.BuilderModes namespace CodeImp.DoomBuilder.BuilderModes
{ {
[EditMode(SwitchAction = "brightnessmode", [EditMode(DisplayName = "Sector Brightness",
SwitchAction = "brightnessmode",
ButtonDesc = "Brightness Mode", ButtonDesc = "Brightness Mode",
ButtonImage = "BrightnessMode.png", ButtonImage = "BrightnessMode.png",
ButtonOrder = int.MinValue + 3)] ButtonOrder = int.MinValue + 201)]
public class BrightnessMode : SectorsMode public class BrightnessMode : SectorsMode
{ {
@ -89,7 +90,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
p.AddLayer(new PresentLayer(RendererLayer.Background, BlendingMode.Mask)); p.AddLayer(new PresentLayer(RendererLayer.Background, BlendingMode.Mask));
p.AddLayer(new PresentLayer(RendererLayer.Grid, BlendingMode.Mask)); p.AddLayer(new PresentLayer(RendererLayer.Grid, BlendingMode.Mask));
p.AddLayer(new PresentLayer(RendererLayer.Overlay, BlendingMode.Alpha, 1f, true)); p.AddLayer(new PresentLayer(RendererLayer.Overlay, BlendingMode.Alpha, 1f, true));
p.AddLayer(new PresentLayer(RendererLayer.Things, BlendingMode.Alpha, 0.3f, false)); p.AddLayer(new PresentLayer(RendererLayer.Things, BlendingMode.Alpha, Presentation.THINGS_BACK_ALPHA, false));
p.AddLayer(new PresentLayer(RendererLayer.Geometry, BlendingMode.Alpha, 1f, true)); p.AddLayer(new PresentLayer(RendererLayer.Geometry, BlendingMode.Alpha, 1f, true));
renderer.SetPresentation(p); renderer.SetPresentation(p);
} }

View file

@ -36,7 +36,8 @@ using CodeImp.DoomBuilder.Editing;
namespace CodeImp.DoomBuilder.BuilderModes namespace CodeImp.DoomBuilder.BuilderModes
{ {
[EditMode(Volatile = true)] [EditMode(DisplayName = "Curve Linedefs",
Volatile = true)]
public sealed class CurveLinedefsMode : ClassicMode public sealed class CurveLinedefsMode : ClassicMode
{ {
#region ================== Constants #region ================== Constants

View file

@ -42,7 +42,8 @@ namespace CodeImp.DoomBuilder.BuilderModes
// In that case, just specifying the attribute like this is enough: // In that case, just specifying the attribute like this is enough:
// [EditMode] // [EditMode]
[EditMode(Volatile = true)] [EditMode(DisplayName = "Linedefs",
Volatile = true)]
public sealed class DragLinedefsMode : DragGeometryMode public sealed class DragLinedefsMode : DragGeometryMode
{ {

View file

@ -42,7 +42,8 @@ namespace CodeImp.DoomBuilder.BuilderModes
// In that case, just specifying the attribute like this is enough: // In that case, just specifying the attribute like this is enough:
// [EditMode] // [EditMode]
[EditMode(Volatile = true)] [EditMode(DisplayName = "Sectors",
Volatile = true)]
public sealed class DragSectorsMode : DragGeometryMode public sealed class DragSectorsMode : DragGeometryMode
{ {

View file

@ -42,7 +42,8 @@ namespace CodeImp.DoomBuilder.BuilderModes
// In that case, just specifying the attribute like this is enough: // In that case, just specifying the attribute like this is enough:
// [EditMode] // [EditMode]
[EditMode(Volatile = true)] [EditMode(DisplayName = "Things",
Volatile = true)]
public sealed class DragThingsMode : ClassicMode public sealed class DragThingsMode : ClassicMode
{ {

View file

@ -42,7 +42,8 @@ namespace CodeImp.DoomBuilder.BuilderModes
// In that case, just specifying the attribute like this is enough: // In that case, just specifying the attribute like this is enough:
// [EditMode] // [EditMode]
[EditMode(Volatile = true)] [EditMode(DisplayName = "Vertices",
Volatile = true)]
public sealed class DragVerticesMode : DragGeometryMode public sealed class DragVerticesMode : DragGeometryMode
{ {

View file

@ -37,7 +37,9 @@ using CodeImp.DoomBuilder.Actions;
namespace CodeImp.DoomBuilder.BuilderModes namespace CodeImp.DoomBuilder.BuilderModes
{ {
[EditMode(SwitchAction = "drawlinesmode", Volatile = true)] [EditMode(DisplayName = "Drawing",
SwitchAction = "drawlinesmode",
Volatile = true)]
public class DrawGeometryMode : ClassicMode public class DrawGeometryMode : ClassicMode
{ {
@ -538,6 +540,8 @@ namespace CodeImp.DoomBuilder.BuilderModes
MapSet.FlipBackwardLinedefs(newlines); MapSet.FlipBackwardLinedefs(newlines);
// Remove all unneeded textures // Remove all unneeded textures
// Shouldn't this already be done by the
// makesector/joinsector functions?
foreach(Linedef ld in newlines) foreach(Linedef ld in newlines)
{ {
if(ld.Front != null) ld.Front.RemoveUnneededTextures(true); if(ld.Front != null) ld.Front.RemoveUnneededTextures(true);

View file

@ -36,10 +36,11 @@ using CodeImp.DoomBuilder.Actions;
namespace CodeImp.DoomBuilder.BuilderModes namespace CodeImp.DoomBuilder.BuilderModes
{ {
[EditMode(SwitchAction = "linedefsmode", // Action name used to switch to this mode [EditMode(DisplayName = "Linedefs",
SwitchAction = "linedefsmode", // Action name used to switch to this mode
ButtonDesc = "Linedefs Mode", // Description on the button in toolbar/menu ButtonDesc = "Linedefs Mode", // Description on the button in toolbar/menu
ButtonImage = "LinesMode.png", // Image resource name for the button ButtonImage = "LinesMode.png", // Image resource name for the button
ButtonOrder = int.MinValue + 1)] // Position of the button (lower is more to the left) ButtonOrder = int.MinValue + 100)] // Position of the button (lower is more to the left)
public class LinedefsMode : ClassicMode public class LinedefsMode : ClassicMode
{ {

View file

@ -0,0 +1,424 @@
#region ================== Copyright (c) 2007 Pascal vd Heiden
/*
* Copyright (c) 2007 Pascal vd Heiden, www.codeimp.com
* This program is released under GNU General Public License
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*/
#endregion
#region ================== Namespaces
using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Reflection;
using CodeImp.DoomBuilder.Windows;
using CodeImp.DoomBuilder.IO;
using CodeImp.DoomBuilder.Map;
using CodeImp.DoomBuilder.Rendering;
using CodeImp.DoomBuilder.Geometry;
using CodeImp.DoomBuilder.Editing;
using System.Drawing;
using CodeImp.DoomBuilder.Actions;
#endregion
namespace CodeImp.DoomBuilder.BuilderModes
{
[EditMode(DisplayName = "Make Sectors",
SwitchAction = "makesectormode",
ButtonDesc = "Make Sectors Mode", // Description on the button in toolbar/menu
ButtonImage = "NewSector2.png", // Image resource name for the button
ButtonOrder = int.MinValue + 202)] // Position of the button (lower is more to the left)
public class MakeSectorMode : ClassicMode
{
#region ================== Constants
private const double FLASH_DURATION = 500.0f;
#endregion
#region ================== Variables
// Nearest sidedef
private LinedefSide editside;
private LinedefSide nearestside;
private List<LinedefSide> allsides;
private List<Linedef> alllines;
// Flash polygon
private FlatVertex[] flashpolygon;
private float flashintensity;
private double flashstarttime;
// Interface
protected bool selectpressed;
protected bool editpressed;
#endregion
#region ================== Properties
#endregion
#region ================== Constructor / Disposer
// Constructor
public MakeSectorMode()
{
}
// Disposer
public override void Dispose()
{
// Not already disposed?
if(!isdisposed)
{
// Clean up
nearestside = null;
allsides = null;
// Dispose base
base.Dispose();
}
}
#endregion
#region ================== Methods
// Cancel mode
public override void OnCancel()
{
base.OnCancel();
// Return to base mode
General.Map.ChangeMode(new SectorsMode());
}
// Mode engages
public override void OnEngage()
{
base.OnEngage();
// Make customized presentation
CustomPresentation p = new CustomPresentation();
p.AddLayer(new PresentLayer(RendererLayer.Background, BlendingMode.Mask));
p.AddLayer(new PresentLayer(RendererLayer.Grid, BlendingMode.Mask));
p.AddLayer(new PresentLayer(RendererLayer.Overlay, BlendingMode.Alpha, 1f, true));
p.AddLayer(new PresentLayer(RendererLayer.Things, BlendingMode.Alpha, Presentation.THINGS_BACK_ALPHA, false));
p.AddLayer(new PresentLayer(RendererLayer.Geometry, BlendingMode.Alpha, 1f, true));
renderer.SetPresentation(p);
}
// Mode disengages
public override void OnDisengage()
{
base.OnDisengage();
// Check which mode we are switching to
if(General.Map.NewMode is VerticesMode)
{
// Convert selection to vertices
// Clear selected sectors
General.Map.Map.ClearSelectedSectors();
}
else if(General.Map.NewMode is LinedefsMode)
{
// Convert selection to linedefs
// Clear selected sectors
General.Map.Map.ClearSelectedSectors();
}
// Hide highlight info
General.Interface.HideInfo();
// Stop processing
General.Interface.SetProcessorState(false);
}
// This redraws the display
public override void OnRedrawDisplay()
{
// Render lines and vertices
DrawGeometry();
// Render things
if(renderer.StartThings(true))
{
renderer.RenderThingSet(General.Map.ThingsFilter.HiddenThings, Presentation.THINGS_HIDDEN_ALPHA);
renderer.RenderThingSet(General.Map.ThingsFilter.VisibleThings, 1.0f);
renderer.Finish();
}
// Render overlay
DrawOverlay();
renderer.Present();
}
// This draws the geometry
private void DrawGeometry()
{
// Render lines and vertices
if(renderer.StartPlotter(true))
{
renderer.PlotLinedefSet(General.Map.Map.Linedefs);
// Render highlight
if(alllines != null)
{
foreach(Linedef l in alllines) renderer.PlotLinedef(l, General.Colors.Highlight);
}
renderer.PlotVerticesSet(General.Map.Map.Vertices);
renderer.Finish();
}
}
// This draws the overlay
private void DrawOverlay()
{
// Redraw overlay
if(renderer.StartOverlay(true))
{
if((flashpolygon != null) && (flashintensity > 0.0f))
{
renderer.RenderGeometry(flashpolygon, null, true);
}
renderer.Finish();
}
}
// This highlights a new region
protected void Highlight(bool buttonspressed)
{
LinedefSide newnearest;
// Mouse inside?
if(mouseinside)
{
// Highlighting from a new sidedef?
Linedef nl = General.Map.Map.NearestLinedef(mousemappos);
float side = nl.SideOfLine(mousemappos);
newnearest = new LinedefSide(nl, (side <= 0.0f));
if(newnearest != nearestside)
{
// Only change when buttons are not pressed
if(!buttonspressed || (editside == newnearest))
{
// Find new sector
General.Interface.SetCursor(Cursors.AppStarting);
nearestside = newnearest;
allsides = SectorTools.FindPotentialSectorAt(mousemappos);
if(allsides != null)
{
alllines = new List<Linedef>(allsides.Count);
foreach(LinedefSide sd in allsides) alllines.Add(sd.Line);
}
else
{
alllines = null;
}
General.Interface.SetCursor(Cursors.Default);
}
else
{
// Don't highlight this one
nearestside = null;
allsides = null;
alllines = null;
}
// Redraw overlay
DrawGeometry();
renderer.Present();
}
}
else
{
// No valid region
nearestside = null;
allsides = null;
alllines = null;
// Redraw overlay
DrawGeometry();
renderer.Present();
}
}
// Start select
protected override void OnSelect()
{
// Select pressed in this mode
selectpressed = true;
editside = nearestside;
base.OnEdit();
}
// Done selecting
protected override void OnEndSelect()
{
// Select was pressed in this mode?
if(selectpressed && (editside == nearestside) && (nearestside != null))
{
// Possible to make a sector?
if(allsides != null)
{
// Make the sector
General.Interface.SetCursor(Cursors.WaitCursor);
General.Settings.FindDefaultDrawSettings();
General.Map.UndoRedo.CreateUndo("Make Sector", UndoGroup.None, 0);
Sector s = SectorTools.MakeSector(allsides);
General.Interface.SetCursor(Cursors.Default);
// Quickly flash this sector to indicate it was created
General.Map.IsChanged = true;
General.Map.Map.Update();
flashpolygon = new FlatVertex[s.Vertices.Length];
s.Vertices.CopyTo(flashpolygon, 0);
flashintensity = 1.0f;
flashstarttime = (double)General.Clock.GetCurrentTime();
General.Interface.SetProcessorState(true);
// Redraw overlay
DrawGeometry();
DrawOverlay();
renderer.Present();
}
}
selectpressed = false;
base.OnEndSelect();
}
// Start editing
protected override void OnEdit()
{
// Edit pressed in this mode
editpressed = true;
editside = nearestside;
base.OnEdit();
}
// Done editing
protected override void OnEndEdit()
{
// Edit was pressed in this mode?
if(editpressed && (editside == nearestside) && (nearestside != null))
{
// Possible to make a sector?
if(allsides != null)
{
// Make the sector
General.Interface.SetCursor(Cursors.WaitCursor);
General.Settings.FindDefaultDrawSettings();
General.Map.UndoRedo.CreateUndo("Make Sector", UndoGroup.None, 0);
Sector s = SectorTools.MakeSector(allsides);
General.Interface.SetCursor(Cursors.Default);
// Edit the sector
List<Sector> secs = new List<Sector>(); secs.Add(s);
if(General.Interface.ShowEditSectors(secs) == DialogResult.OK)
{
// Quickly flash this sector to indicate it was created
General.Map.IsChanged = true;
General.Map.Map.Update();
flashpolygon = new FlatVertex[s.Vertices.Length];
s.Vertices.CopyTo(flashpolygon, 0);
flashintensity = 1.0f;
flashstarttime = (double)General.Clock.GetCurrentTime();
General.Interface.SetProcessorState(true);
}
else
{
// Undo
General.Map.UndoRedo.PerformUndo();
General.Map.UndoRedo.ClearAllRedos();
}
// Redraw overlay
DrawGeometry();
DrawOverlay();
renderer.Present();
}
}
editpressed = false;
base.OnEndEdit();
}
// Mouse moves
public override void OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);
// Highlight the region
Highlight((e.Button != MouseButtons.None));
}
// Mouse leaves
public override void OnMouseLeave(EventArgs e)
{
base.OnMouseLeave(e);
// Highlight nothing
Highlight(false);
}
// Processing
public override void OnProcess()
{
base.OnProcess();
// Process flash
if(flashpolygon != null)
{
// Determine the intensity of the flash by time elapsed
double curtime = (double)General.Clock.GetCurrentTime();;
flashintensity = 1f - (float)((curtime - flashstarttime) / FLASH_DURATION);
if(flashintensity > 0.0f)
{
// Update vertices in polygon
PixelColor pc = new PixelColor((byte)(flashintensity * 255.0f), 255, 255, 255);
int intcolor = pc.ToInt();
for(int i = 0; i < flashpolygon.Length; i++) flashpolygon[i].c = intcolor;
}
else
{
// End of flash, trash the polygon
flashpolygon = null;
flashintensity = 0.0f;
General.Interface.SetProcessorState(false);
}
// Redraw overlay
DrawOverlay();
renderer.Present();
}
}
#endregion
#region ================== Actions
#endregion
}
}

View file

@ -37,10 +37,11 @@ using CodeImp.DoomBuilder.Actions;
namespace CodeImp.DoomBuilder.BuilderModes namespace CodeImp.DoomBuilder.BuilderModes
{ {
[EditMode(SwitchAction = "sectorsmode", // Action name used to switch to this mode [EditMode(DisplayName = "Sectors",
SwitchAction = "sectorsmode", // Action name used to switch to this mode
ButtonDesc = "Sectors Mode", // Description on the button in toolbar/menu ButtonDesc = "Sectors Mode", // Description on the button in toolbar/menu
ButtonImage = "SectorsMode.png", // Image resource name for the button ButtonImage = "SectorsMode.png", // Image resource name for the button
ButtonOrder = int.MinValue + 2)] // Position of the button (lower is more to the left) ButtonOrder = int.MinValue + 200)] // Position of the button (lower is more to the left)
public class SectorsMode : ClassicMode public class SectorsMode : ClassicMode
{ {

View file

@ -36,10 +36,11 @@ using CodeImp.DoomBuilder.Actions;
namespace CodeImp.DoomBuilder.BuilderModes namespace CodeImp.DoomBuilder.BuilderModes
{ {
[EditMode(SwitchAction = "thingsmode", // Action name used to switch to this mode [EditMode(DisplayName = "Things",
SwitchAction = "thingsmode", // Action name used to switch to this mode
ButtonDesc = "Things Mode", // Description on the button in toolbar/menu ButtonDesc = "Things Mode", // Description on the button in toolbar/menu
ButtonImage = "ThingsMode.png", // Image resource name for the button ButtonImage = "ThingsMode.png", // Image resource name for the button
ButtonOrder = int.MinValue + 3)] // Position of the button (lower is more to the left) ButtonOrder = int.MinValue + 300)] // Position of the button (lower is more to the left)
public class ThingsMode : ClassicMode public class ThingsMode : ClassicMode
{ {

View file

@ -36,7 +36,8 @@ using CodeImp.DoomBuilder.Actions;
namespace CodeImp.DoomBuilder.BuilderModes namespace CodeImp.DoomBuilder.BuilderModes
{ {
[EditMode(SwitchAction = "verticesmode", // Action name used to switch to this mode [EditMode(DisplayName = "Vertices",
SwitchAction = "verticesmode", // Action name used to switch to this mode
ButtonDesc = "Vertices Mode", // Description on the button in toolbar/menu ButtonDesc = "Vertices Mode", // Description on the button in toolbar/menu
ButtonImage = "VerticesMode.png", // Image resource name for the button ButtonImage = "VerticesMode.png", // Image resource name for the button
ButtonOrder = int.MinValue + 0)] // Position of the button (lower is more to the left) ButtonOrder = int.MinValue + 0)] // Position of the button (lower is more to the left)

View file

@ -181,3 +181,13 @@ mergesectors
allowmouse = true; allowmouse = true;
allowscroll = true; allowscroll = true;
} }
makesectormode
{
title = "Edit: Make Sector Mode";
description = "Switches to the Make Sector editing mode. This mode allows creating and fixing and/or splitten sectors by clicking within a closed region.";
allowkeys = true;
allowmouse = true;
allowscroll = true;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 345 B

View file

@ -43,6 +43,7 @@ namespace CodeImp.DoomBuilder.Editing
private int buttonorder; private int buttonorder;
private bool configspecific; private bool configspecific;
private bool isvolatile; private bool isvolatile;
private string displayname;
#endregion #endregion
@ -86,6 +87,11 @@ namespace CodeImp.DoomBuilder.Editing
/// </summary> /// </summary>
public bool Volatile { get { return isvolatile; } set { isvolatile = value; } } public bool Volatile { get { return isvolatile; } set { isvolatile = value; } }
/// <summary>
/// Name to display on the button information bar when no specific element information is displayed.
/// </summary>
public string DisplayName { get { return displayname; } set { displayname = value; } }
#endregion #endregion
#region ================== Constructor / Disposer #region ================== Constructor / Disposer

View file

@ -142,6 +142,13 @@ namespace CodeImp.DoomBuilder.Editing
#region ================== Public Methods #region ================== Public Methods
// This clears all redos
public void ClearAllRedos()
{
ClearRedos();
General.MainWindow.UpdateInterface();
}
// This makes an undo and returns the unique ticket id // This makes an undo and returns the unique ticket id
public int CreateUndo(string description, UndoGroup group, int grouptag) public int CreateUndo(string description, UndoGroup group, int grouptag)
{ {
@ -205,7 +212,7 @@ namespace CodeImp.DoomBuilder.Editing
// This performs an undo // This performs an undo
[BeginAction("undo")] [BeginAction("undo")]
internal void PerformUndo() public void PerformUndo()
{ {
UndoSnapshot u, r; UndoSnapshot u, r;
Cursor oldcursor = Cursor.Current; Cursor oldcursor = Cursor.Current;

View file

@ -682,6 +682,7 @@ namespace CodeImp.DoomBuilder
// All done // All done
mainwindow.RedrawDisplay(); mainwindow.RedrawDisplay();
mainwindow.UpdateInterface(); mainwindow.UpdateInterface();
mainwindow.HideInfo();
mainwindow.DisplayReady(); mainwindow.DisplayReady();
Cursor.Current = Cursors.Default; Cursor.Current = Cursors.Default;
} }
@ -714,6 +715,7 @@ namespace CodeImp.DoomBuilder
// Done // Done
Cursor.Current = Cursors.Default; Cursor.Current = Cursors.Default;
mainwindow.RedrawDisplay(); mainwindow.RedrawDisplay();
mainwindow.HideInfo();
mainwindow.UpdateInterface(); mainwindow.UpdateInterface();
mainwindow.DisplayReady(); mainwindow.DisplayReady();
General.WriteLogLine("Map unload done"); General.WriteLogLine("Map unload done");
@ -798,6 +800,7 @@ namespace CodeImp.DoomBuilder
// All done // All done
mainwindow.RedrawDisplay(); mainwindow.RedrawDisplay();
mainwindow.UpdateInterface(); mainwindow.UpdateInterface();
mainwindow.HideInfo();
mainwindow.DisplayReady(); mainwindow.DisplayReady();
Cursor.Current = Cursors.Default; Cursor.Current = Cursors.Default;
} }

View file

@ -895,10 +895,17 @@ namespace CodeImp.DoomBuilder
mode = newmode; mode = newmode;
// Check appropriate button on interface // Check appropriate button on interface
// And show the mode name
if(newmode != null) if(newmode != null)
{
General.MainWindow.CheckEditModeButton(newmode.EditModeButtonName); General.MainWindow.CheckEditModeButton(newmode.EditModeButtonName);
General.MainWindow.DisplayModeName(newmode.Attributes.DisplayName);
}
else else
{
General.MainWindow.CheckEditModeButton(""); General.MainWindow.CheckEditModeButton("");
General.MainWindow.DisplayModeName("");
}
// Engage new mode // Engage new mode
if(newmode != null) newmode.OnEngage(); if(newmode != null) newmode.OnEngage();

View file

@ -75,6 +75,16 @@ namespace CodeImp.DoomBuilder.Geometry
this.front = front; this.front = front;
} }
/// <summary>
/// This makes a copy of the linedef side.
/// </summary>
public LinedefSide(LinedefSide original)
{
// Initialize
this.line = original.line;
this.front = original.front;
}
// Destructor // Destructor
~LinedefSide() ~LinedefSide()
{ {
@ -84,6 +94,24 @@ namespace CodeImp.DoomBuilder.Geometry
#region ================== Methods #region ================== Methods
// This compares a linedef side
public static bool operator ==(LinedefSide a, LinedefSide b)
{
if((object.Equals(a, null)) && (object.Equals(b, null))) return true;
if((!object.Equals(a, null)) && (object.Equals(b, null))) return false;
if((object.Equals(a, null)) && (!object.Equals(b, null))) return false;
return (a.line == b.line) && (a.front == b.front);
}
// This compares a linedef side
public static bool operator !=(LinedefSide a, LinedefSide b)
{
if((object.Equals(a, null)) && (object.Equals(b, null))) return false;
if((!object.Equals(a, null)) && (object.Equals(b, null))) return true;
if((object.Equals(a, null)) && (!object.Equals(b, null))) return true;
return (a.line != b.line) || (a.front != b.front);
}
#endregion #endregion
} }
} }

View file

@ -26,6 +26,7 @@ using CodeImp.DoomBuilder.Rendering;
using SlimDX.Direct3D9; using SlimDX.Direct3D9;
using System.Drawing; using System.Drawing;
using CodeImp.DoomBuilder.Map; using CodeImp.DoomBuilder.Map;
using CodeImp.DoomBuilder.IO;
#endregion #endregion
@ -37,6 +38,17 @@ namespace CodeImp.DoomBuilder.Geometry
/// </summary> /// </summary>
public static class SectorTools public static class SectorTools
{ {
#region ================== Structures
private struct SidedefSettings
{
public string newtexhigh;
public string newtexmid;
public string newtexlow;
}
#endregion
#region ================== Constants #region ================== Constants
#endregion #endregion
@ -369,9 +381,11 @@ namespace CodeImp.DoomBuilder.Geometry
// This makes the sector from the given lines and sides // This makes the sector from the given lines and sides
public static Sector MakeSector(List<LinedefSide> alllines) public static Sector MakeSector(List<LinedefSide> alllines)
{ {
Sidedef source = null;
Sector newsector = General.Map.Map.CreateSector(); Sector newsector = General.Map.Map.CreateSector();
Sector sourcesector = null;
SidedefSettings sourceside = new SidedefSettings();
bool removeuselessmiddle;
// Check if any of the sides already has a sidedef // Check if any of the sides already has a sidedef
// Then we use information from that sidedef to make the others // Then we use information from that sidedef to make the others
foreach(LinedefSide ls in alllines) foreach(LinedefSide ls in alllines)
@ -380,8 +394,9 @@ namespace CodeImp.DoomBuilder.Geometry
{ {
if(ls.Line.Front != null) if(ls.Line.Front != null)
{ {
source = ls.Line.Front; // Copy sidedef information if not already found
source.Sector.CopyPropertiesTo(newsector); if(sourcesector == null) sourcesector = ls.Line.Front.Sector;
TakeSidedefSettings(ref sourceside, ls.Line.Front);
break; break;
} }
} }
@ -389,62 +404,81 @@ namespace CodeImp.DoomBuilder.Geometry
{ {
if(ls.Line.Back != null) if(ls.Line.Back != null)
{ {
source = ls.Line.Back; // Copy sidedef information if not already found
source.Sector.CopyPropertiesTo(newsector); if(sourcesector == null) sourcesector = ls.Line.Back.Sector;
TakeSidedefSettings(ref sourceside, ls.Line.Back);
break; break;
} }
} }
} }
// If we couldn't find anything, try the other sides // Now do the same for the other sides
if(source == null) // Note how information is only copied when not already found
// so this won't override information from the sides searched above
foreach(LinedefSide ls in alllines)
{ {
foreach(LinedefSide ls in alllines) if(ls.Front)
{ {
if(ls.Front) if(ls.Line.Back != null)
{ {
if(ls.Line.Back != null) // Copy sidedef information if not already found
{ if(sourcesector == null) sourcesector = ls.Line.Back.Sector;
source = ls.Line.Back; TakeSidedefSettings(ref sourceside, ls.Line.Back);
source.Sector.CopyPropertiesTo(newsector); break;
break;
}
} }
else }
else
{
if(ls.Line.Front != null)
{ {
if(ls.Line.Front != null) // Copy sidedef information if not already found
{ if(sourcesector == null) sourcesector = ls.Line.Front.Sector;
source = ls.Line.Front; TakeSidedefSettings(ref sourceside, ls.Line.Front);
source.Sector.CopyPropertiesTo(newsector); break;
break;
}
} }
} }
} }
// Still nothing found? // Use defaults where no settings could be found
// Then apply default sector properties TakeSidedefDefaults(ref sourceside);
if(source == null) ApplyDefaultsToSector(newsector);
// Found a source sector?
if(sourcesector != null)
{
// Copy properties from source to new sector
sourcesector.CopyPropertiesTo(newsector);
}
else
{
// No source sector, apply default sector properties
ApplyDefaultsToSector(newsector);
}
// Go for all sides to make sidedefs // Go for all sides to make sidedefs
foreach(LinedefSide ls in alllines) foreach(LinedefSide ls in alllines)
{ {
// We may only remove a useless middle texture when
// the line was previously singlesided
removeuselessmiddle = (ls.Line.Back == null) || (ls.Line.Front == null);
if(ls.Front) if(ls.Front)
{ {
// Create sidedef is needed and ensure it points to the new sector // Create sidedef is needed and ensure it points to the new sector
if(ls.Line.Front == null) General.Map.Map.CreateSidedef(ls.Line, true, newsector); if(ls.Line.Front == null) General.Map.Map.CreateSidedef(ls.Line, true, newsector);
if(ls.Line.Front.Sector != newsector) ls.Line.Front.ChangeSector(newsector); if(ls.Line.Front.Sector != newsector) ls.Line.Front.ChangeSector(newsector);
if(source != null) source.CopyPropertiesTo(ls.Line.Front); else ApplyDefaultsToSidedef(ls.Line.Front); ApplyDefaultsToSidedef(ls.Line.Front, sourceside);
} }
else else
{ {
// Create sidedef is needed and ensure it points to the new sector // Create sidedef is needed and ensure it points to the new sector
if(ls.Line.Back == null) General.Map.Map.CreateSidedef(ls.Line, false, newsector); if(ls.Line.Back == null) General.Map.Map.CreateSidedef(ls.Line, false, newsector);
if(ls.Line.Back.Sector != newsector) ls.Line.Back.ChangeSector(newsector); if(ls.Line.Back.Sector != newsector) ls.Line.Back.ChangeSector(newsector);
if(source != null) source.CopyPropertiesTo(ls.Line.Back); else ApplyDefaultsToSidedef(ls.Line.Back); ApplyDefaultsToSidedef(ls.Line.Back, sourceside);
} }
// Update line // Update line
if(ls.Line.Front != null) ls.Line.Front.RemoveUnneededTextures(removeuselessmiddle);
if(ls.Line.Back != null) ls.Line.Back.RemoveUnneededTextures(removeuselessmiddle);
ls.Line.ApplySidedFlags(); ls.Line.ApplySidedFlags();
} }
@ -456,6 +490,14 @@ namespace CodeImp.DoomBuilder.Geometry
// This joins a sector with the given lines and sides // This joins a sector with the given lines and sides
public static Sector JoinSector(List<LinedefSide> alllines, Sidedef original) public static Sector JoinSector(List<LinedefSide> alllines, Sidedef original)
{ {
SidedefSettings sourceside = new SidedefSettings();
// Take settings fro mthe original side
TakeSidedefSettings(ref sourceside, original);
// Use defaults where no settings could be found
TakeSidedefDefaults(ref sourceside);
// Go for all sides to make sidedefs // Go for all sides to make sidedefs
foreach(LinedefSide ls in alllines) foreach(LinedefSide ls in alllines)
{ {
@ -465,10 +507,8 @@ namespace CodeImp.DoomBuilder.Geometry
if(ls.Line.Front == null) if(ls.Line.Front == null)
{ {
General.Map.Map.CreateSidedef(ls.Line, true, original.Sector); General.Map.Map.CreateSidedef(ls.Line, true, original.Sector);
ls.Line.ApplySidedFlags(); ApplyDefaultsToSidedef(ls.Line.Front, sourceside);
} }
original.CopyPropertiesTo(ls.Line.Front);
ApplyDefaultsToSidedef(ls.Line.Front);
} }
else else
{ {
@ -476,10 +516,8 @@ namespace CodeImp.DoomBuilder.Geometry
if(ls.Line.Back == null) if(ls.Line.Back == null)
{ {
General.Map.Map.CreateSidedef(ls.Line, false, original.Sector); General.Map.Map.CreateSidedef(ls.Line, false, original.Sector);
ls.Line.ApplySidedFlags(); ApplyDefaultsToSidedef(ls.Line.Back, sourceside);
} }
original.CopyPropertiesTo(ls.Line.Back);
ApplyDefaultsToSidedef(ls.Line.Back);
} }
// Update line // Update line
@ -490,12 +528,32 @@ namespace CodeImp.DoomBuilder.Geometry
return original.Sector; return original.Sector;
} }
// This applies defaults to a sidedef // This takes default settings if not taken yet
private static void ApplyDefaultsToSidedef(Sidedef sd) private static void TakeSidedefDefaults(ref SidedefSettings settings)
{ {
if(sd.HighRequired() && sd.HighTexture.StartsWith("-")) sd.SetTextureHigh(General.Settings.DefaultTexture); // Use defaults where no settings could be found
if(sd.MiddleRequired() && sd.MiddleTexture.StartsWith("-")) sd.SetTextureMid(General.Settings.DefaultTexture); if(settings.newtexhigh == null) settings.newtexhigh = General.Settings.DefaultTexture;
if(sd.LowRequired() && sd.LowTexture.StartsWith("-")) sd.SetTextureLow(General.Settings.DefaultTexture); if(settings.newtexmid == null) settings.newtexmid = General.Settings.DefaultTexture;
if(settings.newtexlow == null) settings.newtexlow = General.Settings.DefaultTexture;
}
// This takes sidedef settings if not taken yet
private static void TakeSidedefSettings(ref SidedefSettings settings, Sidedef side)
{
if((side.LongHighTexture != General.Map.Map.EmptyLongName) && (settings.newtexhigh == null))
settings.newtexhigh = side.HighTexture;
if((side.LongMiddleTexture != General.Map.Map.EmptyLongName) && (settings.newtexmid == null))
settings.newtexmid = side.MiddleTexture;
if((side.LongLowTexture != General.Map.Map.EmptyLongName) && (settings.newtexlow == null))
settings.newtexlow = side.LowTexture;
}
// This applies defaults to a sidedef
private static void ApplyDefaultsToSidedef(Sidedef sd, SidedefSettings defaults)
{
if(sd.HighRequired() && sd.HighTexture.StartsWith("-")) sd.SetTextureHigh(defaults.newtexhigh);
if(sd.MiddleRequired() && sd.MiddleTexture.StartsWith("-")) sd.SetTextureMid(defaults.newtexmid);
if(sd.LowRequired() && sd.LowTexture.StartsWith("-")) sd.SetTextureLow(defaults.newtexlow);
} }
// This applies defaults to a sector // This applies defaults to a sector

View file

@ -115,6 +115,7 @@ namespace CodeImp.DoomBuilder.Map
this.ceiltexname = "-"; this.ceiltexname = "-";
this.longfloortexname = map.EmptyLongName; this.longfloortexname = map.EmptyLongName;
this.longceiltexname = map.EmptyLongName; this.longceiltexname = map.EmptyLongName;
this.triangulationneeded = true;
// We have no destructor // We have no destructor
GC.SuppressFinalize(this); GC.SuppressFinalize(this);

View file

@ -53,9 +53,9 @@ namespace CodeImp.DoomBuilder.Windows
void DisplayReady(); void DisplayReady();
void DisplayStatus(string status); void DisplayStatus(string status);
void RedrawDisplay(); void RedrawDisplay();
void ShowEditLinedefs(ICollection<Linedef> lines); DialogResult ShowEditLinedefs(ICollection<Linedef> lines);
void ShowEditSectors(ICollection<Sector> sectors); DialogResult ShowEditSectors(ICollection<Sector> sectors);
void ShowEditThings(ICollection<Thing> things); DialogResult ShowEditThings(ICollection<Thing> things);
void ShowLinedefInfo(Linedef l); void ShowLinedefInfo(Linedef l);
void ShowSectorInfo(Sector s); void ShowSectorInfo(Sector s);
void ShowThingInfo(Thing t); void ShowThingInfo(Thing t);

View file

@ -115,6 +115,7 @@ namespace CodeImp.DoomBuilder.Windows
this.xposlabel = new System.Windows.Forms.ToolStripStatusLabel(); this.xposlabel = new System.Windows.Forms.ToolStripStatusLabel();
this.yposlabel = new System.Windows.Forms.ToolStripStatusLabel(); this.yposlabel = new System.Windows.Forms.ToolStripStatusLabel();
this.panelinfo = new System.Windows.Forms.Panel(); this.panelinfo = new System.Windows.Forms.Panel();
this.modename = new System.Windows.Forms.Label();
this.vertexinfo = new CodeImp.DoomBuilder.Controls.VertexInfoPanel(); this.vertexinfo = new CodeImp.DoomBuilder.Controls.VertexInfoPanel();
this.thinginfo = new CodeImp.DoomBuilder.Controls.ThingInfoPanel(); this.thinginfo = new CodeImp.DoomBuilder.Controls.ThingInfoPanel();
this.sectorinfo = new CodeImp.DoomBuilder.Controls.SectorInfoPanel(); this.sectorinfo = new CodeImp.DoomBuilder.Controls.SectorInfoPanel();
@ -238,7 +239,7 @@ namespace CodeImp.DoomBuilder.Windows
this.menuhelp}); this.menuhelp});
this.menumain.Location = new System.Drawing.Point(0, 0); this.menumain.Location = new System.Drawing.Point(0, 0);
this.menumain.Name = "menumain"; this.menumain.Name = "menumain";
this.menumain.Size = new System.Drawing.Size(803, 24); this.menumain.Size = new System.Drawing.Size(823, 24);
this.menumain.TabIndex = 0; this.menumain.TabIndex = 0;
// //
// menufile // menufile
@ -513,7 +514,7 @@ namespace CodeImp.DoomBuilder.Windows
this.toolStripSeparator6}); this.toolStripSeparator6});
this.toolbar.Location = new System.Drawing.Point(0, 24); this.toolbar.Location = new System.Drawing.Point(0, 24);
this.toolbar.Name = "toolbar"; this.toolbar.Name = "toolbar";
this.toolbar.Size = new System.Drawing.Size(803, 25); this.toolbar.Size = new System.Drawing.Size(823, 25);
this.toolbar.TabIndex = 1; this.toolbar.TabIndex = 1;
// //
// buttonnewmap // buttonnewmap
@ -680,7 +681,7 @@ namespace CodeImp.DoomBuilder.Windows
this.statusbar.Location = new System.Drawing.Point(0, 522); this.statusbar.Location = new System.Drawing.Point(0, 522);
this.statusbar.Name = "statusbar"; this.statusbar.Name = "statusbar";
this.statusbar.ShowItemToolTips = true; this.statusbar.ShowItemToolTips = true;
this.statusbar.Size = new System.Drawing.Size(803, 23); this.statusbar.Size = new System.Drawing.Size(823, 23);
this.statusbar.TabIndex = 2; this.statusbar.TabIndex = 2;
// //
// statuslabel // statuslabel
@ -689,7 +690,7 @@ namespace CodeImp.DoomBuilder.Windows
this.statuslabel.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; this.statuslabel.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.statuslabel.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; this.statuslabel.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;
this.statuslabel.Name = "statuslabel"; this.statuslabel.Name = "statuslabel";
this.statuslabel.Size = new System.Drawing.Size(477, 18); this.statuslabel.Size = new System.Drawing.Size(497, 18);
this.statuslabel.Spring = true; this.statuslabel.Spring = true;
this.statuslabel.Text = "Initializing user interface..."; this.statuslabel.Text = "Initializing user interface...";
this.statuslabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; this.statuslabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
@ -909,6 +910,7 @@ namespace CodeImp.DoomBuilder.Windows
// //
// panelinfo // panelinfo
// //
this.panelinfo.Controls.Add(this.modename);
this.panelinfo.Controls.Add(this.vertexinfo); this.panelinfo.Controls.Add(this.vertexinfo);
this.panelinfo.Controls.Add(this.thinginfo); this.panelinfo.Controls.Add(this.thinginfo);
this.panelinfo.Controls.Add(this.sectorinfo); this.panelinfo.Controls.Add(this.sectorinfo);
@ -916,9 +918,23 @@ namespace CodeImp.DoomBuilder.Windows
this.panelinfo.Dock = System.Windows.Forms.DockStyle.Bottom; this.panelinfo.Dock = System.Windows.Forms.DockStyle.Bottom;
this.panelinfo.Location = new System.Drawing.Point(0, 416); this.panelinfo.Location = new System.Drawing.Point(0, 416);
this.panelinfo.Name = "panelinfo"; this.panelinfo.Name = "panelinfo";
this.panelinfo.Size = new System.Drawing.Size(803, 106); this.panelinfo.Size = new System.Drawing.Size(823, 106);
this.panelinfo.TabIndex = 4; this.panelinfo.TabIndex = 4;
// //
// modename
//
this.modename.AutoSize = true;
this.modename.Font = new System.Drawing.Font("Verdana", 36F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.modename.ForeColor = System.Drawing.SystemColors.GrayText;
this.modename.Location = new System.Drawing.Point(12, 20);
this.modename.Name = "modename";
this.modename.Size = new System.Drawing.Size(244, 59);
this.modename.TabIndex = 4;
this.modename.Text = "Vertices";
this.modename.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.modename.UseMnemonic = false;
this.modename.Visible = false;
//
// vertexinfo // vertexinfo
// //
this.vertexinfo.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.vertexinfo.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
@ -977,7 +993,7 @@ namespace CodeImp.DoomBuilder.Windows
this.display.Dock = System.Windows.Forms.DockStyle.Fill; this.display.Dock = System.Windows.Forms.DockStyle.Fill;
this.display.Location = new System.Drawing.Point(0, 49); this.display.Location = new System.Drawing.Point(0, 49);
this.display.Name = "display"; this.display.Name = "display";
this.display.Size = new System.Drawing.Size(803, 367); this.display.Size = new System.Drawing.Size(823, 367);
this.display.TabIndex = 5; this.display.TabIndex = 5;
this.display.MouseLeave += new System.EventHandler(this.display_MouseLeave); this.display.MouseLeave += new System.EventHandler(this.display_MouseLeave);
this.display.Paint += new System.Windows.Forms.PaintEventHandler(this.display_Paint); this.display.Paint += new System.Windows.Forms.PaintEventHandler(this.display_Paint);
@ -997,7 +1013,7 @@ namespace CodeImp.DoomBuilder.Windows
// MainForm // MainForm
// //
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.ClientSize = new System.Drawing.Size(803, 545); this.ClientSize = new System.Drawing.Size(823, 545);
this.Controls.Add(this.display); this.Controls.Add(this.display);
this.Controls.Add(this.panelinfo); this.Controls.Add(this.panelinfo);
this.Controls.Add(this.statusbar); this.Controls.Add(this.statusbar);
@ -1026,6 +1042,7 @@ namespace CodeImp.DoomBuilder.Windows
this.statusbar.ResumeLayout(false); this.statusbar.ResumeLayout(false);
this.statusbar.PerformLayout(); this.statusbar.PerformLayout();
this.panelinfo.ResumeLayout(false); this.panelinfo.ResumeLayout(false);
this.panelinfo.PerformLayout();
this.ResumeLayout(false); this.ResumeLayout(false);
this.PerformLayout(); this.PerformLayout();
@ -1112,5 +1129,6 @@ namespace CodeImp.DoomBuilder.Windows
private System.Windows.Forms.ToolStripMenuItem itemgridinc; private System.Windows.Forms.ToolStripMenuItem itemgridinc;
private System.Windows.Forms.ToolStripMenuItem itemgriddec; private System.Windows.Forms.ToolStripMenuItem itemgriddec;
private System.Windows.Forms.ToolStripMenuItem itemgridsetup; private System.Windows.Forms.ToolStripMenuItem itemgridsetup;
private System.Windows.Forms.Label modename;
} }
} }

View file

@ -1486,6 +1486,13 @@ namespace CodeImp.DoomBuilder.Windows
#region ================== Info Panels #region ================== Info Panels
// This displays the current mode name
internal void DisplayModeName(string name)
{
modename.Text = name;
modename.Refresh();
}
// This hides all info panels // This hides all info panels
public void HideInfo() public void HideInfo()
{ {
@ -1494,52 +1501,82 @@ namespace CodeImp.DoomBuilder.Windows
if(vertexinfo.Visible) vertexinfo.Hide(); if(vertexinfo.Visible) vertexinfo.Hide();
if(sectorinfo.Visible) sectorinfo.Hide(); if(sectorinfo.Visible) sectorinfo.Hide();
if(thinginfo.Visible) thinginfo.Hide(); if(thinginfo.Visible) thinginfo.Hide();
modename.Visible = (General.Map != null);
modename.Refresh();
} }
// Show linedef info // Show linedef info
public void ShowLinedefInfo(Linedef l) { linedefinfo.ShowInfo(l); } public void ShowLinedefInfo(Linedef l)
{
modename.Visible = false;
linedefinfo.ShowInfo(l);
}
// Show vertex info // Show vertex info
public void ShowVertexInfo(Vertex v) { vertexinfo.ShowInfo(v); } public void ShowVertexInfo(Vertex v)
{
modename.Visible = false;
vertexinfo.ShowInfo(v);
}
// Show sector info // Show sector info
public void ShowSectorInfo(Sector s) { sectorinfo.ShowInfo(s); } public void ShowSectorInfo(Sector s)
{
modename.Visible = false;
sectorinfo.ShowInfo(s);
}
// Show thing info // Show thing info
public void ShowThingInfo(Thing t) { thinginfo.ShowInfo(t); } public void ShowThingInfo(Thing t)
{
modename.Visible = false;
thinginfo.ShowInfo(t);
}
#endregion #endregion
#region ================== Dialogs #region ================== Dialogs
// This shows the dialog to edit lines // This shows the dialog to edit lines
public void ShowEditLinedefs(ICollection<Linedef> lines) public DialogResult ShowEditLinedefs(ICollection<Linedef> lines)
{ {
DialogResult result;
// Show line edit dialog // Show line edit dialog
LinedefEditForm f = new LinedefEditForm(); LinedefEditForm f = new LinedefEditForm();
f.Setup(lines); f.Setup(lines);
f.ShowDialog(this); result = f.ShowDialog(this);
f.Dispose(); f.Dispose();
return result;
} }
// This shows the dialog to edit sectors // This shows the dialog to edit sectors
public void ShowEditSectors(ICollection<Sector> sectors) public DialogResult ShowEditSectors(ICollection<Sector> sectors)
{ {
DialogResult result;
// Show sector edit dialog // Show sector edit dialog
SectorEditForm f = new SectorEditForm(); SectorEditForm f = new SectorEditForm();
f.Setup(sectors); f.Setup(sectors);
f.ShowDialog(this); result = f.ShowDialog(this);
f.Dispose(); f.Dispose();
return result;
} }
// This shows the dialog to edit things // This shows the dialog to edit things
public void ShowEditThings(ICollection<Thing> things) public DialogResult ShowEditThings(ICollection<Thing> things)
{ {
DialogResult result;
// Show thing edit dialog // Show thing edit dialog
ThingEditForm f = new ThingEditForm(); ThingEditForm f = new ThingEditForm();
f.Setup(things); f.Setup(things);
f.ShowDialog(this); result = f.ShowDialog(this);
f.Dispose(); f.Dispose();
return result;
} }
#endregion #endregion

View file

@ -177,6 +177,9 @@
<metadata name="panelinfo.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <metadata name="panelinfo.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value> <value>True</value>
</metadata> </metadata>
<metadata name="modename.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="vertexinfo.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <metadata name="vertexinfo.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value> <value>True</value>
</metadata> </metadata>