# HG changeset patch # User truebrain # Date 1213300022 0 # Node ID cd3f2d07199f24f96c5ede14d3c84d2ba2ca927b # Parent e7693a7bb280dec04e100310ca408518376642e1 (svn r13496) [NoAI] -Fix: if a library depends on an other library, the import became globally known, which defeats the idea of imports. They are now restricted to their scope, and 'import' returns the class of import (if any) diff -r e7693a7bb280 -r cd3f2d07199f bin/ai/library/graph/aystar/main.nut --- a/bin/ai/library/graph/aystar/main.nut Thu Jun 12 18:14:06 2008 +0000 +++ b/bin/ai/library/graph/aystar/main.nut Thu Jun 12 19:47:02 2008 +0000 @@ -1,14 +1,12 @@ /* $Id$ */ -/* We need a Queue */ -import("queue.binary_heap", "Queue", 1); - /** * An AyStar implementation. * It solves graphs by finding the fastest route from one point to the other. */ class AyStar { + _queue_class = import("queue.binary_heap", "", 1); _cost_callback = null; _estimate_callback = null; _neighbours_callback = null; @@ -85,7 +83,7 @@ if (typeof(sources) != "array" || sources.len() == 0) throw("sources has be a non-empty array."); if (typeof(goals) != "array" || goals.len() == 0) throw("goals has be a non-empty array."); - this._open = Queue(); + this._open = this._queue_class(); this._closed = AIList(); foreach (node in sources) { diff -r e7693a7bb280 -r cd3f2d07199f src/ai/ai_info.cpp --- a/src/ai/ai_info.cpp Thu Jun 12 18:14:06 2008 +0000 +++ b/src/ai/ai_info.cpp Thu Jun 12 19:47:02 2008 +0000 @@ -159,5 +159,5 @@ int version = GetParam(SQConvert::ForceType(), vm, 4, &ptr); if (!AI_ImportLibrary(library, class_name, version, vm)) return -1; - return 0; + return 1; } diff -r e7693a7bb280 -r cd3f2d07199f src/ai/ai_squirrel.cpp --- a/src/ai/ai_squirrel.cpp Thu Jun 12 18:14:06 2008 +0000 +++ b/src/ai/ai_squirrel.cpp Thu Jun 12 19:47:02 2008 +0000 @@ -185,6 +185,10 @@ char fake_class[1024]; snprintf(fake_class, sizeof(fake_class), "_internalNA%d", ++this->library_instance_count); + /* Get the current table/class we belong to */ + HSQOBJECT parent; + sq_getstackobj(vm, 1, &parent); + /* Load the library in a 'fake' namespace, so we can link it to the name the user requested */ sq_pushroottable(vm); sq_pushstring(vm, OTTD2FS(fake_class), -1); @@ -218,14 +222,20 @@ sq_getstackobj(vm, -1, &obj); sq_pop(vm, 3); + if (StrEmpty(class_name)) { + sq_pushobject(vm, obj); + return true; + } + /* Now link the name the user wanted to our 'fake' class */ - sq_pushroottable(vm); + sq_pushobject(vm, parent); sq_pushstring(vm, OTTD2FS(class_name), -1); sq_pushobject(vm, obj); sq_newclass(vm, SQTrue); sq_newslot(vm, -3, SQFalse); sq_pop(vm, 1); + sq_pushobject(vm, obj); return true; }