// Метод вызывается по клику кнопок действий. private void AttemptAction(Database.Action action) { locattempt++; if (action.number == currentAction) { // Выбрано верное действие PB_Process.Value++; // Проверяем, сколько ещё повреждений. Если их не осталось, // возвращаемся в окно операции, а также нейтрализуем одну ошибку. if (damage.order.Count > 0) currentAction = damage.order.Dequeue(); else { DialogResult = DialogResult.OK; // "Стабилизация" пациента. operation.HealStats(); TMR_CriticalFlickering.Enabled = false; LB_Critical.Visible = false; GUIMessageBox.ShowDlg(new string[] { "", "Повреждение вылечено.", "Дроид стабилизирует пациента..." }); Close(); } } else // Неверное действие { operation.attempt++; operation.HurtStats(); if (operation.attempt >= OperationInfo.maxAttempts) { DialogResult = DialogResult.No; Close(); } else if (operation.IsCritical()) { GUIMessageBox.ShowDlg(new string[] { "", "Пациент в критическом состоянии!"}); } else { GUIMessageBox.ShowDlg(new string[] { "", "Состояние пациента ухудшилось." }); } if (operation.IsCritical()) { LB_Critical.Visible = true; TMR_CriticalFlickering.Enabled = true; } } }
private void ActionSelected(object sender, EventArgs e) { Button button = (Button)sender; Database.Action action = new Database.Action(Database.Action.GetTypeByName(button.Text)); AttemptAction(action); }
// ВНИМАНИЕ! Этот и следующий методы ЗАВИСИМЫ от ТЕКСТА НА КНОПКЕ, т.к. с его помощью // определяется тип действия. Ввод текста несуществующего действия приведёт к ошибке и стопору системы. private void BT_Inject_Click(object sender, EventArgs e) { Database.Action.Type actType = Database.Action.GetTypeByName(LB_InjSelection.SelectedItem.ToString()); Database.Action action = new Database.Action(actType); AttemptAction(action); }