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

        }