El formato de objeto .animated

■ Contenidos

■ 1. Vista general

El formato .ANIMATED de objeto es un formato contenido habilitandote de referir otros objetos (B3D/CSV/X) y de aplicar animación en ellos. Esto también permite agrupar otros objetos (incluyendo otros objetos .ANIMATED) sin animarlos.

Los objetos animados también pueden ser usados en rutas CSV/RW (a menos que este explicita mente deshabilitado por algunos comandos), así como los objetos externos del tren por extensions.cfg, y así como la cabina 3D por el archivo panel.animated.

● Fundamento

La animación es realizada por las siguientes directrices:

If an animated object is used within a group, any distance based functions such as CameraDistance refer to the relative transformed center of the child object, not that of the parent object.

● Una pequeña formalidad

El archivo es un texto plano codificado en cualquier arbitrario [codificación] (/es_mx/information/encodings.html), Sin embargo, UTF-8 con un byte de orden marca es la opción preferida. El modelo de análisis para números es Strict. El nombre de archivo es arbitrario, pero debe tener la extensión .animated. El archivo es interpretado por cada linea, desde arriba hasta abajo.

■ 2. Secciones

● La sección [Include]

Puedes usar la sección [Include] solo para incluir otros objetos, pero sin animarlos. Esto te permite de usar el archivo de objetos ANIMADOS como un contenedor de grupo de otros objetos. Puede haber cualquier cantidad de secciones [Include] dentro del archivo.

[Include]

Esto inicia la sección.

NombreArchivo0
NombreArchivo1
NombreArchivo2

Defina una serie de objetos B3D/CSV/X/ANIMATED que deben ser incluidas como son.

Position = X, Y, Z

Esto defina la posición de los objetos, basicamente te permite de separarlos con respecto al resto de los archivos de objeto ANIMADOS.


● La sección [Object]

Puedes usar la sección [Object] para crear una sola animación. Esto requiere de configurar un estado a través de los parámetros de Estados, y de usar cualquier combinación de funciones que desees, lo cual provee control sobre la animación. Puede haber cualquier cantidad de secciones [Object] dentro del archivo.

[Object]

Esto inicia la sección.

Position = X, Y, Z

Defina la posición del objeto. Esto básicamente corresponde a un comando TranslateALL en el archivo CSV/B3D respectivamente, pero es realizado después de que cualquiera de las funciones es realizada. Por ejemplo, si deseas usar rotación, entonces ten en consideración que la rotación es efectuada sobre el origen (0,0,0). El comando Posición permite de re-posicionar el objeto después de que la rotación es realizada.

States = Archivo0, Archivo1, …, Archivon-1

Carga n objetos de extensión CSV/B3D/X. Por favor tenga en cuenta que el primer archivo indicado posee estado de indice 0. Usa múltiples archivos solo si deseas usar el cambio de estados.

StateFunction = Formula

Esto defina la función para cambiar de estado. El resultado de la fórmula Formula es redondeado al entero mas cercano. Si el entero esta entre 0 y n-1, donde n es el numero de estados definido por los Estados, el estado respectivo es mostrado , de otra manera, ningún objeto es mostrado. Puedes hacer uso del ultimo si deseas que sea un objeto de encendido/apagado con un solo estado.

TranslateXDirection = X, Y, Z
TranslateYDirection = X, Y, Z
TranslateZDirection = X, Y, Z

Esto defina la dirección para la función TranslateXFunction, TranslateYFunction y TranslateZFunction, respectivamente. Las direcciones predeterminadas son:

TranslateXDirection = 1, 0, 0
TranslateYDirection = 0, 1, 0
TranslateZDirection = 0, 0, 1

Esto significa que la función TranslateXFunction se moverá hacia la derecha predeterminado, TranslateYFunction hacia arriba y TranslateZFunction hacia adelante, también es por eso que TranslateXFunction y así sucesivamente llevan sus nombres. Si usted define otras direcciones, entonces simplemente piensa que las tres funciones y sus direcciones asociadas como tres maneras independientes para si mover el objeto en esa dirección

TranslateXFunction = Formula
TranslateYFunction = Formula
TranslateZFunction = Formula

Esto defina la función que moverá el objeto en la dirección respectiva. La Formula necesita retornar la cantidad de metros a mover desde la posición inicial. Los parámetros X, Y y Z en la respectiva dirección son multiplicados por el resultado de la Formula, así que puedes por ejemplo multiplicar la formula por 2 o la dirección por 2 si es que deseas doblar la velocidad del movimiento

RotateXDirection = X, Y, Z
RotateYDirection = X, Y, Z
RotateZDirection = X, Y, Z

Esto defina la dirección para la función RotateXFunction, RotateYFunction y RotateZFunction, respectivamente. Las direcciones predeterminadas son:

RotateXDirection = 1, 0, 0
RotateYDirection = 0, 1, 0
RotateZDirection = 0, 0, 1

Esto significa que la función RotateXFunction rotará sobre el eje X predeterminadamente, RotateYFunction sobre el eje Y, y RotateZFunction sobre el eje Z, también es por eso que RotateXFunction y asi sucesivamente llevan sus nombres. Si usted define otras direcciones, entonces simplemente piense de que estas tres funciones y sus direcciones asociadas como tres maneras independientes para asi rotar el objeto.

