Estructura de símbolos

Home > Support > Technical questions > DCS: World Scripting Engine > Parte 1 > Estructura de símbolos

Estructura de símbolos

Estructura de símbolos

El simulador exporta algunas funciones y constantes al Mission Scripting Environment. Todos los símbolos se agrupan en tablas.

Emulación de clases

El simulador tiene muchas entidades que se comportan como objetos y clases en términos de lenguajes orientados a objetos. Para facilitar la manipulación de dichos objetos, se emularon las relaciones "clase-objeto" en el entorno Lua con metatablas. Este marco se encuentra en ./Scripts/Common/LuaClass.Lua.

“Class" de Lua es una tabla que tiene la siguiente estructura:

 Class = { 
   static = { 
     staticFunc1 = function(...) 
     ... 
     end, 
   ... 
     staticFuncN = function(...) 
     ... 
     end 
   }, 
   member = { 
     memberFunc1 = function(objectID, ...) 
     ... 
     end, 
   ... 
     memberFuncM = function(objectID, ...) 
     ... 
     end 
   },
   className_ = "ClassName", 
   parentClass_ = Class 
 }
 

static

  • Tabla con funciones "static". Estas funciones no tienen ningún id de objeto como parámetro.

member

  • Tabla con funciones "member". Estas funciones siempre tienen el id del objeto como primer parámetro.

className_

  • String con el nombre de la clase.

parentClass_

  • Referencia a la tabla de clases padre.

"Objeto" de Lua es una tabla que tiene la siguiente estructura:
 ObjectName = { 
   id_ = ... 
 }

id_

Object identifier. Su tipo depende de la clase. Las funciones "member" de "clases" de Lua tienen este identificador como primer argumento.
Los objetos de la misma clase tienen establecida la misma metatabla: la tabla de clases.
El marco permite la herencia simple, pero no permite la herencia múltiple. La tabla de la clase base debe ser el valor de la tabla del campo parentClass_ de la clase derivada.
La tabla LuaClass debe ser asignada como metatabla a todas las "clases" de Lua. LuaClass hace todo el trabajo cuando el usuario utiliza "clases" y "objetos"  de Lua. El metamétodo LuaClass.__index es una función que busca la función que el usuario quiere llamar en la "clase" de Lua a la que pertenece el "objeto" de Lua o en las "clases" base y llama a la función.
LuaClass también tiene varias funciones útiles que pueden ser llamadas desde cualquier "clase" de Lua.
 function LuaClass.createFor(class, id_) 

crea y devuelve "objeto" de Lua que pertenece a la "clase" de Lua y tiene el identificador id_. No se crea ninguna entidad nueva. La función sólo crea e inicializa la tabla "objeto" de Lua para la entidad existente.

 function LuaClass.create(class, ...) 

utiliza la función class.static.create para crear una nueva entidad y luego utiliza LuaClass.createFor para crear la clase "objeto" de Lua para la entidad recién creada.

 function LuaClass.cast(class, object) 

"Cast" o convierte el objeto en un objeto de otra clase. El "downcast" puede ser inseguro si el usuario convierte el objeto a una clase a la que el objeto no pertenece realmente.
 function class(tbl, parent) 

declara la tabla tbl como una "clase" de Lua y como una clase derivada de parent si parent no es nulo.

Cómo funciona

El simulador exporta algunas tablas con funciones y constantes al entorno de Mission Scripting y luego ejecuta el script ./Scripts/MissionScripting.lua para declarar estas tablas como "clases" de Lua.
Sin embargo puedes declarar tus propias clases. Para hacerlo debes:
  • Crear una tabla y completarla de la misma manera que se muestra aquí.
  • Declarar la tabla como una clase (y si quieres como una clase derivada). Para ello llama a la función class.

SIGUENOS