diff --git a/examples/EmberExample/.config/dotnet-tools.json b/examples/EmberExample/.config/dotnet-tools.json index fbedee1..7f4505d 100644 --- a/examples/EmberExample/.config/dotnet-tools.json +++ b/examples/EmberExample/.config/dotnet-tools.json @@ -3,34 +3,34 @@ "isRoot": true, "tools": { "dotnet-mgcb": { - "version": "3.8.4", + "version": "3.8.4.1", "commands": [ "mgcb" ] }, "dotnet-mgcb-editor": { - "version": "3.8.4", + "version": "3.8.4.1", "commands": [ "mgcb-editor" ] }, "dotnet-mgcb-editor-linux": { - "version": "3.8.4", + "version": "3.8.4.1", "commands": [ "mgcb-editor-linux" ] }, "dotnet-mgcb-editor-windows": { - "version": "3.8.4", + "version": "3.8.4.1", "commands": [ "mgcb-editor-windows" ] }, "dotnet-mgcb-editor-mac": { - "version": "3.8.4", + "version": "3.8.4.1", "commands": [ "mgcb-editor-mac" ] } } -} \ No newline at end of file +} diff --git a/examples/EmberExample/Content/Content.mgcb b/examples/EmberExample/Content/Content.mgcb index b9a4813..93acd95 100644 --- a/examples/EmberExample/Content/Content.mgcb +++ b/examples/EmberExample/Content/Content.mgcb @@ -10,6 +10,7 @@ #-------------------------------- References --------------------------------# +/reference:..\..\..\external\monogame-extended\.artifacts\source\bin\MonoGame.Extended.Content.Pipeline\release\MonoGame.Extended.Content.Pipeline.dll #---------------------------------- Content ---------------------------------# @@ -20,7 +21,9 @@ /copy:loadtest/Pixel.png #begin ring/ring.ember -/copy:ring/ring.ember +/importer: +/processor: +/build:ring/ring.ember #begin ring/Ring.png /copy:ring/Ring.png @@ -36,3 +39,4 @@ #begin spark/spark.ember /copy:spark/spark.ember + diff --git a/examples/EmberExample/EmberExample.csproj b/examples/EmberExample/EmberExample.csproj index df7044e..2efa128 100644 --- a/examples/EmberExample/EmberExample.csproj +++ b/examples/EmberExample/EmberExample.csproj @@ -25,8 +25,8 @@ - - + + diff --git a/examples/EmberExample/Game1.cs b/examples/EmberExample/Game1.cs index f87df9c..afc7365 100644 --- a/examples/EmberExample/Game1.cs +++ b/examples/EmberExample/Game1.cs @@ -127,8 +127,7 @@ private void DrawDebugWindow(GameTime gameTime) ImGui.TableNextColumn(); if (ImGui.Button("Ring"u8, new System.Numerics.Vector2(-1, 0))) { - string fileName = Path.Combine(_contentPath, "ring", "ring.ember"); - LoadParticleEffect(fileName); + LoadParticleEffect("ring/ring", true); } ImGui.TableNextColumn(); @@ -156,7 +155,7 @@ private void DrawDebugWindow(GameTime gameTime) ImGui.Text("Auto Trigger: "); ImGui.TableNextColumn(); bool autoTrigger = _particleEffect.AutoTrigger; - if(ImGui.Checkbox("##auto_trigger"u8, ref autoTrigger)) + if (ImGui.Checkbox("##auto_trigger"u8, ref autoTrigger)) { _particleEffect.AutoTrigger = autoTrigger; } @@ -213,7 +212,7 @@ private void DrawDebugWindow(GameTime gameTime) ImGuiRenderer.AfterLayout(); } - private void LoadParticleEffect(string fileName) + private void LoadParticleEffect(string fileName, bool useContentPipeline = false) { if (_particleEffect != null) { @@ -221,9 +220,16 @@ private void LoadParticleEffect(string fileName) _particleEffect = null; } - using ParticleEffectReader reader = new(fileName, Content); - _particleEffect = reader.ReadParticleEffect(); - _particleEffect.Position = GraphicsDevice.Viewport.Bounds.Center.ToVector2(); - _particleEffect.AutoTrigger = false; + if (useContentPipeline) + { + _particleEffect = Content.Load(fileName); + } + else + { + using ParticleEffectReader reader = new(fileName, Content); + _particleEffect = reader.ReadParticleEffect(); + _particleEffect.Position = GraphicsDevice.Viewport.Bounds.Center.ToVector2(); + _particleEffect.AutoTrigger = false; + } } } diff --git a/external/monogame-extended b/external/monogame-extended index 886254e..25d9e31 160000 --- a/external/monogame-extended +++ b/external/monogame-extended @@ -1 +1 @@ -Subproject commit 886254e9a8532a6c3bff40ecb7bb88a16df44f32 +Subproject commit 25d9e317c19c2a9d1a28bd878eef8df3ff22aa21 diff --git a/src/Ember/Architecture/Components/PropertyTable.cs b/src/Ember/Architecture/Components/PropertyTable.cs index 47f2f5e..dd738d3 100644 --- a/src/Ember/Architecture/Components/PropertyTable.cs +++ b/src/Ember/Architecture/Components/PropertyTable.cs @@ -471,10 +471,37 @@ public static bool ReleaseParameter(ReadOnlySpan label, ReadOnlySpan } else if (value.Kind == ParticleValueKind.Random) { - if (ReleaseParameterRandomVector2(ref value.RandomMin, ref value.RandomMax)) + TableNextColumn(); + bool uniform = value.Uniform; + if (Checkbox("Uniform##uniform"u8, ref uniform)) { + value.Uniform = uniform; + if (uniform) + { + value.RandomMin.Y = value.RandomMin.X; + value.RandomMax.Y = value.RandomMax.X; + } changed = true; } + + TableNextRow(); + TableNextColumn(); + TableNextColumn(); + + if (value.Uniform) + { + if (ReleaseParameterUniformRandomVector2(ref value.RandomMin, ref value.RandomMax)) + { + changed = true; + } + } + else + { + if (ReleaseParameterRandomVector2(ref value.RandomMin, ref value.RandomMax)) + { + changed = true; + } + } } PopID(); @@ -657,6 +684,43 @@ private static bool ReleaseParameterConstantVector2(ref XnaVec2 value) return changed; } + private static bool ReleaseParameterUniformRandomVector2(ref XnaVec2 min, ref XnaVec2 max) + { + bool changed = false; + + ImGuiStylePtr stylePtr = GetStyle(); + TableNextColumn(); + + float availWidth = GetContentRegionAvail().X; + float toWidth = CalcTextSize(" to "u8).X; + float spacing = stylePtr.ItemSpacing.X * 2.0f; + float dragWidth = (availWidth - toWidth - spacing) * 0.5f; + + SetNextItemWidth(dragWidth); + float minVal = min.X; + if (DragFloat("##uniform-min"u8, ref minVal, 0.1f, 0.0f, max.X, "%.2f"u8)) + { + min.X = minVal; + min.Y = minVal; + changed = true; + } + + SameLine(); + Text(" to "u8); + + SameLine(); + SetNextItemWidth(dragWidth); + float maxVal = max.X; + if (DragFloat("##uniform-max"u8, ref maxVal, 0.1f, min.X, float.MaxValue, "%.2f"u8)) + { + max.X = maxVal; + max.Y = maxVal; + changed = true; + } + + return changed; + } + private static bool ReleaseParameterRandomVector2(ref XnaVec2 min, ref XnaVec2 max) { bool changed = false;