Skip to content

Commit c7518c8

Browse files
committed
#66: add ramp rates to Remap controller
1 parent d38bae3 commit c7518c8

5 files changed

Lines changed: 45 additions & 13 deletions

File tree

‎CHANGELOG.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
- CustomPullController can now read a field from any kind of module, not just ModuleEngines.
55
- Added Conditional attribute to logging calls, to reduce performance overhead. These will now only be emitted in a debug configuration.
66
- Improved randomness of perlin noise controller.
7+
- Added response rate to Remap controller
78

89
# v0.10.5
910

‎Source/Waterfall/EffectControllers/RemapController.cs‎

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,11 @@ public class RemapController : WaterfallController
1111
{
1212
[Persistent] public string sourceController = "";
1313
public FastFloatCurve mappingCurve = new();
14+
[Persistent] public float responseRateUp = 0;
15+
[Persistent] public float responseRateDown = 0;
1416

1517
private WaterfallController source;
18+
private bool interpolating = false;
1619

1720
public RemapController() : base() { }
1821
public RemapController(ConfigNode node) : base(node)
@@ -54,12 +57,23 @@ protected override bool UpdateInternal()
5457
{
5558
if (source == null) return false;
5659

57-
if (!source.awake) return false;
60+
if (!source.awake && !interpolating) return false;
5861

5962
float[] sourceValues = source.Get();
6063
for (int i = sourceValues.Length; i-- > 0;)
6164
{
62-
values[i] = mappingCurve.Evaluate(sourceValues[i]);
65+
float targetValue = mappingCurve.Evaluate(sourceValues[i]);
66+
float rampRate = targetValue > values[i] ? responseRateUp : responseRateDown;
67+
68+
if (rampRate > 0)
69+
{
70+
values[i] = Mathf.MoveTowards(values[i], targetValue, rampRate * TimeWarp.deltaTime);
71+
interpolating = interpolating || values[i] != targetValue;
72+
}
73+
else
74+
{
75+
values[i] = targetValue;
76+
}
6377
}
6478
return true;
6579
}

‎Source/Waterfall/UI/EffectControllersUI/CustomPullControllerUIOptions.cs‎

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,6 @@ public CustomPullControllerUIOptions()
2424
LoadOptions(new()); // Initialize default values from dummy model instance
2525
}
2626

27-
private static float ParseOrZero(string str)
28-
{
29-
if (Single.TryParse(str, out float result))
30-
{
31-
return result;
32-
}
33-
34-
return 0;
35-
}
36-
3727
public override void DrawOptions()
3828
{
3929
GUILayout.BeginVertical();

‎Source/Waterfall/UI/EffectControllersUI/IEffectControllerUIOptions.cs‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,5 +62,15 @@ protected virtual void LoadOptions(TController controller) { }
6262
/// Must be overridden if controller type have UI options that have to be copied into newly created controller instance.
6363
/// </summary>
6464
protected virtual TController CreateControllerInternal() => new();
65+
66+
protected static float ParseOrZero(string str)
67+
{
68+
if (Single.TryParse(str, out float result))
69+
{
70+
return result;
71+
}
72+
73+
return 0;
74+
}
6575
}
6676
}

‎Source/Waterfall/UI/EffectControllersUI/RemapControllerUIOptions.cs‎

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using UnityEngine;
1+
using System;
2+
using UnityEngine;
23

34
namespace Waterfall.UI.EffectControllersUI
45
{
@@ -12,6 +13,8 @@ public class RemapControllerUIOptions : DefaultEffectControllerUIOptions<RemapCo
1213
private string sourceController;
1314
private Texture2D miniCurve;
1415
private UICurveEditWindow curveEditor;
16+
private string rampRateUp;
17+
private string rampRateDown;
1518

1619
public RemapControllerUIOptions()
1720
{
@@ -29,6 +32,16 @@ public override void DrawOptions()
2932
sourceController = GUILayout.TextArea(sourceController);
3033
GUILayout.EndHorizontal();
3134

35+
GUILayout.BeginHorizontal();
36+
GUILayout.Label("Ramp Rate Up", UIResources.GetStyle("data_header"), GUILayout.MaxWidth(160f));
37+
rampRateUp = GUILayout.TextArea(rampRateUp, GUILayout.MaxWidth(60f));
38+
GUILayout.EndHorizontal();
39+
40+
GUILayout.BeginHorizontal();
41+
GUILayout.Label("Ramp Rate Down", UIResources.GetStyle("data_header"), GUILayout.MaxWidth(160f));
42+
rampRateDown = GUILayout.TextArea(rampRateDown, GUILayout.MaxWidth(60f));
43+
GUILayout.EndHorizontal();
44+
3245
var buttonRect = GUILayoutUtility.GetRect(curveButtonDims.x, curveButtonDims.y);
3346
var imageRect = new Rect(buttonRect.xMin + 10f, buttonRect.yMin + 10, buttonRect.width - 20, buttonRect.height - 20);
3447
if (GUI.Button(buttonRect, ""))
@@ -43,6 +56,8 @@ protected override void LoadOptions(RemapController controller)
4356
{
4457
mappingCurve = controller.mappingCurve;
4558
sourceController = controller.sourceController;
59+
rampRateUp = controller.responseRateUp.ToString();
60+
rampRateDown = controller.responseRateDown.ToString();
4661

4762
GenerateCurveThumbs();
4863
}
@@ -52,6 +67,8 @@ protected override RemapController CreateControllerInternal() =>
5267
{
5368
sourceController = sourceController,
5469
mappingCurve = mappingCurve,
70+
responseRateUp = ParseOrZero(rampRateUp),
71+
responseRateDown = ParseOrZero(rampRateDown),
5572
};
5673

5774
private void EditCurve(FastFloatCurve toEdit, CurveUpdateFunction function)

0 commit comments

Comments
 (0)