diff --git a/Source/Plugins/GZDoomEditing/ClassicModes/FlatAlignMode.cs b/Source/Plugins/GZDoomEditing/ClassicModes/FlatAlignMode.cs index 092208847391860175813b77cf3006258edcd20f..e91f7a326a525f694f27add377b64970a8ca3e35 100644 --- a/Source/Plugins/GZDoomEditing/ClassicModes/FlatAlignMode.cs +++ b/Source/Plugins/GZDoomEditing/ClassicModes/FlatAlignMode.cs @@ -84,6 +84,9 @@ namespace CodeImp.DoomBuilder.GZDoomEditing private bool autopanning; // Modification + // NOTE: This offset is in world space. ZDoom's offset is done before + // rotation (not my idea) so we will transform this when applying + // changes to sectors. private float rotation; private Vector2D scale; private Vector2D offset; @@ -140,8 +143,9 @@ namespace CodeImp.DoomBuilder.GZDoomEditing protected Vector2D TexToWorld(Vector2D p, SectorInfo s) { p /= scale + s.scale; - p -= offset + s.offset; + p -= s.offset; p = p.GetRotated(-(rotation + s.rotation)); + p -= offset; return p; } @@ -154,8 +158,9 @@ namespace CodeImp.DoomBuilder.GZDoomEditing // Transforms p from World space into Texture space protected Vector2D WorldToTex(Vector2D p, SectorInfo s) { + p += offset; p = p.GetRotated(rotation + s.rotation); - p += offset + s.offset; + p += s.offset; p *= scale + s.scale; return p; } @@ -168,11 +173,12 @@ namespace CodeImp.DoomBuilder.GZDoomEditing { SectorInfo si = sectorinfo[index]; s.Fields.BeforeFieldsChange(); + Vector2D toffset = offset.GetRotated((rotation + si.rotation)); s.Fields[RotationName] = new UniValue(UniversalType.AngleDegreesFloat, Angle2D.RadToDeg(si.rotation + rotation)); s.Fields[XScaleName] = new UniValue(UniversalType.Float, si.scale.x + scale.x); s.Fields[YScaleName] = new UniValue(UniversalType.Float, si.scale.y + scale.y); - s.Fields[XOffsetName] = new UniValue(UniversalType.Float, si.offset.x + offset.x); - s.Fields[YOffsetName] = new UniValue(UniversalType.Float, -(si.offset.y + offset.y)); + s.Fields[XOffsetName] = new UniValue(UniversalType.Float, si.offset.x + toffset.x); + s.Fields[YOffsetName] = new UniValue(UniversalType.Float, -(si.offset.y + toffset.y)); s.UpdateNeeded = true; s.UpdateCache(); index++; @@ -251,8 +257,7 @@ namespace CodeImp.DoomBuilder.GZDoomEditing switch(mode) { case ModifyMode.Dragging: - Vector2D newoffset = -(mousemappos - dragoffset); - offset = newoffset.GetRotated(rotation + sectorinfo[0].rotation); + offset = -mousemappos - dragoffset; break; case ModifyMode.Resizing: @@ -486,7 +491,7 @@ namespace CodeImp.DoomBuilder.GZDoomEditing { // Drag main rectangle case Grip.Main: - dragoffset = mousemappos + offset.GetRotated(-(rotation + sectorinfo[0].rotation)); + dragoffset = -mousemappos - offset; mode = ModifyMode.Dragging; EnableAutoPanning();