RotateXFunction = Formula
RotateYFunction = Formula
RotateZFunction = Formula

Esto defina la función para rotar a lo largo de la dirección respectiva en orden contra-reloj. La Formula necesita regresar el ángulo por el cual rotar en radianes. El orden que estas rotaciones son ejecutadas es: RotateXFunction (primero), RotateYFunction (después) and RotateZFunction (último). Si usted usa más de una función de rotación al momento, ten en mente este orden. De ser necesario, reescribe las direcciones predeterminadas para las rotaciones si necesitas un orden distinto.

RotateXDamping = NaturalFrequency, DampingRatio
RotateYDamping = NaturalFrequency, DampingRatio
RotateZDamping = NaturalFrequency, DampingRatio

Esto defina la amortiguación para la función correspondiente. Si no es usado, la amortiguación no será ejecutada. NaturalFrequency es un valor no negativo correspondiente a la frecuencia angular del supuesta oscilación sin amortiguación en radianes por segundo. DampingRatio es un valor no negativo indicando el tipo de amortiguación. Valores entre 0 y 1 representa baja amortiguación, 1 representa amortiguación crítica, y valores superiores a 1 representan sobre-amortiguación

TextureShiftXDirection = X, Y
TextureShiftYDirection = X, Y

Esto defina las direcciones para la función TextureShiftXFunction yTextureShiftYFunction, respectivamente. Las direcciones por defecto son:

TextureShiftXDirection = 1, 0
TextureShiftYDirection = 0, 1

Esto significa que TextureShiftXFunction cambiará la textura a la derecha por defecto, y TextureShiftYFunction hacia abajo, también es por eso que TextureShiftXFunction y así sucesivamente llevan sus nombres. Si usted defina otras direcciones, entonces simplemente piense que estas dos funciones y sus direcciones asociadas como dos maneras independientes de cambiar las texturas en los objetos.

TextureShiftXFunction = Formula
TextureShiftYFunction = Formula

Esto defina las funciones para cambiar las texturas en la dirección respectiva. La textura es cambiada por el valor retornado de Formula en coordenadas de textura. La parte entra del resultado es ignorada, y la parte fraccional de 0.5 representa mover la textura a la mitad. El comando SetTextureCoordinate en el objeto defina las coordenadas, que son después agregadas en el resultado de estas formulas.

TrackFollowerFunction = Formula

Esto defina la función el cual mueve un objecto a lo largo de la vía de Rail 0. La Formula debe retornar la distancia en metros, para así el objeto sea movido, respetando las curvas y los cambios de altura de Rail 0

TextureOverride = Valor

Valor = Timetable: Todas las caras mostrarán la imagen del itinerario configuradas por las rutas CSV/RW.
Valor = None: Las texturas originales se mostrarán en las caras (conducta predeterminada).

RefreshRate = Segundos

Esto defina la mínima cantidad de tiempo que necesita transcurrir para que la función sea actualizada. Un valor de 0 obliga a la función a ser actualizada cada cuadro por segundo. Por favor tenga en cuenta que los objetos fuera del rango visual puedan ser actualizados menos frecuentemente sin importar este parámetro. Usa RefreshRate cuando no necesites una animación suave (en orden de optimizar los recursos), o cuando deliberadamente quieras que el objeto este actualizado con un intervalo personalizado.


● La sección [Sound]

Puedes usar la sección [Sound] para agregar efectos de sonidos independientes a objetos animados.
[Sound]

Esto inicia la sección

FileName = File

Esto añade el efecto de sonido a ser reproducido.

Position = X, Y, Z

Esto define la posición del sonido, relativo al centro del archivo animated.

Volume = Valor

Esto define el volumen inicial del sonido a la posición de origen. A valor de 1.0 representa el volumen nominal sin cambio del archivo de sonido.

Pitch = Valor

Esto define la velocidad inicial del sonido a la posición de origen. A valor de 1.0 representa el velocidad nominal sin cambio de grado de el archivo de sonido.

Radius= Valor

Esto defina el radio en metros desde el origen al que el efecto de sonido se reproduce a máximo volumen. El valor predeterminado es 30.

VolumeFunction = Formula

Esto define la función que controla el volumen de el sonido. Formula debe retornar un numero representando el volumen deseado, donde 1.0 representa el volumen nominal sin cambio de el sonido del archivo.

PitchFunction = Formula

Esto define la función que controla la velocidad de el sonido. Formula debe retornar un numero representando el volumen deseado, donde 1.0 representa la velocidad nominal sin cambio de el sonido del archivo.

TrackFollowerFunction = Formula

Esto defina la función el cual mueve el origen del sonido a lo largo de la vía de Rail 0. La Formula debe retornar la distancia en metros, para así el objeto sea movido, respetando las curvas y los cambios de altura de Rail 0.


● La sección [StateChangeSound]

Puedes usar la sección [StateChangeSound] para adjuntar efectos de sonidos a la sección de [Object] precedente.
[StateChangeSound]

Esto inicia la sección - Seguido inmediatamente de la sección [Object].

FileName = Archivo

Esto carga el efecto de sonido para ser reproducido en todos los estados de cambio. Otra alternativa como lo es FileNames puede ser usada, el cual se describe a continuación:

FileNames = Archivo0, Archivo1, …, Archivon-1

