diff --git a/Source/Core/Map/MapSet.cs b/Source/Core/Map/MapSet.cs index b01a5bd5294fbe91c7670c80136145d3c1a31ff0..398d6c5bf5dd591cba46565d52694c45b0a5031d 100644 --- a/Source/Core/Map/MapSet.cs +++ b/Source/Core/Map/MapSet.cs @@ -1066,6 +1066,31 @@ namespace CodeImp.DoomBuilder.Map } } + // Returns a collection of sidedefs that match a selected linedefs state + public ICollection<Sidedef> GetSidedefsFromSelectedLinedefs(bool selected) + { + if(selected) + { + List<Sidedef> list = new List<Sidedef>(sel_linedefs.Count); + foreach(Linedef ld in sel_linedefs) + { + if(ld.Front != null) list.Add(ld.Front); + if(ld.Back != null) list.Add(ld.Back); + } + return list; + } + else + { + List<Sidedef> list = new List<Sidedef>(linedefs.Count - sel_linedefs.Count); + foreach(Linedef ld in linedefs) + { + if(!ld.Selected && (ld.Front != null)) list.Add(ld.Front); + if(!ld.Selected && (ld.Back != null)) list.Add(ld.Back); + } + return list; + } + } + // Returns a collection of sectors that match a selected state public ICollection<Sector> GetSelectedSectors(bool selected) { diff --git a/Source/Plugins/BuilderModes/FindReplace/FindAnyTextureFlat.cs b/Source/Plugins/BuilderModes/FindReplace/FindAnyTextureFlat.cs index 78893a762230b5acdb03a8d661a4101a10985509..5621b134e26ad662521971fc60a37248c16f3b3e 100644 --- a/Source/Plugins/BuilderModes/FindReplace/FindAnyTextureFlat.cs +++ b/Source/Plugins/BuilderModes/FindReplace/FindAnyTextureFlat.cs @@ -106,9 +106,13 @@ namespace CodeImp.DoomBuilder.BuilderModes // Interpret the find long longfind = Lump.MakeLongName(value.Trim()); - + + // Where to search? + ICollection<Sector> seclist = withinselection ? General.Map.Map.GetSelectedSectors(true) : General.Map.Map.Sectors; + ICollection<Sidedef> sidelist = withinselection ? General.Map.Map.GetSidedefsFromSelectedLinedefs(true) : General.Map.Map.Sidedefs; + // Go for all sectors - foreach(Sector s in General.Map.Map.Sectors) + foreach(Sector s in seclist) { // Flat matches? if(s.LongCeilTexture == longfind) @@ -127,7 +131,7 @@ namespace CodeImp.DoomBuilder.BuilderModes } // Go for all sidedefs - foreach(Sidedef sd in General.Map.Map.Sidedefs) + foreach(Sidedef sd in sidelist) { string side = sd.IsFront ? "front" : "back"; diff --git a/Source/Plugins/BuilderModes/FindReplace/FindLinedefSectorRef.cs b/Source/Plugins/BuilderModes/FindReplace/FindLinedefSectorRef.cs index 1efa5cb441d801c895aac4877e56cd97cd7c326d..372af6aceafcae514db8e31316e1553bea9b2db2 100644 --- a/Source/Plugins/BuilderModes/FindReplace/FindLinedefSectorRef.cs +++ b/Source/Plugins/BuilderModes/FindReplace/FindLinedefSectorRef.cs @@ -111,8 +111,11 @@ namespace CodeImp.DoomBuilder.BuilderModes int tag = 0; if(int.TryParse(value, out tag)) { + // Where to search? + ICollection<Linedef> list = withinselection ? General.Map.Map.GetSelectedLinedefs(true) : General.Map.Map.Linedefs; + // Go for all linedefs - foreach(Linedef l in General.Map.Map.Linedefs) + foreach(Linedef l in list) { bool addline = false; diff --git a/Source/Plugins/BuilderModes/FindReplace/FindLinedefTags.cs b/Source/Plugins/BuilderModes/FindReplace/FindLinedefTags.cs index c0b77745adf5f212136d9582041d235200cb1a53..0927c0f1ff74ba83a7edaec60fcdb63ae7078993 100644 --- a/Source/Plugins/BuilderModes/FindReplace/FindLinedefTags.cs +++ b/Source/Plugins/BuilderModes/FindReplace/FindLinedefTags.cs @@ -110,8 +110,11 @@ namespace CodeImp.DoomBuilder.BuilderModes int tag = 0; if(int.TryParse(value, out tag)) { + // Where to search? + ICollection<Linedef> list = withinselection ? General.Map.Map.GetSelectedLinedefs(true) : General.Map.Map.Linedefs; + // Go for all linedefs - foreach(Linedef l in General.Map.Map.Linedefs) + foreach(Linedef l in list) { // Tag matches? if(l.Tag == tag) diff --git a/Source/Plugins/BuilderModes/FindReplace/FindLinedefThingRef.cs b/Source/Plugins/BuilderModes/FindReplace/FindLinedefThingRef.cs index e4d159646122e0e98719795d86d6beb195214ee4..470a3cd9423a8d8b5e53bd7432862551ac289b27 100644 --- a/Source/Plugins/BuilderModes/FindReplace/FindLinedefThingRef.cs +++ b/Source/Plugins/BuilderModes/FindReplace/FindLinedefThingRef.cs @@ -111,8 +111,11 @@ namespace CodeImp.DoomBuilder.BuilderModes int tag = 0; if(int.TryParse(value, out tag)) { + // Where to search? + ICollection<Linedef> list = withinselection ? General.Map.Map.GetSelectedLinedefs(true) : General.Map.Map.Linedefs; + // Go for all linedefs - foreach(Linedef l in General.Map.Map.Linedefs) + foreach(Linedef l in list) { bool addline = false; diff --git a/Source/Plugins/BuilderModes/FindReplace/FindLinedefTypes.cs b/Source/Plugins/BuilderModes/FindReplace/FindLinedefTypes.cs index 31d3ddb91b4da32fc87851dcba63c3b0028977bf..82d79a700ae62444a0786e5d7c7f7bd74e74a070 100644 --- a/Source/Plugins/BuilderModes/FindReplace/FindLinedefTypes.cs +++ b/Source/Plugins/BuilderModes/FindReplace/FindLinedefTypes.cs @@ -105,8 +105,11 @@ namespace CodeImp.DoomBuilder.BuilderModes int action = 0; if(int.TryParse(value, out action)) { + // Where to search? + ICollection<Linedef> list = withinselection ? General.Map.Map.GetSelectedLinedefs(true) : General.Map.Map.Linedefs; + // Go for all linedefs - foreach(Linedef l in General.Map.Map.Linedefs) + foreach(Linedef l in list) { // Action matches? if(l.Action == action) diff --git a/Source/Plugins/BuilderModes/FindReplace/FindSectorEffect.cs b/Source/Plugins/BuilderModes/FindReplace/FindSectorEffect.cs index 1ba14b8c42c62788e973aa73eee545ab17ab6ffc..a8d7609010eb7dad55fe42dc6e458a7ab4831101 100644 --- a/Source/Plugins/BuilderModes/FindReplace/FindSectorEffect.cs +++ b/Source/Plugins/BuilderModes/FindReplace/FindSectorEffect.cs @@ -106,8 +106,11 @@ namespace CodeImp.DoomBuilder.BuilderModes int effect = 0; if(int.TryParse(value, out effect)) { + // Where to search? + ICollection<Sector> list = withinselection ? General.Map.Map.GetSelectedSectors(true) : General.Map.Map.Sectors; + // Go for all sectors - foreach(Sector s in General.Map.Map.Sectors) + foreach(Sector s in list) { // Tag matches? if(s.Effect == effect) diff --git a/Source/Plugins/BuilderModes/FindReplace/FindSectorFlat.cs b/Source/Plugins/BuilderModes/FindReplace/FindSectorFlat.cs index 23df6897e6c64da9ece0381fa458d81f6379ccaf..e8e0aa3eb18b28b86905c34c00d7eb2da0fe28f4 100644 --- a/Source/Plugins/BuilderModes/FindReplace/FindSectorFlat.cs +++ b/Source/Plugins/BuilderModes/FindReplace/FindSectorFlat.cs @@ -99,9 +99,12 @@ namespace CodeImp.DoomBuilder.BuilderModes // Interpret the find long longfind = Lump.MakeLongName(value.Trim()); - + + // Where to search? + ICollection<Sector> list = withinselection ? General.Map.Map.GetSelectedSectors(true) : General.Map.Map.Sectors; + // Go for all sectors - foreach(Sector s in General.Map.Map.Sectors) + foreach(Sector s in list) { // Flat matches? if(s.LongCeilTexture == longfind) diff --git a/Source/Plugins/BuilderModes/FindReplace/FindSectorTags.cs b/Source/Plugins/BuilderModes/FindReplace/FindSectorTags.cs index d4cbbe34630e9d4abf04150fc5b21493f724258f..5ae3ebda93a58c397bd5f1b9a1331468be069af4 100644 --- a/Source/Plugins/BuilderModes/FindReplace/FindSectorTags.cs +++ b/Source/Plugins/BuilderModes/FindReplace/FindSectorTags.cs @@ -103,8 +103,11 @@ namespace CodeImp.DoomBuilder.BuilderModes int tag = 0; if(int.TryParse(value, out tag)) { + // Where to search? + ICollection<Sector> list = withinselection ? General.Map.Map.GetSelectedSectors(true) : General.Map.Map.Sectors; + // Go for all sectors - foreach(Sector s in General.Map.Map.Sectors) + foreach(Sector s in list) { // Tag matches? if(s.Tag == tag) diff --git a/Source/Plugins/BuilderModes/FindReplace/FindSidedefTexture.cs b/Source/Plugins/BuilderModes/FindReplace/FindSidedefTexture.cs index b9a34d9b8a7248a5faa110704a24a8df625e1a45..058222fdede92579ae98ac6a17bc499fee43087b 100644 --- a/Source/Plugins/BuilderModes/FindReplace/FindSidedefTexture.cs +++ b/Source/Plugins/BuilderModes/FindReplace/FindSidedefTexture.cs @@ -99,9 +99,12 @@ namespace CodeImp.DoomBuilder.BuilderModes // Interpret the find long longfind = Lump.MakeLongName(value.Trim()); - + + // Where to search? + ICollection<Sidedef> list = withinselection ? General.Map.Map.GetSidedefsFromSelectedLinedefs(true) : General.Map.Map.Sidedefs; + // Go for all sidedefs - foreach(Sidedef sd in General.Map.Map.Sidedefs) + foreach(Sidedef sd in list) { string side = sd.IsFront ? "front" : "back"; diff --git a/Source/Plugins/BuilderModes/FindReplace/FindThingAction.cs b/Source/Plugins/BuilderModes/FindReplace/FindThingAction.cs index 329e8191ba2084abad57f3b97f8976bef41ae040..f355aebffdc8025412286952d732ea7e35883850 100644 --- a/Source/Plugins/BuilderModes/FindReplace/FindThingAction.cs +++ b/Source/Plugins/BuilderModes/FindReplace/FindThingAction.cs @@ -113,8 +113,11 @@ namespace CodeImp.DoomBuilder.BuilderModes int findaction = 0; if(int.TryParse(value, out findaction)) { + // Where to search? + ICollection<Thing> list = withinselection ? General.Map.Map.GetSelectedThings(true) : General.Map.Map.Things; + // Go for all things - foreach(Thing t in General.Map.Map.Things) + foreach(Thing t in list) { // Match? if(t.Action == findaction) diff --git a/Source/Plugins/BuilderModes/FindReplace/FindThingSectorRef.cs b/Source/Plugins/BuilderModes/FindReplace/FindThingSectorRef.cs index fbd7202c7db44013719c58c14f22c18519761e44..79dc8888d6255001854dae0881d8f2eae2b03f31 100644 --- a/Source/Plugins/BuilderModes/FindReplace/FindThingSectorRef.cs +++ b/Source/Plugins/BuilderModes/FindReplace/FindThingSectorRef.cs @@ -111,8 +111,11 @@ namespace CodeImp.DoomBuilder.BuilderModes int tag = 0; if(int.TryParse(value, out tag)) { + // Where to search? + ICollection<Thing> list = withinselection ? General.Map.Map.GetSelectedThings(true) : General.Map.Map.Things; + // Go for all things - foreach(Thing t in General.Map.Map.Things) + foreach(Thing t in list) { bool addthing = false; diff --git a/Source/Plugins/BuilderModes/FindReplace/FindThingTag.cs b/Source/Plugins/BuilderModes/FindReplace/FindThingTag.cs index 659b8668022a99da6543c4d051d4074eeaebf237..a6cff5a2f052e66ccbdc9a3d6edc8dcac0ad5872 100644 --- a/Source/Plugins/BuilderModes/FindReplace/FindThingTag.cs +++ b/Source/Plugins/BuilderModes/FindReplace/FindThingTag.cs @@ -110,8 +110,11 @@ namespace CodeImp.DoomBuilder.BuilderModes int tag = 0; if(int.TryParse(value, out tag)) { + // Where to search? + ICollection<Thing> list = withinselection ? General.Map.Map.GetSelectedThings(true) : General.Map.Map.Things; + // Go for all things - foreach(Thing t in General.Map.Map.Things) + foreach(Thing t in list) { // Match? if(t.Tag == tag) diff --git a/Source/Plugins/BuilderModes/FindReplace/FindThingThingRef.cs b/Source/Plugins/BuilderModes/FindReplace/FindThingThingRef.cs index 5a491302fda850e42d827c25802ce4da1cf48078..866cbddeb8ee86c67d763eec4d9663d8e3c5315d 100644 --- a/Source/Plugins/BuilderModes/FindReplace/FindThingThingRef.cs +++ b/Source/Plugins/BuilderModes/FindReplace/FindThingThingRef.cs @@ -111,8 +111,11 @@ namespace CodeImp.DoomBuilder.BuilderModes int tag = 0; if(int.TryParse(value, out tag)) { + // Where to search? + ICollection<Thing> list = withinselection ? General.Map.Map.GetSelectedThings(true) : General.Map.Map.Things; + // Go for all things - foreach(Thing t in General.Map.Map.Things) + foreach(Thing t in list) { bool addthing = false; diff --git a/Source/Plugins/BuilderModes/FindReplace/FindThingType.cs b/Source/Plugins/BuilderModes/FindReplace/FindThingType.cs index aee3a80bff40e10db2a937e104f7b611148f6f35..ca5f05b83a75b19a0afb30ab70ec66a420f05848 100644 --- a/Source/Plugins/BuilderModes/FindReplace/FindThingType.cs +++ b/Source/Plugins/BuilderModes/FindReplace/FindThingType.cs @@ -106,8 +106,11 @@ namespace CodeImp.DoomBuilder.BuilderModes int findtype = 0; if(int.TryParse(value, out findtype)) { + // Where to search? + ICollection<Thing> list = withinselection ? General.Map.Map.GetSelectedThings(true) : General.Map.Map.Things; + // Go for all things - foreach(Thing t in General.Map.Map.Things) + foreach(Thing t in list) { // Match? if(t.Type == findtype)