// Если медик хочет прервать процедуру лечения... private void BT_Return_Click(object sender, EventArgs e) { // Проверяем кол-во предпринятых действий if (locattempt == 0) { // Если лечение не начиналось - никаких последствий, возвращаемся в меню. DialogResult = DialogResult.Cancel; Close(); } else { // Если же было совершено хотя бы одно действие - проверяем, находится ли пациент в критическом состоянии. if (operation.attempt == OperationInfo.maxAttempts - 1) { GUIMessageBox.ShowDlg(new string[] { "", "Пациент в критическом состоянии!", "Невозможно отменить лечение." }); } else // Если состояние не критическое - возвращаемся в меню операции (спросив подтверждения). { DialogResult result = GUIMessageBox.ShowDlg(GUIMessageBox.Type.CONFIRMATION, new string[] { "Вы собираетесь прервать уже начатую процедуру лечения." + "Дроид сведёт урон к минимуму, но состояние пациента всё равно ухудшится.", "Вы уверены?"}); if (result == DialogResult.Yes) { DialogResult = DialogResult.Abort; Close(); } } } }
// Метод вызывается по клику кнопок действий. 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 BT_Remove_Click(object sender, EventArgs e) { if (LB_ActualInj.SelectedItem != null) { LB_ActualInj.Items.Remove(LB_ActualInj.SelectedItem); } else { GUIMessageBox.ShowDlg("Сначала выберите ранение."); } }
private void BT_Criofreeze_Click(object sender, EventArgs e) { switch (patient.state) { case Database.CharacterData.State.ALIVE: case Database.CharacterData.State.DEAD: { // По какой-то причине кнопка видна - прячем её. BT_Criofreeze.Visible = false; break; } case Database.CharacterData.State.FROZEN: { // Размораживаем пациента DialogResult result = GUIMessageBox.ShowDlg(GUIMessageBox.Type.CONFIRMATION, "Вы дейсвтительно хотите разморозить пациента?"); if (result == DialogResult.Yes) { /* Нереализованный контент - задержки сделаны в корне неправильно. * * GUIMessageBox box = GUIMessageBox.ShowTimedMessage("Начинается процедура разморозки..."); * Thread.Sleep(2500); * box.Dispose(); * * box = GUIMessageBox.ShowTimedMessage("Восстановление жизненных показателей..."); * Thread.Sleep(3000); * box.Dispose(); * * box = GUIMessageBox.ShowTimedMessage("Разгерметизация кожного покрова..."); * Thread.Sleep(4000); * box.Dispose(); * * box = GUIMessageBox.ShowTimedMessage("Стабилизация температуры..."); * Thread.Sleep(5000); * box.Dispose(); * * GUIMessageBox.ShowDlg(new string[] { "", "Процедура разморозки завершена." }); */ LB_State.Text = "ЖИВ"; LB_State.ForeColor = Color.ForestGreen; patient.state = Database.CharacterData.State.ALIVE; BT_Criofreeze.Visible = false; } break; } } }
private void BT_Add_Click(object sender, EventArgs e) { if (ObjectsAmount(LB_ActualInj, LB_PossibleInj.SelectedItem) >= 3) { GUIMessageBox.ShowDlg("Не больше трёх ранений одного типа!"); } else { if (LB_PossibleInj.SelectedItem != null) { LB_ActualInj.Items.Add(LB_PossibleInj.SelectedItem); } else { GUIMessageBox.ShowDlg("Сначала выберите тип ранения."); } } }
// Когда вызывается закрытие (через кнопку, или же через Alt+F4), необходимо // сначала решить, нужно ли закрывать, и, при необходимости, прервать процедуру. private void CloseCalled(object sender, FormClosingEventArgs e) { // Спрашивать подтверждения нужно только в том случае, если пациент ещё жив И операция ещё не закончена. if ((info.patient.state != CharacterData.State.DEAD) && !info.isFinished) { DialogResult result = GUIMessageBox.ShowDlg(GUIMessageBox.Type.CONFIRMATION, new string[] { "Если вы прервёте операцию, дроид автоматически начнёт процедуру ввода пациента в криостазис.", "Вы уверены, что хотите прервать операцию?" }); // Решаем, нужно ли прервать закрытие. if (result == DialogResult.Yes) { // Прерываем. e.Cancel = false; // Замораживаем пациента. info.patient.state = CharacterData.State.FROZEN; DialogResult = DialogResult.Abort; /* Нереализованный контент, из-за неверной имплементации задержек. * * LogMessage("Начинаю криогенную заморозку..."); * Thread.Sleep(2500); * LogMessage("Герметизация кожного покрова..."); * Thread.Sleep(3000); * LogMessage("Остановка жизненных показателей..."); * TMR_StatsRandomize.Enabled = false; * Thread.Sleep(3000); * TMR_CritFlickering.Enabled = false; * Thread.Sleep(1500); */ LB_Critical.Visible = false; LogMessage("Пациент заморожен."); } else { e.Cancel = true; } } }
private void BT_Next_Click(object sender, EventArgs e) { // Проверка, было ли добавлено хотя бы одно ранение. if (LB_ActualInj.Items.Count == 0) { GUIMessageBox.ShowDlg(new string[] { "", "Сначала внесите инорфмацию о повреждениях." }); } else { // Нужно перевести интерфейсное представление введённых ранений в программное. List <object> checkedList = new List <object>(); for (int i = 0; i < LB_ActualInj.Items.Count; i++) { object item = LB_ActualInj.Items[i]; if (!checkedList.Contains(item)) { checkedList.Add(item); int count = 0; for (int j = 0; j < LB_ActualInj.Items.Count; j++) { if (item.ToString() == LB_ActualInj.Items[j].ToString() && (j != i)) { count++; } } input.Add(new Database.Injury( Database.Injury.FindTypeByName(item.ToString()), (Database.Injury.Amount)count) ); } } DialogResult = DialogResult.OK; Close(); } }
private void BT_Heal_Click(object sender, EventArgs e) { // Проверяем, выбрано ли вообще повреждение. if (LB_Damages.SelectedItem != null) { // Создаём объект повреждения для передачи в следующее диалоговое окно и вывода в журнал. Damage selectedDamage = new Damage(Damage.GetTypeByName(LB_Damages.SelectedItem.ToString())); LogMessage("Лечение повреждения \"" + selectedDamage.name + "\""); ActionSelect action = new ActionSelect(info, selectedDamage); DialogResult dlgResult = action.ShowDialog(); // вызываем окно switch (dlgResult) { // Повреждение вылечено case DialogResult.OK: { // убрать вылеченное из списка LB_Damages.Items.Remove(selectedDamage.ToString()); LogMessage("Повреждение устранено."); // если повреждений больше нет - операция успешно завершена if (LB_Damages.Items.Count == 0) { LogMessage("Пациент вылечен!"); info.isFinished = true; DialogResult = DialogResult.OK; Close(); } break; } case DialogResult.Cancel: { // процедура лечения ОТМЕНЕНА (т.е. не было произведено ни одного действия) LogMessage("Процедура лечения отменена."); break; } case DialogResult.Abort: { // процедура лечения ПРЕРВАНА (т.е. действие было совершено, неважно - ошибочное или нет) LogMessage("Процедура лечения прервана."); // Наносим пациенту один уровень урона. // Это не может его убить, т.к. прерывать лечение в критическом состоянии запрещено. info.HurtStats(); break; } case DialogResult.No: { // Попытки закончились, операция провалена. Убиваем пациента. info.isFinished = true; TMR_Pulse.Enabled = false; TMR_Pulse.Dispose(); SoundLibrary.PlaySoundLooping(SoundLibrary.SoundType.BEEEEEEP); info.Dead(); GUIUpdateStats(); TMR_StatsRandomize.Enabled = false; LogMessage("Пациент скончался."); GUIMessageBox.ShowDlg(new string[] { "", "Пациент скончался." }); DialogResult = DialogResult.None; Close(); SoundLibrary.Stop(); break; } } // Контроль индикатора крит. состояния. if (info.IsCritical()) { LogMessage("Пациент в критическом состоянии!"); LB_Critical.Visible = true; TMR_CritFlickering.Enabled = true; } else { TMR_CritFlickering.Enabled = false; LB_Critical.Visible = false; } } else { GUIMessageBox.ShowDlg(new string[] { "", "Сначала выберите повреждение." }); } }
public static DialogResult ShowDlg(Type type, string message, int time) { GUIMessageBox box = new GUIMessageBox(type, message, time); return(box.ShowDialog()); }
public static DialogResult ShowDlg(string[] message) { GUIMessageBox box = new GUIMessageBox(Type.MESSAGE, message); return(box.ShowDialog()); }