public void Update(int px, int py) { this.px = px; this.py = py; if(userInterfaceManager.LockMouse) { if( (userInterfaceManager.MouseClick != null) && (userInterfaceManager.MouseClick.Button == OpenTK.Input.MouseButton.Left) && (HoverModel != null) ) { operations.Delete(); userInterfaceManager.MouseClick = null; } if( (userInterfaceManager.MouseClick != null) && (userInterfaceManager.MouseClick.Button == OpenTK.Input.MouseButton.Right) && (HoverModel != null) ) { operations.Insert(); userInterfaceManager.MouseClick = null; } } if(Configuration.voxelTest) { if( (userInterfaceManager.MouseClick != null) && (userInterfaceManager.MouseClick.Button == userInterfaceManager.ApplyButton) ) { userInterfaceManager.MouseClick = null; var voxel = Services.Get<VoxelRenderer.VoxelEditor>(); if(voxel != null) { voxel.TryPut(); } } } if( (Configuration.selection == false) || (userInterfaceManager == null) ) { return; } if( (userInterfaceManager.HoverArea != null) && (userInterfaceManager.HoverArea != userInterfaceManager.Layer) ) { return; } if( (userInterfaceManager.MouseClick != null) && (userInterfaceManager.MouseClick.Button == userInterfaceManager.SelectButton) ) { userInterfaceManager.MouseClick = null; switch(userInterfaceManager.ButtonAction) { case UserInterfaceManager.Action.Drag: { if( Configuration.physics && (physicsDrag != null) ) { physicsDrag.Begin(); } break; } case UserInterfaceManager.Action.Add: { operations.Insert(); break; } case UserInterfaceManager.Action.Select: { if(HoverModel != null) { if(Contains(hoverModel) == false) { if( (window.Keyboard[OpenTK.Input.Key.ShiftLeft] == false) && (window.Keyboard[OpenTK.Input.Key.ShiftRight] == false) ) { ClearSelection(); } Add(hoverModel); } else { Remove(hoverModel); } } if(RuntimeConfiguration.curveTool) { curveTool.MouseClick(HoverModel); } if(manipulatorManager != null) { manipulatorManager.PickAxis(HoverPosition); } break; } } } userInterfaceManager.MouseClick = null; if(manipulatorManager == null) { return; } if(Configuration.physics) { if(userInterfaceManager.MouseButtons[(int)userInterfaceManager.MoveButton]) { physicsDrag.Update(px, py, renderer.Requested.Viewport); } else if(physicsDrag.Model != null) { physicsDrag.End(); } } if(models.Count > 0) { manipulatorManager.Manipulator.Active = true; } else { manipulatorManager.Manipulator.Active = false; } if( userInterfaceManager.MouseButtons[(int)userInterfaceManager.MoveButton] && manipulatorManager.Manipulator.ActiveAxis != Axis.None ) { // Testing world to clip matrix sceneManager.Camera.UpdateFrame(); sceneManager.Camera.UpdateViewport(renderer.Requested.Viewport); manipulatorManager.Manipulator.UpdateAxisMove( sceneManager.Camera.WorldToClip, renderer.Requested.Viewport, window.Mouse.X, window.Height - 1 - window.Mouse.Y ); } else { manipulatorManager.Manipulator.UpdateScale(); } }