private static CollisionInfo GetCollisionInfo(RigidCircle circle, RigidCircleQuarter circleQuarter) { var info = GetCollisionInfo(circle, circleQuarter.WholeCircle); if (info == null) { return(null); } var vector = info.Start - circleQuarter.Center; var vertical = Vector.ScalarProduct(vector, circleQuarter.Direction); var horizontal = Vector.ScalarProduct(vector, circleQuarter.DirectionNormal); switch (circleQuarter.QuarterIndex) { case 1 when vertical >= 0 && horizontal >= 0: return(info); case 2 when vertical >= 0 && horizontal <= 0: return(info); case 3 when vertical <= 0 && horizontal <= 0: return(info); case 4 when vertical <= 0 && horizontal >= 0: return(info); default: return(null); } }
private static void DrawCircleQuarter(RigidCircleQuarter shape, Pen strokePen, Graphics g) { var start = shape.GetCurveStart(); var end = shape.GetCurveEnd(); g.DrawBezier(strokePen, start.GetPointF(), start.GetPointF(), shape.GetCurveCorner().GetPointF(), end.GetPointF()); EdgeRenderer.Draw(new Edge(shape.Center, start), strokePen, g); EdgeRenderer.Draw(new Edge(shape.Center, end), strokePen, g); }
private static void DrawCircleQuarter(RigidCircleQuarter shape, Vector cameraPosition, Pen strokePen, Graphics g) { var start = shape.GetCurveStart().ConvertFromWorldToCamera(cameraPosition).GetPointF(); var end = shape.GetCurveEnd().ConvertFromWorldToCamera(cameraPosition).GetPointF(); g.DrawBezier(strokePen, start, start, shape.GetCurveCorner().ConvertFromWorldToCamera(cameraPosition).GetPointF(), end); EdgeRenderer.Draw(new Edge(shape.Center, shape.GetCurveStart()), cameraPosition, strokePen, g); EdgeRenderer.Draw(new Edge(shape.Center, shape.GetCurveEnd()), cameraPosition, strokePen, g); }
public Range(Vector playerCenter) { var trianglePoints = new[] { playerCenter.Copy(), playerCenter + new Vector(0, -74), playerCenter + new Vector(32, 0) }; Sector = new RigidCircleQuarter( new Vector(0, -1), 2, new RigidCircle(playerCenter.Copy(), 74, false, false)); Triangle = new RigidTriangle(trianglePoints, false, false); currentAngle = 90; }
private void TestNotInTouch(RigidCircle circle, RigidCircleQuarter quarterMainDirection, RigidCircleQuarter quarterSecondDirection) { Assert.IsNull(CollisionDetector.GetCollisionInfo(circle, quarterMainDirection)); Assert.IsNull(CollisionDetector.GetCollisionInfo(circle, quarterSecondDirection)); }
private void TestInTouch(RigidCircle circle, RigidCircleQuarter quarterMainDirection, RigidCircleQuarter quarterSecondDirection, CollisionInfo expected) { Assert.AreEqual(expected, CollisionDetector.GetCollisionInfo(circle, quarterMainDirection)); Assert.AreEqual(expected, CollisionDetector.GetCollisionInfo(circle, quarterSecondDirection)); }