summaryrefslogtreecommitdiff
path: root/src/ai/api/ai_object.cpp
diff options
context:
space:
mode:
authortruebrain <truebrain@openttd.org>2011-11-13 20:43:48 +0000
committertruebrain <truebrain@openttd.org>2011-11-13 20:43:48 +0000
commitb7a655bf4cafc68e14cade593e8b1aca7f04f7dd (patch)
tree1880bbb64896193511e72c23c9387af2bb19acae /src/ai/api/ai_object.cpp
parent407514a590dc06c8b80c5304b5e9227c8c844f91 (diff)
downloadopenttd-b7a655bf4cafc68e14cade593e8b1aca7f04f7dd.tar.xz
(svn r23209) -Codechange: track the current active script instance directly, instead of assuming the current company points you to the right one.
Diffstat (limited to 'src/ai/api/ai_object.cpp')
-rw-r--r--src/ai/api/ai_object.cpp27
1 files changed, 23 insertions, 4 deletions
diff --git a/src/ai/api/ai_object.cpp b/src/ai/api/ai_object.cpp
index 4c415524b..53f2f2b55 100644
--- a/src/ai/api/ai_object.cpp
+++ b/src/ai/api/ai_object.cpp
@@ -12,8 +12,6 @@
#include "../../stdafx.h"
#include "../../script/squirrel.hpp"
#include "../../command_func.h"
-#include "../../company_base.h"
-#include "../../company_func.h"
#include "../../network/network.h"
#include "../../tunnelbridge.h"
@@ -27,9 +25,30 @@
*/
static AIStorage *GetStorage()
{
- return AIInstance::GetStorage();
+ return AIObject::GetActiveInstance()->GetStorage();
}
+
+/* static */ AIInstance *AIObject::ActiveInstance::active = NULL;
+
+AIObject::ActiveInstance::ActiveInstance(AIInstance *instance)
+{
+ this->last_active = AIObject::ActiveInstance::active;
+ AIObject::ActiveInstance::active = instance;
+}
+
+AIObject::ActiveInstance::~ActiveInstance()
+{
+ AIObject::ActiveInstance::active = this->last_active;
+}
+
+/* static */ AIInstance *AIObject::GetActiveInstance()
+{
+ assert(AIObject::ActiveInstance::active != NULL);
+ return AIObject::ActiveInstance::active;
+}
+
+
/* static */ void AIObject::SetDoCommandDelay(uint ticks)
{
assert(ticks > 0);
@@ -179,7 +198,7 @@ static AIStorage *GetStorage()
/* static */ bool AIObject::CanSuspend()
{
- Squirrel *squirrel = Company::Get(_current_company)->ai_instance->engine;
+ Squirrel *squirrel = AIObject::GetActiveInstance()->engine;
return GetStorage()->allow_do_command && squirrel->CanSuspend();
}