Manual linedef splitting: UDMF texture coordinates were incorrectly interpolated in some cases.

Manual linedef splitting: "Duplicate texture coordinates" and "Reset X coordinate, copy Y coordinate" settings now affect UDMF texture offsets.
This commit is contained in:
MaxED 2013-09-05 13:03:17 +00:00
parent e04105dcde
commit b80bc3f811
9 changed files with 138 additions and 121 deletions

View file

@ -22,9 +22,9 @@
<div id="contents">
<p><strong>Q:</strong> I'm getting a ton of &quot;<strong>Unable to find the DECORATE class '[some actor]' to inherit from, while parsing '[some other actor]:[DoomEdNum]'</strong>&quot; warnings. What's wrong?<br />
<strong>A:</strong> This happens when a DECORATE actor is inherited from another actor, which is not defined in game configuration. To fix this, add "<strong>(g)zdoom.pk3</strong>" as a map resource. Don't forget to check "Exclude from testing parameters" chekbox while adding it, otherwise (G)ZDoom won't load. (g)zdoom.pk3 can be found in (G)ZDoom folder. </p>
<strong>A:</strong> This happens when a DECORATE actor is inherited from another actor, which is not defined in game configuration. To fix this, add "<strong>(g)zdoom.pk3</strong>" as a map resource. Don't forget to check "Exclude from testing parameters" chekbox while adding it, otherwise (G)ZDoom won't load your map. (g)zdoom.pk3 can be found in (G)ZDoom folder. </p>
<p><strong>Q:</strong> I'm getting a ton of &quot;<strong>Error in 'GLDEFS' at line [n]: light declaration not found for light '[light name]'</strong>&quot; warnings. What's wrong?<br />
<strong>A:</strong> GZDoom Builder doesn't include GLDEFS lights definitions. To get rid of these errors, add &quot;<strong>lights.pk3</strong>&quot; as a map resource. Don't forget to check &quot;Exclude from testing parameters&quot; chekbox while adding it, otherwise GZDoom won't load. lights.pk3 can be found in GZDoom folder. </p>
<strong>A:</strong> GZDoom Builder doesn't include GLDEFS lights definitions. To get rid of these errors, add &quot;<strong>lights.pk3</strong>&quot; as a map resource. Don't forget to check &quot;Exclude from testing parameters&quot; chekbox while adding it, otherwise GZDoom won't load your map. lights.pk3 can be found in GZDoom folder. </p>
<p><strong>Q:</strong> When I create a new map, I see only Doom-related game configurations. Where are configurations for other games?<br />
<strong>A:</strong> Copy &quot;<span class="style1">[EngineName]_[Game][MapType].cfg</span>&quot; and &quot;<span class="style1">Includes</span>&quot; folder from &quot;<span class="style1">[GZDB]\Configurations\Configs for other games\[Game]</span>&quot; to &quot;<span class="style1">[GZDoom Builder]\Configurations\</span>&quot;.<br />
If you are using Zandronum, you'll also need to copy all files from &quot;<span class="style1">[GZDB]\Configurations\Configs for other games\Zandronum Includes\</span>&quot; to the main &quot;<span class="style1">Includes</span>&quot; folder (&quot;<span class="style1">[GZDB]\Configurations\Includes\</span>&quot;) .</p>

View file

