コード例 #1
0
        private void DrawCollisionStyle(MyVector position, double bodyRadius, CollisionStyle collisionStyle)
        {

            const double MINSIZE = 75d;
            const double MAXSIZE = 250d;

            if (collisionStyle == CollisionStyle.Standard)
            {
                return;
            }

            #region Figure out how big to make it

            double radius = bodyRadius * .5d;

            if (radius < MINSIZE)
            {
                if (bodyRadius > MINSIZE)
                {
                    radius = MINSIZE;
                }
                else
                {
                    radius = bodyRadius;		// I don't want to use MINSIZE, because this could look funny
                }
            }
            else if (radius > MAXSIZE)
            {
                radius = MAXSIZE;
            }

            double halfRadius = radius * .5d;

            #endregion

            // Figure out the line thickness
            double lineThickness = UtilityCore.GetScaledValue_Capped(4d, 15d, MINSIZE, MAXSIZE, radius);

            // Draw Icon
            switch (collisionStyle)
            {
                case CollisionStyle.Ghost:
                    #region Ghost

                    // Make a tilde (I was going to make two, but one seems to get the point across)
                    MyVector[] points = new MyVector[4];

                    points[0] = new MyVector(position.X - halfRadius, position.Y + (halfRadius / 8d), position.Z);
                    points[1] = new MyVector(position.X - (halfRadius / 3d), position.Y - (halfRadius / 4d), position.Z);
                    points[2] = new MyVector(position.X + (halfRadius / 3d), position.Y + (halfRadius / 4d), position.Z);
                    points[3] = new MyVector(position.X + halfRadius, position.Y - (halfRadius / 8d), position.Z);

                    _viewer.DrawArc(Color.Navy, lineThickness, points, false);

                    #endregion
                    break;

                case CollisionStyle.Stationary:
                    #region Stationary

                    _viewer.DrawLine(Color.Maroon, lineThickness, new MyVector(position.X - halfRadius, position.Y - halfRadius, position.Z), new MyVector(position.X + halfRadius, position.Y + halfRadius, position.Z));
                    _viewer.DrawLine(Color.Maroon, lineThickness, new MyVector(position.X - halfRadius, position.Y + halfRadius, position.Z), new MyVector(position.X + halfRadius, position.Y - halfRadius, position.Z));

                    #endregion
                    break;

                case CollisionStyle.StationaryRotatable:
                    #region StationaryRotatable

                    _viewer.DrawCircle(Color.Maroon, lineThickness, position, halfRadius);

                    #endregion
                    break;

                default:
                    throw new ApplicationException("Unknown CollisionStyle: " + collisionStyle.ToString());
            }

        }
コード例 #2
0
        private void DrawCollisionStyle(MyVector position, double bodyRadius, CollisionStyle collisionStyle)
        {
            const double MINSIZE = 75d;
            const double MAXSIZE = 250d;

            if (collisionStyle == CollisionStyle.Standard)
            {
                return;
            }

            #region Figure out how big to make it

            double radius = bodyRadius * .5d;

            if (radius < MINSIZE)
            {
                if (bodyRadius > MINSIZE)
                {
                    radius = MINSIZE;
                }
                else
                {
                    radius = bodyRadius;                // I don't want to use MINSIZE, because this could look funny
                }
            }
            else if (radius > MAXSIZE)
            {
                radius = MAXSIZE;
            }

            double halfRadius = radius * .5d;

            #endregion

            // Figure out the line thickness
            double lineThickness = UtilityCore.GetScaledValue_Capped(4d, 15d, MINSIZE, MAXSIZE, radius);

            // Draw Icon
            switch (collisionStyle)
            {
            case CollisionStyle.Ghost:
                #region Ghost

                // Make a tilde (I was going to make two, but one seems to get the point across)
                MyVector[] points = new MyVector[4];

                points[0] = new MyVector(position.X - halfRadius, position.Y + (halfRadius / 8d), position.Z);
                points[1] = new MyVector(position.X - (halfRadius / 3d), position.Y - (halfRadius / 4d), position.Z);
                points[2] = new MyVector(position.X + (halfRadius / 3d), position.Y + (halfRadius / 4d), position.Z);
                points[3] = new MyVector(position.X + halfRadius, position.Y - (halfRadius / 8d), position.Z);

                _viewer.DrawArc(Color.Navy, lineThickness, points, false);

                #endregion
                break;

            case CollisionStyle.Stationary:
                #region Stationary

                _viewer.DrawLine(Color.Maroon, lineThickness, new MyVector(position.X - halfRadius, position.Y - halfRadius, position.Z), new MyVector(position.X + halfRadius, position.Y + halfRadius, position.Z));
                _viewer.DrawLine(Color.Maroon, lineThickness, new MyVector(position.X - halfRadius, position.Y + halfRadius, position.Z), new MyVector(position.X + halfRadius, position.Y - halfRadius, position.Z));

                #endregion
                break;

            case CollisionStyle.StationaryRotatable:
                #region StationaryRotatable

                _viewer.DrawCircle(Color.Maroon, lineThickness, position, halfRadius);

                #endregion
                break;

            default:
                throw new ApplicationException("Unknown CollisionStyle: " + collisionStyle.ToString());
            }
        }