Carga una lista de n sonidos, el cual corresponde a los estados de el objeto en la sección [Object] debajo. Si un estado no tiene efecto de sonido, el ítem de la lista debe dejarse en blanco.

Position = X, Y, Z

Esto define la posición del sonido, relativo al centro del archivo animated.

Volume = Valor

Esto define el volumen del sonido a la posición de origen. A valor de 1.0 representa el volumen nominal sin cambio del archivo de sonido.

Pitch = Valor

Esto define la velocidad del sonido a la posición de origen. A valor de 1.0 representa el velocidad nominal sin cambio de grado de el archivo de sonido.

Radius= Valor

Esto defina el radio en metros desde el origen al que el efecto de sonido se reproduce a máximo volumen. El valor predeterminado es 30.

PlayOnShow = Valor

Valor = 0: El efecto de sonido no será reproducido. Valor = 1: El efecto de sonido será reproducido.

This defines whether the sound effect defined above should be played when a the relevant state is shown.

PlayOnHide = Value

Valor = 0: El efecto de sonido no será reproducido. Valor = 1: El efecto de sonido será reproducido.

This defines whether the sound effect defined above should be played when the relevant state is hidden.

Note

PlayOnShow and PlayOnHide will be ignored when using multiple state sounds.


Nota de compatibilidad con openBVE 2

Durante el desarrollo de openBVE (v0.9) y durante el desarrollo del formato de objeto animado, hay algunos comandos en existencia que terminan en RPN, así como TranslateXFunctionRPN. Estos comandos nunca se han hecho en cualquier lanzamiento oficial (v1.0) y nunca fueron pensados en ser usados fuera del entorno de desarrollo. Mientras estos siguen aún disponibles sin documentación, serán quitados en openBVE 2. Si estas usando algunos de estos comandos, por favor deshágase de ellos lo mas posible.


● Sobre las formulas

Primero que todo, la notación aritmética, lo que puedes teclear dentro del parámetro Formula, es convertido en una notación funcional. Por cada notación aritmética, hay una notación funcional correspondiente. Algunas funciones no tienen un operador aritmético y solo pueden ser teclados en notación funcional. Para los operadores, la precedencia juega un rol importante. Puedes usar paréntesis para sobreponer el orden de precedencia así como generalmente en una fórmula matemática. Los nombres de las funciones no distinguen entre mayúsculas y minúsculas.

Por favor tenga en cuenta que el resultado de cualquier operación matemática o función pudiera ser infinito, intermediado o no real, 0 es retornado. Un error de desborde no puede ser prevenido, Así que debes tomar en cuenta esto.

■ 3. Lista de operadores aritméticos de notación

● Aritmética básica

Aritmética

Funcionalidad Descripción a + b
Suma[a,b, ...] Representa adición a - b
Sustraer[a,b] Representa sustracción -a
Menos[a] Convierte a negativo el número a * b
Por[a,b,...] Representa multiplicación a / b
Dividir[a,b] Representa división
|

● Comparaciones

Todas las comparaciones devuelven 1 para verdadero y 0 para falso.

Aritmética

Funcionalidad Descripción a == b
Equal[a,b] Verdadero (1) si a es igual a b a != b
Noigual[a,b] Verdadero (1) si a no es igual a b a < b
Menor[a,b] Verdadero (1) si a es menor que b a > b
Mayor[a,b] Verdadero (1) si a es mayor que b a <= b
MenorIgual[a,b] Verdadero (1) si a es menor o igual que b a >= b
MayorIgual[a,b] Verdadero (1) si a es mayor o igual que b
|

● Operadores lógicos

Todos los operadores tratan 0 como falso y cualquier otro valor como verdadero, y retornan 1 por verdadero y 0 por falso.

Aritmética

Funcionalidad Descripción !a
No[a] Verdadero (1) si a es falso a & b
Y[a,b] Verdadero (1) si ambos a y b son verdad a | b
O[a,b] Verdadero (1) si cualquiera de a o b es verdad a ^ b
Oexclusivo[a,b] True (1) si cualquiera a o b es verdad
|

● Operador de precedencia

From highest precedence to lowest. Operators of same precedence are evaluated either left to right or right to left, depending on if they share a precedence with another operator.

Operator

Associativity Sin paréntesis. Equivilant a[...]
unary     - (Menos)
unary     /
derecha-a-izquierda 1 / 2 / 3 (1 / (2 / 3)) *
derecha-a-izquierda 1 * 2 * 3 (1 * (2 * 3)) +, - (Sustracción)
left-to-right 1 + 2 + 3 ((1 + 2) + 3) ==, !=, <, >, <=, >=
left-to-right 1 <= 2 <= 3 ((1 <= 2) <= 3) !
unary     &
derecha-a-izquierda 1 & 2 & 3 (1 & (2 & 3)) ^
derecha-a-izquierda 1 ^ 2 ^ 3 (1 ^ (2 ^ 3)) |
derecha-a-izquierda 1 | 2 | 3 (1 | (2 | 3))
|

The logical not and multiplication operator are not at the same precedence level as a lot of other languages. For example !a + !b is !(!a + !(b)) not (!a) + (!b) as expected, similarly 1 * 2 / 3 is 1 * (2 / 3) not (1 * 2) / 3
Please also note that some combinations of prefix and infix operators are not recognised. For example a*-b is not accepted. Use a*(-b) or -a*b instead.

