diff --git a/isometric-park-fna/UI/Graph.cs b/isometric-park-fna/UI/Graph.cs --- a/isometric-park-fna/UI/Graph.cs +++ b/isometric-park-fna/UI/Graph.cs @@ -33,13 +33,28 @@ public static Dictionary> data_sets = new Dictionary>(); - public static Dictionary data_sets_show = new List() + public static Dictionary data_sets_show = new List() .Concat(money_series) .Concat(tree_series) .Select(e => (e, false)) .ToDictionary(t => t.Item1, t=> t.Item2); - public static void DrawLine(ImDrawListPtr draw_list, Num.Vector2[] points) { + + public static uint[] colors = {0xFF000000, 0xFFFF0000, 0xFF00FF00, 0xFF0000FF, + 0xFF999999, 0xFFAA0000, 0xFF00AA00, 0xFF0000AA, 0xFF000000 + + + + }; + + public static Dictionary data_sets_color = new List() + .Concat(money_series) + .Concat(tree_series) + .Zip(colors) + .ToDictionary(t => t.Item1, t => t.Item2); + + + public static void DrawLine(ImDrawListPtr draw_list, Num.Vector2[] points, uint col) { var p = Num.Vector2.Zero;// ImGui.GetCursorScreenPos(); @@ -52,7 +67,7 @@ } // uint col = 0b_1111_1111_1111_0000; - uint col = 0xFF000000; + // uint col = 0xFF000000; draw_list.AddPolyline(ref points[0], points.Length, col, ImDrawFlags.RoundCornersDefault, 1.0f); @@ -204,23 +219,40 @@ var draw_list = ImGui.GetWindowDrawList(); + var domain_min = int.MaxValue; + var domain_max = int.MinValue; + foreach (var key in keys) + { - var range = new Num.Vector2(200, 0); + if (data_sets_show[key] && data_sets[key].Count() > 0) + { + domain_min = Math.Min(domain_min, (int)data_sets[key].Min()); + domain_max = Math.Max(domain_max, (int)data_sets[key].Max()); + } + + + } - foreach (var key in keys) { - var show = data_sets_show[key]; - var data = data_sets[key]; - var domain = new Num.Vector2((int)data.Min(), (int)data.Max()); - // var data_array = datasets[key].Select((p) => Scale(domain, range, (int)p) ).Select((p,i) => new Num.Vector2(i*10, (int)p)).ToArray(); - if (data.Count() > 0 && show) - { + var padding = 10; + + var range = new Num.Vector2(200 - padding, 0 + padding); + var domain = new Num.Vector2(domain_min, domain_max); + + foreach (var key in keys) + { + var show = data_sets_show[key]; + var data = data_sets[key]; + // var domain = new Num.Vector2((int)data.Min(), (int)data.Max()); + // var data_array = datasets[key].Select((p) => Scale(domain, range, (int)p) ).Select((p,i) => new Num.Vector2(i*10, (int)p)).ToArray(); + if (data.Count() > 0 && show) + { // Logging.Spy(range); // Logging.Spy(domain); IEnumerable data_array = data_sets[key].Select((p) => Scale(domain, range, (int)p)); - var data_array2 = data_array.Select((p, i) => new Num.Vector2(i * 10, p)).ToArray(); - DrawLine(draw_list, data_array2); - } + var data_array2 = data_array.Select((p, i) => new Num.Vector2(i * 10 + padding, p)).ToArray(); + DrawLine(draw_list, data_array2, data_sets_color[key]); } + } ImGui.Dummy(new Num.Vector2(200, 200));