@ -6,6 +6,10 @@ namespace CodeImp.DoomBuilder.GZBuilder.Tools
public static class UDMFTools
{
//float
public static void SetFloat(UniFields fields, string key, float value) {
SetFloat(fields, key, value, 0f);
}
public static void SetFloat(UniFields fields, string key, float value, float defaultValue) {
if(fields == null) return;
@ -19,12 +23,20 @@ namespace CodeImp.DoomBuilder.GZBuilder.Tools
}
}
public static float GetFloat(UniFields fields, string key) {
return GetFloat(fields, key, 0f);
}
public static float GetFloat(UniFields fields, string key, float defaultValue) {
if(fields == null) return defaultValue;
return fields.GetValue(key, defaultValue);
}
//int
public static void SetInteger(UniFields fields, string key, int value) {
SetInteger(fields, key, value, 0);
}
public static void SetInteger(UniFields fields, string key, int value, int defaultValue) {
if(fields == null) return;
@ -38,6 +50,10 @@ namespace CodeImp.DoomBuilder.GZBuilder.Tools
}
}
public static int GetInteger(UniFields fields, string key) {
return GetInteger(fields, key, 0);
}
public static int GetInteger(UniFields fields, string key, int defaultValue) {
if(fields == null) return defaultValue;
return fields.GetValue(key, defaultValue);

View file

@ -27,6 +27,7 @@ using CodeImp.DoomBuilder.Data;
using CodeImp.DoomBuilder.Config;
using CodeImp.DoomBuilder.Types;
using System.Windows.Forms;
using CodeImp.DoomBuilder.GZBuilder.Tools;
#endregion
@ -1494,54 +1495,48 @@ namespace CodeImp.DoomBuilder.Geometry
foreach(Linedef l in lines) {
if(l.Front != null) {
if(!l.Front.Fields.ContainsKey("offsetx_mid") && l.Front.MiddleRequired() && l.Front.MiddleTexture.Length > 1 && General.Map.Data.GetFlatExists(l.Front.MiddleTexture)) {
if(l.Front.MiddleRequired() && l.Front.MiddleTexture.Length > 1 && General.Map.Data.GetFlatExists(l.Front.MiddleTexture)) {
ImageData texture = General.Map.Data.GetFlatImage(l.Front.MiddleTexture);
float offset = (int)Math.Round((reversed ? totalLength - curLength - l.Length : curLength)) % texture.Width;
if(offset > 0)
l.Front.Fields.Add("offsetx_mid", new UniValue(UniversalType.Float, offset));
if(offset > 0) UDMFTools.SetFloat(l.Front.Fields, "offsetx_mid", offset);
}
if(!l.Front.Fields.ContainsKey("offsetx_top") && l.Front.HighRequired() && l.Front.HighTexture.Length > 1 && General.Map.Data.GetFlatExists(l.Front.HighTexture)) {
if(l.Front.HighRequired() && l.Front.HighTexture.Length > 1 && General.Map.Data.GetFlatExists(l.Front.HighTexture)) {
ImageData texture = General.Map.Data.GetFlatImage(l.Front.HighTexture);
float offset = (int)Math.Round((reversed ? totalLength - curLength - l.Length : curLength)) % texture.Width;
if(offset > 0)
l.Front.Fields.Add("offsetx_top", new UniValue(UniversalType.Float, offset));
if(offset > 0) UDMFTools.SetFloat(l.Front.Fields, "offsetx_top", offset);
}
if(!l.Front.Fields.ContainsKey("offsetx_bottom") && l.Front.LowRequired() && l.Front.LowTexture.Length > 1 && General.Map.Data.GetFlatExists(l.Front.LowTexture)) {
if(l.Front.LowRequired() && l.Front.LowTexture.Length > 1 && General.Map.Data.GetFlatExists(l.Front.LowTexture)) {
ImageData texture = General.Map.Data.GetFlatImage(l.Front.LowTexture);
float offset = (int)Math.Round((reversed ? totalLength - curLength - l.Length : curLength)) % texture.Width;
if(offset > 0)
l.Front.Fields.Add("offsetx_bottom", new UniValue(UniversalType.Float, offset));
if(offset > 0) UDMFTools.SetFloat(l.Front.Fields, "offsetx_bottom", offset);
}
}
if(l.Back != null) {
if(!l.Back.Fields.ContainsKey("offsetx_mid") && l.Back.MiddleRequired() && l.Back.MiddleTexture.Length > 1 && General.Map.Data.GetFlatExists(l.Back.MiddleTexture)) {
if(l.Back.MiddleRequired() && l.Back.MiddleTexture.Length > 1 && General.Map.Data.GetFlatExists(l.Back.MiddleTexture)) {
ImageData texture = General.Map.Data.GetFlatImage(l.Back.MiddleTexture);
float offset = (int)Math.Round((reversed ? totalLength - curLength - l.Length : curLength)) % texture.Width;
if(offset > 0)
l.Back.Fields.Add("offsetx_mid", new UniValue(UniversalType.Float, offset));
if(offset > 0) UDMFTools.SetFloat(l.Back.Fields, "offsetx_mid", offset);
}
if(!l.Back.Fields.ContainsKey("offsetx_top") && l.Back.HighRequired() && l.Back.HighTexture.Length > 1 && General.Map.Data.GetFlatExists(l.Back.HighTexture)) {
if(l.Back.HighRequired() && l.Back.HighTexture.Length > 1 && General.Map.Data.GetFlatExists(l.Back.HighTexture)) {
ImageData texture = General.Map.Data.GetFlatImage(l.Back.HighTexture);
float offset = (int)Math.Round((reversed ? totalLength - curLength - l.Length : curLength)) % texture.Width;
if(offset > 0)
l.Back.Fields.Add("offsetx_top", new UniValue(UniversalType.Float, offset));
if(offset > 0) UDMFTools.SetFloat(l.Back.Fields, "offsetx_top", offset);
}
if(!l.Back.Fields.ContainsKey("offsetx_bottom") && l.Back.LowRequired() && l.Back.LowTexture.Length > 1 && General.Map.Data.GetFlatExists(l.Back.LowTexture)) {
if(l.Back.LowRequired() && l.Back.LowTexture.Length > 1 && General.Map.Data.GetFlatExists(l.Back.LowTexture)) {
ImageData texture = General.Map.Data.GetFlatImage(l.Back.LowTexture);
float offset = (int)Math.Round((reversed ? totalLength - curLength - l.Length : curLength)) % texture.Width;
if(offset > 0)
l.Back.Fields.Add("offsetx_bottom", new UniValue(UniversalType.Float, offset));
if(offset > 0) UDMFTools.SetFloat(l.Back.Fields, "offsetx_bottom", offset);
}
}

View file

@ -24,6 +24,7 @@ using System.Drawing;
using CodeImp.DoomBuilder.IO;
using CodeImp.DoomBuilder.Types;
using CodeImp.DoomBuilder.Data;
using CodeImp.DoomBuilder.GZBuilder.Tools;
#endregion
@ -835,19 +836,20 @@ namespace CodeImp.DoomBuilder.Map
back.CopyPropertiesTo(nsd);
nsd.Marked = back.Marked;
// Make texture offset adjustments
//mxd
//mxd. Make texture offset adjustments
int distance = (int)Vector2D.Distance(nl.start.Position, nl.end.Position);
if(General.Map.UDMF)
if(distance != 0) applyTextureOffsetUDMF(back, distance);
else
if(General.Map.UDMF) {
if (distance != 0)
back.SetUdmfTextureOffsetX(distance);
} else {
back.OffsetX += distance;
}
}
//mxd. Both sides of line are required, so we do it here...
if(nl.Front != null && General.Map.UDMF) {
int distance = (int)Vector2D.Distance(this.start.Position, this.end.Position);
if(distance != 0) applyTextureOffsetUDMF(nl.Front, distance);
if(distance != 0) nl.Front.SetUdmfTextureOffsetX(distance);
}
// Return result
@ -1074,73 +1076,6 @@ namespace CodeImp.DoomBuilder.Map
colorPresetIndex = -1;
}
//mxd
private void applyTextureOffsetUDMF(Sidedef side, int distance) {
float scaleTop = side.Fields.GetValue("scalex_top", 1.0f);
float scaleMid = side.Fields.GetValue("scalex_mid", 1.0f);
float scaleLow = side.Fields.GetValue("scalex_bottom", 1.0f);
//top
if(side.HighTexture.Length > 1 && General.Map.Data.GetFlatExists(side.HighTexture)) {
ImageData texture = General.Map.Data.GetFlatImage(side.HighTexture);
if(side.Fields.ContainsKey("offsetx_top")) {
float value = side.Fields.GetValue("offsetx_top", 0f);
float offset = (float)(Math.Round((value + distance) * scaleTop) % texture.Width);
if(offset != 0)
side.Fields["offsetx_top"].Value = offset;
else
side.Fields.Remove("offsetx_top");
} else if(side.HighRequired()) {
float offset = (float)(Math.Round(distance * scaleTop) % texture.Width);
if(offset != 0)
side.Fields.Add("offsetx_top", new UniValue(UniversalType.Float, offset));
}
}
//middle
if(side.MiddleTexture.Length > 1 && General.Map.Data.GetFlatExists(side.MiddleTexture)){
ImageData texture = General.Map.Data.GetFlatImage(side.MiddleTexture);
if(side.Fields.ContainsKey("offsetx_mid")) {
float value = side.Fields.GetValue("offsetx_mid", 0f);
float offset = (float)(Math.Round((value + distance) * scaleMid) % texture.Width);
if(offset != 0)
side.Fields["offsetx_mid"].Value = offset;
else
side.Fields.Remove("offsetx_mid");
} else if(side.MiddleRequired()) {
float offset = (float)(Math.Round(distance * scaleMid) % texture.Width);
if(offset != 0)
side.Fields.Add("offsetx_mid", new UniValue(UniversalType.Float, offset));
}
}
//bottom
if(side.LowTexture.Length > 1 && General.Map.Data.GetFlatExists(side.LowTexture)){
ImageData texture = General.Map.Data.GetFlatImage(side.LowTexture);
if(side.Fields.ContainsKey("offsetx_bottom")) {
float value = side.Fields.GetValue("offsetx_bottom", 0f);
float offset = (float)(Math.Round((value + distance) * scaleLow) % texture.Width);
if(offset != 0)
side.Fields["offsetx_bottom"].Value = offset;
else
side.Fields.Remove("offsetx_bottom");
} else if(side.LowRequired()) {
float offset = (float)(Math.Round(distance * scaleLow) % texture.Width);
if(offset != 0)
side.Fields.Add("offsetx_bottom", new UniValue(UniversalType.Float, offset));
}
}
}
// String representation
public override string ToString()
{

View file

@ -20,6 +20,8 @@ using System;
using System.Collections.Generic;
using CodeImp.DoomBuilder.IO;
using CodeImp.DoomBuilder.Geometry;
using CodeImp.DoomBuilder.Data;
using CodeImp.DoomBuilder.GZBuilder.Tools;
#endregion
@ -560,6 +562,41 @@ namespace CodeImp.DoomBuilder.Map
longtexnamelow = Lump.MakeLongName(name);
General.Map.IsChanged = true;
}
// This sets udmf texture offset
public void SetUdmfTextureOffsetX(int offset) {
this.Fields.BeforeFieldsChange();
//top
if(HighTexture.Length > 1 && General.Map.Data.GetFlatExists(HighTexture)) {
ImageData texture = General.Map.Data.GetFlatImage(HighTexture);
float scaleTop = Fields.GetValue("scalex_top", 1.0f);
float value = Fields.GetValue("offsetx_top", 0f);
float result = (float)(Math.Round(value + offset * scaleTop) % texture.Width);
UDMFTools.SetFloat(Fields, "offsetx_top", result);
}
//middle
if(MiddleTexture.Length > 1 && General.Map.Data.GetFlatExists(MiddleTexture)) {
ImageData texture = General.Map.Data.GetFlatImage(MiddleTexture);
float scaleMid = Fields.GetValue("scalex_mid", 1.0f);
float value = Fields.GetValue("offsetx_mid", 0f);
float result = (float)(Math.Round(value + offset * scaleMid) % texture.Width);
UDMFTools.SetFloat(Fields, "offsetx_mid", result);
}
//bottom
if(LowTexture.Length > 1 && General.Map.Data.GetFlatExists(LowTexture)) {
ImageData texture = General.Map.Data.GetFlatImage(LowTexture);
float scaleLow = Fields.GetValue("scalex_bottom", 1.0f);
float value = Fields.GetValue("offsetx_bottom", 0f);
float result = (float)(Math.Round(value + offset * scaleLow) % texture.Width);
UDMFTools.SetFloat(Fields, "offsetx_bottom", result);
}
}
#endregion
}

View file

@ -52,9 +52,12 @@ namespace CodeImp.DoomBuilder.Map
// Copy constructor
///<summary></summary>
public UniFields(MapElement owner, UniFields copyfrom) : base(copyfrom)
public UniFields(MapElement owner, UniFields copyfrom) : base(copyfrom.Count)
{
this.owner = owner;
foreach(KeyValuePair<string, UniValue> v in copyfrom) //mxd. No-no-no, David Blaine, I don't want to copy these by reference!
this.Add(v.Key, new UniValue(v.Value));
}
/// <summary>Call this before making changes to the fields, or they may not be updated correctly with undo/redo!</summary>

View file

@ -109,12 +109,8 @@ namespace CodeImp.DoomBuilder.BuilderModes
// This checks if the view offset/zoom changed and updates the check
protected bool CheckViewChanged()
{
bool viewchanged = false;
// View changed?
if(renderer.OffsetX != lastoffsetx) viewchanged = true;
if(renderer.OffsetY != lastoffsety) viewchanged = true;
if(renderer.Scale != lastscale) viewchanged = true;
bool viewchanged = (renderer.OffsetX != lastoffsetx || renderer.OffsetY != lastoffsety || renderer.Scale != lastscale);
// Keep view information
lastoffsetx = renderer.OffsetX;
@ -137,8 +133,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
DrawnVertex lastp = new DrawnVertex();
DrawnVertex curp = GetCurrentPosition();
float vsize = ((float)renderer.VertexSize + 1.0f) / renderer.Scale;
float vsizeborder = ((float)renderer.VertexSize + 3.0f) / renderer.Scale;
float vsize = (renderer.VertexSize + 1.0f) / renderer.Scale;
// The last label's end must go to the mouse cursor
if(labels.Count > 0) labels[labels.Count - 1].End = curp.pos;
@ -175,8 +170,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
for(int i = 0; i < points.Count; i++)
{
// Determine vertex color
if(points[i].stitch) color = stitchcolor;
else color = losecolor;
color = points[i].stitch ? stitchcolor : losecolor;
// Render vertex
renderer.RenderRectangleFilled(new RectangleF(points[i].pos.x - vsize, points[i].pos.y - vsize, vsize * 2.0f, vsize * 2.0f), color, true);
@ -184,8 +178,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
}
// Determine point color
if(snaptonearest) color = stitchcolor;
else color = losecolor;
color = snaptonearest ? stitchcolor : losecolor;
// Render vertex at cursor
renderer.RenderRectangleFilled(new RectangleF(curp.pos.x - vsize, curp.pos.y - vsize, vsize * 2.0f, vsize * 2.0f), color, true);

View file

@ -900,7 +900,6 @@ namespace CodeImp.DoomBuilder.BuilderModes
OnMouseMove(e);
// Redraw screen
//General.Map.Renderer2D.UpdateExtraFloorFlag(); //mxd
General.Interface.RedrawDisplay();
}
}
@ -1119,51 +1118,51 @@ namespace CodeImp.DoomBuilder.BuilderModes
Linedef start = General.GetByIndex(orderedselection, 0);
Linedef end = General.GetByIndex(orderedselection, orderedselection.Count - 1);
string lightKey = "light";
string lightAbsKey = "lightabsolute";
const string lightKey = "light";
const string lightAbsKey = "lightabsolute";
float startbrightness = float.NaN;
float endbrightness = float.NaN;
//get total brightness of start sidedef(s)
if(start.Front != null) {
if(start.Front.Fields.GetValue(lightAbsKey, false)) {
startbrightness = (float)start.Front.Fields.GetValue(lightKey, 0);
startbrightness = start.Front.Fields.GetValue(lightKey, 0);
} else {
startbrightness = Math.Min(255, Math.Max(0, (float)start.Front.Sector.Brightness + start.Front.Fields.GetValue(lightKey, 0)));
}
}
if(start.Back != null) {
float b = 0;
float b;
if(start.Back.Fields.GetValue(lightAbsKey, false)) {
b = (float)start.Back.Fields.GetValue(lightKey, 0);
b = start.Back.Fields.GetValue(lightKey, 0);
} else {
b = Math.Min(255, Math.Max(0, (float)start.Back.Sector.Brightness + start.Back.Fields.GetValue(lightKey, 0)));
}
startbrightness = (startbrightness == float.NaN ? b : (startbrightness + b) / 2);
startbrightness = (float.IsNaN(startbrightness) ? b : (startbrightness + b) / 2);
}
//get total brightness of end sidedef(s)
if(end.Front != null) {
if(end.Front.Fields.GetValue(lightAbsKey, false)) {
endbrightness = (float)end.Front.Fields.GetValue(lightKey, 0);
endbrightness = end.Front.Fields.GetValue(lightKey, 0);
} else {
endbrightness = Math.Min(255, Math.Max(0, (float)end.Front.Sector.Brightness + end.Front.Fields.GetValue(lightKey, 0)));
}
}
if(end.Back != null) {
float b = 0;
float b;
if(end.Back.Fields.GetValue(lightAbsKey, false)) {
b = (float)end.Back.Fields.GetValue(lightKey, 0);
b = end.Back.Fields.GetValue(lightKey, 0);
} else {
b = Math.Min(255, Math.Max(0, (float)end.Back.Sector.Brightness + end.Back.Fields.GetValue(lightKey, 0)));
}
endbrightness = (endbrightness == float.NaN ? b : (endbrightness + b) / 2);
endbrightness = (float.IsNaN(endbrightness) ? b : (endbrightness + b) / 2);
}
float delta = endbrightness - startbrightness;
@ -1171,7 +1170,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
// Go for all sectors in between first and last
int index = 0;
foreach(Linedef l in orderedselection) {
float u = (float)index / (float)(orderedselection.Count - 1);
float u = index / (float)(orderedselection.Count - 1);
float b = startbrightness + delta * u;
if(l.Front != null) {

View file

@ -38,6 +38,7 @@ using CodeImp.DoomBuilder.GZBuilder.Geometry;
using CodeImp.DoomBuilder.Actions;
using CodeImp.DoomBuilder.BuilderModes.IO;
using CodeImp.DoomBuilder.BuilderModes.Interface;
using CodeImp.DoomBuilder.GZBuilder.Tools;
#endregion
@ -567,8 +568,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
}
//clamp offsetX
if(texture != null)
newline.Front.OffsetX %= texture.Width;
if(texture != null) newline.Front.OffsetX %= texture.Width;
}
if((oldline.Back != null) && (newline.Back != null)) {
@ -584,8 +584,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
}
//clamp offsetX
if(texture != null)
newline.Back.OffsetX %= texture.Width;
if(texture != null) newline.Back.OffsetX %= texture.Width;
}
}
// Copy X and Y coordinates
@ -595,12 +594,34 @@ namespace CodeImp.DoomBuilder.BuilderModes
{
newline.Front.OffsetX = oldline.Front.OffsetX;
newline.Front.OffsetY = oldline.Front.OffsetY;
//mxd. Copy UDMF offsets as well
if(General.Map.UDMF) {
UDMFTools.SetFloat(newline.Front.Fields, "offsetx_top", oldline.Front.Fields.GetValue("offsetx_top", 0f));
UDMFTools.SetFloat(newline.Front.Fields, "offsetx_mid", oldline.Front.Fields.GetValue("offsetx_mid", 0f));
UDMFTools.SetFloat(newline.Front.Fields, "offsetx_bottom", oldline.Front.Fields.GetValue("offsetx_bottom", 0f));
UDMFTools.SetFloat(newline.Front.Fields, "offsety_top", oldline.Front.Fields.GetValue("offsety_top", 0f));
UDMFTools.SetFloat(newline.Front.Fields, "offsety_mid", oldline.Front.Fields.GetValue("offsety_mid", 0f));
UDMFTools.SetFloat(newline.Front.Fields, "offsety_bottom", oldline.Front.Fields.GetValue("offsety_bottom", 0f));
}
}
if((oldline.Back != null) && (newline.Back != null))
{
newline.Back.OffsetX = oldline.Back.OffsetX;
newline.Back.OffsetY = oldline.Back.OffsetY;
//mxd. Copy UDMF offsets as well
if(General.Map.UDMF) {
UDMFTools.SetFloat(newline.Back.Fields, "offsetx_top", oldline.Back.Fields.GetValue("offsetx_top", 0f));
UDMFTools.SetFloat(newline.Back.Fields, "offsetx_mid", oldline.Back.Fields.GetValue("offsetx_mid", 0f));
UDMFTools.SetFloat(newline.Back.Fields, "offsetx_bottom", oldline.Back.Fields.GetValue("offsetx_bottom", 0f));
UDMFTools.SetFloat(newline.Back.Fields, "offsety_top", oldline.Back.Fields.GetValue("offsety_top", 0f));
UDMFTools.SetFloat(newline.Back.Fields, "offsety_mid", oldline.Back.Fields.GetValue("offsety_mid", 0f));
UDMFTools.SetFloat(newline.Back.Fields, "offsety_bottom", oldline.Back.Fields.GetValue("offsety_bottom", 0f));
}
}
}
// Reset X coordinate, copy Y coordinate
@ -610,12 +631,30 @@ namespace CodeImp.DoomBuilder.BuilderModes
{
newline.Front.OffsetX = 0;
newline.Front.OffsetY = oldline.Front.OffsetY;
//mxd. Reset UDMF X offset as well
if(General.Map.UDMF) {
UDMFTools.SetFloat(newline.Front.Fields, "offsetx_top", 0f);
UDMFTools.SetFloat(newline.Front.Fields, "offsetx_mid", 0f);
UDMFTools.SetFloat(newline.Front.Fields, "offsetx_bottom", 0f);
}
}
if((oldline.Back != null) && (newline.Back != null))
{
newline.Back.OffsetX = 0;
newline.Back.OffsetY = oldline.Back.OffsetY;
//mxd. Reset UDMF X offset and copy Y offset as well
if(General.Map.UDMF) {
UDMFTools.SetFloat(newline.Back.Fields, "offsetx_top", 0f);
UDMFTools.SetFloat(newline.Back.Fields, "offsetx_mid", 0f);
UDMFTools.SetFloat(newline.Back.Fields, "offsetx_bottom", 0f);
UDMFTools.SetFloat(newline.Back.Fields, "offsety_top", oldline.Back.Fields.GetValue("offsety_top", 0f));
UDMFTools.SetFloat(newline.Back.Fields, "offsety_mid", oldline.Back.Fields.GetValue("offsety_mid", 0f));
UDMFTools.SetFloat(newline.Back.Fields, "offsety_bottom", oldline.Back.Fields.GetValue("offsety_bottom", 0f));
}
}
}
}