Time for action – storing the script
The first task is to read the script, extract the needed functions from it, and store them in a safe place. Then, load the project for the game and add a new class with the following code:
class AIScript { public: QScriptProgram read(const QString &fileName); bool evaluate(const QScriptProgram &program, QScriptEngine *engine); QScriptValue initFunction; QScriptValue heartbeatFunction; QScriptValue defendFunction; };
The reading method can have the same content as the original readScriptFromFile
method. The evaluate method looks as follows:
bool AIScript::evaluate(const QScriptProgram &program, QScriptEngine *engine) { QScriptContext *context = engine->pushContext(); QScriptValue activationObject; QScriptValue result = engine->evaluate(program); activationObject = context->activationObject(); if(!result.isError()) { initFunction = activationObject.property("init"); heartbeatFunction = activationObject...