/// <inheritdoc /> protected override void PostStep() { if (Input.GetKeyDown(KeyCode.A)) { _positionB.X -= 0.1f; } if (Input.GetKeyDown(KeyCode.D)) { _positionB.X += 0.1f; } if (Input.GetKeyDown(KeyCode.S)) { _positionB.Y -= 0.1f; } if (Input.GetKeyDown(KeyCode.W)) { _positionB.Y += 0.1f; } if (Input.GetKeyDown(KeyCode.Q)) { _angleB += 0.1f * Settings.Pi; } if (Input.GetKeyDown(KeyCode.E)) { _angleB -= 0.1f * Settings.Pi; } _transformB.Set(_positionB, _angleB); var manifold = new Manifold(); manifold.Initialize(); CollisionUtils.CollidePolygons(ref manifold, _polygonA, _transformA, _polygonB, _transformB); var worldManifold = new WorldManifold(); worldManifold.Initialize(manifold, _transformA, _polygonA.Radius, _transformB, _polygonB.Radius); DrawString($"point count = {manifold.PointCount}"); { var color = Color.FromArgb(230, 230, 230); var v = new Vector2[Settings.MaxPolygonVertices]; for (var i = 0; i < _polygonA.Count; ++i) { v[i] = MathUtils.Mul(_transformA, _polygonA.Vertices[i]); } Drawer.DrawPolygon(v, _polygonA.Count, color); for (var i = 0; i < _polygonB.Count; ++i) { v[i] = MathUtils.Mul(_transformB, _polygonB.Vertices[i]); } Drawer.DrawPolygon(v, _polygonB.Count, color); } for (var i = 0; i < manifold.PointCount; ++i) { Drawer.DrawPoint(worldManifold.Points[i], 4.0f, Color.FromArgb(230, 77, 77)); } }