diff --git a/Source/Core/Config/ConfigurationInfo.cs b/Source/Core/Config/ConfigurationInfo.cs index 4789c19dbd4fb5d3b03ab600f64da789f71d569e..fb8eab7ffa5f16c783f1a8a22598cf2acad854cb 100644 --- a/Source/Core/Config/ConfigurationInfo.cs +++ b/Source/Core/Config/ConfigurationInfo.cs @@ -143,6 +143,8 @@ namespace CodeImp.DoomBuilder.Config info.TestSkill = General.Settings.ReadSetting(path + ".testskill", 3); testEngines.Add(info); } + + if(currentEngineIndex >= testEngines.Count) currentEngineIndex = 0; } //mxd. read custom linedef colors diff --git a/Source/Core/GZBuilder/Data/EngineInfo.cs b/Source/Core/GZBuilder/Data/EngineInfo.cs index 84b6d904f975f375395cba7e10b56002926678a6..cf982a5da83faa8681673b51215aeb0c17bd6738 100644 --- a/Source/Core/GZBuilder/Data/EngineInfo.cs +++ b/Source/Core/GZBuilder/Data/EngineInfo.cs @@ -28,9 +28,7 @@ namespace CodeImp.DoomBuilder.GZBuilder.Data { public void CheckProgramName(bool forced) { if ((forced || TestProgramName == DEFAULT_ENGINE_NAME) && !String.IsNullOrEmpty(TestProgram)) { //get engine name from folder name - string n = Path.GetDirectoryName(TestProgram); - int pos = n.LastIndexOf(Path.DirectorySeparatorChar); - TestProgramName = n.Substring(pos + 1, n.Length - pos - 1); + TestProgramName = Path.GetFileNameWithoutExtension(TestProgram); } } } diff --git a/Source/Core/Map/Thing.cs b/Source/Core/Map/Thing.cs index 53dc67a0e1d97a0a009b163dc93225510ca9011e..d6b1c3703c99e75b4824fd9e05dc8c63f1c2dd1f 100644 --- a/Source/Core/Map/Thing.cs +++ b/Source/Core/Map/Thing.cs @@ -56,6 +56,7 @@ namespace CodeImp.DoomBuilder.Map private int tag; private int action; private int[] args; + protected float scale; //mxd. Used in model rendering // Configuration private float size; @@ -70,6 +71,7 @@ namespace CodeImp.DoomBuilder.Map public MapSet Map { get { return map; } } public int Type { get { return type; } set { BeforePropsChange(); type = value; } } public Vector3D Position { get { return pos; } } + public float Scale { get { return scale; } } //mxd public float Angle { get { return anglerad; } } public int AngleDoom { get { return angledoom; } } internal Dictionary<string, bool> Flags { get { return flags; } } @@ -96,6 +98,7 @@ namespace CodeImp.DoomBuilder.Map this.listindex = listindex; this.flags = new Dictionary<string, bool>(); this.args = new int[NUM_ARGS]; + this.scale = 1.0f; //mxd if(map == General.Map.Map) General.Map.UndoRedo.RecAddThing(this); @@ -415,6 +418,7 @@ namespace CodeImp.DoomBuilder.Map // Apply size size = ti.Radius; fixedsize = ti.FixedSize; + scale = ti.SpriteScale.Width; //mxd // Color valid? if((ti.Color >= 0) && (ti.Color < ColorCollection.NUM_THING_COLORS)) diff --git a/Source/Core/Rendering/Renderer2D.cs b/Source/Core/Rendering/Renderer2D.cs index 1d846d2ca5b279d3f98c10e38e217194a28d888c..4ae0818449f441cfb9f2c4c338f8ca8511601136 100644 --- a/Source/Core/Rendering/Renderer2D.cs +++ b/Source/Core/Rendering/Renderer2D.cs @@ -1160,7 +1160,7 @@ namespace CodeImp.DoomBuilder.Rendering graphics.Shaders.Things2D.FillColor = group.Value.Selected ? General.Colors.Selection.ToColorValue() : General.Colors.ModelWireframe.ToColorValue(); for (int i = 0; i < mde.Model.Meshes.Count; i++) { - graphics.Shaders.Things2D.SetTransformSettings(group.Key, group.Value.Angle, scale); + graphics.Shaders.Things2D.SetTransformSettings(group.Key, group.Value.Angle, scale * group.Value.Scale); graphics.Shaders.Things2D.ApplySettings(); // Draw diff --git a/Source/Core/Rendering/Renderer3D.cs b/Source/Core/Rendering/Renderer3D.cs index f4827b545f40867d99e47b64c6ca6a1b38a50a2d..49531ab9b25ed0bec4c3d9dcaab63e3d7c30b432 100644 --- a/Source/Core/Rendering/Renderer3D.cs +++ b/Source/Core/Rendering/Renderer3D.cs @@ -1066,6 +1066,7 @@ namespace CodeImp.DoomBuilder.Rendering // Create the matrix for positioning / rotation world = Matrix.Multiply(t.Orientation, Matrix.RotationZ(t.Thing.Angle)); + world = Matrix.Multiply(world, t.Scale); world = Matrix.Multiply(world, t.Position); ApplyMatrices3D(); diff --git a/Source/Core/VisualModes/VisualThing.cs b/Source/Core/VisualModes/VisualThing.cs index fe1a0aada1b54a92ca65814c77a49477829c3f9b..d20dcc81320264a8a1ca4b1242263c64da1f7cfe 100644 --- a/Source/Core/VisualModes/VisualThing.cs +++ b/Source/Core/VisualModes/VisualThing.cs @@ -72,6 +72,7 @@ namespace CodeImp.DoomBuilder.VisualModes //mxd private int cameraDistance3D; private int thingHeight; + protected Matrix scale; //mxd. Used in model rendering //mxd. light properties private int lightType; @@ -103,6 +104,7 @@ namespace CodeImp.DoomBuilder.VisualModes //mxd internal int VertexColor { get { return vertices.Length > 0 ? vertices[0].c : 0;} } + internal Matrix Scale { get { return scale; } } public int CameraDistance3D { get { return cameraDistance3D; } } public bool Sizeless { get { return sizeless; } } public Vector3 Center { @@ -166,6 +168,7 @@ namespace CodeImp.DoomBuilder.VisualModes this.orientation = Matrix.Identity; this.position = Matrix.Identity; this.cagescales = Matrix.Identity; + this.scale = Matrix.Identity; //mxd //mxd lightType = -1; @@ -286,6 +289,11 @@ namespace CodeImp.DoomBuilder.VisualModes triangles = vertices.Length / 3; updategeo = true; } + + //mxd + protected void SetScale(float scaleX, float scaleY) { + scale = Matrix.Scaling(scaleX, scaleX, scaleY); + } // This updates the visual thing public virtual void Update() diff --git a/Source/Core/Windows/ConfigForm.cs b/Source/Core/Windows/ConfigForm.cs index dca69ad8151b655266b5fb48cdf9c413ceebb4bb..aa9dc7bfb74ee8b0d3b0643adc847e01320f05b2 100644 --- a/Source/Core/Windows/ConfigForm.cs +++ b/Source/Core/Windows/ConfigForm.cs @@ -624,6 +624,7 @@ namespace CodeImp.DoomBuilder.Windows private void btnRemoveEngine_Click(object sender, EventArgs e) { //remove params int index = cbEngineSelector.SelectedIndex; + cbEngineSelector.SelectedIndex = -1; configinfo.TestEngines.RemoveAt(index); //refresh engines list @@ -642,7 +643,9 @@ namespace CodeImp.DoomBuilder.Windows //mxd private void cbEngineSelector_SelectedIndexChanged(object sender, EventArgs e) { - //set new values + if(cbEngineSelector.SelectedIndex == -1) return; + + //set new values configinfo.CurrentEngineIndex = cbEngineSelector.SelectedIndex; cbEngineSelector.Tag = cbEngineSelector.SelectedIndex; //store for later use diff --git a/Source/Plugins/BuilderModes/VisualModes/BaseVisualThing.cs b/Source/Plugins/BuilderModes/VisualModes/BaseVisualThing.cs index 933686cca622feaf6b7f03793345cb04216c10f0..6a16a29233bb5b34536340fa62d2555c9ee0f9eb 100644 --- a/Source/Plugins/BuilderModes/VisualModes/BaseVisualThing.cs +++ b/Source/Plugins/BuilderModes/VisualModes/BaseVisualThing.cs @@ -25,6 +25,7 @@ using CodeImp.DoomBuilder.Geometry; using CodeImp.DoomBuilder.VisualModes; using CodeImp.DoomBuilder.Config; using CodeImp.DoomBuilder.Data; +using System.Drawing.Drawing2D; #endregion @@ -259,6 +260,7 @@ namespace CodeImp.DoomBuilder.BuilderModes SetPosition(pos); SetCageSize(infoRadius, infoHeight); SetCageColor(Thing.Color); + SetScale(info.SpriteScale.Width, info.SpriteScale.Height); //mxd // Keep info for object picking cageradius2 = infoRadius * Angle2D.SQRT2;