■ 4. Lista de funciones

● Aritmética básica

Función

Descripción Reciprocal[x]
Retorna la reciprocidad, igual a 1/x Power[a,b,...]
Retorna a elevado a la b ava potencia. b debe ser un número no negativo. Para consistencia, Power[0,b] siempre reotrna 1, incluso en el caso degenerado de Power[0,0], y a comenzando en negativo siempre retorna 0. Agregar más argumentos creará una cadena. Power[a,b,c] retornará a bc.
|

● Funciones numéricas

Función

Descripción Quotient[a,b]
Divide a entre b y redondea el resultado hacia abajo, igual a Floor[a/b]. Mod[a,b]
Retorna el residuo al dividir a entre b, igual a a-b*Floor[a/b]. Min[a,b,...]
Retorna el menor de los términos. Max[a,b,...]
Retorna el mayor de los términos. Abs[x]
Retorna el valor absoluto. Sign[x]
Retorna el signo de x, el cual puede ser -1, 0 or 1. Floor[x]
Redondea hacia abajo al entero más cercano. Ceiling[x]
Redondea hacia arriba al entero más cercano. Round[x]
Redondea al entero mas cercano. Números terminando en decimal .5 son redondeados hacia el entero más cercano. random[Minimum, Maximum]
Retorna un nuevo número de coma flotante entre Mínimo y Máximo. randomInt[Minimum, Maximum]
Retorna un nuevo número entero entre Mínimo y Máximo.
|

● Funciones elementales

Función

Descripción Exp[x]
La función exponencial, o e de la xavapotencia. Log[x]
La función logarítmica, con base e. Sqrt[x]
La raíz cuadrada. Sin[x]
Seno (en radianes). Cos[x]
Coseno (en radianes) Tan[x]
La tangente (en radianes). ArcTan[x]
La tangente inversa - Cotangente (en radianes) Pi
Returns the value of Pi.
|

● Condicionales

Función

Descripción If[cond,truevalue,falsevalue]
Si condición es != 0, retorna valorverdadero, en caso contrario valorfalso
|

■ 5. Lista de variables

● Primitivas

Variable

Descripción value
El valor retornado por la función en su ultima evaluación. Al comienzo de la simulación, esto es 0. delta
La diferencia de tiempo desde la última evaluación de la función en segundos. Por favor ten en cuenta que no hay tiempo garantizado desde que transcurre entre los llamados de función sucesivos. currentState
Retorna el estado actual numérico del objeto.
|

● Tiempo y camara

Variable

Descripción time
El tiempo actual del juego medido en segundos desde la media noche del primer día. hora
The integer part of the current hour. minute
The integer part of the current minute. second
The integer part of the current second. DistanciaCamara
Una distancia cartesiana no negativa medida desde el objeto a la cámara en metros. cameraXDistance
The non-negative cartesian distance measured on the X axis from the object to the camera in meters cameraYDistance
Una distancia cartesiana no negativa medida desde el eje Y al objeto a la cámara en metros. cameraZDistance
The non-negative cartesian distance measured on the Z axis from the object to the camera in meters cameraMode
Retorna 0 si la cámara es actualmente en cabina 2D o 3D, 1 en caso contrario.
| | ● Trenes | Generalmente, objetos adjuntados a un tren particular o coche retorna valores para los trenes y cobhes, a menos que sean estados. Para objetos de escenario, la referencia es el coche del conductor del tren más cercano ( no necesariamente el tren del jugador). |

En algunos casos de las siguientes variables , IndiceCarro tiene el siguiente significado: 0 es el 1er carro del frente, 1 es el 2do carro del frente, etc., mientras que -1 es el 1er carro desde la parte posterior, -2 es el 2do carro desde la parte posterior, etc. En general los indices de los carros desde -cars hasta cars-1 representan carros existentes, donde cars es el numero de carros que el tren posee, mientras que valores que estén fuera de este rango representan carros que no existen. Todos los trenes tienen al menos 1 carro, indices -1 y 0 están garantizados que existan para cualquier tren.

● Trenes (generalidades)

Variable

Descripción

TrenJugador

