Оглавление

Сборщик скриптов

Путь: /sdk/add_on/scriptbuilder/

Класс, помогающий загружать и подготавливать скрипты, с препроцессором, поддерживающим дефайны, инклюды и метаданные.

Если вы хотите отключить обработку метаданных - объявите AS_PROCESS_METADATA 0 в заголовочном файле.

Public C++ interface

class CScriptBuilder
{
public:
  // Load and build a script file from disk
  int BuildScriptFromFile(asIScriptEngine *engine, 
                          const char      *module, 
                          const char      *filename);

  // Build a script file from a memory buffer
  int BuildScriptFromMemory(asIScriptEngine *engine, 
                            const char      *module, 
                            const char      *script, 
                            const char      *sectionname = "");

  // Add a pre-processor define for conditional compilation
  void DefineWord(const char *word);

  // Get metadata declared for class types and interfaces
  const char *GetMetadataStringForType(int typeId);

  // Get metadata declared for functions
  const char *GetMetadataStringForFunc(int funcId);

  // Get metadata declared for global variables
  const char *GetMetadataStringForVar(int varIdx);
};

Директива Include

Пример скрипта:
#include "commonfuncs.as"
void main()
{
  // Call a function from the included file
  CommonFunc();
}

Условия

Сборщик поддерживает директивы условий #if/#endif. ПриСборщик поддерживает директивы условий #if/#endif. Дефайны объявляются в основном коде с помощью DefineWord().

Это особенно полезно когда один скрипт используется несколькими приложениями, например клиент\сервером, или существует несколько целевых платформ.

Пример скрипта:

class CObject
{
  void Process()
  {
  #if SERVER
      // Do some server specific processing
  #endif
  #if CLIENT
      // Do some client specific processing
  #endif
     // Do some common processing
  }
}

Метаданные

Метаданные могут быть добавлены перед скриптовыми классом\функцией\глобальными декларациями.

Метаданные должны быть в скобках []. После сборки скрипта приложение может получить метаданные в виде строки и интерпретировать их по своему усмотрению.

Пример скрипта с метаданными:

[factory func = CreateOgre, editable: myPosition, editable: myStrength [10, 100]]
class COgre
{
   vector3 myPosition;
   int     myStrength;
}
[factory]
COgre @CreateOgre()
{
  return @COgre();
}

Пример использования:

CScriptBuilder builder;
  // Находим глобальную переменную, которая была помечена как изменяемая
  asIScriptModule *mod = engine->GetModule("my module");
  int count = mod->GetGlobalVarCount();
  for( int n = 0; n < count; n++ )
  {
    string metadata = builder.GetMetadataStringForVar(n);
    if( metadata == "editable" )
    {
      // Показываем глобальную переменную
      ...
    }
  }
}

Перевод - arroy.one@gmail.com. При копировании материалов указывайте ссылку на источник.