summaryrefslogtreecommitdiff
path: root/grapher/Models/Charts/ChartState
diff options
context:
space:
mode:
authorJacob Palecki <[email protected]>2020-09-21 14:27:12 -0700
committerJacob Palecki <[email protected]>2020-09-21 14:27:12 -0700
commit96112bf6eaee310985ae607b66b43fafcc5efb1e (patch)
tree6ffdee3a16c7b5c89b6f12117e8a9b78b1112e6f /grapher/Models/Charts/ChartState
parentconditional around lookup map (diff)
parentMerge pull request #21 from JacobPalecki/GUI (diff)
downloadrawaccel-96112bf6eaee310985ae607b66b43fafcc5efb1e.tar.xz
rawaccel-96112bf6eaee310985ae607b66b43fafcc5efb1e.zip
Merge branch 'GUI' into experiment
Diffstat (limited to 'grapher/Models/Charts/ChartState')
-rw-r--r--grapher/Models/Charts/ChartState/ChartState.cs104
-rw-r--r--grapher/Models/Charts/ChartState/ChartStateManager.cs78
-rw-r--r--grapher/Models/Charts/ChartState/CombinedState.cs46
-rw-r--r--grapher/Models/Charts/ChartState/XYOneGraphState.cs48
-rw-r--r--grapher/Models/Charts/ChartState/XYTwoGraphState.cs76
5 files changed, 352 insertions, 0 deletions
diff --git a/grapher/Models/Charts/ChartState/ChartState.cs b/grapher/Models/Charts/ChartState/ChartState.cs
new file mode 100644
index 0000000..ea67e83
--- /dev/null
+++ b/grapher/Models/Charts/ChartState/ChartState.cs
@@ -0,0 +1,104 @@
+using grapher.Models.Calculations;
+using grapher.Models.Serialized;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace grapher.Models.Charts.ChartState
+{
+ public abstract class ChartState
+ {
+ public ChartState(
+ ChartXY sensitivityChart,
+ ChartXY velocityChart,
+ ChartXY gainChart,
+ AccelData accelData,
+ AccelCalculator calculator)
+ {
+ SensitivityChart = sensitivityChart;
+ VelocityChart = velocityChart;
+ GainChart = gainChart;
+ Data = accelData;
+ Calculator = calculator;
+ TwoDotsPerGraph = false;
+ }
+
+ public ChartXY SensitivityChart { get; }
+
+ public ChartXY VelocityChart { get; }
+
+ public ChartXY GainChart { get; }
+
+ public AccelData Data { get; }
+
+ public AccelCalculator Calculator { get; }
+
+ public virtual DriverSettings Settings { get; set; }
+
+ internal bool TwoDotsPerGraph { get; set; }
+
+ public abstract void MakeDots(int x, int y, double timeInMs);
+
+ public abstract void Bind();
+
+ public abstract void Activate();
+
+ public abstract void Calculate(ManagedAccel accel, DriverSettings settings);
+
+ public virtual void SetUpCalculate(DriverSettings settings)
+ {
+ Data.Clear();
+ Calculator.ScaleByMouseSettings();
+ }
+
+ public void DrawLastMovement()
+ {
+ SensitivityChart.DrawLastMovementValue(TwoDotsPerGraph);
+ VelocityChart.DrawLastMovementValue(TwoDotsPerGraph);
+ GainChart.DrawLastMovementValue(TwoDotsPerGraph);
+ }
+
+ public void SetWidened()
+ {
+ SensitivityChart.SetWidened();
+ VelocityChart.SetWidened();
+ GainChart.SetWidened();
+ }
+
+ public void SetNarrowed()
+ {
+ SensitivityChart.SetNarrowed();
+ VelocityChart.SetNarrowed();
+ GainChart.SetNarrowed();
+ }
+
+ public void ClearLastValue()
+ {
+ SensitivityChart.ClearLastValue();
+ VelocityChart.ClearLastValue();
+ GainChart.ClearLastValue();
+ }
+
+ public void ShowVelocityAndGain(Form form, int borderHeight)
+ {
+ VelocityChart.Show();
+ GainChart.Show();
+ form.Height = SensitivityChart.Height +
+ Constants.ChartSeparationVertical +
+ VelocityChart.Height +
+ Constants.ChartSeparationVertical +
+ GainChart.Height +
+ borderHeight;
+ }
+
+ public void HideVelocityAndGain(Form form, int borderHeight)
+ {
+ VelocityChart.Hide();
+ GainChart.Hide();
+ form.Height = SensitivityChart.Height + borderHeight;
+ }
+ }
+}
diff --git a/grapher/Models/Charts/ChartState/ChartStateManager.cs b/grapher/Models/Charts/ChartState/ChartStateManager.cs
new file mode 100644
index 0000000..54d2e81
--- /dev/null
+++ b/grapher/Models/Charts/ChartState/ChartStateManager.cs
@@ -0,0 +1,78 @@
+using grapher.Models.Calculations;
+using grapher.Models.Serialized;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace grapher.Models.Charts.ChartState
+{
+ public class ChartStateManager
+ {
+ public ChartStateManager(
+ ChartXY sensitivityChart,
+ ChartXY velocityChart,
+ ChartXY gainChat,
+ AccelData accelData,
+ AccelCalculator accelCalculator)
+ {
+ CombinedState = new CombinedState(
+ sensitivityChart,
+ velocityChart,
+ gainChat,
+ accelData,
+ accelCalculator);
+
+ XYOneGraphState = new XYOneGraphState(
+ sensitivityChart,
+ velocityChart,
+ gainChat,
+ accelData,
+ accelCalculator);
+
+ XYTwoGraphState = new XYTwoGraphState(
+ sensitivityChart,
+ velocityChart,
+ gainChat,
+ accelData,
+ accelCalculator);
+ }
+
+ private CombinedState CombinedState { get; }
+
+ private XYOneGraphState XYOneGraphState { get; }
+
+ private XYTwoGraphState XYTwoGraphState { get; }
+
+
+ public ChartState DetermineState(DriverSettings settings)
+ {
+ ChartState chartState;
+
+ if (settings.combineMagnitudes)
+ {
+ if (settings.sensitivity.x != settings.sensitivity.y)
+ {
+ chartState = XYOneGraphState;
+ }
+ else
+ {
+ chartState = CombinedState;
+ }
+ }
+ else
+ {
+ chartState = XYTwoGraphState;
+ }
+
+ chartState.Settings = settings;
+ return chartState;
+ }
+
+ public ChartState InitialState()
+ {
+ return CombinedState;
+ }
+ }
+}
diff --git a/grapher/Models/Charts/ChartState/CombinedState.cs b/grapher/Models/Charts/ChartState/CombinedState.cs
new file mode 100644
index 0000000..17cd68a
--- /dev/null
+++ b/grapher/Models/Charts/ChartState/CombinedState.cs
@@ -0,0 +1,46 @@
+using grapher.Models.Calculations;
+using grapher.Models.Serialized;
+
+namespace grapher.Models.Charts.ChartState
+{
+ public class CombinedState : ChartState
+ {
+ public CombinedState(
+ ChartXY sensitivityChart,
+ ChartXY velocityChart,
+ ChartXY gainChart,
+ AccelData accelData,
+ AccelCalculator accelCalculator)
+ : base(
+ sensitivityChart,
+ velocityChart,
+ gainChart,
+ accelData,
+ accelCalculator)
+ { }
+
+ public override void Activate()
+ {
+ SensitivityChart.SetCombined();
+ VelocityChart.SetCombined();
+ GainChart.SetCombined();
+ }
+
+ public override void MakeDots(int x, int y, double timeInMs)
+ {
+ Data.CalculateDots(x, y, timeInMs);
+ }
+
+ public override void Bind()
+ {
+ SensitivityChart.Bind(Data.Combined.AccelPoints);
+ VelocityChart.Bind(Data.Combined.VelocityPoints);
+ GainChart.Bind(Data.Combined.GainPoints);
+ }
+
+ public override void Calculate(ManagedAccel accel, DriverSettings settings)
+ {
+ Calculator.Calculate(Data.Combined, accel, settings.sensitivity.x, Calculator.MagnitudesCombined);
+ }
+ }
+}
diff --git a/grapher/Models/Charts/ChartState/XYOneGraphState.cs b/grapher/Models/Charts/ChartState/XYOneGraphState.cs
new file mode 100644
index 0000000..bbc0c28
--- /dev/null
+++ b/grapher/Models/Charts/ChartState/XYOneGraphState.cs
@@ -0,0 +1,48 @@
+using grapher.Models.Calculations;
+using grapher.Models.Serialized;
+
+namespace grapher.Models.Charts.ChartState
+{
+ public class XYOneGraphState : ChartState
+ {
+ public XYOneGraphState(
+ ChartXY sensitivityChart,
+ ChartXY velocityChart,
+ ChartXY gainChart,
+ AccelData accelData,
+ AccelCalculator accelCalculator)
+ : base(
+ sensitivityChart,
+ velocityChart,
+ gainChart,
+ accelData,
+ accelCalculator)
+ {
+ TwoDotsPerGraph = true;
+ }
+
+ public override void Activate()
+ {
+ SensitivityChart.SetCombined();
+ VelocityChart.SetCombined();
+ GainChart.SetCombined();
+ }
+
+ public override void MakeDots(int x, int y, double timeInMs)
+ {
+ Data.CalculateDotsCombinedDiffSens(x, y, timeInMs, Settings);
+ }
+
+ public override void Bind()
+ {
+ SensitivityChart.BindXYCombined(Data.X.AccelPoints, Data.Y.AccelPoints);
+ VelocityChart.BindXYCombined(Data.X.VelocityPoints, Data.Y.VelocityPoints);
+ GainChart.BindXYCombined(Data.X.GainPoints, Data.Y.GainPoints);
+ }
+
+ public override void Calculate(ManagedAccel accel, DriverSettings settings)
+ {
+ Calculator.CalculateCombinedDiffSens(Data, accel, settings, Calculator.MagnitudesCombined);
+ }
+ }
+}
diff --git a/grapher/Models/Charts/ChartState/XYTwoGraphState.cs b/grapher/Models/Charts/ChartState/XYTwoGraphState.cs
new file mode 100644
index 0000000..69dc335
--- /dev/null
+++ b/grapher/Models/Charts/ChartState/XYTwoGraphState.cs
@@ -0,0 +1,76 @@
+using grapher.Models.Calculations;
+using grapher.Models.Serialized;
+using System;
+
+namespace grapher.Models.Charts.ChartState
+{
+ public class XYTwoGraphState : ChartState
+ {
+ private DriverSettings _settings;
+
+ public XYTwoGraphState(
+ ChartXY sensitivityChart,
+ ChartXY velocityChart,
+ ChartXY gainChart,
+ AccelData accelData,
+ AccelCalculator accelCalculator)
+ : base(
+ sensitivityChart,
+ velocityChart,
+ gainChart,
+ accelData,
+ accelCalculator)
+ { }
+
+ public override DriverSettings Settings
+ {
+ get { return _settings; }
+ set
+ {
+ _settings = value;
+ ShouldStripSens = AccelCalculator.ShouldStripSens(ref value);
+ if (ShouldStripSens)
+ {
+ Sensitivity = AccelCalculator.GetSens(ref value);
+ }
+ }
+ }
+
+ private bool ShouldStripSens { get; set; }
+
+ private (double, double) Sensitivity { get; set; }
+
+ public override void Activate()
+ {
+ SensitivityChart.SetSeparate();
+ VelocityChart.SetSeparate();
+ GainChart.SetSeparate();
+ }
+
+ public override void MakeDots(int x, int y, double timeInMs)
+ {
+ double xCalc = x;
+ double yCalc = y;
+
+ if (ShouldStripSens)
+ {
+ (xCalc, yCalc) = AccelCalculator.StripSens(xCalc, yCalc, Sensitivity.Item1, Sensitivity.Item2);
+ }
+
+ Data.CalculateDotsXY((int)Math.Round(xCalc), (int)Math.Round(yCalc), timeInMs);
+ }
+
+ public override void Bind()
+ {
+ SensitivityChart.BindXY(Data.X.AccelPoints, Data.Y.AccelPoints);
+ VelocityChart.BindXY(Data.X.VelocityPoints, Data.Y.VelocityPoints);
+ GainChart.BindXY(Data.X.GainPoints, Data.Y.GainPoints);
+ }
+
+ public override void Calculate(ManagedAccel accel, DriverSettings settings)
+ {
+ Calculator.Calculate(Data.X, accel, settings.sensitivity.x, Calculator.MagnitudesX);
+ Calculator.Calculate(Data.Y, accel, settings.sensitivity.y, Calculator.MagnitudesY);
+ }
+ }
+}