private void drawDiagram(Rect position) { diagram = true; FundamentalDiagram fd = GameObject.Find("FundamentalDiagram").GetComponent <FundamentalDiagram> (); if (fd.fundamental) { fd.removeFundamentalDiagram(); } diagramPosition = position; diagramLines = new List <VectorLine> (); PedestrianLoader pl = GameObject.Find("PedestrianLoader").GetComponent <PedestrianLoader> (); float maxSpeed = float.MinValue; float maxDensity = float.MinValue; List <Vector2> points = new List <Vector2> (); foreach (GameObject p in pl.pedestirans) { Pedestrian ped = p.GetComponent <Pedestrian>(); Renderer r = ped.GetComponentInChildren <Renderer>() as Renderer; if (r.enabled) { float speed = ped.getSpeed(); float density = ped.getDensity(); maxSpeed = Mathf.Max(speed, maxSpeed); maxDensity = Mathf.Max(density, maxDensity); points.Add(new Vector2(speed, density)); } } for (int i = 0; i < points.Count; i++) { points[i] = new Vector2(points[i].x * position.width / maxSpeed + position.x, points[i].y * position.height / maxDensity + position.y); } PlaybackControl pc = GameObject.Find("PlaybackControl").GetComponent <PlaybackControl> (); //data points VectorPoints.SetCamera(GameObject.Find("Flycam").camera); Vector2[] dp = new Vector2[(int)pc.total_time]; for (int i = 0; i < dp.Length; i++) { dp[i] = new Vector2(position.x + position.width * ((float)(i / pc.total_time)), position.y); } dataPoints = VectorLine.SetLine(Color.white, dp); dataPoints.depth = 99; dataPoints.Draw(); diagramLines.Add(dataPoints); //frame VectorLine line = VectorLine.SetLine(new Color(1f, 1f, 1f, 0.5f), new Vector2[] { new Vector2(position.x - 6, position.y - 2), new Vector2(position.x - 6, position.y + 9 + position.height), new Vector2(position.x + 5 + position.width, position.y + 9 + position.height), new Vector2(position.x + 5 + position.width, position.y - 2), new Vector2(position.x - 6, position.y - 2) }); line.depth = 2; line.Draw(); diagramLines.Add(line); int maxTime = (int)pc.total_time; //lines xLabels = new List <Label> (); float scaleFactor = 10f; int numberOfLines = (int)(maxTime * (1 / scaleFactor)); if (numberOfLines > 0) { for (int i = 1; i <= numberOfLines; i++) { float hx = position.x + i * (position.width / (maxTime * (1 / scaleFactor))); line = VectorLine.SetLine(new Color(1f, 1f, 1f, 0.5f), new Vector2[] { new Vector2(hx, position.y - 2), new Vector2(hx, position.y + 8 + position.height) }); line.depth = 1; line.Draw(); diagramLines.Add(line); xLabels.Add(new Label(new Rect(Screen.width - position.x - position.width + hx - 44, Screen.height - position.y, 28, 28), "" + i * scaleFactor)); } } float tx = ((float)(pc.current_time / pc.total_time)) * position.width + position.x; timeIndicator = VectorLine.SetLine(Color.red, new Vector2[] { new Vector2(tx, position.y - 2), new Vector2(tx, position.y + 8 + position.height) }); //background line = VectorLine.SetLine(new Color(0, 0, 0, 0.7f), new Vector2[] { new Vector2(position.x - 6, position.y + (position.height + 6) / 2), new Vector2(position.x + position.width + 6, position.y + (position.height + 6) / 2) }); line.lineWidth = position.height + 12; line.Draw(); diagramLines.Add(line); }