private static void RenderWidgetOutline(WidgetBase widget)
    {
        var contentArea = widget.GetContentArea();

        Tig.ShapeRenderer2d.DrawRectangleOutline(
            new Vector2(contentArea.X, contentArea.Y),
            new Vector2(contentArea.X + contentArea.Width, contentArea.Y + contentArea.Height),
            PackedLinearColorA.White
            );
    }
Пример #2
0
    private bool HandleWidgetMessage(MessageWidgetArgs msg)
    {
        // Determine where inside the widget the user clicked.
        var contentArea = _slotWidget.GetContentArea();
        var relPos      = new Point(msg.x - contentArea.X, msg.y - contentArea.Y);

        var currentItem = CurrentItem;

        switch (msg.widgetEventType)
        {
        case TigMsgWidgetEvent.Exited:
            UiSystems.CharSheet.Help.ClearHelpText();
            break;

        case TigMsgWidgetEvent.Clicked:
        {
            if (currentItem == null)
            {
                return(false);
            }

            if (UiSystems.CharSheet.Looting.IsIdentifying)
            {
                return(false);
            }

            if (UiSystems.CharSheet.State == CharInventoryState.CastingSpell)
            {
                return(false);
            }

            UiSystems.CharSheet.Inventory.DraggedObject = currentItem;
            var texturePath = currentItem.GetInventoryIconPath();
            var iconSize    = _slotWidget.GetSize();
            iconSize.Height -= 4;
            iconSize.Width  -= 4;
            Tig.Mouse.SetDraggedIcon(texturePath, new Point(-relPos.X + 4, -relPos.Y + 4), iconSize);
            return(false);
        }

        case TigMsgWidgetEvent.MouseReleased:
            if (UiSystems.CharSheet.Looting.IsIdentifying)
            {
                if (currentItem == null || GameSystems.Item.IsIdentified(currentItem) ||
                    GameSystems.Party.GetPartyMoney() < 10000)
                {
                    return(false);
                }

                GameSystems.Party.RemovePartyMoney(0, 100, 0, 0);
                currentItem.SetItemFlag(ItemFlag.IDENTIFIED, true);
            }
            else
            {
                // Shift+Click will show extra info about an item
                if (AllowShowInfo &&
                    (Tig.Keyboard.IsKeyPressed(VirtualKey.VK_LSHIFT) ||
                     Tig.Keyboard.IsKeyPressed(VirtualKey.VK_RSHIFT)) &&
                    GameSystems.MapObject.HasLongDescription(currentItem))
                {
                    UiSystems.CharSheet.ShowItemDetailsPopup(currentItem, ActingCritter);
                }

                UiSystems.CharSheet.Inventory.DraggedObject = null;
                Tig.Mouse.ClearDraggedIcon();
            }

            return(false);

        case TigMsgWidgetEvent.MouseReleasedAtDifferentButton:
            var droppedOn = Globals.UiManager.GetWidgetAt(msg.x, msg.y);
            if (droppedOn != null)
            {
                var mouseMsg = new Message(new MessageMouseArgs(msg.x, msg.y, 0, MouseEventFlag.LeftReleased));
                _slotWidget.HandleMessage(mouseMsg);
            }

            UiSystems.CharSheet.Inventory.DraggedObject = null;
            Tig.Mouse.ClearDraggedIcon();
            break;
        }

        return(true);
    }