From 76f6483829340978299340c0615ba43a6fbc06ad Mon Sep 17 00:00:00 2001 From: spherallic <spherallic@gmail.com> Date: Tue, 19 Sep 2023 17:53:27 +0200 Subject: [PATCH] Visual Mode: changing brightness now affects sector brightness, holding Alt will change local brightness --- .../BuilderModes/Resources/Actions.cfg | 2 + .../VisualModes/BaseVisualGeometrySector.cs | 2 +- .../VisualModes/BaseVisualGeometrySidedef.cs | 4 +- .../VisualModes/BaseVisualMode.cs | 6 +- .../VisualModes/BaseVisualSlope.cs | 2 +- .../VisualModes/BaseVisualThing.cs | 2 +- .../VisualModes/BaseVisualVertex.cs | 2 +- .../VisualModes/IVisualEventReceiver.cs | 2 +- .../VisualModes/NullVisualEventReceiver.cs | 2 +- .../BuilderModes/VisualModes/VisualCeiling.cs | 12 ++-- .../BuilderModes/VisualModes/VisualFloor.cs | 61 +++++++++++++------ 11 files changed, 62 insertions(+), 35 deletions(-) diff --git a/Source/Plugins/BuilderModes/Resources/Actions.cfg b/Source/Plugins/BuilderModes/Resources/Actions.cfg index 86a01b7d4..d7ae909b5 100755 --- a/Source/Plugins/BuilderModes/Resources/Actions.cfg +++ b/Source/Plugins/BuilderModes/Resources/Actions.cfg @@ -723,6 +723,7 @@ raisebrightness8 allowmouse = true; allowscroll = true; repeat = true; + disregardalt = true; } lowerbrightness8 @@ -734,6 +735,7 @@ lowerbrightness8 allowmouse = true; allowscroll = true; repeat = true; + disregardalt = true; } movetextureleft diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySector.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySector.cs index 32e52bf16..5ec651566 100755 --- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySector.cs +++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySector.cs @@ -830,7 +830,7 @@ namespace CodeImp.DoomBuilder.BuilderModes } // Sector brightness change - public virtual void OnChangeTargetBrightness(bool up) + public virtual void OnChangeTargetBrightness(bool up, bool local) { mode.CreateUndo("Change sector brightness", UndoGroup.SectorBrightnessChange, Sector.Sector.FixedIndex); diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySidedef.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySidedef.cs index 45f4f7ec6..24dffc1e4 100755 --- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySidedef.cs +++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualGeometrySidedef.cs @@ -1585,10 +1585,10 @@ namespace CodeImp.DoomBuilder.BuilderModes } // Sector brightness change - public virtual void OnChangeTargetBrightness(bool up) + public virtual void OnChangeTargetBrightness(bool up, bool local) { //mxd. Change UDMF wall light? - if(General.Map.UDMF && (General.Map.Config.DistinctWallBrightness || General.Map.Config.DistinctSidedefPartBrightness)) + if(General.Map.UDMF && (General.Map.Config.DistinctWallBrightness || General.Map.Config.DistinctSidedefPartBrightness) && local) { string fieldname = "light"; string fieldabsolutename = "lightabsolute"; diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs index c45d03091..aed974525 100755 --- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs +++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualMode.cs @@ -3508,18 +3508,20 @@ namespace CodeImp.DoomBuilder.BuilderModes [BeginAction("raisebrightness8")] public void RaiseBrightness8() { + bool local = General.Interface.AltState; PreAction(UndoGroup.SectorBrightnessChange); List<IVisualEventReceiver> objs = GetSelectedObjects(true, true, false, false, false); - foreach(IVisualEventReceiver i in objs) i.OnChangeTargetBrightness(true); + foreach(IVisualEventReceiver i in objs) i.OnChangeTargetBrightness(true, local); PostAction(); } [BeginAction("lowerbrightness8")] public void LowerBrightness8() { + bool local = General.Interface.AltState; PreAction(UndoGroup.SectorBrightnessChange); List<IVisualEventReceiver> objs = GetSelectedObjects(true, true, false, false, false); - foreach(IVisualEventReceiver i in objs) i.OnChangeTargetBrightness(false); + foreach(IVisualEventReceiver i in objs) i.OnChangeTargetBrightness(false, local); PostAction(); } diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualSlope.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualSlope.cs index 329adb62e..f76b70be9 100644 --- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualSlope.cs +++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualSlope.cs @@ -110,7 +110,7 @@ namespace CodeImp.DoomBuilder.VisualModes // Unused public void OnSelectBegin() { } public void OnEditBegin() { } - public void OnChangeTargetBrightness(bool up) { } + public void OnChangeTargetBrightness(bool up, bool local) { } public void OnChangeTextureOffset(int horizontal, int vertical, bool doSurfaceAngleCorrection) { } public void OnSelectTexture() { } public void OnCopyTexture() { } diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualThing.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualThing.cs index 29ddb26fc..389a39d68 100644 --- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualThing.cs +++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualThing.cs @@ -699,7 +699,7 @@ namespace CodeImp.DoomBuilder.BuilderModes // Unused public void OnSelectBegin() { } public void OnEditBegin() { } - public void OnChangeTargetBrightness(bool up) { } + public void OnChangeTargetBrightness(bool up, bool local) { } public void OnChangeTextureOffset(int horizontal, int vertical, bool doSurfaceAngleCorrection) { } public void OnSelectTexture() { } public void OnCopyTexture() { } diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualVertex.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualVertex.cs index 3de36f62f..e7483c76a 100755 --- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualVertex.cs +++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualVertex.cs @@ -240,7 +240,7 @@ namespace CodeImp.DoomBuilder.BuilderModes public void OnSelectBegin() { } public void OnEditBegin() { } public void OnMouseMove(MouseEventArgs e) { } - public void OnChangeTargetBrightness(bool up) { } + public void OnChangeTargetBrightness(bool up, bool local) { } public void OnChangeTextureOffset(int horizontal, int vertical, bool doSurfaceAngleCorrection) { } public void OnChangeScale(int incrementX, int incrementY) { } public void OnSelectTexture() { } diff --git a/Source/Plugins/BuilderModes/VisualModes/IVisualEventReceiver.cs b/Source/Plugins/BuilderModes/VisualModes/IVisualEventReceiver.cs index cde7f2ca6..8c5d73dd3 100755 --- a/Source/Plugins/BuilderModes/VisualModes/IVisualEventReceiver.cs +++ b/Source/Plugins/BuilderModes/VisualModes/IVisualEventReceiver.cs @@ -34,7 +34,7 @@ namespace CodeImp.DoomBuilder.BuilderModes void OnEditEnd(); void OnMouseMove(MouseEventArgs e); void OnChangeTargetHeight(int amount); - void OnChangeTargetBrightness(bool up); + void OnChangeTargetBrightness(bool up, bool local); void OnChangeTextureOffset(int horizontal, int vertical, bool doSurfaceAngleCorrection); void OnChangeScale(int incrementX, int incrementY); //mxd void OnResetTextureOffset(); diff --git a/Source/Plugins/BuilderModes/VisualModes/NullVisualEventReceiver.cs b/Source/Plugins/BuilderModes/VisualModes/NullVisualEventReceiver.cs index e6abe0e41..dfe8b05b8 100755 --- a/Source/Plugins/BuilderModes/VisualModes/NullVisualEventReceiver.cs +++ b/Source/Plugins/BuilderModes/VisualModes/NullVisualEventReceiver.cs @@ -33,7 +33,7 @@ namespace CodeImp.DoomBuilder.BuilderModes public void OnEditEnd() { } public void OnMouseMove(MouseEventArgs e) { } public void OnChangeTargetHeight(int amount) { } - public void OnChangeTargetBrightness(bool up) { } + public void OnChangeTargetBrightness(bool up, bool local) { } public void OnChangeTextureOffset(int horizontal, int vertical, bool doSurfaceAngleCorrection) { } public void OnChangeScale(int incrementX, int incrementY) { } //mxd public void OnResetTextureOffset() { } diff --git a/Source/Plugins/BuilderModes/VisualModes/VisualCeiling.cs b/Source/Plugins/BuilderModes/VisualModes/VisualCeiling.cs index a1d85c029..1ee4422a2 100755 --- a/Source/Plugins/BuilderModes/VisualModes/VisualCeiling.cs +++ b/Source/Plugins/BuilderModes/VisualModes/VisualCeiling.cs @@ -436,7 +436,7 @@ namespace CodeImp.DoomBuilder.BuilderModes } //mxd. Sector brightness change - public override void OnChangeTargetBrightness(bool up) + public override void OnChangeTargetBrightness(bool up, bool local) { if(level != null && level.sector != Sector.Sector) { @@ -451,17 +451,17 @@ namespace CodeImp.DoomBuilder.BuilderModes } if(index > -1 && index < Sector.ExtraCeilings.Count) - ((BaseVisualSector)mode.GetVisualSector(Sector.ExtraCeilings[index].level.sector)).Floor.OnChangeTargetBrightness(up); + ((BaseVisualSector)mode.GetVisualSector(Sector.ExtraCeilings[index].level.sector)).Floor.OnChangeTargetBrightness(up, false); else - base.OnChangeTargetBrightness(up); + base.OnChangeTargetBrightness(up, false); } else { // Change the sector brightness if the map is not in UDMF format, or this ceiling is part of 3D-floor, - // or the game configuration doesn't support distinct surfave brightnesses - if(!General.Map.UDMF || (level != null && Sector.Sector != level.sector) || !General.Map.Config.DistinctFloorAndCeilingBrightness) + // or the game configuration doesn't support distinct surface brightnesses + if(!General.Map.UDMF || (level != null && Sector.Sector != level.sector) || !General.Map.Config.DistinctFloorAndCeilingBrightness || !local) { - base.OnChangeTargetBrightness(up); + base.OnChangeTargetBrightness(up, false); return; } diff --git a/Source/Plugins/BuilderModes/VisualModes/VisualFloor.cs b/Source/Plugins/BuilderModes/VisualModes/VisualFloor.cs index 8be4c2161..64a6732e1 100755 --- a/Source/Plugins/BuilderModes/VisualModes/VisualFloor.cs +++ b/Source/Plugins/BuilderModes/VisualModes/VisualFloor.cs @@ -390,30 +390,53 @@ namespace CodeImp.DoomBuilder.BuilderModes } //mxd. Sector brightness change - public override void OnChangeTargetBrightness(bool up) + public override void OnChangeTargetBrightness(bool up, bool local) { - if(level != null) + // This floor is part of 3D-floor + if (level != null && level.sector != Sector.Sector) { - // This floor is part of 3D-floor - if(level.sector != Sector.Sector) - { - BaseVisualSector vs = (BaseVisualSector)mode.GetVisualSector(level.sector); - vs.Floor.OnChangeTargetBrightness(up); - vs.UpdateSectorGeometry(true); - } - // This is actual floor of a sector with extrafloors - else if(Sector.ExtraFloors.Count > 0 && !Sector.ExtraFloors[0].ExtraFloor.Floor.restrictlighting && !Sector.ExtraFloors[0].ExtraFloor.Floor.disablelighting) + BaseVisualSector vs = (BaseVisualSector)mode.GetVisualSector(level.sector); + vs.Floor.OnChangeTargetBrightness(up, local); + vs.UpdateSectorGeometry(true); + } + // This is actual floor of a sector with extrafloors + else if (level != null && Sector.ExtraFloors.Count > 0 && !Sector.ExtraFloors[0].ExtraFloor.Floor.restrictlighting && !Sector.ExtraFloors[0].ExtraFloor.Floor.disablelighting) + { + Sector.ExtraFloors[0].OnChangeTargetBrightness(up, local); + } + else + { + // Change the sector brightness if the map is not in UDMF format, or this floor is part of 3D-floor, + // or the game configuration doesn't support distinct surface brightnesses + if (!General.Map.UDMF || (level != null && Sector.Sector != level.sector) || !General.Map.Config.DistinctFloorAndCeilingBrightness || !local) { - Sector.ExtraFloors[0].OnChangeTargetBrightness(up); + base.OnChangeTargetBrightness(up, false); + return; } + + int light = Sector.Sector.Fields.GetValue("lightfloor", 0); + bool absolute = Sector.Sector.Fields.GetValue("lightfloorabsolute", false); + int newLight; + + if (up) + newLight = General.Map.Config.BrightnessLevels.GetNextHigher(light, absolute); else - { - base.OnChangeTargetBrightness(up); - } - } - else - { - base.OnChangeTargetBrightness(up); + newLight = General.Map.Config.BrightnessLevels.GetNextLower(light, absolute); + + if (newLight == light) return; + + //create undo + mode.CreateUndo("Change floor brightness", UndoGroup.SurfaceBrightnessChange, Sector.Sector.FixedIndex); + Sector.Sector.Fields.BeforeFieldsChange(); + + //apply changes + UniFields.SetInteger(Sector.Sector.Fields, "lightfloor", newLight, (absolute ? int.MinValue : 0)); + mode.SetActionResult("Changed floor brightness to " + newLight + "."); + Sector.Sector.UpdateNeeded = true; + Sector.Sector.UpdateCache(); + + //rebuild sector + Sector.UpdateSectorGeometry(false); } } -- GitLab