Returns 1 if the train is the player train, 0 otherwise. carros
El número de carros que el tren tiene. carNumber
Returns the index of the current car. speed
La velocidad actual del coche en m/s. Es positivo cuando el tren viaja hacia adelante, y negativa cuando el tren viaja hacia atrás. speed[carIndex]
La velocidad actual del coche número carIndex en m/s. Es positivo cuando el tren viaja hacia adelante, y negativa cuando el tren viaja hacia atrás. speedometer
La velocidad percibida del actual coche en m/s así como esto pudiera aparecer un velocímetro en patinaje de ruedas y bloqueo de ruedas. speedometer[carIndex]
La velocidad percibida del coche de indice carIndex en m/s así como esto pudiera aparecer un velocímetro en patinaje de ruedas y bloqueo de ruedas. aceleración
The actual acceleration of the current car in m/s2. acceleration[carIndex]
The actual acceleration of the car carIndex in m/s2. accelerationMotor
The acceleration which the motor of the first motor car currently generates in m/s2. accelerationMotor[carIndex]
The acceleration which the motor of the car carIndex currently generates in m/s2. distance
Una distancia cartesiana no negativa medida desde el objeto al coche más cercano en metros. Solamente es usado por objetos de escenario. distance[carIndex]
La distancia cartesiana no negativa medida desde el objeto al coche número carIndex en metros, ó 0 si el coche no existe. Solamente es usado por objetos de escenario. trackDistance
La distancia de la vía desde el objeto al extremo más cercano del tren mas próximo en metros. Es positivo cuando el tren esta en frente del objeto, y negativo cuando esta por detrás, y cero cuando el objeto esta entre los extremos del tren. trackDistance[carIndex]
La distancia de la vía desde el objeto al carro número IndiceCarro del tren mas próximo en metros. Es positivo cuando el centro del coche esté en frente del objeto, y negativo cuando esta por detrás, Retorna 0 si el coche no existe. Solamente es usado por objetos de escenario. destination
La configuración actual del destino del tren (Es configurado por Track.Destination ó la interfaz del plugin) distanceNextStation
La distancia en metros a la siguiente estación. distanceLastStation
The distance in m to the previous station. distanceStation[stationIndex]
La distancia en metros a la estación con indice stationIndex stopsNextStation
Indica si el tren hace parada en la próxima estación. stopsStation[stationIndex]
Indica que el tren se detiene en la estación con indice stationIndex siguienteEstación
El indice de la siguiente estación. nextStationStop
El indice de la siguiente estación donde el tren debe hacer parada. terminalStation
The index of the terminal station for this train. timeTable
Returns 1 if the timetable is currently set as visible, 0 otherwise. brightness[carIndex]
Returns the interpolated brightness value applying to this car. routeLimit
Returns the current route speed limit applying to this train in km/h. headlights
Gets the current state of the train’s headlights. wheelSlip
Returns 1 if the train is experincing wheelslip in the current car, 0 otherwise. wheelSlip[carIndex]
Returns 1 if the train is experinging wheelslip in the specified car, 0 otherwise.
| | ● Trenes (freno) |

| | Variable | Descripción |

mainReservoir

La presión actual de la reserva principal del coche, medido en Pascal.

mainReservoir[carIndex]

La presión actual de la reserva principal del coche de indice numero carIndex, medido en Pascal. equalizingReservoir
La presión actual del depósito de compensación en este carro, medido en Pascal. equalizingReservoir[carIndex]
The current pressure in the equalizing reservoir in car carIndex, measured in Pa. brakePipe
La presión actual de la tubería de freno en este coche, medido en Pascal. brakePipe[carIndex]
La presión actual de la tubería de freno en este coche de indice número carIndex, medido en Pascal. brakeCylinder
La presión actual del cilindro de freno en este coche, medido en Pascal. brakeCylinder[carIndex]
La presión actual del cilindro de freno en este coche de indice número carIndex, medido en Pascal. straightAirPipe
La presión actual de la tubería de aire recto en este coche, medido en Pascal. straightAirPipe[carIndex]
La presión actual de la valvula directa de aire en el carro carIndex, medido en Pa.
| | ● Trenes (puertas) |

| | Variable | Descripción |

doors

El estado de las puertas. Retorna 0 si esta totalmente cerrada, 1 si esta totalmente abierta, o cualquier otro estado intermedio, las puertas están parciales en un estado abierto.

doors[carIndex]

El estado de las puertas del coche de indice número carIndex. Retorna 0 si esta totalmente cerrada, 1 si esta totalmente abierta, o cualquier otro estado intermedio, las puertas están parciales en un estado abierto. leftDoors
El estado de las puertas del lado izquierdo. Retorna 0 si esta totalmente cerrada, 1 si esta totalmente abierta, o cualquier otro estado intermedio, las puertas están parciales en un estado abierto. leftDoors[carIndex]
El estado de las puertas del lado izquierdo del coche de indice número carIndex. Retorna un valor entre 0 y 1, en un estado parcial de puertas que están en un estado de apertura, o -1 si el coche no existe. rightDoors
El estado de las puertas del lado derecho. Retorna 0 si esta totalmente cerrada, 1 si esta totalmente abierta, o cualquier otro estado intermedio, las puertas están parciales en un estado abierto. rightDoors[IndiceCarro]
El estado de las puertas del lado derecho del carro IndiceCarro. Retorna un valor entre 0 y 1, en un estado parcial de puertas que están en un estado de apertura, o -1 si el carro no existe. leftDoorsTarget
El estado de destino anticipado de las puertas izquierdas. Retorna cualquiera 0 (cerrado) ó 1 (abierto). leftDoorsTarget[carIndex]
El estado de la trayectoria anticipada de las puertas izquierdas del carro IndiceCarro. Retorna 0 (cerrada) o 1 (abierta). rightDoorsTarget
El estado de destino anticipado de las puertas derechas. Retorna cualquiera 0 (cerrado) ó 1 (abierto). rightDoorsTarget[carIndex]
El estado de destino anticipado de las puertas derechas del carro IndiceCarro. Retorna cualquiera 0 (cerrado) ó 1 (abierto). leftDoorButton
El estado del botón de la puerta izquierda. Retorna cualquiera 0 (liberado) o 1 (presionado). rightDoorButton
El estado del botón de la puerta derecha. Retorna cualquiera 0 (liberado) o 1 (presionado). pilotLamp
El estado de la lampara piloto (Puertas cerradas y listo para iniciar). Retorna cualquiera 0 (apagado) o 1 (encendido).
| | ● Trenes (otros) |

