public override unsafe void DebugDraw(Vector2 pos, Vector2 size, List <MyBehaviorTreeNodeMemory> nodesMemory) { MyRenderProxy.DebugDrawText2D(pos, this.DebugSign, nodesMemory[base.MemoryIndex].NodeStateColor, MyBehaviorTreeNode.DEBUG_TEXT_SCALE, MyGuiDrawAlignEnum.HORISONTAL_CENTER_AND_VERTICAL_CENTER, false); float *singlePtr1 = (float *)ref size.X; singlePtr1[0] *= MyBehaviorTreeNode.DEBUG_SCALE; Vector2 position = (this.m_children.Count > 1) ? (pos - (size * 0.5f)) : pos; float * singlePtr2 = (float *)ref position.Y; singlePtr2[0] += MyBehaviorTreeNode.DEBUG_TEXT_Y_OFFSET; float *singlePtr3 = (float *)ref size.X; singlePtr3[0] /= (float)Math.Max(this.m_children.Count - 1, 1); foreach (MyBehaviorTreeNode node in this.m_children) { Vector2 vector2 = position - pos; vector2.Normalize(); Vector2 pointTo = position - (vector2 * MyBehaviorTreeNode.DEBUG_LINE_OFFSET_MULT); Matrix? projection = null; MyRenderProxy.DebugDrawLine2D(pos + (vector2 * MyBehaviorTreeNode.DEBUG_LINE_OFFSET_MULT), pointTo, nodesMemory[node.MemoryIndex].NodeStateColor, nodesMemory[node.MemoryIndex].NodeStateColor, projection, false); node.DebugDraw(position, size, nodesMemory); float *singlePtr4 = (float *)ref position.X; singlePtr4[0] += size.X; } }
private void PlotHistory() { const float zeroLine = 400; int idx = 0; Vector2 b = new Vector2(100, zeroLine); Vector2 b2 = b; b2.X += 1; MyRenderProxy.DebugDrawLine2D(new Vector2(b.X, b.Y - 200), new Vector2(b.X + 1000, b.Y - 200), Color.Gray, Color.Gray); MyRenderProxy.DebugDrawLine2D(new Vector2(b.X, b.Y + 200), new Vector2(b.X + 1000, b.Y + 200), Color.Gray, Color.Gray); MyRenderProxy.DebugDrawLine2D(new Vector2(b.X, b.Y), new Vector2(b.X + 1000, b.Y), Color.Gray, Color.Gray); MyRenderProxy.DebugDrawText2D(new Vector2(90, 400 - 200), (200 / m_scale).ToString(), Color.White, 0.55f, MyGuiDrawAlignEnum.HORISONTAL_RIGHT_AND_VERTICAL_CENTER); MyRenderProxy.DebugDrawText2D(new Vector2(90, 400 + 200), (-200 / m_scale).ToString(), Color.White, 0.55f, MyGuiDrawAlignEnum.HORISONTAL_RIGHT_AND_VERTICAL_CENTER); for (int i = Math.Min(1000, m_history.Count); i > 0; i--) { int thisFrame = (m_frame + m_history.Count - i) % m_history.Count; var frame = m_history[thisFrame]; var frame2 = m_history[(thisFrame + 1) % m_history.Count]; idx++; foreach (var toPlot in m_toPlot) { if (frame.Count <= toPlot || frame2.Count <= toPlot) { continue; } var o = frame[toPlot]; if (o.GetType().IsPrimitive) { var v = ConvertToFloat(o); var v2 = ConvertToFloat(frame2[toPlot]); b.Y = zeroLine - v * m_scale; b2.Y = zeroLine - v2 * m_scale; if (idx == 1) { b.Y = b2.Y; } if (i < 3) { b2.Y = b.Y; } MyRenderProxy.DebugDrawLine2D(b, b2, m_colors[toPlot], m_colors[toPlot]); } } b.X += 1; b2.X += 1; } }
public override void Draw() { base.Draw(); foreach (var line in m_lines) { MyRenderProxy.DebugDrawLine3D(line.From, line.To, line.ColorFrom, line.ColorTo, line.DepthRead); } if (ShowDebugDrawTests) { Vector3D position = new Vector3D(1000000000.0, 1000000000.0, 1000000000.0); MyRenderProxy.DebugDrawLine3D(position, position + Vector3D.Up, Color.Red, Color.Blue, true); position += Vector3D.Left; MyRenderProxy.DebugDrawLine3D(position, position + Vector3D.Up, Color.Red, Color.Blue, false); MyRenderProxy.DebugDrawLine2D(new Vector2(10, 10), new Vector2(50, 50), Color.Red, Color.Blue); position += Vector3D.Left; MyRenderProxy.DebugDrawPoint(position, Color.White, true); position += Vector3D.Left; MyRenderProxy.DebugDrawPoint(position, Color.White, false); position += Vector3D.Left; MyRenderProxy.DebugDrawSphere(position, 0.5f, Color.White, 1.0f, true); position += Vector3D.Left; MyRenderProxy.DebugDrawAABB(new BoundingBoxD(position - Vector3D.One * 0.5, position + Vector3D.One * 0.5), Color.White, 1.0f, 1.0f, true); position += Vector3D.Left; //MyRenderProxy.DebugDrawCone(position, Vector3D.Up, Vector3D.One, Color.Yellow, true); position += Vector3D.Left; MyRenderProxy.DebugDrawAxis(MatrixD.CreateFromTransformScale(Quaternion.Identity, position, Vector3D.One * 0.5), 1.0f, true); position += Vector3D.Left; MyRenderProxy.DebugDrawOBB(new MyOrientedBoundingBoxD(position, Vector3D.One * 0.5, Quaternion.Identity), Color.White, 1.0f, true, false); position += Vector3D.Left; MyRenderProxy.DebugDrawCylinder(MatrixD.CreateFromTransformScale(Quaternion.Identity, position, Vector3D.One * 0.5), Color.White, 1.0f, true, true); position += Vector3D.Left; MyRenderProxy.DebugDrawTriangle(position, position + Vector3D.Up, position + Vector3D.Left, Color.White, true, true); position += Vector3D.Left; var msg = MyRenderProxy.PrepareDebugDrawTriangles(); msg.AddTriangle(position, position + Vector3D.Up, position + Vector3D.Left); msg.AddTriangle(position, position + Vector3D.Left, position - Vector3D.Up); MyRenderProxy.DebugDrawTriangles(msg, MatrixD.Identity, Color.White, true, true); position += Vector3D.Left; MyRenderProxy.DebugDrawCapsule(position, position + Vector3D.Up, 0.5f, Color.White, true); MyRenderProxy.DebugDrawText2D(new Vector2(100, 100), "text", Color.Green, 1.0f); position += Vector3D.Left; MyRenderProxy.DebugDrawText3D(position, "3D Text", Color.Blue, 1.0f, true); } }
public static void DebugDraw() { if (MyDebugDrawSettings.ENABLE_DEBUG_DRAW && MyDebugDrawSettings.DEBUG_DRAW_ENTITY_COMPONENTS && MySector.MainCamera != null) { double fontSize = 1.5; double lineSize = fontSize * 0.045; double hoffset = 0.5f; Vector3D playerPos = MySector.MainCamera.Position; Vector3D upVector = MySector.MainCamera.WorldMatrix.Up; Vector3D rightVector = MySector.MainCamera.WorldMatrix.Right; Vector3D fwVector = MySector.MainCamera.ForwardVector; BoundingSphereD bSphere = new BoundingSphereD(playerPos, 5.0f); var entities = MyEntities.GetEntitiesInSphere(ref bSphere); Vector3D lastEntityPos = Vector3D.Zero; Vector3D offset = Vector3D.Zero; var mat = MySector.MainCamera.ViewProjectionMatrix; var fullscreenRect = Sandbox.Graphics.MyGuiManager.GetSafeGuiRectangle(); float aspect = (float)fullscreenRect.Height / fullscreenRect.Width; float scaleX = 600; float scaleY = scaleX * aspect; Vector3D worldAxisPos = playerPos + 1.0f * fwVector; // Draw the world-space axis in the middle of the screen /*MyRenderProxy.DebugDrawArrow3D(worldAxisPos, worldAxisPos + Vector3D.Right * 0.1f, Color.Red, Color.Red, false, text: "World X"); * MyRenderProxy.DebugDrawArrow3D(worldAxisPos, worldAxisPos + Vector3D.Up * 0.1f, Color.Green, Color.Green, false, text: "World Y"); * MyRenderProxy.DebugDrawArrow3D(worldAxisPos, worldAxisPos + Vector3D.Backward * 0.1f, Color.Blue, Color.Blue, false, text: "World Z");*/ Vector3D posView = Vector3D.Transform(worldAxisPos, mat); Vector3D rtView = Vector3D.Transform(worldAxisPos + Vector3D.Right * 0.1f, mat); Vector3D upView = Vector3D.Transform(worldAxisPos + Vector3D.Up * 0.1f, mat); Vector3D bwView = Vector3D.Transform(worldAxisPos + Vector3D.Backward * 0.1f, mat); var center2D = new Vector2((float)posView.X * scaleX, (float)posView.Y * -scaleY * aspect); var right2D = new Vector2((float)rtView.X * scaleX, (float)rtView.Y * -scaleY * aspect) - center2D; var up2D = new Vector2((float)upView.X * scaleX, (float)upView.Y * -scaleY * aspect) - center2D; var backward2D = new Vector2((float)bwView.X * scaleX, (float)bwView.Y * -scaleY * aspect) - center2D; var frameSize = 150.0f; var frameBR = Sandbox.Graphics.MyGuiManager.GetScreenCoordinateFromNormalizedCoordinate(new Vector2(1.0f, 1.0f)); var frameBL = frameBR + new Vector2(-frameSize, 0.0f); var frameTR = frameBR + new Vector2(0.0f, -frameSize); var frameTL = frameBR + new Vector2(-frameSize, -frameSize); var frameCenter = (frameBR + frameTL) * 0.5f; // Draw frame around the world-space axis /*MyRenderProxy.DebugDrawLine2D(frameTL, frameTR, Color.White, Color.White); * MyRenderProxy.DebugDrawLine2D(frameTR, frameBR, Color.White, Color.White); * MyRenderProxy.DebugDrawLine2D(frameBR, frameBL, Color.White, Color.White); * MyRenderProxy.DebugDrawLine2D(frameBL, frameTL, Color.White, Color.White);*/ // Draw the world-space axis in the corner MyRenderProxy.DebugDrawLine2D(frameCenter, frameCenter + right2D, Color.Red, Color.Red); MyRenderProxy.DebugDrawLine2D(frameCenter, frameCenter + up2D, Color.Green, Color.Green); MyRenderProxy.DebugDrawLine2D(frameCenter, frameCenter + backward2D, Color.Blue, Color.Blue); MyRenderProxy.DebugDrawText2D(frameCenter + right2D, "World X", Color.Red, 0.5f, MyGuiDrawAlignEnum.HORISONTAL_CENTER_AND_VERTICAL_CENTER); MyRenderProxy.DebugDrawText2D(frameCenter + up2D, "World Y", Color.Green, 0.5f, MyGuiDrawAlignEnum.HORISONTAL_CENTER_AND_VERTICAL_CENTER); MyRenderProxy.DebugDrawText2D(frameCenter + backward2D, "World Z", Color.Blue, 0.5f, MyGuiDrawAlignEnum.HORISONTAL_CENTER_AND_VERTICAL_CENTER); MyComponentsDebugInputComponent.DetectedEntities.Clear(); foreach (var entity in entities) { if (entity.PositionComp == null) { continue; } Vector3D originalPos = entity.PositionComp.GetPosition(); Vector3D pos2 = originalPos + upVector * 0.1f; Vector3D pos = pos2 - rightVector * hoffset; Vector3D viewVector = Vector3D.Normalize(originalPos - playerPos); double dot = Vector3D.Dot(viewVector, fwVector); if (dot < 0.9995) { Vector3D rightObject = entity.PositionComp.WorldMatrix.Right * 0.3f; Vector3D upObject = entity.PositionComp.WorldMatrix.Up * 0.3f; Vector3D backwardObject = entity.PositionComp.WorldMatrix.Backward * 0.3f; MyRenderProxy.DebugDrawSphere(originalPos, 0.01f, Color.White, 1.0f, false); MyRenderProxy.DebugDrawArrow3D(originalPos, originalPos + rightObject, Color.Red, Color.Red, false, text: "X"); MyRenderProxy.DebugDrawArrow3D(originalPos, originalPos + upObject, Color.Green, Color.Green, false, text: "Y"); MyRenderProxy.DebugDrawArrow3D(originalPos, originalPos + backwardObject, Color.Blue, Color.Blue, false, text: "Z"); continue; } if (Vector3D.Distance(originalPos, lastEntityPos) < 0.01) { offset += rightVector * 0.3f; upVector = -upVector; pos2 = originalPos + upVector * 0.1f; pos = pos2 - rightVector * hoffset; } lastEntityPos = originalPos; double dist = Vector3D.Distance(pos, playerPos); double textSize = Math.Atan(fontSize / Math.Max(dist, 0.001)); float n = 0; { var enumerator = entity.Components.GetEnumerator(); MyComponentBase component = null; while (enumerator.MoveNext()) { component = enumerator.Current; n += GetComponentLines(component); } n += 1; n -= GetComponentLines(component); // The last component should not make the line longer enumerator.Dispose(); } Vector3D topPos = pos + (n + 0.5f) * upVector * lineSize; Vector3D currentPos = pos + (n + 1) * upVector * lineSize + 0.01f * rightVector; MyRenderProxy.DebugDrawLine3D(originalPos, pos2, Color.White, Color.White, false); MyRenderProxy.DebugDrawLine3D(pos, pos2, Color.White, Color.White, false); MyRenderProxy.DebugDrawLine3D(pos, topPos, Color.White, Color.White, false); MyRenderProxy.DebugDrawLine3D(topPos, topPos + rightVector * 1.0f, Color.White, Color.White, false); MyRenderProxy.DebugDrawText3D(currentPos, entity.GetType().ToString() + " - " + entity.DisplayName, Color.Orange, (float)textSize, false, MyGuiDrawAlignEnum.HORISONTAL_LEFT_AND_VERTICAL_CENTER); MyComponentsDebugInputComponent.DetectedEntities.Add(entity); foreach (var component in entity.Components) { currentPos = pos + n * upVector * lineSize; DebugDrawComponent(component, currentPos, rightVector, upVector, lineSize, (float)textSize); var entityComponent = component as MyEntityComponentBase; string compType = entityComponent == null ? "" : entityComponent.ComponentTypeDebugString; MyRenderProxy.DebugDrawText3D(currentPos - 0.02f * rightVector, compType, Color.Yellow, (float)textSize, false, MyGuiDrawAlignEnum.HORISONTAL_RIGHT_AND_VERTICAL_CENTER); n -= GetComponentLines(component); } } entities.Clear(); } }