From 616d535c88f10d4f34891d0af516dd854f945887 Mon Sep 17 00:00:00 2001 From: codeimp Date: Fri, 15 Jun 2007 22:38:42 +0000 Subject: [PATCH] added stuff --- Build/Builder.cfg | 4 +- Source/Builder.csproj | 11 +++ Source/Editing/EditMode.cs | 8 +- Source/Editing/FrozenOverviewMode.cs | 12 +++ Source/Editing/ViewClassicMode.cs | 8 +- Source/General/General.cs | 13 ++- Source/General/MapManager.cs | 4 +- Source/Interface/AboutForm.Designer.cs | 70 ++++++++++++++ Source/Interface/AboutForm.cs | 39 ++++++++ Source/Interface/AboutForm.resx | 123 ++++++++++++++++++++++++ Source/Interface/MainForm.Designer.cs | 31 +++++- Source/Interface/MainForm.cs | 31 ++++++ Source/Interface/MainForm.resx | 3 + Source/Map/Linedef.cs | 4 +- Source/Properties/Resources.Designer.cs | 7 ++ Source/Properties/Resources.resx | 3 + Source/Rendering/Graphics.cs | 14 ++- Source/Rendering/Renderer2D.cs | 96 +++++++++++++++++- Source/Rendering/Renderer3D.cs | 6 +- Source/Resources/Splash2small.png | Bin 0 -> 17598 bytes 20 files changed, 472 insertions(+), 15 deletions(-) create mode 100644 Source/Interface/AboutForm.Designer.cs create mode 100644 Source/Interface/AboutForm.cs create mode 100644 Source/Interface/AboutForm.resx create mode 100644 Source/Resources/Splash2small.png diff --git a/Build/Builder.cfg b/Build/Builder.cfg index 12f66d2e..7861f0b7 100644 --- a/Build/Builder.cfg +++ b/Build/Builder.cfg @@ -2,9 +2,9 @@ mainwindow { positionx = 27; - windowstate = 2; - positiony = 15; sizeheight = 572; + positiony = 15; + windowstate = 2; sizewidth = 739; } diff --git a/Source/Builder.csproj b/Source/Builder.csproj index dfc63be0..f8686a77 100644 --- a/Source/Builder.csproj +++ b/Source/Builder.csproj @@ -53,6 +53,12 @@ + + Form + + + AboutForm.cs + Form @@ -105,6 +111,10 @@ + + Designer + AboutForm.cs + Designer MainForm.cs @@ -125,6 +135,7 @@ + diff --git a/Source/Editing/EditMode.cs b/Source/Editing/EditMode.cs index bc23f5a7..6cf4d069 100644 --- a/Source/Editing/EditMode.cs +++ b/Source/Editing/EditMode.cs @@ -27,6 +27,7 @@ using System.Reflection; using CodeImp.DoomBuilder.Interface; using CodeImp.DoomBuilder.IO; using CodeImp.DoomBuilder.Map; +using CodeImp.DoomBuilder.Rendering; #endregion @@ -39,7 +40,10 @@ namespace CodeImp.DoomBuilder.Editing #endregion #region ================== Variables - + + // Graphics + protected Graphics graphics; + // Disposing protected bool isdisposed = false; @@ -58,6 +62,7 @@ namespace CodeImp.DoomBuilder.Editing public EditMode() { // Initialize + this.graphics = General.Map.Graphics; // We have no destructor GC.SuppressFinalize(this); @@ -89,6 +94,7 @@ namespace CodeImp.DoomBuilder.Editing public virtual void MouseMove(MouseEventArgs e) { } public virtual void MouseUp(MouseEventArgs e) { } public virtual void Cancel() { } + public virtual void RedrawDisplay() { } #endregion } diff --git a/Source/Editing/FrozenOverviewMode.cs b/Source/Editing/FrozenOverviewMode.cs index 9d9b5866..88e5ee4e 100644 --- a/Source/Editing/FrozenOverviewMode.cs +++ b/Source/Editing/FrozenOverviewMode.cs @@ -27,6 +27,7 @@ using System.Reflection; using CodeImp.DoomBuilder.Interface; using CodeImp.DoomBuilder.IO; using CodeImp.DoomBuilder.Map; +using CodeImp.DoomBuilder.Rendering; #endregion @@ -72,6 +73,17 @@ namespace CodeImp.DoomBuilder.Editing #region ================== Methods + // This redraws the display + public override void RedrawDisplay() + { + if(renderer.StartRendering()) + { + renderer.RenderLinedefs(General.Map.Data.Linedefs); + + renderer.FinishRendering(); + } + } + #endregion } } diff --git a/Source/Editing/ViewClassicMode.cs b/Source/Editing/ViewClassicMode.cs index c0ecd04a..a71e79fa 100644 --- a/Source/Editing/ViewClassicMode.cs +++ b/Source/Editing/ViewClassicMode.cs @@ -27,6 +27,7 @@ using System.Reflection; using CodeImp.DoomBuilder.Interface; using CodeImp.DoomBuilder.IO; using CodeImp.DoomBuilder.Map; +using CodeImp.DoomBuilder.Rendering; #endregion @@ -40,6 +41,9 @@ namespace CodeImp.DoomBuilder.Editing #region ================== Variables + // Graphics + protected Renderer2D renderer; + #endregion #region ================== Properties @@ -52,7 +56,7 @@ namespace CodeImp.DoomBuilder.Editing public ViewClassicMode() { // Initialize - + this.renderer = graphics.Renderer2D; } // Diposer @@ -62,7 +66,7 @@ namespace CodeImp.DoomBuilder.Editing if(!isdisposed) { // Clean up - + // Dispose base base.Dispose(); } diff --git a/Source/General/General.cs b/Source/General/General.cs index 9898ddef..d35afe63 100644 --- a/Source/General/General.cs +++ b/Source/General/General.cs @@ -27,6 +27,7 @@ using System.Reflection; using CodeImp.DoomBuilder.Interface; using CodeImp.DoomBuilder.IO; using CodeImp.DoomBuilder.Map; +using CodeImp.DoomBuilder.Geometry; #endregion @@ -215,7 +216,7 @@ namespace CodeImp.DoomBuilder { MapOptions newoptions; MapOptionsForm optionswindow; - + // Empty options newoptions = new MapOptions(); @@ -252,6 +253,16 @@ namespace CodeImp.DoomBuilder return false; } + // TEST: + Vertex v1 = map.Data.CreateVertex(new Vector2D(20f, 20f)); + Vertex v2 = map.Data.CreateVertex(new Vector2D(-20f, 20f)); + Vertex v3 = map.Data.CreateVertex(new Vector2D(-20f, -20f)); + Vertex v4 = map.Data.CreateVertex(new Vector2D(20f, -20f)); + map.Data.CreateLinedef(v1, v2); + map.Data.CreateLinedef(v2, v3); + map.Data.CreateLinedef(v3, v4); + map.Data.CreateLinedef(v4, v1); + // Done mainwindow.UpdateMenus(); mainwindow.DisplayReady(); diff --git a/Source/General/MapManager.cs b/Source/General/MapManager.cs index 2cb8dfad..2475bfea 100644 --- a/Source/General/MapManager.cs +++ b/Source/General/MapManager.cs @@ -65,10 +65,12 @@ namespace CodeImp.DoomBuilder public string FilePathName { get { return filepathname; } } public string FileTitle { get { return filetitle; } } public MapOptions Options { get { return options; } } + public MapSet Data { get { return data; } } public EditMode Mode { get { return mode; } } public bool IsChanged { get { return changed; } set { changed = value; } } public bool IsDisposed { get { return isdisposed; } } - + public Graphics Graphics { get { return graphics; } } + #endregion #region ================== Constructor / Disposer diff --git a/Source/Interface/AboutForm.Designer.cs b/Source/Interface/AboutForm.Designer.cs new file mode 100644 index 00000000..9c1ee94c --- /dev/null +++ b/Source/Interface/AboutForm.Designer.cs @@ -0,0 +1,70 @@ +namespace CodeImp.DoomBuilder.Interface +{ + partial class AboutForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if(disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.PictureBox pictureBox1; + pictureBox1 = new System.Windows.Forms.PictureBox(); + ((System.ComponentModel.ISupportInitialize)(pictureBox1)).BeginInit(); + this.SuspendLayout(); + // + // pictureBox1 + // + pictureBox1.Image = global::CodeImp.DoomBuilder.Properties.Resources.Splash2small; + pictureBox1.Location = new System.Drawing.Point(12, 12); + pictureBox1.Name = "pictureBox1"; + pictureBox1.Size = new System.Drawing.Size(137, 82); + pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; + pictureBox1.TabIndex = 0; + pictureBox1.TabStop = false; + // + // AboutForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 14F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(428, 263); + this.Controls.Add(pictureBox1); + this.DoubleBuffered = true; + this.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "AboutForm"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "About Doom Builder"; + ((System.ComponentModel.ISupportInitialize)(pictureBox1)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + } +} \ No newline at end of file diff --git a/Source/Interface/AboutForm.cs b/Source/Interface/AboutForm.cs new file mode 100644 index 00000000..a0743fbb --- /dev/null +++ b/Source/Interface/AboutForm.cs @@ -0,0 +1,39 @@ + +#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.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +#endregion + +namespace CodeImp.DoomBuilder.Interface +{ + public partial class AboutForm : Form + { + // Constructor + public AboutForm() + { + // Initialize + InitializeComponent(); + } + } +} \ No newline at end of file diff --git a/Source/Interface/AboutForm.resx b/Source/Interface/AboutForm.resx new file mode 100644 index 00000000..cf83098e --- /dev/null +++ b/Source/Interface/AboutForm.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + \ No newline at end of file diff --git a/Source/Interface/MainForm.Designer.cs b/Source/Interface/MainForm.Designer.cs index 79f2b058..4f56d3de 100644 --- a/Source/Interface/MainForm.Designer.cs +++ b/Source/Interface/MainForm.Designer.cs @@ -28,6 +28,7 @@ namespace CodeImp.DoomBuilder.Interface /// private void InitializeComponent() { + this.components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); this.menumain = new System.Windows.Forms.MenuStrip(); this.menufile = new System.Windows.Forms.ToolStripMenuItem(); @@ -45,6 +46,9 @@ namespace CodeImp.DoomBuilder.Interface this.statuslabel = new System.Windows.Forms.ToolStripStatusLabel(); this.panelinfo = new System.Windows.Forms.Panel(); this.display = new System.Windows.Forms.PictureBox(); + this.redrawtimer = new System.Windows.Forms.Timer(this.components); + this.menuhelp = new System.Windows.Forms.ToolStripMenuItem(); + this.itemhelpabout = new System.Windows.Forms.ToolStripMenuItem(); this.menumain.SuspendLayout(); this.statusbar.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.display)).BeginInit(); @@ -53,7 +57,8 @@ namespace CodeImp.DoomBuilder.Interface // menumain // this.menumain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.menufile}); + this.menufile, + this.menuhelp}); this.menumain.Location = new System.Drawing.Point(0, 0); this.menumain.Name = "menumain"; this.menumain.Size = new System.Drawing.Size(731, 24); @@ -184,11 +189,32 @@ namespace CodeImp.DoomBuilder.Interface this.display.MouseLeave += new System.EventHandler(this.display_MouseLeave); this.display.MouseDown += new System.Windows.Forms.MouseEventHandler(this.display_MouseDown); this.display.MouseMove += new System.Windows.Forms.MouseEventHandler(this.display_MouseMove); + this.display.Paint += new System.Windows.Forms.PaintEventHandler(this.display_Paint); this.display.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.display_MouseDoubleClick); this.display.MouseClick += new System.Windows.Forms.MouseEventHandler(this.display_MouseClick); this.display.MouseUp += new System.Windows.Forms.MouseEventHandler(this.display_MouseUp); this.display.MouseEnter += new System.EventHandler(this.display_MouseEnter); // + // redrawtimer + // + this.redrawtimer.Interval = 1; + this.redrawtimer.Tick += new System.EventHandler(this.redrawtimer_Tick); + // + // menuhelp + // + this.menuhelp.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.itemhelpabout}); + this.menuhelp.Name = "menuhelp"; + this.menuhelp.Size = new System.Drawing.Size(40, 20); + this.menuhelp.Text = "Help"; + // + // itemhelpabout + // + this.itemhelpabout.Name = "itemhelpabout"; + this.itemhelpabout.Size = new System.Drawing.Size(191, 22); + this.itemhelpabout.Text = "About Doom Builder..."; + this.itemhelpabout.Click += new System.EventHandler(this.itemhelpabout_Click); + // // MainForm // this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; @@ -238,5 +264,8 @@ namespace CodeImp.DoomBuilder.Interface private System.Windows.Forms.ToolStripMenuItem itemexit; private System.Windows.Forms.ToolStripStatusLabel statuslabel; private System.Windows.Forms.ToolStripMenuItem itemclosemap; + private System.Windows.Forms.Timer redrawtimer; + private System.Windows.Forms.ToolStripMenuItem menuhelp; + private System.Windows.Forms.ToolStripMenuItem itemhelpabout; } } \ No newline at end of file diff --git a/Source/Interface/MainForm.cs b/Source/Interface/MainForm.cs index 84a822e8..05a3b66b 100644 --- a/Source/Interface/MainForm.cs +++ b/Source/Interface/MainForm.cs @@ -177,6 +177,23 @@ namespace CodeImp.DoomBuilder.Interface this.Update(); } + // Display needs repainting + private void display_Paint(object sender, PaintEventArgs e) + { + // Repaint on demand + if(General.Map != null) redrawtimer.Enabled = true; + } + + // Redraw requested + private void redrawtimer_Tick(object sender, EventArgs e) + { + // Disable timer (only redraw once) + redrawtimer.Enabled = false; + + // Redraw now + if(General.Map != null) General.Map.Mode.RedrawDisplay(); + } + // Mouse click private void display_MouseClick(object sender, MouseEventArgs e) { if(General.Map != null) General.Map.Mode.MouseClick(e); } @@ -233,5 +250,19 @@ namespace CodeImp.DoomBuilder.Interface } #endregion + + #region ================== Help Menu + + // About clicked + private void itemhelpabout_Click(object sender, EventArgs e) + { + AboutForm aboutform; + + // Show about dialog + aboutform = new AboutForm(); + aboutform.ShowDialog(this); + } + + #endregion } } \ No newline at end of file diff --git a/Source/Interface/MainForm.resx b/Source/Interface/MainForm.resx index a7fbc870..605068ce 100644 --- a/Source/Interface/MainForm.resx +++ b/Source/Interface/MainForm.resx @@ -141,6 +141,9 @@ True + + 304, 17 + True diff --git a/Source/Map/Linedef.cs b/Source/Map/Linedef.cs index 6d3e689f..eba4e12a 100644 --- a/Source/Map/Linedef.cs +++ b/Source/Map/Linedef.cs @@ -116,8 +116,8 @@ namespace CodeImp.DoomBuilder.Map end.DetachLinedef(endvertexlistitem); // Dispose sidedefs - front.Dispose(); - back.Dispose(); + if(front != null) front.Dispose(); + if(back != null) back.Dispose(); // Clean up mainlistitem = null; diff --git a/Source/Properties/Resources.Designer.cs b/Source/Properties/Resources.Designer.cs index 4760c60a..065c29ee 100644 --- a/Source/Properties/Resources.Designer.cs +++ b/Source/Properties/Resources.Designer.cs @@ -66,5 +66,12 @@ namespace CodeImp.DoomBuilder.Properties { return ((System.Drawing.Bitmap)(obj)); } } + + internal static System.Drawing.Bitmap Splash2small { + get { + object obj = ResourceManager.GetObject("Splash2small", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } } } diff --git a/Source/Properties/Resources.resx b/Source/Properties/Resources.resx index 3e021267..92f4714e 100644 --- a/Source/Properties/Resources.resx +++ b/Source/Properties/Resources.resx @@ -121,4 +121,7 @@ ..\Resources\Splash2.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\Splash2small.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/Source/Rendering/Graphics.cs b/Source/Rendering/Graphics.cs index a3c049a9..91cfa5f9 100644 --- a/Source/Rendering/Graphics.cs +++ b/Source/Rendering/Graphics.cs @@ -50,6 +50,8 @@ namespace CodeImp.DoomBuilder.Rendering private Control rendertarget; private Caps devicecaps; private Device d3dd; + private Renderer2D renderer2d; + private Renderer3D renderer3d; // Disposing private bool isdisposed = false; @@ -58,9 +60,11 @@ namespace CodeImp.DoomBuilder.Rendering #region ================== Properties - // Disposing + public Device Device { get { return d3dd; } } public bool IsDisposed { get { return isdisposed; } } - + public Renderer2D Renderer2D { get { return renderer2d; } } + public Renderer3D Renderer3D { get { return renderer3d; } } + #endregion #region ================== Constructor / Disposer @@ -82,6 +86,8 @@ namespace CodeImp.DoomBuilder.Rendering if(!isdisposed) { // Clean up + renderer2d.Dispose(); + renderer3d.Dispose(); d3dd.Dispose(); rendertarget = null; @@ -210,6 +216,10 @@ namespace CodeImp.DoomBuilder.Rendering // Initialize settings SetupSettings(); + // Create renderers + renderer2d = new Renderer2D(this); + renderer3d = new Renderer3D(this); + // Done return true; } diff --git a/Source/Rendering/Renderer2D.cs b/Source/Rendering/Renderer2D.cs index db89369b..0e6403ed 100644 --- a/Source/Rendering/Renderer2D.cs +++ b/Source/Rendering/Renderer2D.cs @@ -27,6 +27,8 @@ using System.Reflection; using System.Drawing; using Microsoft.DirectX.Direct3D; using System.ComponentModel; +using CodeImp.DoomBuilder.Map; +using Microsoft.DirectX; #endregion @@ -40,6 +42,12 @@ namespace CodeImp.DoomBuilder.Rendering #region ================== Variables + // Owner + private Graphics graphics; + + // Main objects + private Line line; + // Disposing private bool isdisposed = false; @@ -55,10 +63,16 @@ namespace CodeImp.DoomBuilder.Rendering #region ================== Constructor / Disposer // Constructor - public Renderer2D() + public Renderer2D(Graphics graphics) { // Initialize + this.graphics = graphics; + // Create line object + line = new Line(graphics.Device); + line.Width = 2f; + line.Antialias = true; + // We have no destructor GC.SuppressFinalize(this); } @@ -70,7 +84,8 @@ namespace CodeImp.DoomBuilder.Rendering if(!isdisposed) { // Clean up - + line.Dispose(); + // Done isdisposed = true; } @@ -80,6 +95,83 @@ namespace CodeImp.DoomBuilder.Rendering #region ================== Methods + // This begins a drawing session + public bool StartRendering() + { + int coopresult; + + // When minimized, do not render anything + if(General.MainWindow.WindowState != FormWindowState.Minimized) + { + // Test the cooperative level + graphics.Device.CheckCooperativeLevel(out coopresult); + + // Check if device must be reset + if(coopresult == (int)ResultCode.DeviceNotReset) + { + // TODO: Device is lost and must be reset now + //return Reset(); + return false; + } + // Check if device is lost + else if(coopresult == (int)ResultCode.DeviceLost) + { + // Device is lost and cannot be reset now + return false; + } + + // Clear the screen + graphics.Device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, 0, 1f, 0); + + // Ready to render + graphics.Device.BeginScene(); + return true; + } + else + { + // Minimized, you cannot see anything + return false; + } + } + + // This ends a drawing session + public void FinishRendering() + { + try + { + // Done + graphics.Device.EndScene(); + + // Display the scene + graphics.Device.Present(); + } + // Errors are not a problem here + catch(Exception) { } + } + + // This renders a set of Linedefs + public void RenderLinedefs(IEnumerable linedefs) + { + Vector2[] vertices = new Vector2[2]; + + line.Begin(); + + // Go for all linedefs + foreach(Linedef l in linedefs) + { + // Make vertices + vertices[0].X = l.Start.Position.x; + vertices[0].Y = l.Start.Position.y; + vertices[1].X = l.End.Position.x; + vertices[1].Y = l.End.Position.y; + + // Draw line + line.Draw(vertices, -1); + } + + line.End(); + } + #endregion } } diff --git a/Source/Rendering/Renderer3D.cs b/Source/Rendering/Renderer3D.cs index 61bc2a76..6fc2f065 100644 --- a/Source/Rendering/Renderer3D.cs +++ b/Source/Rendering/Renderer3D.cs @@ -40,6 +40,9 @@ namespace CodeImp.DoomBuilder.Rendering #region ================== Variables + // Owner + private Graphics graphics; + // Disposing private bool isdisposed = false; @@ -55,9 +58,10 @@ namespace CodeImp.DoomBuilder.Rendering #region ================== Constructor / Disposer // Constructor - public Renderer3D() + public Renderer3D(Graphics graphics) { // Initialize + this.graphics = graphics; // We have no destructor GC.SuppressFinalize(this); diff --git a/Source/Resources/Splash2small.png b/Source/Resources/Splash2small.png new file mode 100644 index 0000000000000000000000000000000000000000..372ce4361977fcfa6735f7a601001a940016de6b GIT binary patch literal 17598 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 literal 0 HcmV?d00001