| | Variable | Descripción |

reverserNotch

El estado de inversor de marcha, el cual puede ser -1 (hacia atrás), 0 (neutro), o adelante (1).

powerNotch

El la posición de la palanca de tracción, por ejemplo, 0 para N, 1 para P1, 2 para P2, 3 para P3, etc. powerNotches
La cantidad de posiciones de palanca de tracción que el tren tiene. brakeNotch
La posición actual de la posición de la palanca de freno.
● Para trenes sin freno de aire automático: 0 para N, 1 para B1, 2 para B2, 3 para B3, etc.
● Para trenes con freno de aire automático: 0 para REL, 1 para LAP y 2 para SRV.
brakeNotches
La cantidad de posiciones de palanca de freno que el tren posee. Para trenes con freno automático de aire, esto retorna 2. brakeNotchLinear
La combinación de la palanca de freno, freno presionado y freno de emergencia.
● Para trenes sin freno de aire automático y sin freno presionado: 0 para N, 1 para B1, 2 para B2, 3 para B3, etc., hasta BrakeNotches+1 para EMG.
● Para trenes sin freno de aire automático pero con freno presionado: 0 for N, 1 para HLD, 2 para B1, 3 para B2, 4 para B3, etc., hasta BrakeNotches+2 para EMG.
● Para trenes con freno de aire automático: 0 para REL, 1 para LAP, 2 para SRV o 3 para EMG.
brakeNotchesLinear
El valor mas alto retornado por brakeNotchesLinear.
● Para trenes sin freno de aire automático y sin freno presionado, esto es BrakeNotches+1.
● Para trenes sin freno de aire automático pero con freno presionado, esto es BrakeNotches+2.
● Para trenes con freno de aire automático, esto retorna 3.
locoBrakeNotch
La posición actual del freno de locomotora. locoBrakeNotches
La cantidad de posiciones de freno de locomotora que el tren tiene. emergencyBrake
Cuando el freno de emergencia es activado (1) o no (0). hasAirBrake
Cuando el tren tiene freno de aire automático (1) o no (0). holdBrake
Cuando el freno presionado este activo (1) o no (0). hasHoldBrake
Cuando el tren posee freno presionado (1) o no (0). constSpeed
Cuando el sistema de velocidad constante esta activo (1) o no (0). tieneVelocidadConstante
Cuando el tren posee sistema de velocidad constante (1) o no (0). hasPlugin
Cuando el tren usa plugin (1) o no (0). pluginState[i]
El estado de la iava variable del plugin, retornando un entero dependiendo del plugin. Es lo mismo para atsi en el panel2.cfg. FrontAxleCurveRadius[carIndex]
Retorna el radio de curva del eje frontal del coche de indice número carIndex. RearAxleCurveRadius[carIndex]
Retorna el radio de curva del eje posterior del coche de indice número carIndex. CurveCant[carIndex]
Retorna el valor del peralte del coche de indice número carIndex. Pitch[carIndex]
Retorna el valor de la diferencia de elevación para el coche de indice número carIndex.. Odometer
Retorna un numero representando la distancia en metros viajadas por el carro actual. Odometer[carIndex]
Retorna un numero representando la distancia en metros viajadas por el coche de indice número carIndex. Klaxon
Retorna la bocina actual que esta reproduciendo (cualquiera) de las siguientes: (0) Ninguna bocina se esta reproduciendo (1) La bocina principal esta reproduciéndose (2) La bocina secundaria esta reproduciéndose (3) La bocina musical esta reproduciéndose. Nota: Si múltiples bocinas se encuentran reproduciéndose, el valor mas bajo será retornado. PrimaryKlaxon
Retorna 1 si la bocina primaria esta reproduciéndose, 0 en caso contrario. KlaxonSecundario
Retorna 1 si la bocina secundaria esta reproduciéndose, 0 en caso contrario. KlaxonMusical
Retorna 1 si la bocina musical esta reproduciéndose, 0 en caso contrario. passAlarm
Cuando la alarma de rebase de estación ha sido activada. Retorna 0 (inactivo) o 1 (activo). stationAdjustAlarm
Cuando la alarma de ajuste de estación ha sido activada. Retorna 0 (inactivo) o 1 (activo).
| | Si *pluginState[i]* es usado con el sistema de seguridad ATS y ATC, el siguiente mapa de opciones para *i* puede ser aplicado: |

| | i | Español |

日本語 - Japonés

Valores de retorno

pluginState[271]

