コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
            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;
            }
コード例 #5
0
 private void TestNotInTouch(RigidCircle circle, RigidCircleQuarter quarterMainDirection, RigidCircleQuarter quarterSecondDirection)
 {
     Assert.IsNull(CollisionDetector.GetCollisionInfo(circle, quarterMainDirection));
     Assert.IsNull(CollisionDetector.GetCollisionInfo(circle, quarterSecondDirection));
 }
コード例 #6
0
 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));
 }