Example #1
0
 public void Add(T value)
 {
     m_Latest = new TimedQueueItem <T>()
     {
         Value = value, Time = Time.time
     };
     m_Queue.Enqueue(m_Latest);
     Prune();
 }
 public void Add(T value)
 {
     latest = new TimedQueueItem <T>()
     {
         value = value, time = Time.time
     };
     queue.Enqueue(latest);
     Prune();
 }
Example #3
0
        private void OnRenderObject()
        {
            UpdateText();

            if (FitBounds)
            {
                ResetBounds();
            }

            float minTime = Mathf.Infinity;
            float maxTime = Mathf.NegativeInfinity;

            bool isFlatGraph = true;
            bool drawGraph   = false;

            foreach (Line line in m_Lines)
            {
                if (line.IsDrawable)
                {
                    drawGraph = true;

                    float min = line.Buffer.Min;
                    float max = line.Buffer.Max;

                    m_MinVal = Mathf.Min(m_MinVal, min);
                    m_MaxVal = Mathf.Max(m_MaxVal, max);
                    minTime  = Mathf.Min(minTime, line.Buffer.Start);
                    maxTime  = Mathf.Max(maxTime, line.Buffer.End);

                    line.IsFlat = min == max;
                    isFlatGraph = isFlatGraph && line.IsFlat;
                }
            }

            if (drawGraph)
            {
                m_yScale = 0;

                if (!isFlatGraph)
                {
                    m_TextMin.text = m_MinVal.ToString(c_Format);
                    m_TextMax.text = m_MaxVal.ToString(c_Format);
                    m_yScale       = m_DrawArea.height / (m_MaxVal - m_MinVal);
                }

                m_SB.Clear();
                CreateLineMaterial();
                lineMaterial.SetPass(0);
                GL.PushMatrix();
                GL.MultMatrix(transform.localToWorldMatrix);
                GL.Begin(GL.LINES);

                foreach (Line line in m_Lines)
                {
                    if (line.IsDrawable)
                    {
                        GL.Color(line.Color);
                        string sVal = line.Buffer.Current.ToString(c_Format);

                        if (line.IsFlat)
                        {
                            float y = isFlatGraph ? m_yCenter
                                : (line.Buffer.Current - m_MinVal) * m_yScale - m_DrawArea.height;
                            GL.Vertex3(m_DrawArea.xMin, y, 0);
                            GL.Vertex3(m_DrawArea.xMax, y, 0);

                            if (line.ShowValue)
                            {
                                m_SB.AppendLine($"<color={line.RGB}>{sVal}</color>");
                            }
                        }
                        else
                        {
                            TimedQueueItem <float> previous = default;
                            foreach (var current in line.Buffer.Items())
                            {
                                if (previous.Time > 0)
                                {
                                    GL.Vertex3(
                                        MapTime(minTime, maxTime, previous.Time),
                                        (previous.Value - m_MinVal) * m_yScale - m_DrawArea.height,
                                        0);
                                    GL.Vertex3(
                                        MapTime(minTime, maxTime, current.Time),
                                        (current.Value - m_MinVal) * m_yScale - m_DrawArea.height,
                                        0);
                                }
                                previous = current;
                            }

                            if (line.ShowValue)
                            {
                                string sAvg = line.Buffer.Average.ToString(c_Format);
                                m_SB.AppendLine($"<color={line.RGB}>{sVal}</color>");
                                m_SB.AppendLine($"<color={line.RGB_Avg}>{sAvg}</color>");
                            }
                        }
                    }
                }
                GL.End();
                GL.PopMatrix();
                m_TextVal.text = m_SB.ToString();
            }
        }