Significado ATS ATS 0 (apagado) o 1 (encendido) ATC no disponible ATS RUN
256 ATS 作動 0 (apagado), 1 (encendido) o 2 (parpadeando) 0 km/h 0 ATS RUN
257 ATS 作動 0 (apagado / sin parpadear), 1 (encendido / parpadeando) 15 km/h 1 P POWER
258 P 電源 0 (apagado) o 1 (encendido) 25 km/h 2 PTN APPROACH
259 パターン接近 0 (apagado) o 1 (encendido) 45 km/h 3 FRENO LIBERADO
260 ブレーキ開放 0 (apagado) o 1 (encendido) 55 km/h 4 FRENO APLICADO
261 ブレーキ動作 0 (apagado) o 1 (encendido) 65 km/h 5 ATS P
262 ATS-P 0 (apagado) o 1 (encendido) 75 km/h 6 FALLA
263 故障 0 (apagado) o 1 (encendido) 90 km/h 7 ATC
264 ATC 0 (apagado) o 1 (encendido) 100 km/h 8 ATC ENCENDIDO
265 ATC 電源 0 (apagado) o 1 (encendido) 110 km/h 9 ATC SERVICIO
266 ATC 常用 0 (apagado) o 1 (encendido) 120 km/h 10 ATC EMERGENCIA
267 ATC 非常 0 (apagado) o 1 (encendido) ATS esta activo 11 VELOCIDAD CONSTANTE
268 定速 0 (apagado) o 1 (encendido) EB 12 EB
269 0 (apagado) o 1 (encendido) Indicador de velocidad del ATC 0 - 12, ver tabla a la derecha
270
| ● Secciones (señalización) | El contexto sección es definido cuando el objeto es posicionado usando Track.SigF. | | | | | 271 |

| | Variable | | | |

Descripción

section

El valor de la sección aspecto que se nuestra.
si esta variable es usada fuera de un contexto de Track.Sifg, la conducta actual es indefinida y sujeto a cambios.

■ 6. Rendimiento Existen ciertos tipos de animaciones los cuales son menos costosos, y otros que son mas. También, los objetos adyacentes juegan un papel importante . Si quieres diseñar objetos animados con un mejor rendimiento posible para versiones futuras de openBVE, échale un vistazo a la siguiente tabla de rendimiento:

| Animación |

Objeto

Rendimiento

Cambios de estado

Solo tiene caras opacas

Bien Cambios de estado Tiene parcialmente caras transparentes
Moderado Traslación Solo tiene caras opacas
Bien Traslación Tiene parcialmente caras transparentes
Moderado Rotación Solo tiene caras opacas
Bien Rotación Tiene parcialmente caras transparentes
Mal Saltos de textura Solo tiene caras opacas
Mal Saltos de textura Tiene parcialmente caras transparentes
Mal
| El rendimiento por lo general es mejor si el resultado de la función cambia sin frecuencia. Así que, incluso si habilitas el parámetro *RefreshRate* a cero, el rendimiento por lo general mejorará si el resultado de su formula es constante sobre largos periodos de tiempo. De otra manera, si cambia cada cuadro por segundo, el rendimiento por lo general empeorará. | | Generalmente, debes evitar usar animaciones con caras parcialmente transparentes y enfocarte en caras opacas cuando sea posible. Tambien, intenta evitar los saltos de textura, y considera usar el cambio de estado o traslación donde sea posible. | ■ 7. Sugerencias | Generalmente hablando, trata de mantener la complejidad de las funciones lo mas bajo posible. Esto no es el aspecto más critico, aunque, la mayoría del impacto del rendimiento resultará cuando se aplique resultados a una función, por ejemplo. rotar el objeto, y no evaluando la función. |

Usa el parámetro RefreshRate cuando sea posible para así optimizar el rendimiento. Usualmente, puedes usar este parámetro cuando no necesites una animación suave, o cuando deliberadamente necesites que estas funciones solo se actualicen en intervalos.

No uses estas funciones cuando siempre evalúas la misma constante. Por ejemplo, no uses RotateXFunction = 3.14159, gira el objeto adyacente en el CSV/B3D/X directamente.

Cambios de estado son un método muy barato cuando el estado no cambia entre dos ejecuciones por el StateFunction. Si un cambio ocurre, esto es una operación relativamente costosa.

Trata de optimizar las operaciones condicionales if . Especialmente trata de evitar la anidación de funciones if. De vez en cuando, hay una solución matemática elegante.

Template for a blinking light:
States = OBJECT0, OBJECT1
StateFunction = value == 0
RefreshRate = SEGUNDOS
- ● Rotación de rueda -
Template for the code used in an exterior car object:
States = OBJECT
RotateXFunction = value + delta * speedometer / RADIO_DE_LA_RUEDA

● Ciclo a través de una lista de objetos

Template for objects that are to be cycled through:
States = OBJECTO0, OBJECTO1, OBJECTO2, …
StateFunction = mod[value + 1, CANTIDAD_DE_OBJETOS]
RefreshRate = TIEMPO_POR_OBJETO

● Señal (3-aspectos) para Track.Section(0; 2; 4)

States = OBJETO_ROJO, OBJETO_AMARILLO, OBJETO_VERDE
StateFunction = section / 2

● Emplear un retardo en señales de aproximación controlada.

If you want to create a signal that keeps being red until the train approaches it to some distance, then counts down a timer before it changes aspect to green, please refer to this post on the forum for a detailed explanation. Once you understand the concepts, you can use this code template:
Template for an approach-controlled delay in a signal with two aspects:
States = OBJETO_ROJO,OBJETO_VERDE StateFunction = if[trackDistance>DISTANCIA | section==0, 0, min[value + 0.5*delta/RETRASO, 1]]
Template for an approach-controlled delay in a signal with any number of aspects:
States = OBJETO_ROJO, …, OBJETO_VERDE StateFunction = if[trackDistance>DISTANCIA | section==0, 0, if[value<0.5, value + 0.5*value/RETRASO, section]]

Using an approach controlled delay with a semaphore signal requires a slight variant on this technique. As the result of the StateFunction is rounded, whereas that of the RotateFunction is not, a combination of both is required to achieve the desired effect.

