diff options
author | yexo <yexo@openttd.org> | 2009-03-14 01:32:04 +0000 |
---|---|---|
committer | yexo <yexo@openttd.org> | 2009-03-14 01:32:04 +0000 |
commit | 2e6e2457f12b272716cfc738dee4694fbe4b65a5 (patch) | |
tree | 803a796c56b975672dd32730cba95657ef40a7b5 /src/ai | |
parent | 0ca92a47a213b2640cc702ddffa173f056f30cf6 (diff) | |
download | openttd-2e6e2457f12b272716cfc738dee4694fbe4b65a5.tar.xz |
(svn r15708) -Feature [FS#2728]: Pop up the AI Debug Window if one of the AIs crashed and show a message that the user should report the crash.
Diffstat (limited to 'src/ai')
-rw-r--r-- | src/ai/ai_gui.cpp | 19 | ||||
-rw-r--r-- | src/ai/ai_gui.hpp | 2 | ||||
-rw-r--r-- | src/ai/ai_instance.cpp | 5 |
3 files changed, 19 insertions, 7 deletions
diff --git a/src/ai/ai_gui.cpp b/src/ai/ai_gui.cpp index 34d001e8d..2b7722bcd 100644 --- a/src/ai/ai_gui.cpp +++ b/src/ai/ai_gui.cpp @@ -688,16 +688,21 @@ struct AIDebugWindow : public Window { } } + void ChangeToAI(CompanyID show_ai) + { + this->RaiseWidget(ai_debug_company + AID_WIDGET_COMPANY_BUTTON_START); + ai_debug_company = show_ai; + this->LowerWidget(ai_debug_company + AID_WIDGET_COMPANY_BUTTON_START); + this->SetDirty(); + } + virtual void OnClick(Point pt, int widget) { /* Check which button is clicked */ if (IsInsideMM(widget, AID_WIDGET_COMPANY_BUTTON_START, AID_WIDGET_COMPANY_BUTTON_END + 1)) { /* Is it no on disable? */ if (!this->IsWidgetDisabled(widget)) { - this->RaiseWidget(ai_debug_company + AID_WIDGET_COMPANY_BUTTON_START); - ai_debug_company = (CompanyID)(widget - AID_WIDGET_COMPANY_BUTTON_START); - this->LowerWidget(ai_debug_company + AID_WIDGET_COMPANY_BUTTON_START); - this->SetDirty(); + ChangeToAI((CompanyID)(widget - AID_WIDGET_COMPANY_BUTTON_START)); } } if (widget == AID_WIDGET_RELOAD_TOGGLE && !this->IsWidgetDisabled(widget)) { @@ -770,10 +775,12 @@ static const WindowDesc _ai_debug_desc = { _ai_debug_widgets }; -void ShowAIDebugWindow() +void ShowAIDebugWindow(CompanyID show_company) { if (!_networking || _network_server) { - AllocateWindowDescFront<AIDebugWindow>(&_ai_debug_desc, 0); + AIDebugWindow *w = (AIDebugWindow *)BringWindowToFrontById(WC_AI_DEBUG, 0); + if (w == NULL) w = new AIDebugWindow(&_ai_debug_desc, 0); + if (show_company != INVALID_COMPANY) w->ChangeToAI(show_company); } else { ShowErrorMessage(INVALID_STRING_ID, STR_AI_DEBUG_SERVER_ONLY, 0, 0); } diff --git a/src/ai/ai_gui.hpp b/src/ai/ai_gui.hpp index 141df43eb..07c0b9e87 100644 --- a/src/ai/ai_gui.hpp +++ b/src/ai/ai_gui.hpp @@ -5,7 +5,7 @@ #ifndef AI_GUI_HPP #define AI_GUI_HPP -void ShowAIDebugWindow(); +void ShowAIDebugWindow(CompanyID show_company = INVALID_COMPANY); void ShowAIConfigWindow(); #endif /* AI_GUI_HPP */ diff --git a/src/ai/ai_instance.cpp b/src/ai/ai_instance.cpp index 7bd093867..fd4488521 100644 --- a/src/ai/ai_instance.cpp +++ b/src/ai/ai_instance.cpp @@ -7,6 +7,7 @@ #include "../settings_type.h" #include "../vehicle_base.h" #include "../saveload/saveload.h" +#include "../gui.h" #include "table/strings.h" #include <squirrel.h> @@ -20,6 +21,7 @@ #include "ai_info.hpp" #include "ai_storage.hpp" #include "ai_instance.hpp" +#include "ai_gui.hpp" /* Convert all AI related classes to Squirrel data. * Note: this line a marker in squirrel_export.sh. Do not change! */ @@ -251,6 +253,9 @@ void AIInstance::Died() delete this->engine; this->instance = NULL; this->engine = NULL; + + ShowAIDebugWindow(_current_company); + ShowErrorMessage(INVALID_STRING_ID, STR_AI_PLEASE_REPORT_CRASH, 0, 0); } void AIInstance::GameLoop() |