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); } }
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; } } }