diff options
author | rubidium <rubidium@openttd.org> | 2009-02-08 01:51:48 +0000 |
---|---|---|
committer | rubidium <rubidium@openttd.org> | 2009-02-08 01:51:48 +0000 |
commit | e1b1fd18b538e7cbe9b8c5b757b683c4a79f4637 (patch) | |
tree | 90b4e755d074b6d4d949c4938eb3d5177c238609 | |
parent | 8bd5f10a2c833b51380ef3f0326071b1de3a8f0d (diff) | |
download | openttd-e1b1fd18b538e7cbe9b8c5b757b683c4a79f4637.tar.xz |
(svn r15406) -Fix: make Valuate actually cost a few opcodes to not make it a single opcode method of doing lots of the same thing. This should resolve most of the hiccups caused by AIs.
-rw-r--r-- | src/ai/api/ai_abstractlist.cpp | 3 | ||||
-rw-r--r-- | src/script/squirrel.cpp | 5 | ||||
-rw-r--r-- | src/script/squirrel.hpp | 5 |
3 files changed, 13 insertions, 0 deletions
diff --git a/src/ai/api/ai_abstractlist.cpp b/src/ai/api/ai_abstractlist.cpp index 9357f39c5..5fa0a1b23 100644 --- a/src/ai/api/ai_abstractlist.cpp +++ b/src/ai/api/ai_abstractlist.cpp @@ -6,6 +6,7 @@ #include "ai_abstractlist.hpp" #include "../../debug.h" #include "../../core/alloc_func.hpp" +#include "../../script/squirrel.hpp" /** * Base class for any AIAbstractList sorter. @@ -818,6 +819,8 @@ SQInteger AIAbstractList::Valuate(HSQUIRRELVM vm) { (*iter).second = (int32)value; this->buckets[(int32)value].insert((*iter).first); + + Squirrel::DecreaseOps(vm, 5); } sq_release(vm, &obj_func); diff --git a/src/script/squirrel.cpp b/src/script/squirrel.cpp index 1400eaf0a..602cc593d 100644 --- a/src/script/squirrel.cpp +++ b/src/script/squirrel.cpp @@ -454,3 +454,8 @@ void Squirrel::InsertResult(int result) vm->GetAt(vm->_stackbase + vm->_suspended_target) = vm->GetUp(-1); vm->Pop(); } + +/* static */ void Squirrel::DecreaseOps(HSQUIRRELVM vm, int ops) +{ + vm->DecreaseOps(ops); +} diff --git a/src/script/squirrel.hpp b/src/script/squirrel.hpp index fc7472e96..b5b352bd0 100644 --- a/src/script/squirrel.hpp +++ b/src/script/squirrel.hpp @@ -186,6 +186,11 @@ public: * Release a SQ object. */ void ReleaseObject(HSQOBJECT *ptr) { sq_release(this->vm, ptr); } + + /** + * Tell the VM to remove \c amount ops from the number of ops till suspend. + */ + static void DecreaseOps(HSQUIRRELVM vm, int amount); }; #endif /* SQUIRREL_HPP */ |