public static void Draw(DebugViewXNA debug) { for (int i = 0; i < currentCount - 1; i++) { debug.DrawSegment(currentPath[i].Position, currentPath[i + 1].Position, Color.Green, 0.04f); } }
public override void OnRender(GameTime gameTime) { if (!_levelLoaded) { return; } base.OnRender(gameTime); if (_debugViewState) { float scale = (SceneManager.Instance.GetCurrentCamera().Parent.GetPosition().Z / 1024.0f); float left = UnitsConverter.ToSimUnits(SceneManager.Instance.GetCurrentCamera().Parent.GetPosition().X - Platform.Instance.Device.Viewport.Width / 2f * scale); float right = UnitsConverter.ToSimUnits(SceneManager.Instance.GetCurrentCamera().Parent.GetPosition().X + Platform.Instance.Device.Viewport.Width / 2f * scale); float top = UnitsConverter.ToSimUnits(-SceneManager.Instance.GetCurrentCamera().Parent.GetPosition().Y + Platform.Instance.Device.Viewport.Height / 2f * scale); float bottom = UnitsConverter.ToSimUnits(-SceneManager.Instance.GetCurrentCamera().Parent.GetPosition().Y - Platform.Instance.Device.Viewport.Height / 2f * scale); _projection = Matrix.CreateOrthographicOffCenter( left, right, top, bottom, 0f, 1f ); if (_debugViewGrid) { _debugView.BeginCustomDraw(ref _projection, ref _view); for (float i = left - left % _debugViewGridstep; i < right; i += _debugViewGridstep) { _debugView.DrawSegment(new Vector2(i, top), new Vector2(i, bottom), _gridColor); } for (float i = bottom - bottom % _debugViewGridstep; i < top; i += _debugViewGridstep) { _debugView.DrawSegment(new Vector2(left, i), new Vector2(right, i), _gridColor); } _debugView.EndCustomDraw(); } _debugView.RenderDebugData(ref _projection, ref _view); } }
protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.White);//new Color(0x22, 0x22, 0x22)); Matrix p = camera.Projection; Matrix v = camera.View; debug.BeginCustomDraw(ref p, ref v); if (drawGrid || true) { for (int x = -cells / 2; x <= cells / 2 + 1; x++) { float pos = x * cellSize - cellSize / 2f; debug.DrawSegment(new Vector2(pos, -square / 2f - cellSize / 2f), new Vector2(pos, square / 2f + cellSize / 2f), Color.Gray); } for (int y = -cells / 2; y <= cells / 2 + 1; y++) { float pos = y * cellSize - cellSize / 2f; debug.DrawSegment(new Vector2(-square / 2f - cellSize / 2f, pos), new Vector2(square / 2f + cellSize / 2f, pos), Color.Gray); } } for (int n = 0; n < paths.Count; n++) { if (n >= count) { break; } float val = actions[n].Length / maxLength; Color c = Color.Lerp(Color.Green, Color.Red, val); ArrayList <Pose> poses = paths[n]; for (int i = 0; i < poses.Count - 1; i++) { debug.DrawSegment(poses[i].Position, poses[i + 1].Position, c, 0.01f); } } debug.DrawSolidCircle(goal.Position, 2f, Color.Blue); debug.DrawSegment(goal.Position, Vector2.Transform(goal.Position + 5f * Vector2.UnitX, Matrix.CreateRotationZ(goal.Orientation)), Color.Blue, 0.2f); debug.EndCustomDraw(); base.Draw(gameTime); }
public override void Draw(DebugViewXNA draw) { for (int i = 0; i < Path.Count - 1; i++) { Color color = Color.Lerp(Color.Red, Color.Green, Velocities[i] / MaxSpeed); draw.DrawSegment(Path[i].Position, Path[i + 1].Position, color, 0.04f); } //draw.DrawCircle(FrontPath[NextWaypointIndex].Position, 0.1f, Color.Orange); //draw.DrawCircle(FrontPath[PrevWaypointIndex].Position, 0.1f, Color.Orange); }
public override void Draw(DebugViewXNA draw) { if (NextWaypointIndex >= Path.Count && FrontPath != null) { float noop; } float topSpeed = Velocities == null ? MaxSpeed : Velocities.Max(); for (int i = 0; i < Path.Count - 1; i++) { Color color = Color.Lerp(Color.Red, Color.Green, Velocities[i + 1] / topSpeed); draw.DrawSegment(Path[i].Position, Path[i + 1].Position, color, 0.04f); } foreach (int index in stoppingPoints) { draw.DrawCircle(Path[index].Position, 0.2f, Color.Red); } }
public static Pose Straight(Pose startPose, Gear gear, float length, float unit) { if (gear == Gear.Backward) { length = -length; } length *= unit; Pose end = new Pose( length * (float)Math.Cos(startPose.Orientation) + startPose.X, length * (float)Math.Sin(startPose.Orientation) + startPose.Y, startPose.Orientation); if (Debug != null) { Debug.DrawSegment(startPose.Position, end.Position, gear == Gear.Forward ? forwardColor : backwardColor); } return(end); }
public void DrawPose(DebugViewXNA debugDraw, float radius, Color color) { debugDraw.DrawSolidCircle(Position, radius, color); debugDraw.DrawSegment(Position, Position + radius * Vector2.Transform(Vector2.UnitX, Matrix.CreateRotationZ(Orientation)), color); }
protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(backgroundLight ? LIGHT : DARK); Matrix p = camera.Projection; Matrix v = camera.View; if (cameraView == 2) { float orientation = controller != null && controller.InReverse ? car.Pose.Orientation + MathHelper.Pi : car.Pose.Orientation; Vector2 position = Car.GetCenterPosition(car.Pose); Vector2 headingVector = new Vector2((float)Math.Cos(orientation), (float)Math.Sin(orientation)); float offset = 14f; float height = 10f; v = Matrix.CreateLookAt(new Vector3(position + -offset * headingVector, height), new Vector3(position + offset * headingVector, 0f), Vector3.UnitZ); } else if (cameraView == 3) { float or = car.Pose.Orientation + MathHelper.ToRadians(120f); Vector2 headingVector = new Vector2((float)Math.Cos(or), (float)Math.Sin(or)); v = Matrix.CreateLookAt(new Vector3(car.Pose.Position + -10f * headingVector, 5f), new Vector3(Car.GetCenterPosition(car.Pose), 0f), Vector3.UnitZ); } else if (cameraView == 4) { float or = goalPose.Orientation; Vector2 headingVector = new Vector2((float)Math.Cos(or), (float)Math.Sin(or)); v = Matrix.CreateLookAt(new Vector3(goalPose.Position + 10f * headingVector, 20f), new Vector3(Car.GetCenterPosition(car.Pose), 0f), Vector3.UnitZ); } else if (cameraView == 5) { v = Matrix.CreateLookAt(new Vector3(Car.GetCenterPosition(car.Pose), 20f), new Vector3(Car.GetCenterPosition(car.Pose), 0f), Vector3.UnitY); if (rotateCar) { v *= Matrix.CreateRotationZ(-car.Body.Rotation + MathHelper.PiOver2); } } if (gridDone && (drawGrid || drawVoro || drawHeur)) { basicEffect.World = Matrix.Identity; basicEffect.View = v; basicEffect.Projection = p; spriteBatch.Begin(0, null, SamplerState.PointClamp, DepthStencilState.DepthRead, RasterizerState.CullNone, basicEffect); if (drawHeur) { HybridAStar.Draw(spriteBatch); } else { grid.Draw(spriteBatch, drawVoro); } spriteBatch.End(); } debug.BeginCustomDraw(ref p, ref v); debug.DrawSolidCircle(Car.GetFrontAxlePosition(car.Pose), 0.2f, Color.Green); if ((pathSearching && watchSearch || pathSearchingDone && drawSearch) && HybridAStar.Expanded != null && HybridAStar.Expanded.Count > 0) { LinkedList <HybridAStar.Node> expanded = new LinkedList <HybridAStar.Node>(); lock (HybridAStar.Expanded) { expanded.AddAll(HybridAStar.Expanded); } float pathLength = expanded.Last.f; foreach (HybridAStar.Node n in expanded) { if (pathDone && n.rsIndex >= 0) { for (int i = n.rsIndex; i < poses.Count - 1; i++) { debug.DrawSegment(poses[i].Position, poses[i + 1].Position, Color.Purple, 0.02f); } } else if (n.from != null) { Color color; if (n.cell.rev == 0) { color = Color.Lerp(Color.Orange, Color.Green, n.g / pathLength); } else { color = Color.Lerp(Color.Blue, Color.Cyan, n.g / pathLength); } debug.DrawSegment(n.from.pose.Position, n.pose.Position, color, 0.02f); } } } if (pathDone) { if (drawPath) { for (int i = 0; i < poses.Count - 1; i++) { Color c = poses[i].Gear == Gear.Forward ? Color.Blue : Color.Red; debug.DrawSegment(poses[i].Position, poses[i + 1].Position, c, 0.04f); debug.DrawPoint(poses[i].Position, 0.1f, c * 0.5f); } } } if (pathSearchingDone && !pathSmoothDone && (drawSmoothedPath || drawController)) { Smoother.Draw(debug); } if (pathSmoothDone) { if (drawFrontPath && controller.FrontPath != null) { int num = controller.FrontPath.Count; for (int i = 0; i < num - 1; i++) { if (controller.FrontPath[i].Gear == Gear.Forward) { debug.DrawSegment(controller.FrontPath[i].Position, controller.FrontPath[i + 1].Position, Color.DarkOrange); } else { debug.DrawSegment(controller.ReverseFrontPath[i].Position, controller.ReverseFrontPath[i + 1].Position, Color.Cyan); } } } if (drawSmoothedPath) { for (int i = 0; i < smoothedPath.Count - 1; i++) { debug.DrawSegment(smoothedPath[i].Position, smoothedPath[i + 1].Position, smoothedPath[i].Gear == Gear.Forward ? Color.DarkGreen : Color.Red, 0.04f); //if (Smoother.UnsafeIndices != null && Smoother.UnsafeIndices.Contains(i)) //debug.DrawCircle(smoothedPath[i].Position, 0.2f, Color.Orange); } } if (drawController) { controller.Draw(debug); } } if (drawStart) { startPose.DrawPose(debug, new Color(0f, 1f, 0f, 0.9f), 1.1f); } if (drawGoal) { goalPose.DrawPose(debug, new Color(1f, 0f, 0f, 0.9f), 1.1f); } if (drawCurrent) { if (pathSmoothDone && controller.State != StanleyFSMController.ControllerState.MissionComplete) { debug.DrawCircle(controller.ClosestPoint, 0.1f, controller.InReverse ? Color.Aqua : Color.Orange); if (controller.InReverse) { debug.DrawCircle(controller.FakeFrontAxle, 0.2f, Color.Aqua); } } car.Pose.DrawPose(debug, 0.2f, Color.Red); } debug.EndCustomDraw(); if (drawDebugData) { debug.RenderDebugData(ref p, ref v); } if (drawCar) { car.Draw(v, p); } if (showDebugInfo) { string info = String.Format("Speed: {0:0.0}", Math.Round(car.SpeedMPH, 1)); if (pathSmoothDone) { info += String.Format("\nGas: {0:0.00}", Math.Round(currentControls.Gas * 100f, 2)); info += String.Format("\nBrake: {0:0.00}", Math.Round(currentControls.Brake * 100f, 2)); info += String.Format("\nCTE: {0:0.0000}", Math.Round(controller.CrossTrackError, 4)); info += "\n" + controller.State.ToString(); info += "\n" + controller.DebugInfo; } spriteBatch.Begin(); spriteBatch.DrawString(font, info, new Vector2(8, 4), !backgroundLight ? LIGHT : DARK); spriteBatch.End(); } if (showDashboard) { dashboard.Draw(gameTime); } base.Draw(gameTime); }