diff --git a/Source/Core/Controls/ImageBrowserItem.cs b/Source/Core/Controls/ImageBrowserItem.cs index b805d0508146d518383d5c07b2489cdb2a986ad7..2bed6729f49944d34a9aee1fc4761c535c019b29 100755 --- a/Source/Core/Controls/ImageBrowserItem.cs +++ b/Source/Core/Controls/ImageBrowserItem.cs @@ -46,9 +46,9 @@ namespace CodeImp.DoomBuilder.Controls public ImageData Icon { get { return icon; } } public ImageBrowserItemType ItemType { get { return itemtype; } } public virtual bool IsPreviewLoaded { get { return icon.IsPreviewLoaded; } } - public bool ShowFullName { set { showfullname = value; } } - public virtual string TextureName { get { return (showfullname ? icon.Name : icon.ShortName); } } - public virtual int TextureNameWidth { get { return (showfullname ? namewidth : shortnamewidth); } } + public bool ShowFullName { set { showfullname = value; } get { return showfullname && (!(icon is PK3FileImage) || !((PK3FileImage)icon).IsBadForLongTextureNames); } } + public virtual string TextureName { get { return (ShowFullName ? icon.Name : icon.ShortName); } } + public virtual int TextureNameWidth { get { return (ShowFullName ? namewidth : shortnamewidth); } } public string ToolTip { get { return tooltip; } } #endregion diff --git a/Source/Core/Data/DataManager.cs b/Source/Core/Data/DataManager.cs index dc2086505077ff62a0013ec8951f0e83cf36740a..1271ab441e931c722088b609be4893d0709df557 100755 --- a/Source/Core/Data/DataManager.cs +++ b/Source/Core/Data/DataManager.cs @@ -181,6 +181,7 @@ namespace CodeImp.DoomBuilder.Data public bool IsDisposed { get { return isdisposed; } } public ImageData MissingTexture3D { get { return missingtexture3d; } } public ImageData UnknownTexture3D { get { return unknowntexture3d; } } + public ImageData UnknownImage { get { return unknownimage; } } public ImageData Hourglass3D { get { return hourglass3d; } } public ImageData Crosshair3D { get { return crosshair; } } public ImageData CrosshairBusy3D { get { return crosshairbusy; } } @@ -1338,11 +1339,21 @@ namespace CodeImp.DoomBuilder.Data return GetFlatExists(Lump.MakeLongName(name)); //mxd } - // This checks if a flat is known - public bool GetFlatExists(long longname) - { - return flats.ContainsKey(longname) || flatnamesshorttofull.ContainsKey(longname); - } + // This checks if a flat is known + public bool GetFlatExists(long longname) + { + // [ZZ] return nonexistent name for bad flats. + if (flats.ContainsKey(longname)) + { + // [ZZ] long name is long. a doom flat with a long name is invalid. + ImageData id = flats[longname]; + if (id is PK3FileImage && ((PK3FileImage)id).IsBadForLongTextureNames) + return false; + return true; + } + + return flatnamesshorttofull.ContainsKey(longname); + } // This returns an image by string public ImageData GetFlatImage(string name) @@ -1358,8 +1369,17 @@ namespace CodeImp.DoomBuilder.Data // Does this flat exist? if(flats.ContainsKey(longname) && (flats[longname] is TEXTURESImage || flats[longname] is HiResImage)) return flats[longname]; //TEXTURES and HiRes flats should still override regular ones... - if(flatnamesshorttofull.ContainsKey(longname)) return flats[flatnamesshorttofull[longname]]; //mxd - if(flats.ContainsKey(longname)) return flats[longname]; + if(flatnamesshorttofull.ContainsKey(longname)) + return flats[flatnamesshorttofull[longname]]; //mxd + if (flats.ContainsKey(longname)) + { + // [ZZ] long name is long. a doom flat with a long name is invalid. + ImageData id = flats[longname]; + if (id is PK3FileImage && ((PK3FileImage)id).IsBadForLongTextureNames) + return unknownimage; + + return id; + } // Return null image return unknownimage; //mxd diff --git a/Source/Core/Data/PK3FileImage.cs b/Source/Core/Data/PK3FileImage.cs index dcd18cb6257a0c5115bdbfbd89a0c73771e2d2d7..313962cbc29ef918b354bd30412e6fc7d0adfb87 100755 --- a/Source/Core/Data/PK3FileImage.cs +++ b/Source/Core/Data/PK3FileImage.cs @@ -31,7 +31,10 @@ namespace CodeImp.DoomBuilder.Data private readonly PK3Reader datareader; private readonly int probableformat; - private readonly string _c_filepathname; + private bool isBadForLongTextureNames = false; + + // [ZZ] + public bool IsBadForLongTextureNames { get { return isBadForLongTextureNames; } } #endregion @@ -42,7 +45,6 @@ namespace CodeImp.DoomBuilder.Data { // Initialize this.datareader = datareader; - _c_filepathname = filepathname; // this is used to call SetName later this.isFlat = asflat; //mxd if(asflat) @@ -71,12 +73,12 @@ namespace CodeImp.DoomBuilder.Data //mxd: filepathname is relative path to the image ("Textures\sometexture.png") protected override void SetName(string filepathname) { - SetName(filepathname, (probableformat == ImageDataFormat.DOOMFLAT) ? false : General.Map.Config.UseLongTextureNames); + SetName(filepathname, General.Map.Config.UseLongTextureNames); } private void SetName(string filepathname, bool longtexturenames) { - if(!longtexturenames || string.IsNullOrEmpty(Path.GetDirectoryName(filepathname))) + if (!longtexturenames || string.IsNullOrEmpty(Path.GetDirectoryName(filepathname))) { this.name = Path.GetFileNameWithoutExtension(filepathname.ToUpperInvariant()); if(this.name.Length > DataManager.CLASIC_IMAGE_NAME_LENGTH) @@ -116,7 +118,7 @@ namespace CodeImp.DoomBuilder.Data if(bitmap != null) bitmap.Dispose(); bitmap = null; MemoryStream filedata = datareader.LoadFile(filepathname); //mxd - bool isBadForLongTextureNames = false; + isBadForLongTextureNames = false; if (filedata != null) { @@ -157,8 +159,6 @@ namespace CodeImp.DoomBuilder.Data filedata.Dispose(); } - SetName(_c_filepathname, isBadForLongTextureNames ? false : General.Map.Config.UseLongTextureNames); - // Pass on to base base.LocalLoadImage(); } diff --git a/Source/Core/Map/Sector.cs b/Source/Core/Map/Sector.cs index 09940677d9bf05441dbd9894a81b2f753da34b44..b70406796929c60a8d1277bcfc130084a1bb82e1 100755 --- a/Source/Core/Map/Sector.cs +++ b/Source/Core/Map/Sector.cs @@ -387,9 +387,9 @@ namespace CodeImp.DoomBuilder.Map flatvertices[i].y = triangles.Vertices[i].y; flatvertices[i].z = 1.0f; flatvertices[i].c = brightint; - flatvertices[i].u = triangles.Vertices[i].x; - flatvertices[i].v = triangles.Vertices[i].y; - } + flatvertices[i].u = flatvertices[i].x; + flatvertices[i].v = flatvertices[i].y; + } // Create bounding box bbox = CreateBBox(); @@ -414,8 +414,8 @@ namespace CodeImp.DoomBuilder.Map // This updates the floor surface public void UpdateFloorSurface() { - if(flatvertices == null) return; - + if (flatvertices == null) return; + // Create floor vertices SurfaceUpdate updateinfo = new SurfaceUpdate(flatvertices.Length, true, false); flatvertices.CopyTo(updateinfo.floorvertices, 0); diff --git a/Source/Core/Properties/AssemblyInfo.cs b/Source/Core/Properties/AssemblyInfo.cs index eee0211dd64af8e077e4e07b0bd25f6143badbb7..6882c535f9457f9c01135b27f2434b6126f7f464 100755 --- a/Source/Core/Properties/AssemblyInfo.cs +++ b/Source/Core/Properties/AssemblyInfo.cs @@ -30,6 +30,6 @@ using CodeImp.DoomBuilder; // Build Number // Revision // -[assembly: AssemblyVersion("2.3.0.2959")] +[assembly: AssemblyVersion("2.3.0.2962")] [assembly: NeutralResourcesLanguageAttribute("en")] -[assembly: AssemblyHash("bb650fa")] +[assembly: AssemblyHash("20c9466")] diff --git a/Source/Core/Windows/MainForm.cs b/Source/Core/Windows/MainForm.cs index 8dd607c36946e5ebcfb6fca0e10a20ef2ef4aa7e..8e114e6ea418f12b67e047b8d3981ceaf7e4df43 100755 --- a/Source/Core/Windows/MainForm.cs +++ b/Source/Core/Windows/MainForm.cs @@ -4104,7 +4104,7 @@ namespace CodeImp.DoomBuilder.Windows if((General.Map != null) && (General.Map.Data != null)) { ImageData img = General.Map.Data.GetFlatImage(imagename); - ImageDataLoaded(img); + ImageDataLoaded(img); } break; @@ -4206,11 +4206,11 @@ namespace CodeImp.DoomBuilder.Windows // but only when first loaded or when dimensions were changed internal void ImageDataLoaded(ImageData img) { - // Image is used in the map? - if((img != null) && img.UsedInMap && !img.IsDisposed) + // Image is used in the map? + if ((img != null) && img.UsedInMap && !img.IsDisposed) { - // Go for all setors - bool updated = false; + // Go for all setors + bool updated = false; long imgshorthash = General.Map.Data.GetShortLongFlatName(img.LongName); //mxd. Part of long name support shennanigans foreach(Sector s in General.Map.Map.Sectors) @@ -4218,6 +4218,7 @@ namespace CodeImp.DoomBuilder.Windows // Update floor buffer if needed if(s.LongFloorTexture == img.LongName || s.LongFloorTexture == imgshorthash) { + General.ErrorLogger.Add(ErrorType.Warning, string.Format("updating floor of sector {0} for texture {1}", s.Index, img.Name)); s.UpdateFloorSurface(); updated = true; } @@ -4225,7 +4226,8 @@ namespace CodeImp.DoomBuilder.Windows // Update ceiling buffer if needed if(s.LongCeilTexture == img.LongName || s.LongCeilTexture == imgshorthash) { - s.UpdateCeilingSurface(); + General.ErrorLogger.Add(ErrorType.Warning, string.Format("updating ceiling of sector {0} for texture {1}", s.Index, img.Name)); + s.UpdateCeilingSurface(); updated = true; } } @@ -4233,7 +4235,7 @@ namespace CodeImp.DoomBuilder.Windows // If we made updates, redraw the screen if(updated) DelayedRedraw(); } - } + } public void EnableProcessing() { diff --git a/Source/Core/Windows/TextureBrowserForm.cs b/Source/Core/Windows/TextureBrowserForm.cs index 800d0ac7b280f1e974dfcc9c8be668eab4c936fa..dc407eded6676b2dd3b51d88e64ec284d5ae3997 100755 --- a/Source/Core/Windows/TextureBrowserForm.cs +++ b/Source/Core/Windows/TextureBrowserForm.cs @@ -58,6 +58,9 @@ namespace CodeImp.DoomBuilder.Windows TreeNode item; //mxd long longname = Lump.MakeLongName(selecttexture ?? ""); + // [ZZ] check if this name is even ok. + if (General.Map.Data.GetFlatImage(longname) == General.Map.Data.UnknownImage) + longname = Lump.MakeLongName(""); longname = (browseflats ? General.Map.Data.GetFullLongFlatName(longname) : General.Map.Data.GetFullLongTextureName(longname)); //mxd int count; //mxd selectedset = null; //mxd diff --git a/Source/Plugins/BuilderModes/General/BuilderPlug.cs b/Source/Plugins/BuilderModes/General/BuilderPlug.cs index d69259e2000a5f0aef5cfff8dd015f3392f03e39..47a3dcaad86ed023b9e83ed58044388fdd03860f 100755 --- a/Source/Plugins/BuilderModes/General/BuilderPlug.cs +++ b/Source/Plugins/BuilderModes/General/BuilderPlug.cs @@ -331,7 +331,7 @@ namespace CodeImp.DoomBuilder.BuilderModes if((img != null) && img.IsImageLoaded) { //mxd. Merged from GZDoomEditing plugin - if(General.Map.UDMF) + if(false) { // Fetch ZDoom fields Vector2D offset = new Vector2D(s.Fields.GetValue("xpanningfloor", 0.0f), @@ -374,6 +374,14 @@ namespace CodeImp.DoomBuilder.BuilderModes } } } + else // [ZZ] proper fallback please. + { + for (int i = 0; i < vertices.Length; i++) + { + vertices[i].u = vertices[i].u / 64; + vertices[i].v = -vertices[i].v / 64; + } + } } // When ceiling surface geometry is created for classic modes @@ -426,7 +434,15 @@ namespace CodeImp.DoomBuilder.BuilderModes } } } - } + else // [ZZ] proper fallback please. + { + for (int i = 0; i < vertices.Length; i++) + { + vertices[i].u = vertices[i].u / 64; + vertices[i].v = -vertices[i].v / 64; + } + } + } // When the editing mode changes public override bool OnModeChange(EditMode oldmode, EditMode newmode) diff --git a/Source/Plugins/BuilderModes/Properties/AssemblyInfo.cs b/Source/Plugins/BuilderModes/Properties/AssemblyInfo.cs index 41a4b35822cf47872b12d65145bbe5e5a354ff91..c860c50d7f460cb8c83e09a40cb868369cef034b 100755 --- a/Source/Plugins/BuilderModes/Properties/AssemblyInfo.cs +++ b/Source/Plugins/BuilderModes/Properties/AssemblyInfo.cs @@ -29,5 +29,5 @@ using System.Resources; // Build Number // Revision // -[assembly: AssemblyVersion("2.3.0.2959")] +[assembly: AssemblyVersion("2.3.0.2962")] [assembly: NeutralResourcesLanguageAttribute("en")]