(svn r22120) -Change: [NoAI] Prevent AIs from getting consistently over their allowed amount of operations by subtracting the amount they went over "budget" from the budget for the next "tick".

This commit is contained in:
rubidium
2011-02-20 20:28:49 +00:00
parent 1fc7b1c451
commit 089d2053d5
2 changed files with 14 additions and 0 deletions

View File

@@ -188,7 +188,19 @@ bool Squirrel::MethodExists(HSQOBJECT instance, const char *method_name)
bool Squirrel::Resume(int suspend)
{
assert(!this->crashed);
/* Did we use more operations than we should have in the
* previous tick? If so, subtract that from the current run. */
if (this->overdrawn_ops > 0 && suspend > 0) {
this->overdrawn_ops -= suspend;
/* Do we need to wait even more? */
if (this->overdrawn_ops >= 0) return true;
/* We can now only run whatever is "left". */
suspend = -this->overdrawn_ops;
}
this->crashed = !sq_resumecatch(this->vm, suspend);
this->overdrawn_ops = -this->vm->_ops_till_suspend;
return this->vm->_suspended != 0;
}
@@ -310,6 +322,7 @@ Squirrel::Squirrel()
this->print_func = NULL;
this->global_pointer = NULL;
this->crashed = false;
this->overdrawn_ops = 0;
/* Handle compile-errors ourself, so we can display it nicely */
sq_setcompilererrorhandler(this->vm, &Squirrel::CompileError);