From ff0fbdad9177f635c3da81ec44fdaaad380d6fad Mon Sep 17 00:00:00 2001 From: codeimp Date: Thu, 2 Sep 2010 20:42:38 +0000 Subject: [PATCH] @ work on (G)ZDoom Editing plugin --- .../GZDoomEditing/GZDoomEditing.csproj | 3 + .../GZDoomEditing/General/BuilderPlug.cs | 4 + .../VisualModes/BaseVisualMode.cs | 19 ++++ .../GZDoomEditing/VisualModes/SectorData.cs | 81 ++++++++++++++++++ .../GZDoomEditing/VisualModes/SectorLevel.cs | 25 ++++++ .../VisualModes/SectorLevelType.cs | 19 ++++ Tests/UDMF/udmfexample.wad | Bin 35127 -> 38399 bytes 7 files changed, 151 insertions(+) create mode 100644 Source/Plugins/GZDoomEditing/VisualModes/SectorData.cs create mode 100644 Source/Plugins/GZDoomEditing/VisualModes/SectorLevel.cs create mode 100644 Source/Plugins/GZDoomEditing/VisualModes/SectorLevelType.cs diff --git a/Source/Plugins/GZDoomEditing/GZDoomEditing.csproj b/Source/Plugins/GZDoomEditing/GZDoomEditing.csproj index 82b8bc1d..b4a7b610 100644 --- a/Source/Plugins/GZDoomEditing/GZDoomEditing.csproj +++ b/Source/Plugins/GZDoomEditing/GZDoomEditing.csproj @@ -55,6 +55,9 @@ + + + diff --git a/Source/Plugins/GZDoomEditing/General/BuilderPlug.cs b/Source/Plugins/GZDoomEditing/General/BuilderPlug.cs index 3d1ca5c5..25cdcad7 100644 --- a/Source/Plugins/GZDoomEditing/General/BuilderPlug.cs +++ b/Source/Plugins/GZDoomEditing/General/BuilderPlug.cs @@ -103,6 +103,10 @@ namespace CodeImp.DoomBuilder.GZDoomEditing // Keep a static reference me = this; + // Settings + showvisualthings = 2; + usegravity = false; + usehighlight = true; LoadSettings(); } diff --git a/Source/Plugins/GZDoomEditing/VisualModes/BaseVisualMode.cs b/Source/Plugins/GZDoomEditing/VisualModes/BaseVisualMode.cs index 87c48f8f..9ea5ff56 100644 --- a/Source/Plugins/GZDoomEditing/VisualModes/BaseVisualMode.cs +++ b/Source/Plugins/GZDoomEditing/VisualModes/BaseVisualMode.cs @@ -68,6 +68,9 @@ namespace CodeImp.DoomBuilder.GZDoomEditing private VisualPickResult target; private double lastpicktime; private bool locktarget; + + // This keeps extra sector info + private Dictionary sectordata; // This is true when a selection was made because the action is performed // on an object that was not selected. In this case the previous selection @@ -132,6 +135,7 @@ namespace CodeImp.DoomBuilder.GZDoomEditing // Initialize this.gravity = new Vector3D(0.0f, 0.0f, 0.0f); this.selectedobjects = new List(); + this.sectordata = new Dictionary(General.Map.Map.Sectors.Count); // We have no destructor GC.SuppressFinalize(this); @@ -153,6 +157,20 @@ namespace CodeImp.DoomBuilder.GZDoomEditing #endregion #region ================== Methods + + // This requests a sector's extra data + internal SectorData GetSectorData(Sector s) + { + if(sectordata.ContainsKey(s)) + { + return sectordata[s]; + } + else + { + // TODO: Build the sector data now? + return new SectorData(this, s); + } + } // This calculates brightness level internal int CalculateBrightness(int level) @@ -544,6 +562,7 @@ namespace CodeImp.DoomBuilder.GZDoomEditing protected override void ResourcesReloaded() { base.ResourcesReloaded(); + sectordata = new Dictionary(General.Map.Map.Sectors.Count); PickTarget(); } diff --git a/Source/Plugins/GZDoomEditing/VisualModes/SectorData.cs b/Source/Plugins/GZDoomEditing/VisualModes/SectorData.cs new file mode 100644 index 00000000..81d8c399 --- /dev/null +++ b/Source/Plugins/GZDoomEditing/VisualModes/SectorData.cs @@ -0,0 +1,81 @@ +#region === Copyright (c) 2010 Pascal van der Heiden === + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Globalization; +using System.Text; +using CodeImp.DoomBuilder.Geometry; +using CodeImp.DoomBuilder.Map; +using CodeImp.DoomBuilder.Rendering; + +#endregion + +namespace CodeImp.DoomBuilder.GZDoomEditing +{ + internal class SectorData + { + #region ================== Variables + + // Sector for which this data is + private Sector sector; + + // First level is the sector's absolute ceiling + // Last level is the sector's absolute floor + private List levels; + + #endregion + + #region ================== Properties + + public Sector Sector { get { return sector; } } + public List Levels { get { return levels; } } + + #endregion + + #region ================== Constructor / Destructor + + // Constructor + public SectorData(BaseVisualMode mode, Sector s) + { + int color = -1, light = s.Brightness; + bool absolute = true; + + // Initialize + this.sector = s; + this.levels = new List(2); + + // Create floor + SectorLevel fl = new SectorLevel(); + fl.type = SectorLevelType.Floor; + fl.plane = new Plane(new Vector3D(0, 0, 1), s.FloorHeight); + fl.color = -1; + this.levels.Add(fl); + + // Create ceiling + SectorLevel cl = new SectorLevel(); + cl.type = SectorLevelType.Ceiling; + cl.plane = new Plane(new Vector3D(0, 0, -1), s.CeilHeight); + try + { + // Fetch ZDoom fields + color = s.Fields.ContainsKey("lightcolor") ? (int)s.Fields["lightcolor"].Value : -1; + light = s.Fields.ContainsKey("lightfloor") ? (int)s.Fields["lightfloor"].Value : 0; + absolute = s.Fields.ContainsKey("lightfloorabsolute") ? (bool)s.Fields["lightfloorabsolute"].Value : false; + } + catch(Exception) { } + if(!absolute) light = s.Brightness + light; + PixelColor lightcolor = PixelColor.FromInt(color); + PixelColor brightness = PixelColor.FromInt(mode.CalculateBrightness(light)); + PixelColor finalcolor = PixelColor.Modulate(lightcolor, brightness); + cl.color = finalcolor.WithAlpha(255).ToInt(); + this.levels.Add(cl); + } + + #endregion + + #region ================== Public Methods + + #endregion + } +} diff --git a/Source/Plugins/GZDoomEditing/VisualModes/SectorLevel.cs b/Source/Plugins/GZDoomEditing/VisualModes/SectorLevel.cs new file mode 100644 index 00000000..617dc008 --- /dev/null +++ b/Source/Plugins/GZDoomEditing/VisualModes/SectorLevel.cs @@ -0,0 +1,25 @@ +#region === Copyright (c) 2010 Pascal van der Heiden === + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Globalization; +using System.Text; +using CodeImp.DoomBuilder.Geometry; + +#endregion + +namespace CodeImp.DoomBuilder.GZDoomEditing +{ + internal struct SectorLevel + { + // Type of level + public SectorLevelType type; + + // Plane in the sector + public Plane plane; + + // Color below the plane (includes brightness) + public int color; + } +} diff --git a/Source/Plugins/GZDoomEditing/VisualModes/SectorLevelType.cs b/Source/Plugins/GZDoomEditing/VisualModes/SectorLevelType.cs new file mode 100644 index 00000000..f85db2a3 --- /dev/null +++ b/Source/Plugins/GZDoomEditing/VisualModes/SectorLevelType.cs @@ -0,0 +1,19 @@ +#region === Copyright (c) 2010 Pascal van der Heiden === + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Globalization; +using System.Text; + +#endregion + +namespace CodeImp.DoomBuilder.GZDoomEditing +{ + internal enum SectorLevelType + { + Light, + Floor, + Ceiling + } +} diff --git a/Tests/UDMF/udmfexample.wad b/Tests/UDMF/udmfexample.wad index 41a1100bde7b68864e2f53b1720bf4848142cf30..b1ad6a87cc99eb273aa2b6c9d07ee72f4408da91 100644 GIT binary patch delta 8223 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 G;(r09=Iq1( delta 6587 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