summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryexo <yexo@openttd.org>2009-03-14 01:32:04 +0000
committeryexo <yexo@openttd.org>2009-03-14 01:32:04 +0000
commit473cc5076a9c83ab89143d07af9b955697a16920 (patch)
tree803a796c56b975672dd32730cba95657ef40a7b5
parent8ffe6906af91ba738edc72820e4f56629cf83976 (diff)
downloadopenttd-473cc5076a9c83ab89143d07af9b955697a16920.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.
-rw-r--r--src/ai/ai_gui.cpp19
-rw-r--r--src/ai/ai_gui.hpp2
-rw-r--r--src/ai/ai_instance.cpp5
-rw-r--r--src/lang/english.txt1
4 files changed, 20 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()
diff --git a/src/lang/english.txt b/src/lang/english.txt
index 739ea4c90..0cc864199 100644
--- a/src/lang/english.txt
+++ b/src/lang/english.txt
@@ -3583,6 +3583,7 @@ STR_AI_RANDOM_AI :Random AI
STR_AI_SETTINGS_CAPTION :{WHITE}AI Parameters
STR_AI_AUTHOR :Author:
STR_AI_VERSION :Version:
+STR_AI_PLEASE_REPORT_CRASH :{WHITE}One of the running AIs crashed. Please report this to the AI author with a screenshot of the AI Debug Window.
########
############ town controlled noise level