author | truelight |
Fri, 04 May 2007 15:57:29 +0000 | |
branch | noai |
changeset 9611 | 5cf58c6571b7 |
parent 9609 | f0dbf5850145 |
child 9614 | 814c3bbf8ecc |
permissions | -rw-r--r-- |
9365
c3d08e0b1083
(svn r9151) [NoAI] -Add: added squirrel module that loads squirrel scripts and
truelight
parents:
diff
changeset
|
1 |
/* $Id$ */ |
c3d08e0b1083
(svn r9151) [NoAI] -Add: added squirrel module that loads squirrel scripts and
truelight
parents:
diff
changeset
|
2 |
|
c3d08e0b1083
(svn r9151) [NoAI] -Add: added squirrel module that loads squirrel scripts and
truelight
parents:
diff
changeset
|
3 |
/** @file squirrel.cpp allows loading squirrel scripts to control an AI */ |
c3d08e0b1083
(svn r9151) [NoAI] -Add: added squirrel module that loads squirrel scripts and
truelight
parents:
diff
changeset
|
4 |
|
9429
25b7d020a3a9
(svn r9232) [NoAI] -Fix r9230: incode update about file/dir moving
truelight
parents:
9427
diff
changeset
|
5 |
#include "../stdafx.h" |
25b7d020a3a9
(svn r9232) [NoAI] -Fix r9230: incode update about file/dir moving
truelight
parents:
9427
diff
changeset
|
6 |
#include "../debug.h" |
25b7d020a3a9
(svn r9232) [NoAI] -Fix r9230: incode update about file/dir moving
truelight
parents:
9427
diff
changeset
|
7 |
#include "../openttd.h" |
25b7d020a3a9
(svn r9232) [NoAI] -Fix r9230: incode update about file/dir moving
truelight
parents:
9427
diff
changeset
|
8 |
#include "../string.h" |
25b7d020a3a9
(svn r9232) [NoAI] -Fix r9230: incode update about file/dir moving
truelight
parents:
9427
diff
changeset
|
9 |
#include "../fios.h" |
9411
29c9dfcdb8e9
(svn r9209) [NoAI] -Add: added ScanDir(), which scans the 'ai' dir for main.nut scripts
truelight
parents:
9410
diff
changeset
|
10 |
#include <sys/types.h> |
29c9dfcdb8e9
(svn r9209) [NoAI] -Add: added ScanDir(), which scans the 'ai' dir for main.nut scripts
truelight
parents:
9410
diff
changeset
|
11 |
#include <sys/stat.h> |
9365
c3d08e0b1083
(svn r9151) [NoAI] -Add: added squirrel module that loads squirrel scripts and
truelight
parents:
diff
changeset
|
12 |
|
9426
b90c0d1a36b7
(svn r9229) [NoAI] -Change: move more header-mess from .hpp to .cpp
truelight
parents:
9425
diff
changeset
|
13 |
#include <squirrel.h> |
9429
25b7d020a3a9
(svn r9232) [NoAI] -Fix r9230: incode update about file/dir moving
truelight
parents:
9427
diff
changeset
|
14 |
#include "../squirrel.hpp" |
25b7d020a3a9
(svn r9232) [NoAI] -Fix r9230: incode update about file/dir moving
truelight
parents:
9427
diff
changeset
|
15 |
#include "../squirrel_helper.hpp" |
25b7d020a3a9
(svn r9232) [NoAI] -Fix r9230: incode update about file/dir moving
truelight
parents:
9427
diff
changeset
|
16 |
#include "../squirrel_class.hpp" |
9487
0575126e0267
(svn r9356) [NoAI] -Add: add abs() function to global scope in SQ. This means we now have an own squirrel_std class which registers such functions. (on request by Zuu)
truelight
parents:
9480
diff
changeset
|
17 |
#include "../squirrel_std.hpp" |
9429
25b7d020a3a9
(svn r9232) [NoAI] -Fix r9230: incode update about file/dir moving
truelight
parents:
9427
diff
changeset
|
18 |
#include "api/ai_controller.hpp" |
9433
d439c1c469f4
(svn r9238) [NoAI] -Codechange: removed ai/api/ai_factory.h, as it isn't an api header
truelight
parents:
9431
diff
changeset
|
19 |
#include "ai_factory.hpp" |
9431
346932a30fc9
(svn r9235) [NoAI] -Codechange: renamed ai/squirrel.* to ai/ai_squirrel.*
truelight
parents:
9429
diff
changeset
|
20 |
#include "ai_squirrel.hpp" |
9426
b90c0d1a36b7
(svn r9229) [NoAI] -Change: move more header-mess from .hpp to .cpp
truelight
parents:
9425
diff
changeset
|
21 |
|
9597
db3908cf597a
(svn r9630) [NoAI] -Codechange: remove now useless define.
rubidium
parents:
9596
diff
changeset
|
22 |
/* Convert all AI related classes to Squirrel data. |
db3908cf597a
(svn r9630) [NoAI] -Codechange: remove now useless define.
rubidium
parents:
9596
diff
changeset
|
23 |
* Note: this line a marker in squirrel_export.sh. Do not change! */ |
9596
8af5a1399842
(svn r9629) [NoAI] -Codechange: move the squirrel export functions out of the API header files.
rubidium
parents:
9594
diff
changeset
|
24 |
#include "api/ai_abstractlist.hpp.sq" |
8af5a1399842
(svn r9629) [NoAI] -Codechange: move the squirrel export functions out of the API header files.
rubidium
parents:
9594
diff
changeset
|
25 |
#include "api/ai_accounting.hpp.sq" |
8af5a1399842
(svn r9629) [NoAI] -Codechange: move the squirrel export functions out of the API header files.
rubidium
parents:
9594
diff
changeset
|
26 |
#include "api/ai_base.hpp.sq" |
8af5a1399842
(svn r9629) [NoAI] -Codechange: move the squirrel export functions out of the API header files.
rubidium
parents:
9594
diff
changeset
|
27 |
#include "api/ai_cargo.hpp.sq" |
8af5a1399842
(svn r9629) [NoAI] -Codechange: move the squirrel export functions out of the API header files.
rubidium
parents:
9594
diff
changeset
|
28 |
#include "api/ai_company.hpp.sq" |
8af5a1399842
(svn r9629) [NoAI] -Codechange: move the squirrel export functions out of the API header files.
rubidium
parents:
9594
diff
changeset
|
29 |
#include "api/ai_controller.hpp.sq" |
8af5a1399842
(svn r9629) [NoAI] -Codechange: move the squirrel export functions out of the API header files.
rubidium
parents:
9594
diff
changeset
|
30 |
#include "api/ai_execmode.hpp.sq" |
8af5a1399842
(svn r9629) [NoAI] -Codechange: move the squirrel export functions out of the API header files.
rubidium
parents:
9594
diff
changeset
|
31 |
#include "api/ai_industry.hpp.sq" |
8af5a1399842
(svn r9629) [NoAI] -Codechange: move the squirrel export functions out of the API header files.
rubidium
parents:
9594
diff
changeset
|
32 |
#include "api/ai_list.hpp.sq" |
8af5a1399842
(svn r9629) [NoAI] -Codechange: move the squirrel export functions out of the API header files.
rubidium
parents:
9594
diff
changeset
|
33 |
#include "api/ai_map.hpp.sq" |
8af5a1399842
(svn r9629) [NoAI] -Codechange: move the squirrel export functions out of the API header files.
rubidium
parents:
9594
diff
changeset
|
34 |
#include "api/ai_order.hpp.sq" |
8af5a1399842
(svn r9629) [NoAI] -Codechange: move the squirrel export functions out of the API header files.
rubidium
parents:
9594
diff
changeset
|
35 |
#include "api/ai_road.hpp.sq" |
8af5a1399842
(svn r9629) [NoAI] -Codechange: move the squirrel export functions out of the API header files.
rubidium
parents:
9594
diff
changeset
|
36 |
#include "api/ai_settings.hpp.sq" |
8af5a1399842
(svn r9629) [NoAI] -Codechange: move the squirrel export functions out of the API header files.
rubidium
parents:
9594
diff
changeset
|
37 |
#include "api/ai_sign.hpp.sq" |
8af5a1399842
(svn r9629) [NoAI] -Codechange: move the squirrel export functions out of the API header files.
rubidium
parents:
9594
diff
changeset
|
38 |
#include "api/ai_testmode.hpp.sq" |
8af5a1399842
(svn r9629) [NoAI] -Codechange: move the squirrel export functions out of the API header files.
rubidium
parents:
9594
diff
changeset
|
39 |
#include "api/ai_tilelist.hpp.sq" |
8af5a1399842
(svn r9629) [NoAI] -Codechange: move the squirrel export functions out of the API header files.
rubidium
parents:
9594
diff
changeset
|
40 |
#include "api/ai_tilelist_valuator.hpp.sq" |
8af5a1399842
(svn r9629) [NoAI] -Codechange: move the squirrel export functions out of the API header files.
rubidium
parents:
9594
diff
changeset
|
41 |
#include "api/ai_town.hpp.sq" |
8af5a1399842
(svn r9629) [NoAI] -Codechange: move the squirrel export functions out of the API header files.
rubidium
parents:
9594
diff
changeset
|
42 |
#include "api/ai_townlist.hpp.sq" |
8af5a1399842
(svn r9629) [NoAI] -Codechange: move the squirrel export functions out of the API header files.
rubidium
parents:
9594
diff
changeset
|
43 |
#include "api/ai_townlist_valuator.hpp.sq" |
8af5a1399842
(svn r9629) [NoAI] -Codechange: move the squirrel export functions out of the API header files.
rubidium
parents:
9594
diff
changeset
|
44 |
#include "api/ai_transactionmode.hpp.sq" |
8af5a1399842
(svn r9629) [NoAI] -Codechange: move the squirrel export functions out of the API header files.
rubidium
parents:
9594
diff
changeset
|
45 |
#include "api/ai_vehicle.hpp.sq" |
9387
4255a0a2d272
(svn r9179) [NoAI] -Add: added templates that makes adding classes to squirrel very easy
truelight
parents:
9386
diff
changeset
|
46 |
|
9404
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
47 |
static FSquirrel iFSquirrel; ///< Tell the AI-core that we have an AI with which we like to play. |
9373
d03563181088
(svn r9160) [NoAI] -Add: added AIController for Squirrel; all AIs, C++ or Squirrel, should extend this class
truelight
parents:
9368
diff
changeset
|
48 |
|
9404
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
49 |
/** |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
50 |
* Our tiny wrapper between C++ and Squirrel. |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
51 |
*/ |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
52 |
class AIFactorySquirrel: public AIFactoryBase { |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
53 |
public: |
9422
33efcc5f1b09
(svn r9223) [NoAI] -Change: moved squirrel/engine.cpp to squirrel.cpp in root
truelight
parents:
9413
diff
changeset
|
54 |
Squirrel *engine; |
9404
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
55 |
HSQOBJECT SQ_instance; |
9410
286fcd8edc64
(svn r9208) [NoAI] -Add: keep track of which script added which class, so we know
truelight
parents:
9407
diff
changeset
|
56 |
char *script_name; |
9373
d03563181088
(svn r9160) [NoAI] -Add: added AIController for Squirrel; all AIs, C++ or Squirrel, should extend this class
truelight
parents:
9368
diff
changeset
|
57 |
|
9410
286fcd8edc64
(svn r9208) [NoAI] -Add: keep track of which script added which class, so we know
truelight
parents:
9407
diff
changeset
|
58 |
~AIFactorySquirrel(); |
286fcd8edc64
(svn r9208) [NoAI] -Add: keep track of which script added which class, so we know
truelight
parents:
9407
diff
changeset
|
59 |
|
286fcd8edc64
(svn r9208) [NoAI] -Add: keep track of which script added which class, so we know
truelight
parents:
9407
diff
changeset
|
60 |
/* virtual */ const char *GetAuthor() { return this->engine->CallStringMethod (this->SQ_instance, "GetAuthor"); } |
286fcd8edc64
(svn r9208) [NoAI] -Add: keep track of which script added which class, so we know
truelight
parents:
9407
diff
changeset
|
61 |
/* virtual */ const char *GetName() { return this->engine->CallStringMethod (this->SQ_instance, "GetName"); } |
286fcd8edc64
(svn r9208) [NoAI] -Add: keep track of which script added which class, so we know
truelight
parents:
9407
diff
changeset
|
62 |
/* virtual */ const char *GetDescription() { return this->engine->CallStringMethod (this->SQ_instance, "GetDescription"); } |
286fcd8edc64
(svn r9208) [NoAI] -Add: keep track of which script added which class, so we know
truelight
parents:
9407
diff
changeset
|
63 |
/* virtual */ int GetVersion() { return this->engine->CallIntegerMethod(this->SQ_instance, "GetVersion"); } |
286fcd8edc64
(svn r9208) [NoAI] -Add: keep track of which script added which class, so we know
truelight
parents:
9407
diff
changeset
|
64 |
/* virtual */ const char *GetDate() { return this->engine->CallStringMethod (this->SQ_instance, "GetDate"); } |
286fcd8edc64
(svn r9208) [NoAI] -Add: keep track of which script added which class, so we know
truelight
parents:
9407
diff
changeset
|
65 |
/* virtual */ AIController *CreateInstance(); |
9404
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
66 |
|
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
67 |
/** |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
68 |
* Register Squirrel script to the Factory. |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
69 |
*/ |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
70 |
void RegisterSquirrel() { this->RegisterFactory(this->GetName()); } |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
71 |
|
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
72 |
/** |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
73 |
* Check if a method exists in the script. |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
74 |
*/ |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
75 |
void CheckMethods(AIFactorySquirrel *fbase, SQInteger *res, const char *name); |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
76 |
}; |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
77 |
|
9410
286fcd8edc64
(svn r9208) [NoAI] -Add: keep track of which script added which class, so we know
truelight
parents:
9407
diff
changeset
|
78 |
AIFactorySquirrel::~AIFactorySquirrel() |
286fcd8edc64
(svn r9208) [NoAI] -Add: keep track of which script added which class, so we know
truelight
parents:
9407
diff
changeset
|
79 |
{ |
286fcd8edc64
(svn r9208) [NoAI] -Add: keep track of which script added which class, so we know
truelight
parents:
9407
diff
changeset
|
80 |
free(this->script_name); |
286fcd8edc64
(svn r9208) [NoAI] -Add: keep track of which script added which class, so we know
truelight
parents:
9407
diff
changeset
|
81 |
} |
286fcd8edc64
(svn r9208) [NoAI] -Add: keep track of which script added which class, so we know
truelight
parents:
9407
diff
changeset
|
82 |
|
9404
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
83 |
void AIFactorySquirrel::CheckMethods(AIFactorySquirrel *fbase, SQInteger *res, const char *name) |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
84 |
{ |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
85 |
if (!fbase->engine->MethodExists(fbase->SQ_instance, name)) { |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
86 |
char error[1024]; |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
87 |
snprintf(error, sizeof(error), "Missing method '%s' for FactoryClass", name); |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
88 |
fbase->engine->ThrowError(error); |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
89 |
*res = SQ_ERROR; |
9373
d03563181088
(svn r9160) [NoAI] -Add: added AIController for Squirrel; all AIs, C++ or Squirrel, should extend this class
truelight
parents:
9368
diff
changeset
|
90 |
} |
d03563181088
(svn r9160) [NoAI] -Add: added AIController for Squirrel; all AIs, C++ or Squirrel, should extend this class
truelight
parents:
9368
diff
changeset
|
91 |
} |
d03563181088
(svn r9160) [NoAI] -Add: added AIController for Squirrel; all AIs, C++ or Squirrel, should extend this class
truelight
parents:
9368
diff
changeset
|
92 |
|
9404
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
93 |
SQInteger FSquirrel::FactoryConstructor(HSQUIRRELVM vm) |
9385
56803dfb2ff6
(svn r9176) [NoAI] -Add: added a RegisterAI() proc, that makes the AI known to the
truelight
parents:
9381
diff
changeset
|
94 |
{ |
9404
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
95 |
AIFactorySquirrel *fbase = new AIFactorySquirrel(); |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
96 |
SQInteger res = 0; |
9385
56803dfb2ff6
(svn r9176) [NoAI] -Add: added a RegisterAI() proc, that makes the AI known to the
truelight
parents:
9381
diff
changeset
|
97 |
|
9422
33efcc5f1b09
(svn r9223) [NoAI] -Change: moved squirrel/engine.cpp to squirrel.cpp in root
truelight
parents:
9413
diff
changeset
|
98 |
Squirrel::GetInstance(vm, &fbase->SQ_instance); |
33efcc5f1b09
(svn r9223) [NoAI] -Change: moved squirrel/engine.cpp to squirrel.cpp in root
truelight
parents:
9413
diff
changeset
|
99 |
fbase->engine = ((FSquirrel *)Squirrel::GetGlobalPointer(vm))->engine; |
9385
56803dfb2ff6
(svn r9176) [NoAI] -Add: added a RegisterAI() proc, that makes the AI known to the
truelight
parents:
9381
diff
changeset
|
100 |
|
9404
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
101 |
/* Check if all needed fields are there */ |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
102 |
fbase->CheckMethods(fbase, &res, "GetAuthor"); |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
103 |
fbase->CheckMethods(fbase, &res, "GetName"); |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
104 |
fbase->CheckMethods(fbase, &res, "GetDescription"); |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
105 |
fbase->CheckMethods(fbase, &res, "GetVersion"); |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
106 |
fbase->CheckMethods(fbase, &res, "GetDate"); |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
107 |
fbase->CheckMethods(fbase, &res, "CreateInstance"); |
9385
56803dfb2ff6
(svn r9176) [NoAI] -Add: added a RegisterAI() proc, that makes the AI known to the
truelight
parents:
9381
diff
changeset
|
108 |
|
9410
286fcd8edc64
(svn r9208) [NoAI] -Add: keep track of which script added which class, so we know
truelight
parents:
9407
diff
changeset
|
109 |
/* Abort if one method was missing */ |
286fcd8edc64
(svn r9208) [NoAI] -Add: keep track of which script added which class, so we know
truelight
parents:
9407
diff
changeset
|
110 |
if (res != 0) return res; |
9404
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
111 |
|
9410
286fcd8edc64
(svn r9208) [NoAI] -Add: keep track of which script added which class, so we know
truelight
parents:
9407
diff
changeset
|
112 |
fbase->RegisterSquirrel(); |
9422
33efcc5f1b09
(svn r9223) [NoAI] -Change: moved squirrel/engine.cpp to squirrel.cpp in root
truelight
parents:
9413
diff
changeset
|
113 |
fbase->script_name = strdup(((FSquirrel *)Squirrel::GetGlobalPointer(vm))->current_script); |
9410
286fcd8edc64
(svn r9208) [NoAI] -Add: keep track of which script added which class, so we know
truelight
parents:
9407
diff
changeset
|
114 |
|
286fcd8edc64
(svn r9208) [NoAI] -Add: keep track of which script added which class, so we know
truelight
parents:
9407
diff
changeset
|
115 |
return 0; |
9385
56803dfb2ff6
(svn r9176) [NoAI] -Add: added a RegisterAI() proc, that makes the AI known to the
truelight
parents:
9381
diff
changeset
|
116 |
} |
56803dfb2ff6
(svn r9176) [NoAI] -Add: added a RegisterAI() proc, that makes the AI known to the
truelight
parents:
9381
diff
changeset
|
117 |
|
9411
29c9dfcdb8e9
(svn r9209) [NoAI] -Add: added ScanDir(), which scans the 'ai' dir for main.nut scripts
truelight
parents:
9410
diff
changeset
|
118 |
extern bool FiosIsValidFile(const char *path, const struct dirent *ent, struct stat *sb); |
29c9dfcdb8e9
(svn r9209) [NoAI] -Add: added ScanDir(), which scans the 'ai' dir for main.nut scripts
truelight
parents:
9410
diff
changeset
|
119 |
extern bool FiosIsHiddenFile(const struct dirent *ent); |
29c9dfcdb8e9
(svn r9209) [NoAI] -Add: added ScanDir(), which scans the 'ai' dir for main.nut scripts
truelight
parents:
9410
diff
changeset
|
120 |
|
29c9dfcdb8e9
(svn r9209) [NoAI] -Add: added ScanDir(), which scans the 'ai' dir for main.nut scripts
truelight
parents:
9410
diff
changeset
|
121 |
|
29c9dfcdb8e9
(svn r9209) [NoAI] -Add: added ScanDir(), which scans the 'ai' dir for main.nut scripts
truelight
parents:
9410
diff
changeset
|
122 |
void FSquirrel::ScanDir(const char *dirname) |
29c9dfcdb8e9
(svn r9209) [NoAI] -Add: added ScanDir(), which scans the 'ai' dir for main.nut scripts
truelight
parents:
9410
diff
changeset
|
123 |
{ |
29c9dfcdb8e9
(svn r9209) [NoAI] -Add: added ScanDir(), which scans the 'ai' dir for main.nut scripts
truelight
parents:
9410
diff
changeset
|
124 |
struct stat sb; |
29c9dfcdb8e9
(svn r9209) [NoAI] -Add: added ScanDir(), which scans the 'ai' dir for main.nut scripts
truelight
parents:
9410
diff
changeset
|
125 |
struct dirent *dirent; |
29c9dfcdb8e9
(svn r9209) [NoAI] -Add: added ScanDir(), which scans the 'ai' dir for main.nut scripts
truelight
parents:
9410
diff
changeset
|
126 |
DIR *dir; |
29c9dfcdb8e9
(svn r9209) [NoAI] -Add: added ScanDir(), which scans the 'ai' dir for main.nut scripts
truelight
parents:
9410
diff
changeset
|
127 |
char d_name[256]; |
29c9dfcdb8e9
(svn r9209) [NoAI] -Add: added ScanDir(), which scans the 'ai' dir for main.nut scripts
truelight
parents:
9410
diff
changeset
|
128 |
char script_name[256]; |
29c9dfcdb8e9
(svn r9209) [NoAI] -Add: added ScanDir(), which scans the 'ai' dir for main.nut scripts
truelight
parents:
9410
diff
changeset
|
129 |
dir = ttd_opendir(dirname); |
29c9dfcdb8e9
(svn r9209) [NoAI] -Add: added ScanDir(), which scans the 'ai' dir for main.nut scripts
truelight
parents:
9410
diff
changeset
|
130 |
/* Dir not found, so do nothing */ |
29c9dfcdb8e9
(svn r9209) [NoAI] -Add: added ScanDir(), which scans the 'ai' dir for main.nut scripts
truelight
parents:
9410
diff
changeset
|
131 |
if (dir == NULL) return; |
29c9dfcdb8e9
(svn r9209) [NoAI] -Add: added ScanDir(), which scans the 'ai' dir for main.nut scripts
truelight
parents:
9410
diff
changeset
|
132 |
|
29c9dfcdb8e9
(svn r9209) [NoAI] -Add: added ScanDir(), which scans the 'ai' dir for main.nut scripts
truelight
parents:
9410
diff
changeset
|
133 |
/* Walk all dirs trying to find a dir in which 'main.nut' exists */ |
29c9dfcdb8e9
(svn r9209) [NoAI] -Add: added ScanDir(), which scans the 'ai' dir for main.nut scripts
truelight
parents:
9410
diff
changeset
|
134 |
while ((dirent = readdir(dir)) != NULL) { |
29c9dfcdb8e9
(svn r9209) [NoAI] -Add: added ScanDir(), which scans the 'ai' dir for main.nut scripts
truelight
parents:
9410
diff
changeset
|
135 |
ttd_strlcpy(d_name, FS2OTTD(dirent->d_name), sizeof(d_name)); |
29c9dfcdb8e9
(svn r9209) [NoAI] -Add: added ScanDir(), which scans the 'ai' dir for main.nut scripts
truelight
parents:
9410
diff
changeset
|
136 |
|
29c9dfcdb8e9
(svn r9209) [NoAI] -Add: added ScanDir(), which scans the 'ai' dir for main.nut scripts
truelight
parents:
9410
diff
changeset
|
137 |
/* Found file must be directory, but not '.' or '..' */ |
29c9dfcdb8e9
(svn r9209) [NoAI] -Add: added ScanDir(), which scans the 'ai' dir for main.nut scripts
truelight
parents:
9410
diff
changeset
|
138 |
if (FiosIsValidFile("ai", dirent, &sb) && (sb.st_mode & S_IFDIR) && |
29c9dfcdb8e9
(svn r9209) [NoAI] -Add: added ScanDir(), which scans the 'ai' dir for main.nut scripts
truelight
parents:
9410
diff
changeset
|
139 |
(!FiosIsHiddenFile(dirent) || strncasecmp(d_name, PERSONAL_DIR, strlen(d_name)) == 0) && |
29c9dfcdb8e9
(svn r9209) [NoAI] -Add: added ScanDir(), which scans the 'ai' dir for main.nut scripts
truelight
parents:
9410
diff
changeset
|
140 |
strcmp(d_name, ".") != 0 && strcmp(d_name, "..") != 0) { |
29c9dfcdb8e9
(svn r9209) [NoAI] -Add: added ScanDir(), which scans the 'ai' dir for main.nut scripts
truelight
parents:
9410
diff
changeset
|
141 |
/* Create the full-length script-name */ |
29c9dfcdb8e9
(svn r9209) [NoAI] -Add: added ScanDir(), which scans the 'ai' dir for main.nut scripts
truelight
parents:
9410
diff
changeset
|
142 |
strcpy(script_name, dirname); |
29c9dfcdb8e9
(svn r9209) [NoAI] -Add: added ScanDir(), which scans the 'ai' dir for main.nut scripts
truelight
parents:
9410
diff
changeset
|
143 |
strcat(script_name, PATHSEP); |
29c9dfcdb8e9
(svn r9209) [NoAI] -Add: added ScanDir(), which scans the 'ai' dir for main.nut scripts
truelight
parents:
9410
diff
changeset
|
144 |
strcat(script_name, d_name); |
29c9dfcdb8e9
(svn r9209) [NoAI] -Add: added ScanDir(), which scans the 'ai' dir for main.nut scripts
truelight
parents:
9410
diff
changeset
|
145 |
strcat(script_name, PATHSEP); |
29c9dfcdb8e9
(svn r9209) [NoAI] -Add: added ScanDir(), which scans the 'ai' dir for main.nut scripts
truelight
parents:
9410
diff
changeset
|
146 |
strcat(script_name, "main.nut"); |
29c9dfcdb8e9
(svn r9209) [NoAI] -Add: added ScanDir(), which scans the 'ai' dir for main.nut scripts
truelight
parents:
9410
diff
changeset
|
147 |
/* If it exists, load it up */ |
29c9dfcdb8e9
(svn r9209) [NoAI] -Add: added ScanDir(), which scans the 'ai' dir for main.nut scripts
truelight
parents:
9410
diff
changeset
|
148 |
if (FileExists(script_name)) { |
29c9dfcdb8e9
(svn r9209) [NoAI] -Add: added ScanDir(), which scans the 'ai' dir for main.nut scripts
truelight
parents:
9410
diff
changeset
|
149 |
DEBUG(ai, 6, "[squirrel] Loading script '%s' for AI handling", script_name); |
29c9dfcdb8e9
(svn r9209) [NoAI] -Add: added ScanDir(), which scans the 'ai' dir for main.nut scripts
truelight
parents:
9410
diff
changeset
|
150 |
this->current_script = script_name; |
29c9dfcdb8e9
(svn r9209) [NoAI] -Add: added ScanDir(), which scans the 'ai' dir for main.nut scripts
truelight
parents:
9410
diff
changeset
|
151 |
this->engine->LoadScript(this->current_script); |
29c9dfcdb8e9
(svn r9209) [NoAI] -Add: added ScanDir(), which scans the 'ai' dir for main.nut scripts
truelight
parents:
9410
diff
changeset
|
152 |
} |
29c9dfcdb8e9
(svn r9209) [NoAI] -Add: added ScanDir(), which scans the 'ai' dir for main.nut scripts
truelight
parents:
9410
diff
changeset
|
153 |
} |
29c9dfcdb8e9
(svn r9209) [NoAI] -Add: added ScanDir(), which scans the 'ai' dir for main.nut scripts
truelight
parents:
9410
diff
changeset
|
154 |
} |
29c9dfcdb8e9
(svn r9209) [NoAI] -Add: added ScanDir(), which scans the 'ai' dir for main.nut scripts
truelight
parents:
9410
diff
changeset
|
155 |
closedir(dir); |
29c9dfcdb8e9
(svn r9209) [NoAI] -Add: added ScanDir(), which scans the 'ai' dir for main.nut scripts
truelight
parents:
9410
diff
changeset
|
156 |
} |
29c9dfcdb8e9
(svn r9209) [NoAI] -Add: added ScanDir(), which scans the 'ai' dir for main.nut scripts
truelight
parents:
9410
diff
changeset
|
157 |
|
9404
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
158 |
void FSquirrel::Initializer() |
9373
d03563181088
(svn r9160) [NoAI] -Add: added AIController for Squirrel; all AIs, C++ or Squirrel, should extend this class
truelight
parents:
9368
diff
changeset
|
159 |
{ |
9422
33efcc5f1b09
(svn r9223) [NoAI] -Change: moved squirrel/engine.cpp to squirrel.cpp in root
truelight
parents:
9413
diff
changeset
|
160 |
this->engine = new Squirrel(); |
9373
d03563181088
(svn r9160) [NoAI] -Add: added AIController for Squirrel; all AIs, C++ or Squirrel, should extend this class
truelight
parents:
9368
diff
changeset
|
161 |
|
9404
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
162 |
/* Create the AIFactory class, and bind the constructor */ |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
163 |
this->engine->AddClassBegin("AIFactory"); |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
164 |
this->engine->AddMethod("constructor", &FSquirrel::FactoryConstructor, 1, "x"); |
9395
4337e022594c
(svn r9187) [NoAI] -Change: renamed SquirrelCore to SquirrelEngine, as it is more
truelight
parents:
9393
diff
changeset
|
165 |
this->engine->AddClassEnd(); |
9373
d03563181088
(svn r9160) [NoAI] -Add: added AIController for Squirrel; all AIs, C++ or Squirrel, should extend this class
truelight
parents:
9368
diff
changeset
|
166 |
|
9404
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
167 |
/* Set a dummy AIController, so script can load */ |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
168 |
this->engine->AddClassBegin("AIController"); |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
169 |
this->engine->AddClassEnd(); |
9410
286fcd8edc64
(svn r9208) [NoAI] -Add: keep track of which script added which class, so we know
truelight
parents:
9407
diff
changeset
|
170 |
/* Mark this class as global pointer */ |
286fcd8edc64
(svn r9208) [NoAI] -Add: keep track of which script added which class, so we know
truelight
parents:
9407
diff
changeset
|
171 |
this->engine->SetGlobalPointer(this); |
9385
56803dfb2ff6
(svn r9176) [NoAI] -Add: added a RegisterAI() proc, that makes the AI known to the
truelight
parents:
9381
diff
changeset
|
172 |
|
9411
29c9dfcdb8e9
(svn r9209) [NoAI] -Add: added ScanDir(), which scans the 'ai' dir for main.nut scripts
truelight
parents:
9410
diff
changeset
|
173 |
/* Scan the AI dir for scripts */ |
29c9dfcdb8e9
(svn r9209) [NoAI] -Add: added ScanDir(), which scans the 'ai' dir for main.nut scripts
truelight
parents:
9410
diff
changeset
|
174 |
this->ScanDir("ai"); |
9404
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
175 |
} |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
176 |
|
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
177 |
FSquirrel::~FSquirrel() |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
178 |
{ |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
179 |
delete this->engine; |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
180 |
} |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
181 |
|
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
182 |
AIController *AIFactorySquirrel::CreateInstance() |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
183 |
{ |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
184 |
const char *class_name = this->engine->CallStringMethod(this->SQ_instance, "CreateInstance"); |
9410
286fcd8edc64
(svn r9208) [NoAI] -Add: keep track of which script added which class, so we know
truelight
parents:
9407
diff
changeset
|
185 |
AIControllerSquirrel *controller = new AIControllerSquirrel(this->script_name, class_name); |
9404
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
186 |
|
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
187 |
return controller; |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
188 |
} |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
189 |
|
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
190 |
void AIControllerSquirrel::RegisterClasses() |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
191 |
{ |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
192 |
/* Ignore AIFactory if we are really starting an AI */ |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
193 |
this->engine->AddClassBegin("AIFactory"); |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
194 |
this->engine->AddClassEnd(); |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
195 |
|
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
196 |
/* Register all classes */ |
9487
0575126e0267
(svn r9356) [NoAI] -Add: add abs() function to global scope in SQ. This means we now have an own squirrel_std class which registers such functions. (on request by Zuu)
truelight
parents:
9480
diff
changeset
|
197 |
squirrel_register_std(this->engine); |
9593
012f29f59906
(svn r9626) [NoAI] -Change: renamed AIList to AIAbstractList and hide 'AddItem' and 'RemoveItem'
truelight
parents:
9592
diff
changeset
|
198 |
SQAIAbstractListRegister(this->engine); |
9528
b2cc6f31363c
(svn r9448) [NoAI] -Codechange: extend the squirrel_export script to update ai_squirrel too.
rubidium
parents:
9515
diff
changeset
|
199 |
SQAIAccountingRegister(this->engine); |
9407
39201b99bd91
(svn r9204) [NoAI] -Fix r9202: various glitches in Squirrel script/loader
truelight
parents:
9404
diff
changeset
|
200 |
SQAIBaseRegister(this->engine); |
39201b99bd91
(svn r9204) [NoAI] -Fix r9202: various glitches in Squirrel script/loader
truelight
parents:
9404
diff
changeset
|
201 |
SQAICargoRegister(this->engine); |
39201b99bd91
(svn r9204) [NoAI] -Fix r9202: various glitches in Squirrel script/loader
truelight
parents:
9404
diff
changeset
|
202 |
SQAICompanyRegister(this->engine); |
9404
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
203 |
SQAIControllerRegister(this->engine); |
9450
d675836e865c
(svn r9278) [NoAI] -Add: added AISettings which adds the function to control the Delay-value on DoCommands
truelight
parents:
9444
diff
changeset
|
204 |
SQAIExecModeRegister(this->engine); |
9407
39201b99bd91
(svn r9204) [NoAI] -Fix r9202: various glitches in Squirrel script/loader
truelight
parents:
9404
diff
changeset
|
205 |
SQAIIndustryRegister(this->engine); |
9579
632263c0cf5a
(svn r9603) [NoAI] -Add: added AIList(), a simple list in which you can add item/value pairs. You can sort them, walk them, and valuate them
truelight
parents:
9528
diff
changeset
|
206 |
SQAIListRegister(this->engine); |
9396
a05857491d2d
(svn r9188) [NoAI] -Cleanup: cleaned up DefSQClass a bit by using the SquirrelEngine
truelight
parents:
9395
diff
changeset
|
207 |
SQAIMapRegister(this->engine); |
9501
15689f09d1f5
(svn r9375) [NoAI] -Fix r9374: make AIOrder() work for SQ (enums not yet)
truelight
parents:
9487
diff
changeset
|
208 |
SQAIOrderRegister(this->engine); |
9480
d071f885f918
(svn r9329) [NoAI] -Fix: add AIRoad() for Squirrel
truelight
parents:
9474
diff
changeset
|
209 |
SQAIRoadRegister(this->engine); |
9528
b2cc6f31363c
(svn r9448) [NoAI] -Codechange: extend the squirrel_export script to update ai_squirrel too.
rubidium
parents:
9515
diff
changeset
|
210 |
SQAISettingsRegister(this->engine); |
9511 | 211 |
SQAISignRegister(this->engine); |
9450
d675836e865c
(svn r9278) [NoAI] -Add: added AISettings which adds the function to control the Delay-value on DoCommands
truelight
parents:
9444
diff
changeset
|
212 |
SQAITestModeRegister(this->engine); |
9592
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
9589
diff
changeset
|
213 |
SQAITileListBuildableRegister(this->engine); |
9609
f0dbf5850145
(svn r9767) [NoAI] -Add: add support for params in the constructor (via C++ templates)
truelight
parents:
9603
diff
changeset
|
214 |
SQAITileListCargoAcceptanceRegister(this->engine); |
9603
49323bf80ebd
(svn r9747) [NoAI] -Add: added AITileListRoadTile and AITileListNeighbourRoad as Valuators for AITileList
truelight
parents:
9597
diff
changeset
|
215 |
SQAITileListNeighbourRoadRegister(this->engine); |
9592
c5c09cfde63a
(svn r9625) [NoAI] -Add: added AITileList() and one valuator for now: AITileListBuildable()
truelight
parents:
9589
diff
changeset
|
216 |
SQAITileListRegister(this->engine); |
9603
49323bf80ebd
(svn r9747) [NoAI] -Add: added AITileListRoadTile and AITileListNeighbourRoad as Valuators for AITileList
truelight
parents:
9597
diff
changeset
|
217 |
SQAITileListRoadTileRegister(this->engine); |
9611
5cf58c6571b7
(svn r9776) [NoAI] -Add: added AITileListSlope as valuator to see if tiles are flat or not
truelight
parents:
9609
diff
changeset
|
218 |
SQAITileListSlopeRegister(this->engine); |
9589
2fbda08db406
(svn r9622) [NoAI] -Add: added AITownList, which lists all towns (and which you can iterate)
truelight
parents:
9579
diff
changeset
|
219 |
SQAITownListGetLocationRegister(this->engine); |
2fbda08db406
(svn r9622) [NoAI] -Add: added AITownList, which lists all towns (and which you can iterate)
truelight
parents:
9579
diff
changeset
|
220 |
SQAITownListGetPopulationRegister(this->engine); |
2fbda08db406
(svn r9622) [NoAI] -Add: added AITownList, which lists all towns (and which you can iterate)
truelight
parents:
9579
diff
changeset
|
221 |
SQAITownListRegister(this->engine); |
9396
a05857491d2d
(svn r9188) [NoAI] -Cleanup: cleaned up DefSQClass a bit by using the SquirrelEngine
truelight
parents:
9395
diff
changeset
|
222 |
SQAITownRegister(this->engine); |
9474
2b53e154a8d5
(svn r9319) [NoAI] -Add: added AITransactionMode, which allows you to record commands and execute it later on.
truelight
parents:
9450
diff
changeset
|
223 |
SQAITransactionModeRegister(this->engine); |
9515
0d70ff51a6e5
(svn r9426) [NoAI] -Fix: register AIVehicle() for SQ (Zuu)
truelight
parents:
9511
diff
changeset
|
224 |
SQAIVehicleRegister(this->engine); |
9387
4255a0a2d272
(svn r9179) [NoAI] -Add: added templates that makes adding classes to squirrel very easy
truelight
parents:
9386
diff
changeset
|
225 |
|
9404
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
226 |
this->engine->SetGlobalPointer(this->engine); |
9373
d03563181088
(svn r9160) [NoAI] -Add: added AIController for Squirrel; all AIs, C++ or Squirrel, should extend this class
truelight
parents:
9368
diff
changeset
|
227 |
} |
d03563181088
(svn r9160) [NoAI] -Add: added AIController for Squirrel; all AIs, C++ or Squirrel, should extend this class
truelight
parents:
9368
diff
changeset
|
228 |
|
9404
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
229 |
AIControllerSquirrel::AIControllerSquirrel(const char *script, const char *class_name) |
9365
c3d08e0b1083
(svn r9151) [NoAI] -Add: added squirrel module that loads squirrel scripts and
truelight
parents:
diff
changeset
|
230 |
{ |
9422
33efcc5f1b09
(svn r9223) [NoAI] -Change: moved squirrel/engine.cpp to squirrel.cpp in root
truelight
parents:
9413
diff
changeset
|
231 |
this->engine = new Squirrel(); |
9373
d03563181088
(svn r9160) [NoAI] -Add: added AIController for Squirrel; all AIs, C++ or Squirrel, should extend this class
truelight
parents:
9368
diff
changeset
|
232 |
this->RegisterClasses(); |
9395
4337e022594c
(svn r9187) [NoAI] -Change: renamed SquirrelCore to SquirrelEngine, as it is more
truelight
parents:
9393
diff
changeset
|
233 |
this->engine->LoadScript(script); |
9404
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
234 |
/* Create the main-class */ |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
235 |
this->engine->CreateClassInstance(class_name, this, &this->SQ_instance); |
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
236 |
this->engine->CallMethod(this->SQ_instance, "constructor"); |
9365
c3d08e0b1083
(svn r9151) [NoAI] -Add: added squirrel module that loads squirrel scripts and
truelight
parents:
diff
changeset
|
237 |
} |
c3d08e0b1083
(svn r9151) [NoAI] -Add: added squirrel module that loads squirrel scripts and
truelight
parents:
diff
changeset
|
238 |
|
9404
ef9e171617a3
(svn r9201) [NoAI] -Change: make adding a default-constructor for DefSQClass optional
truelight
parents:
9396
diff
changeset
|
239 |
AIControllerSquirrel::~AIControllerSquirrel() |
9365
c3d08e0b1083
(svn r9151) [NoAI] -Add: added squirrel module that loads squirrel scripts and
truelight
parents:
diff
changeset
|
240 |
{ |
9395
4337e022594c
(svn r9187) [NoAI] -Change: renamed SquirrelCore to SquirrelEngine, as it is more
truelight
parents:
9393
diff
changeset
|
241 |
delete this->engine; |
9365
c3d08e0b1083
(svn r9151) [NoAI] -Add: added squirrel module that loads squirrel scripts and
truelight
parents:
diff
changeset
|
242 |
} |
c3d08e0b1083
(svn r9151) [NoAI] -Add: added squirrel module that loads squirrel scripts and
truelight
parents:
diff
changeset
|
243 |
|
9441
03da911c8d5f
(svn r9255) [NoAI] -Add: each AI now runs in a seperate thread. The main thread is suspended if any AI thread is running, only one AI thread runs at the time.
truelight
parents:
9438
diff
changeset
|
244 |
/* virtual */ void AIControllerSquirrel::Start() |
9365
c3d08e0b1083
(svn r9151) [NoAI] -Add: added squirrel module that loads squirrel scripts and
truelight
parents:
diff
changeset
|
245 |
{ |
9441
03da911c8d5f
(svn r9255) [NoAI] -Add: each AI now runs in a seperate thread. The main thread is suspended if any AI thread is running, only one AI thread runs at the time.
truelight
parents:
9438
diff
changeset
|
246 |
this->engine->CallMethod(this->SQ_instance, "Start"); |
9365
c3d08e0b1083
(svn r9151) [NoAI] -Add: added squirrel module that loads squirrel scripts and
truelight
parents:
diff
changeset
|
247 |
} |
9444
fd27df7ca2a0
(svn r9260) [NoAI] -Codechange: do the AI threading properly using a mutex and condition signalling.
rubidium
parents:
9441
diff
changeset
|
248 |
|
fd27df7ca2a0
(svn r9260) [NoAI] -Codechange: do the AI threading properly using a mutex and condition signalling.
rubidium
parents:
9441
diff
changeset
|
249 |
/* virtual */ void AIControllerSquirrel::Stop() |
fd27df7ca2a0
(svn r9260) [NoAI] -Codechange: do the AI threading properly using a mutex and condition signalling.
rubidium
parents:
9441
diff
changeset
|
250 |
{ |
fd27df7ca2a0
(svn r9260) [NoAI] -Codechange: do the AI threading properly using a mutex and condition signalling.
rubidium
parents:
9441
diff
changeset
|
251 |
this->engine->CallMethod(this->SQ_instance, "Stop"); |
fd27df7ca2a0
(svn r9260) [NoAI] -Codechange: do the AI threading properly using a mutex and condition signalling.
rubidium
parents:
9441
diff
changeset
|
252 |
} |