Template for an approach-controlled delay in a semaphore signal:
States = SIGNAL_ARM, SIGNAL_ARM
StateFunction = if[trackDistance>DISTANCE | section==0, 0, min[value + 0.5*delta/DELAY, 1]] RotateYFunction = if[currentState == 0, 0, -0.7]

■ 9. Gramática formal

La gramática formal del lenguaje puede no coincidir perfectamente con la implementación incluida en openBVE. Un ejemplo es a*-b el cual es válido bajo la gramática pero el analizador lo rechaza.

<expression>        ::= <xor_expression> “&” <expression>     | <xor_expression>
<xor_expression>    ::= <or_expression>  “^” <xor_expression> | <or_expression>
<or_expression>     ::= <not_expression> “|” <or_expression>  | <not_expression>

<not_expression>    ::= “!” <equal_expression> | <equal_expression>

<equal_expression>  ::= <plus_expression> (“==” <plus_expression>)* | <plus_expression> ("!=” <plus_expression>)*
                        <plus_expression> (“>”  <plus_expression>)* | <plus_expression> ("<"  <plus_expression>)* |
                        <plus_expression> ("<=” <plus_expression>)* | <plus_expression> ("<=” <plus_expression>)* | <plus_expression>

<plus_expression>   ::= <times_expression> (“+” <times_expression>)*  | <times_expression> ("-” <times_expression>)* | <times_expression>

<times_expression>  ::= <divide_expression> “*” <times_expression> | <divide_expression>
<divide_expression> ::= <minus_expression> “/” <divide_expression> | <minus_expression>

<minus_expression>  ::= “-” <function_call> | <function_call>
<function_call>     ::= <name> “[” <expression> (",” <expression>)* “]” | <term>

<term>   ::= “(” <expression> “)” | <name> | <number>
<number> ::= <digit>*
<name>   ::= <letter> (<letter> | <digit>)*

<letter> ::= “A” | “B” | “C” | “D” | “E” | “F” | “G” | “H” | “I” | “J” | “K” | “L” | “M” |
             “N” | “O” | “P” | “Q” | “R” | “S” | “T” | “U” | “V” | “W” | “X” | “Y” | “Z” |
             “a” | “b” | “c” | “d” | “e” | “f” | “g” | “h” | “i” | “j” | “k” | “l” | “m” |
             “n” | “o” | “p” | “q” | “r” | “s” | “t” | “u” | “v” | “w” | “x” | “y” | “z”
<digit>  ::= “0” | “1” | “2” | “3” | “4” | “5” | “6” | “7” | “8” | “9”

Using an approach controlled delay with a semaphore signal requires a slight variant on this technique. As the result of the StateFunction is rounded, whereas that of the RotateFunction is not, a combination of both is required to achieve the desired effect.

Template for an approach-controlled delay in a semaphore signal:
States = SIGNAL_ARM, SIGNAL_ARM
StateFunction = if[trackDistance>DISTANCE | section==0, 0, min[value + 0.5*delta/DELAY, 1]] RotateYFunction = if[currentState == 0, 0, -0.7]

■ 9. Gramática formal

La gramática formal del lenguaje puede no coincidir perfectamente con la implementación incluida en openBVE. Un ejemplo es a*-b el cual es válido bajo la gramática pero el analizador lo rechaza.

<expression>        ::= <xor_expression> “&” <expression>     | <xor_expression>
<xor_expression>    ::= <or_expression>  “^” <xor_expression> | <or_expression>
<or_expression>     ::= <not_expression> “|” <or_expression>  | <not_expression>

<not_expression>    ::= “!” <equal_expression> | <equal_expression>

<equal_expression>  ::= <plus_expression> (“==” <plus_expression>)* | <plus_expression> ("!=” <plus_expression>)*
                        <plus_expression> (“>”  <plus_expression>)* | <plus_expression> ("<"  <plus_expression>)* |
                        <plus_expression> ("<=” <plus_expression>)* | <plus_expression> ("<=” <plus_expression>)* | <plus_expression>

<plus_expression>   ::= <times_expression> (“+” <times_expression>)*  | <times_expression> ("-” <times_expression>)* | <times_expression>

<times_expression>  ::= <divide_expression> “*” <times_expression> | <divide_expression>
<divide_expression> ::= <minus_expression> “/” <divide_expression> | <minus_expression>

<minus_expression>  ::= “-” <function_call> | <function_call>
<function_call>     ::= <name> “[” <expression> (",” <expression>)* “]” | <term>

<term>   ::= “(” <expression> “)” | <name> | <number>
<number> ::= <digit>*
<name>   ::= <letter> (<letter> | <digit>)*

<letter> ::= “A” | “B” | “C” | “D” | “E” | “F” | “G” | “H” | “I” | “J” | “K” | “L” | “M” |
             “N” | “O” | “P” | “Q” | “R” | “S” | “T” | “U” | “V” | “W” | “X” | “Y” | “Z” |
             “a” | “b” | “c” | “d” | “e” | “f” | “g” | “h” | “i” | “j” | “k” | “l” | “m” |
             “n” | “o” | “p” | “q” | “r” | “s” | “t” | “u” | “v” | “w” | “x” | “y” | “z”
<digit>  ::= “0” | “1” | “2” | “3” | “4” | “5” | “6” | “7” | “8” | “9”