Esempio n. 1
0
        private void AddSpawnItem(Control pnlLine, SpawnItemButton btnInsertAfter, bool isBindCurrent, SpawnItem newItem = null)
        {
            var line            = GetLine(pnlLine);
            var insertAfterItem = btnInsertAfter == null ? null : btnInsertAfter.Item;

            if (newItem == null)
            {
                newItem = line.InsertItem(Pack.SpawnItemConfig.Types.Keys.First(), insertAfterItem);
            }
            else
            {
                line.InsertItem(newItem, insertAfterItem);
            }

            var newBtn = AddSpawnItemButton(pnlLine, newItem);

            if (isBindCurrent)
            {
                BindSpawnItem(newBtn);
            }

            IsNeedSave = true;

            UpdatePrognosis();
        }
Esempio n. 2
0
        private void RemoveSpawnItemButton(SpawnItemButton btnItem)
        {
            BindSpawnItem(null);
            var pnlLine = btnItem.Parent;

            var line = GetLine(pnlLine);

            line.RemoveItem(btnItem.Item);
            pnlLine.Controls.Remove(btnItem);
            pnlLine.Refresh();

            UpdatePrognosis();
        }
Esempio n. 3
0
        private static SpawnItemButton GetNearButton(Control pnlLine, int locationX)
        {
            SpawnItemButton result = null;

            foreach (SpawnItemButton btn in pnlLine.Controls)
            {
                if (btn.Right <= locationX && (result == null || btn.Right > result.Right))
                {
                    result = btn;
                }
            }

            return(result);
        }
Esempio n. 4
0
        private SpawnItemButton AddSpawnItemButton(Control pnlLine, SpawnItem item)
        {
            var btnItem = new SpawnItemButton(item,
                                              (fileName) => ilSpawnItemTypesLarge.Images[GetImageIndex(ilSpawnItemTypesLarge, fileName, false)],
                                              (fileName) => ilAttachmentNames.Images[GetImageIndex(ilAttachmentNames, fileName, false)]);

            btnItem.ContextMenu = cmButton;
            btnItem.MouseDown  += btnItem_MouseDown;

            pnlLine.Controls.Add(btnItem);
            pnlLine.Refresh();

            return(btnItem);
        }
Esempio n. 5
0
        private void ShowInsertWizard(Control pnlLine, SpawnItemButton btnPrev = null)
        {
            using (var frm = new WizardForm(this))
            {
                if (frm.ShowDialog() != DialogResult.OK)
                {
                    return;
                }

                int totalProbability = frm.Items.Sum(itm => itm.Probability);
                var itemsByRange     = new List <Tuple <int, int, WizardForm.Item> >(frm.Items.Count);
                int probabilityStart = 0;
                foreach (var item in frm.Items)
                {
                    itemsByRange.Add(
                        new Tuple <int, int, WizardForm.Item>(probabilityStart, probabilityStart + item.Probability, item));

                    probabilityStart += item.Probability;
                }

                Random rnd = new Random(0);

                pnlLine.SuspendLayout();
                SuspendDrawing(pnlLine);
                BeginBinding();
                try
                {
                    for (int i = 0; i < frm.Count; i++)
                    {
                        int index      = rnd.Next(0, totalProbability);
                        var wizardItem = itemsByRange.First(itm => itm.Item1 <= index && index < itm.Item2).Item3;
                        wizardItem.Delay = frm.Interval;

                        // NOTE: клонируем item, т.к. если копировать ссылку, то потом получим несколько ссылок на одно и то же и будут непонятные ошибки при редактировании
                        AddSpawnItem(pnlLine, btnPrev, false, wizardItem.Clone());
                    }

                    BindSpawnItem(null);
                }
                finally
                {
                    pnlLine.ResumeLayout();
                    ResumeDrawing(pnlLine);
                    EndBinding();
                }

                UpdatePrognosis();
            }
        }
Esempio n. 6
0
        private void pnlLine_MouseDown(object sender, MouseEventArgs e)
        {
            Panel pnlLine = (Panel)sender;

            _insertAfterBtnItem = null;
            if (e.Button == MouseButtons.Right && pnlLine.Controls.Count > 0)
            {
                // ищем ближайший слева контрол от позиции клика
                _insertAfterBtnItem = GetNearButton(pnlLine, e.X);
            }
            else if (e.Button == MouseButtons.Left)
            {
                DoDragDrop(pnlLine, DragDropEffects.Move);
            }

            BindSpawnItem(null);
        }
Esempio n. 7
0
        private void BindSpawnItem(SpawnItemButton btnItem)
        {
            if (_curItemButton != null)
            {
                _curItemButton.IsSelected = false;
            }

            _curItemButton = btnItem;

            if (_curItemButton == null)
            {
                pnlSpawnItemBinding.Visible = false;
            }
            else
            {
                var item = _curItemButton.Item;
                var line = GetCurrentLine();
                BeginBinding();
                try
                {
                    _curItemButton.IsSelected = true;

                    pnlSpawnItemBinding.Visible = true;

                    cmbSpawnItemType.EditValue = item.Type;
                    txtSpawnItemDelay.Value    = (decimal)item.Delay;

                    // для не-первого айтема не даём ставить Delay меньше 1, т.к. в этом случае он сольётся с предыдущим. Для подобных настроек есть отдельные линии.
                    txtSpawnItemDelay.Properties.MinValue = line.Items.FirstOrDefault() == item ? 0 : 1;

                    BindAbsoluteTime();

                    gvAttachmentTypes.RefreshData();
                }
                finally
                {
                    EndBinding();
                }

                _curItemButton.Refresh();
            }
        }