コード例 #1
0
        private void OnLeftMouseButtonUp(object sender, EventArgs e)
        {
            if (TargetSystem.IsTargeting && IsMouseOverWorld)
            {
                switch (TargetSystem.TargetingState)
                {
                case TargetType.Position:
                case TargetType.Object:
                    GameObject obj = null;

                    if (IsMouseOverUI)
                    {
                        GumpControl control = UIManager.MouseOverControl;

                        if (control is ItemGumpling gumpling)
                        {
                            obj = gumpling.Item;
                        }
                        //else if (control.RootParent is Mobil)
                    }
                    else if (IsMouseOverWorld)
                    {
                        obj = SelectedObject;
                    }

                    if (obj != null)
                    {
                        TargetSystem.MouseTargetingEventObject(obj);
                        Mouse.LastLeftButtonClickTime = 0;
                    }

                    break;

                case TargetType.Nothing:

                    break;

                default:
                    Log.Message(LogTypes.Warning, "Not implemented.");

                    break;
                }
            }
            else if (IsHoldingItem)
            {
                SelectedObject = null;

                if (IsMouseOverUI)
                {
                    GumpControl target = UIManager.MouseOverControl;

                    if (target is ItemGumpling gumpling && !(target is ItemGumplingPaperdoll))
                    {
                        Item item = gumpling.Item;
                        SelectedObject = item;

                        if (TileData.IsContainer((long)item.ItemData.Flags))
                        {
                            DropHeldItemToContainer(item);
                        }
                        else if (HeldItem.Graphic == item.Graphic && TileData.IsStackable((long)HeldItem.ItemData.Flags))
                        {
                            MergeHeldItem(item);
                        }
                        else
                        {
                            if (item.Container.IsItem)
                            {
                                DropHeldItemToContainer(World.Items.Get(item.Container), (ushort)(target.X + (Mouse.Position.X - target.ScreenCoordinateX) - _heldOffset.X), (ushort)(target.Y + (Mouse.Position.Y - target.ScreenCoordinateY) - _heldOffset.Y));
                            }
                        }
                    }
                    else if (target is GumpPicContainer container)
                    {
                        SelectedObject = container.Item;
                        int x = Mouse.Position.X - _heldOffset.X - (target.X + target.Parent.X);
                        int y = Mouse.Position.Y - _heldOffset.Y - (target.Y + target.Parent.Y);
                        DropHeldItemToContainer(container.Item, (ushort)x, (ushort)y);
                    }
                    else if (target is ItemGumplingPaperdoll || (target is GumpPic pic && pic.IsPaperdoll) || target is EquipmentSlot || target?.Parent is PaperDollGump)
                    {
                        if (TileData.IsWearable((long)HeldItem.ItemData.Flags))
                        {
                            WearHeldItem();
                        }
                    }
                    else if (target is GumpPicBackpack backpack)
                    {
                        DropHeldItemToContainer(backpack.BackpackItem);
                    }
                }