mirror of
https://git.do.srb2.org/STJr/UltimateZoneBuilder.git
synced 2025-02-20 10:53:19 +00:00
Fixed: Randomize Sectors / Vertices, UDMF: vertex handles were not updated.
Fixed: Randomize Sectors, UDMF: vertex height changes were not undone properly after using the mode (I broke it in r2101). Fixed: Randomize Sectors: floor/ceiling textures can not be used as lower/upper textures when "MixTexturesAndFlats" is disabled. In this case the corresponding option is now changed to "Use default texture".
This commit is contained in:
parent
7a3d743650
commit
5e59c38da6
5 changed files with 105 additions and 45 deletions
|
@ -84,6 +84,7 @@ namespace CodeImp.DoomBuilder.VisualModes
|
||||||
public bool ProcessGeometry { get { return processgeometry; } set { processgeometry = value; } }
|
public bool ProcessGeometry { get { return processgeometry; } set { processgeometry = value; } }
|
||||||
public bool ProcessThings { get { return processthings; } set { processthings = value; } }
|
public bool ProcessThings { get { return processthings; } set { processthings = value; } }
|
||||||
public VisualBlockMap BlockMap { get { return blockmap; } }
|
public VisualBlockMap BlockMap { get { return blockmap; } }
|
||||||
|
public Dictionary<Vertex, VisualVertexPair> VisualVertices { get { return vertices; } } //mxd
|
||||||
|
|
||||||
// Rendering
|
// Rendering
|
||||||
public IRenderer3D Renderer { get { return renderer; } }
|
public IRenderer3D Renderer { get { return renderer; } }
|
||||||
|
@ -108,9 +109,7 @@ namespace CodeImp.DoomBuilder.VisualModes
|
||||||
this.visiblethings = new List<VisualThing>(100);
|
this.visiblethings = new List<VisualThing>(100);
|
||||||
this.processgeometry = true;
|
this.processgeometry = true;
|
||||||
this.processthings = true;
|
this.processthings = true;
|
||||||
|
this.vertices = new Dictionary<Vertex, VisualVertexPair>(); //mxd
|
||||||
//mxd
|
|
||||||
if(General.Map.UDMF) this.vertices = new Dictionary<Vertex,VisualVertexPair>();
|
|
||||||
|
|
||||||
//mxd. Synch camera position to cursor position or center of the screen in 2d-mode
|
//mxd. Synch camera position to cursor position or center of the screen in 2d-mode
|
||||||
if (General.Settings.GZSynchCameras && General.Editing.Mode is ClassicMode) {
|
if (General.Settings.GZSynchCameras && General.Editing.Mode is ClassicMode) {
|
||||||
|
@ -845,8 +844,7 @@ namespace CodeImp.DoomBuilder.VisualModes
|
||||||
visibleblocks.Clear();
|
visibleblocks.Clear();
|
||||||
visiblegeometry.Clear();
|
visiblegeometry.Clear();
|
||||||
visiblethings.Clear();
|
visiblethings.Clear();
|
||||||
|
vertices.Clear(); //mxd
|
||||||
if(General.Map.UDMF) vertices.Clear(); //mxd
|
|
||||||
|
|
||||||
// Make new blockmap
|
// Make new blockmap
|
||||||
FillBlockMap();
|
FillBlockMap();
|
||||||
|
|
|
@ -13,7 +13,7 @@ namespace CodeImp.DoomBuilder.VisualModes
|
||||||
public VisualVertex[] Vertices { get { return new[] { floorvert, ceilvert }; } }
|
public VisualVertex[] Vertices { get { return new[] { floorvert, ceilvert }; } }
|
||||||
public VisualVertex FloorVertex { get { return floorvert; } }
|
public VisualVertex FloorVertex { get { return floorvert; } }
|
||||||
public VisualVertex CeilingVertex { get { return ceilvert; } }
|
public VisualVertex CeilingVertex { get { return ceilvert; } }
|
||||||
public bool Changed { set { floorvert.Changed = true; ceilvert.Changed = true; } }
|
public bool Changed { set { floorvert.Changed = value; ceilvert.Changed = value; } }
|
||||||
|
|
||||||
public VisualVertexPair(VisualVertex floorvert, VisualVertex ceilvert) {
|
public VisualVertexPair(VisualVertex floorvert, VisualVertex ceilvert) {
|
||||||
if(floorvert.CeilingVertex == ceilvert.CeilingVertex)
|
if(floorvert.CeilingVertex == ceilvert.CeilingVertex)
|
||||||
|
|
|
@ -12,6 +12,7 @@ namespace CodeImp.DoomBuilder.BuilderEffects
|
||||||
{
|
{
|
||||||
private readonly string editingModeName;
|
private readonly string editingModeName;
|
||||||
private readonly List<VisualSector> visualSectors;
|
private readonly List<VisualSector> visualSectors;
|
||||||
|
private readonly List<VisualVertexPair> visualVerts;
|
||||||
private readonly TranslationOffsetVertexData[] vertexData;
|
private readonly TranslationOffsetVertexData[] vertexData;
|
||||||
private readonly List<SectorData> sectorData;
|
private readonly List<SectorData> sectorData;
|
||||||
private readonly List<SidedefData> sidedefData;
|
private readonly List<SidedefData> sidedefData;
|
||||||
|
@ -124,6 +125,12 @@ namespace CodeImp.DoomBuilder.BuilderEffects
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
visualVerts = new List<VisualVertexPair>();
|
||||||
|
foreach (Vertex vert in affectedVerts)
|
||||||
|
{
|
||||||
|
if(vm.VisualVertices.ContainsKey(vert)) visualVerts.Add(vm.VisualVertices[vert]);
|
||||||
|
}
|
||||||
|
|
||||||
} else if(editingModeName == "SectorsMode") {
|
} else if(editingModeName == "SectorsMode") {
|
||||||
ICollection<Sector> list = General.Map.Map.GetSelectedSectors(true);
|
ICollection<Sector> list = General.Map.Map.GetSelectedSectors(true);
|
||||||
|
|
||||||
|
@ -144,6 +151,10 @@ namespace CodeImp.DoomBuilder.BuilderEffects
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//create undo
|
||||||
|
General.Map.UndoRedo.ClearAllRedos();
|
||||||
|
General.Map.UndoRedo.CreateUndo("Randomize " + sectors.Count + (sectors.Count > 1 ? " sectors" : " sector"));
|
||||||
|
|
||||||
//update window header
|
//update window header
|
||||||
this.Text = "Randomize " + sectors.Count + (sectors.Count > 1 ? " sectors" : " sector");
|
this.Text = "Randomize " + sectors.Count + (sectors.Count > 1 ? " sectors" : " sector");
|
||||||
|
|
||||||
|
@ -287,8 +298,20 @@ namespace CodeImp.DoomBuilder.BuilderEffects
|
||||||
//texture pickers
|
//texture pickers
|
||||||
textureLower.Initialize();
|
textureLower.Initialize();
|
||||||
textureUpper.Initialize();
|
textureUpper.Initialize();
|
||||||
|
|
||||||
|
//We can't use floor/ceiling textures when MixTexturesFlats is disabled
|
||||||
|
if (General.Map.Config.MixTexturesFlats)
|
||||||
|
{
|
||||||
textureLower.TextureName = General.Settings.DefaultFloorTexture;
|
textureLower.TextureName = General.Settings.DefaultFloorTexture;
|
||||||
textureUpper.TextureName = General.Settings.DefaultCeilingTexture;
|
textureUpper.TextureName = General.Settings.DefaultCeilingTexture;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
textureLower.TextureName = General.Settings.DefaultTexture;
|
||||||
|
textureUpper.TextureName = General.Settings.DefaultTexture;
|
||||||
|
cbUpperTexStyle.Items[1] = "Use default texture";
|
||||||
|
cbLowerTexStyle.Items[1] = "Use default texture";
|
||||||
|
}
|
||||||
|
|
||||||
cbUpperTexStyle.SelectedIndex = 0;
|
cbUpperTexStyle.SelectedIndex = 0;
|
||||||
cbLowerTexStyle.SelectedIndex = 0;
|
cbLowerTexStyle.SelectedIndex = 0;
|
||||||
|
@ -298,10 +321,6 @@ namespace CodeImp.DoomBuilder.BuilderEffects
|
||||||
updateAngles();
|
updateAngles();
|
||||||
updateFloorHeights();
|
updateFloorHeights();
|
||||||
updateCeilingHeights();
|
updateCeilingHeights();
|
||||||
|
|
||||||
//create undo
|
|
||||||
General.Map.UndoRedo.ClearAllRedos();
|
|
||||||
General.Map.UndoRedo.CreateUndo("Randomize " + sectors.Count + (sectors.Count > 1 ? " sectors" : " sector"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private float GetLowestCeiling(Vertex v) {
|
private float GetLowestCeiling(Vertex v) {
|
||||||
|
@ -427,6 +446,11 @@ namespace CodeImp.DoomBuilder.BuilderEffects
|
||||||
foreach(VisualSector vs in visualSectors) vs.UpdateSectorGeometry(true);
|
foreach(VisualSector vs in visualSectors) vs.UpdateSectorGeometry(true);
|
||||||
foreach(VisualSector vs in visualSectors) vs.UpdateSectorData();
|
foreach(VisualSector vs in visualSectors) vs.UpdateSectorData();
|
||||||
foreach(VisualSector vs in visualSectors) vs.UpdateSectorData();
|
foreach(VisualSector vs in visualSectors) vs.UpdateSectorData();
|
||||||
|
foreach (VisualVertexPair pair in visualVerts)
|
||||||
|
{
|
||||||
|
pair.Changed = true;
|
||||||
|
pair.Update();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateTextureSelectors() {
|
private void updateTextureSelectors() {
|
||||||
|
@ -438,22 +462,36 @@ namespace CodeImp.DoomBuilder.BuilderEffects
|
||||||
textureUpper.Enabled = ceilingHeightAmmount.Value > 0 && cbUpperTexStyle.SelectedIndex == 2;
|
textureUpper.Enabled = ceilingHeightAmmount.Value > 0 && cbUpperTexStyle.SelectedIndex == 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateUpperTextures(int index, bool updateGeometry) {
|
private void updateUpperTextures(int index, bool updateGeometry)
|
||||||
|
{
|
||||||
if(index == -1) return;
|
if(index == -1) return;
|
||||||
|
|
||||||
if(index == 0) { //revert
|
if(index == 0)
|
||||||
|
{ //revert
|
||||||
foreach(SidedefData sd in sidedefData)
|
foreach(SidedefData sd in sidedefData)
|
||||||
setUpperTexture(sd, sd.HighTexture);
|
setUpperTexture(sd, sd.HighTexture);
|
||||||
} else if(index == 1) { //use ceiling texture
|
}
|
||||||
foreach(SidedefData sd in sidedefData) {
|
else if(index == 1) //use ceiling or default texture
|
||||||
if(sd.Side.Sector != null) {
|
{
|
||||||
if(sd.UpdateTextureOnOtherSide && sd.Side.Other.Sector != null)
|
if(General.Map.Config.MixTexturesFlats)
|
||||||
setUpperTexture(sd, sd.Side.Sector.CeilTexture, sd.Side.Other.Sector.CeilTexture);
|
{
|
||||||
|
|
||||||
|
foreach(SidedefData sd in sidedefData)
|
||||||
|
{
|
||||||
|
if(sd.Side.Sector != null)
|
||||||
|
{
|
||||||
|
if (sd.UpdateTextureOnOtherSide && sd.Side.Other.Sector != null) setUpperTexture(sd, sd.Side.Sector.CeilTexture, sd.Side.Other.Sector.CeilTexture);
|
||||||
|
else setUpperTexture(sd, sd.Side.Sector.CeilTexture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
setUpperTexture(sd, sd.Side.Sector.CeilTexture);
|
{
|
||||||
|
foreach(SidedefData sd in sidedefData) setUpperTexture(sd, General.Settings.DefaultTexture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if(index == 2) { //use given texture
|
else if(index == 2) //use given texture
|
||||||
|
{
|
||||||
foreach(SidedefData sd in sidedefData)
|
foreach(SidedefData sd in sidedefData)
|
||||||
setUpperTexture(sd, textureUpper.TextureName);
|
setUpperTexture(sd, textureUpper.TextureName);
|
||||||
}
|
}
|
||||||
|
@ -462,22 +500,35 @@ namespace CodeImp.DoomBuilder.BuilderEffects
|
||||||
if(updateGeometry && editingModeName == "BaseVisualMode") updateVisualGeometry();
|
if(updateGeometry && editingModeName == "BaseVisualMode") updateVisualGeometry();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateLowerTextures(int index, bool updateGeometry) {
|
private void updateLowerTextures(int index, bool updateGeometry)
|
||||||
|
{
|
||||||
if(index == -1) return;
|
if(index == -1) return;
|
||||||
|
|
||||||
if(index == 0) { //revert
|
if(index == 0)
|
||||||
|
{ //revert
|
||||||
foreach(SidedefData sd in sidedefData)
|
foreach(SidedefData sd in sidedefData)
|
||||||
setLowerTexture(sd, sd.LowTexture);
|
setLowerTexture(sd, sd.LowTexture);
|
||||||
} else if(index == 1) { //use floor texture
|
}
|
||||||
foreach(SidedefData sd in sidedefData) {
|
else if(index == 1) //use floor or default texture
|
||||||
if(sd.Side.Sector != null) {
|
{
|
||||||
if(sd.UpdateTextureOnOtherSide && sd.Side.Other.Sector != null)
|
if(General.Map.Config.MixTexturesFlats)
|
||||||
setLowerTexture(sd, sd.Side.Sector.FloorTexture, sd.Side.Other.Sector.FloorTexture);
|
{
|
||||||
|
foreach(SidedefData sd in sidedefData)
|
||||||
|
{
|
||||||
|
if(sd.Side.Sector != null)
|
||||||
|
{
|
||||||
|
if (sd.UpdateTextureOnOtherSide && sd.Side.Other.Sector != null) setLowerTexture(sd, sd.Side.Sector.FloorTexture, sd.Side.Other.Sector.FloorTexture);
|
||||||
|
else setLowerTexture(sd, sd.Side.Sector.FloorTexture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
setLowerTexture(sd, sd.Side.Sector.FloorTexture);
|
{
|
||||||
|
foreach (SidedefData sd in sidedefData) setLowerTexture(sd, General.Settings.DefaultTexture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if(index == 2) { //use given texture
|
else if(index == 2) //use given texture
|
||||||
|
{
|
||||||
foreach(SidedefData sd in sidedefData)
|
foreach(SidedefData sd in sidedefData)
|
||||||
setLowerTexture(sd, textureLower.TextureName);
|
setLowerTexture(sd, textureLower.TextureName);
|
||||||
}
|
}
|
||||||
|
|
|
@ -130,6 +130,11 @@ namespace CodeImp.DoomBuilder.BuilderEffects
|
||||||
positionJitterAmmount.Maximum = MaxSafeDistance;
|
positionJitterAmmount.Maximum = MaxSafeDistance;
|
||||||
heightJitterAmmount.Maximum = MaxSafeHeightDistance;
|
heightJitterAmmount.Maximum = MaxSafeHeightDistance;
|
||||||
|
|
||||||
|
//create undo
|
||||||
|
General.Map.UndoRedo.ClearAllRedos();
|
||||||
|
General.Map.UndoRedo.CreateUndo("Randomize " + selection.Count + (selection.Count > 1 ? " things" : " thing"));
|
||||||
|
|
||||||
|
//update controls
|
||||||
updateOffsetAngles();
|
updateOffsetAngles();
|
||||||
updateHeights();
|
updateHeights();
|
||||||
updateRotationAngles();
|
updateRotationAngles();
|
||||||
|
@ -138,10 +143,6 @@ namespace CodeImp.DoomBuilder.BuilderEffects
|
||||||
updateScaleX();
|
updateScaleX();
|
||||||
updateScaleY();
|
updateScaleY();
|
||||||
|
|
||||||
//create undo
|
|
||||||
General.Map.UndoRedo.ClearAllRedos();
|
|
||||||
General.Map.UndoRedo.CreateUndo("Randomize " + selection.Count +(selection.Count > 1 ? " things" : " thing"));
|
|
||||||
|
|
||||||
//apply settings
|
//apply settings
|
||||||
cbRelativeScale.Checked = relativeScale;
|
cbRelativeScale.Checked = relativeScale;
|
||||||
cbUniformScale.Checked = uniformScale;
|
cbUniformScale.Checked = uniformScale;
|
||||||
|
|
|
@ -13,6 +13,7 @@ namespace CodeImp.DoomBuilder.BuilderEffects
|
||||||
private readonly string editingModeName;
|
private readonly string editingModeName;
|
||||||
private readonly List<Vertex> selection;
|
private readonly List<Vertex> selection;
|
||||||
private readonly List<VisualSector> visualSectors;
|
private readonly List<VisualSector> visualSectors;
|
||||||
|
private readonly List<VisualVertexPair> visualVerts;
|
||||||
private readonly VertexData[] vertexData;
|
private readonly VertexData[] vertexData;
|
||||||
private readonly int MaxSafeDistance;
|
private readonly int MaxSafeDistance;
|
||||||
|
|
||||||
|
@ -53,8 +54,15 @@ namespace CodeImp.DoomBuilder.BuilderEffects
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
visualVerts = new List<VisualVertexPair>();
|
||||||
|
foreach(Vertex vert in selection)
|
||||||
|
{
|
||||||
|
if(vm.VisualVertices.ContainsKey(vert)) visualVerts.Add(vm.VisualVertices[vert]);
|
||||||
|
}
|
||||||
|
|
||||||
//update window header
|
//update window header
|
||||||
this.Text = "Randomize " + linesCount + (linesCount > 1 ? " linedefs" : " linedef");
|
this.Text = "Randomize " + linesCount + (linesCount > 1 ? " linedefs" : " linedef");
|
||||||
|
|
||||||
} else if(editingModeName == "LinedefsMode") {
|
} else if(editingModeName == "LinedefsMode") {
|
||||||
ICollection<Linedef> list = General.Map.Map.GetSelectedLinedefs(true);
|
ICollection<Linedef> list = General.Map.Map.GetSelectedLinedefs(true);
|
||||||
int linesCount = 0;
|
int linesCount = 0;
|
||||||
|
@ -84,6 +92,10 @@ namespace CodeImp.DoomBuilder.BuilderEffects
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//create undo
|
||||||
|
General.Map.UndoRedo.ClearAllRedos();
|
||||||
|
General.Map.UndoRedo.CreateUndo("Randomize " + selection.Count + (selection.Count > 1 ? " vertices" : " vertex"));
|
||||||
|
|
||||||
Dictionary<Vertex, VertexData> data = new Dictionary<Vertex, VertexData>();
|
Dictionary<Vertex, VertexData> data = new Dictionary<Vertex, VertexData>();
|
||||||
|
|
||||||
foreach(Vertex v in selection) {
|
foreach(Vertex v in selection) {
|
||||||
|
@ -150,10 +162,6 @@ namespace CodeImp.DoomBuilder.BuilderEffects
|
||||||
positionJitterAmmount.Maximum = MaxSafeDistance;
|
positionJitterAmmount.Maximum = MaxSafeDistance;
|
||||||
|
|
||||||
updateAngles();
|
updateAngles();
|
||||||
|
|
||||||
//create undo
|
|
||||||
General.Map.UndoRedo.ClearAllRedos();
|
|
||||||
General.Map.UndoRedo.CreateUndo("Randomize " + selection.Count + (selection.Count > 1 ? " vertices" : " vertex"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//utility
|
//utility
|
||||||
|
@ -170,11 +178,13 @@ namespace CodeImp.DoomBuilder.BuilderEffects
|
||||||
General.Map.Map.Update();
|
General.Map.Map.Update();
|
||||||
General.Map.IsChanged = true;
|
General.Map.IsChanged = true;
|
||||||
|
|
||||||
foreach(VisualSector vs in visualSectors)
|
foreach(VisualSector vs in visualSectors) vs.UpdateSectorGeometry(true);
|
||||||
vs.UpdateSectorGeometry(true);
|
foreach(VisualSector vs in visualSectors) vs.UpdateSectorData();
|
||||||
|
foreach(VisualVertexPair pair in visualVerts)
|
||||||
foreach(VisualSector vs in visualSectors)
|
{
|
||||||
vs.UpdateSectorData();
|
pair.Changed = true;
|
||||||
|
pair.Update();
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
General.Interface.RedrawDisplay();
|
General.Interface.RedrawDisplay();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue