Пример #1
0
 private void drawPlane(Vector3 center, MyPlane plane, float planeSize)
 {
     planeSize = planeSize*1.5f + 3;
     for (float i = -1; i <= 1; i += 0.25f)
     {
         Color middleColor = new Color(0, 0, 0, 1 - Math.Abs(i));
         game.Engine.DebugDrawer.DrawLine(
             center + plane.up * planeSize * i - plane.right * planeSize,
             center + plane.up * planeSize * i,
             Color.Transparent,
             middleColor);
         game.Engine.DebugDrawer.DrawLine(
             center + plane.up * planeSize * i + plane.right * planeSize,
             center + plane.up * planeSize * i,
             Color.Transparent,
             middleColor);
         game.Engine.DebugDrawer.DrawLine(
             center + plane.right * planeSize * i - plane.up * planeSize,
             center + plane.right * planeSize * i,
             Color.Transparent,
             middleColor);
         game.Engine.DebugDrawer.DrawLine(
             center + plane.right * planeSize * i + plane.up * planeSize,
             center + plane.right * planeSize * i,
             Color.Transparent,
             middleColor);
     }
 }
Пример #2
0
        public void whileMouseOver(GameTime gameTime, InputManager input,
            RigidBody _hitBody, Ray _hitNormal, float _hitDistance)
        {
            mouseOverRanSinceLastLeftMousePress = true;
            bool leftPressed =
                 input.Mouse_WasButtonPressed(MouseButton.Left) &&
                !input.Mouse_IsButtonDown(MouseButton.Right);
            bool rightPressed =
                 input.Mouse_WasButtonPressed(MouseButton.Right) &&
                !input.Mouse_IsButtonDown(MouseButton.Left);

            if (leftPressed || rightPressed)
            {
                bool shiftDown = input.Keyboard_IsKeyDown(Keys.LeftShift);
                bool ctrlDown = input.Keyboard_IsKeyDown(Keys.LeftControl);
                bool altDown = input.Keyboard_IsKeyDown(Keys.LeftAlt);

                Paused = true; //must be done before much, if not everything, else

                if (leftPressed)
                {
                    if (ctrlDown) //expand (or reduce) selection
                    {
                        moveMode = MoveMode.None;
                        selected.toggleSelection(_hitBody);
                        return;
                    }
                    else
                    {
                        moveMode = MoveMode.CameraRelative;
                    }
                }
                else //rightPressed
                {
                    if (shiftDown)
                    {
                        moveMode = MoveMode.LineRelative;
                    }
                    else
                    {
                        moveMode = MoveMode.PlaneRelative;
                    }
                }

                if (!selected.Contains(_hitBody))
                {
                    selected.Clear();
                }
                selected.Add(_hitBody);

                if (altDown) //copy and move
                {
                    //if (ctrlDown)
                    //{
                    //    selectedButNotMoving = selected;
                    //}
                    selected = selected.copy(true);
                    startStateChange(null);
                }
                else //just move
                {
                    startStateChange(selected);
                }

                moveOffset = _hitNormal.Position - selected.Position;

                switch (moveMode)
                {
                    case MoveMode.CameraRelative:
                        hitDistance = _hitDistance;
                        break;
                    case MoveMode.LineRelative:
                        hitNormal = _hitNormal;
                        break;
                    case MoveMode.PlaneRelative:
                        plane = new MyPlane(_hitNormal);
                        break;
                }
            }
        }