|
Contenus
↷ 1. Aperçu général
↷ 2. Sections
↷ 3. Liste des opérateurs de notation infix (insérer)
↷ 4. Liste des fonctions
↷ 5. Liste des variables
↷ 6. Performance
↷ 7. Conseils
↷ 8. Exemple de fonctions
|
|
1. Aperçu général
Le format d'objet ANIMATED est un format de contenant qui vous permet de référencer d'autres
objets (B3D/CSV/X) et de leur appliquer une animation. Il permet aussi de juste grouper d'autres
objets (y compris d'autres objets ANIMATED) sans les animer.
Les objets animés peuvent être utilisés dans les routes CSV/RW (à moins qu'explicitement
non admise par quelques commandes), comme les objets d'extérieur de train via extensions.cfg,
ainsi que les cabines 3D via le fichier panel.animated.
● Principes fondamentaux
L'animation est exécutée via les primitives suivantes :
● State changes – de base permettre de changer différents objets à tout moment
● Translation – déplace les objets dans trois directions indépendantes
● Rotation – rotation d'objets autour de trois axes indépendantes
● Texture shifts - permettre de changer les coordonnées de texture d'objets dans deux directions indépendantes
● Une petite formalité
Le fichier est un fichier texte simple codé dans un codage arbitraire, cependant,
UTF-8 avec une marque d'ordre des octets
est le choix de préférence.
Le modèle d'analyse pour les nombres est Strict. Le nom du fichier est arbitraire,
mais doit avoir l'extension .animated. Le fichier est interprété sur une
base de ligne par ligne, du début à la fin.
|
|
2. Sections
● La section [Include]
Vous pouvez utiliser la section [Include] juste pour inclure d'autres objets,
mais sans les animer. Ceci vous permet d'utiliser le fichier d'objet ANIMATED comme
un container pour grouper d'autres objets. Il peut y avoir n'importe quel nombre de
section [Include] dans le fichier.
[Include]
Début de la section.
FileName0
FileName1
FileName2
...
Définit une série d'objets B3D/CSV/X/ANIMATED qui seront inclus comme ils sont.
Position = X, Y, Z
Définit la position des objets, vous permettant essentiellement
de les décaler par rapport au reste du fichier d'objet ANIMATED.
● La section [Object]
Vous pouvez utiliser la section [Object] pour créer une animation seule. Ce qui exige d'établir
au moins un état via le paramètre States , et d'utiliser n'importe quelle combinaison de fonctions
que vous voulez, qui fournit un contrôle sur l'animation Il peut y avoir n'importe quel nombre de
section [Object] dans le fichier.
[Object]
Début de la section.
Position = X, Y, Z
Définit la position de l'objet. Ce qui corresponds essentiellement à la commande TranslateAll
à la fin du fichier respectif CSV/B3D, mais est exécuté après que n'importe laquel des fonctions
soient exécutés. Par exemple, si vous voulez utiliser la rotation, garder présent à l'esprit que
la rotation se fait autour de l'origine (0,0,0). La commande Position vous permet de repositionner
l'objet après que la rotation soit exécutée.
States = File0, File1, ..., Filen-1
Charge les n objets d'extension CSV/B3D/X. S'il vous plaît notez que le premier fichier indiqué a l'état d'index 0.
Utilisé plusieurs fichier si vous voulez utiliser un changement d'état.
StateFunction = Formula
Définit la fonction pour les changements d'état. Le résultat de Formula est arrondi vers
le nombre entier le plus proche. Si ce nombre entier est entre 0 et n-1, où n est le nombre
d'états défini via States, l'état respectif est montré, autrement, aucun objet n'est montré.
Vous pouvez utiliser le dernier si vous voulez un objet pour basculer sur on/off avec seulement un état.
TranslateXDirection = X, Y, Z
TranslateYDirection = X, Y, Z
TranslateZDirection = X, Y, Z
Cela définit les directions pour respectivement TranslateXFunction,
TranslateYFunction et TranslateZFunction. Les directions par défaut sont :
TranslateXDirection = 1, 0, 0
TranslateYDirection = 0, 1, 0
TranslateZDirection = 0, 0, 1
Cela signifie que TranslateXFunction déplacera par défaut vers la droite, TranslateYFunction
vers le haut et TranslateZFunction vers l'avant, c'est aussi pourquoi TranslateXFunction et les suivant
portent leurs noms. Si vous définissez d'autres directions, alors pensez simplement aux trois fonctions
et directions associées comme trois façons indépendantes de déplacer l'objet dans chaque direction.
TranslateXFunction = Formula
TranslateYFunction = Formula
TranslateZFunction = Formula
Cela définit les fonctions pour déplacer l'objet dans la direction respective.
La Formule a besoin de retourner la quantité de mètres pour se déplacer de la position initiale.
les paramètres X, Y et Z dans leur direction respective sont multipliés par le résultat de la Formule,
donc vous pouvez par exemple multiplier la formule par 2 ou la direction par 2 si vous voulez
doubler la vitesse de mouvement.
RotateXDirection = X, Y, Z
RotateYDirection = X, Y, Z
RotateZDirection = X, Y, Z
Cela définit les directions pour respectivement RotateXFunction, RotateYFunction et RotateZFunction.
Les directions par défaut sont:
RotateXDirection = 1, 0, 0
RotateYDirection = 0, 1, 0
RotateZDirection = 0, 0, 1
Cela signifie que RotateXFunction tournera par défaut autour de l'axe X, RotateYFunction autour de l'axe Y,
et RotateZFunction autour de l'axe Z, c'est aussi pourquoi RotateXFunction et les suivant portent leurs noms.
Si vous définissez d'autres directions, alors pensez simplement aux trois fonctions et directions associées
comme trois façons indépendantes de tourner l'objet.
RotateXFunction = Formula
RotateYFunction = Formula
RotateZFunction = Formula
Cela définit les fonctions une rotation le long des directions respectives dans le sens inverse
des aiguilles d'une montre. La Formule a besoin de retourner l'angle de la rotation en radians.
L'ordre dans lequel les rotations sont exécutées sont : RotateXFunction (premier), RotateYFunction
(second) et RotateZFunction (dernier). Si vous utilisez plus d'une fonction de rotation, garder
cet ordre à l'esprit. Si nécessaire, superposer les directions par défaut des rotations si vous
avez besoin d'un ordre différent.
RotateXDamping = NaturalFrequency, DampingRatio
RotateYDamping = NaturalFrequency, DampingRatio
RotateZDamping = NaturalFrequency, DampingRatio
Cela définit l'amortissement pour les fonctions correspondantes. Si n'est pas utilisé,
l'amortissement ne sera pas exécuté. NaturalFrequency est une valeur positive correspondant
à la fréquence angulaire pour un oscillateur assumé non amortie en radians par second.
DampingRatio est une valeur positive indiquant le type d’amortissement.
Les valeur entre 0 et 1 représentent un sous amortissement, 1 représente un amortissement critique,
et les valeurs au dessus de 1 représentent un sur amortissement.
TextureShiftXDirection = X, Y
TextureShiftYDirection = X, Y
Cela définit les directions pour TextureShiftXFunction et TextureShiftYFunction,
respectivement. Les directions par défaut sont :
TextureShiftXDirection = 1, 0
TextureShiftYDirection = 0, 1
Cela signifie que TextureShiftXFunction changera la texture par défaut à droite,
et TextureShiftYFunction en bas, c'est aussi pourquoi TextureShiftXFunction et le
suivant portent leurs noms. Si vous définissez d'autres directions, alors pensez
simplement aux deux, fonctions et directions associées, comme deux façons indépendantes
de changer les textures des objets.
TextureShiftXFunction = Formula
TextureShiftYFunction = Formula
Cela définit les fonctions pour changer la texture dans la direction respective.
La texture est décalé de la valeur retourné par la Formule des coordonnées de la texture.
La partie de nombre entier du résultat est ignoré, et une fraction de 0,5 représente le
déplacement à mi-chemin de la texture. Les commandes SetTextureCoordinate dans le fichier
objet définissent les coordonnées, qui sont ensuite ajoutés à l'issue de ces formules.
TextureOverride = Value
Value = Timetable : Toutes les faces montrerons le fichier bipmap
timetable comme défini par les routes CSV/RW.
Value = None : Les textures originales seront affichées sur les faces (comportement par défaut).
RefreshRate = Seconds
Cela définit la quantité minimum de temps passer avant que les fonctions soient mises à jour.
Une valeur de 0 forces les fonctions à se mettre à jour dans chaque cadre.
S'il vous plaît notez que les objets hors du champ visuel pourraient être mis à jour moins
fréquemment sans tenir compte de ce paramètre. Utilisez RefreshRate quand vous n'avez pas
besoin d'une animation parfaitement lisse (pour optimiser les performances), ou quand vous
voulez directement que l'objet soit mis à jour seulement dans des intervalles fixes.
Note de compatibilité pour openBVE 2 :
⚠
Durant le développement d'openBVE (v0.9) et durant le développement du format animated object,
il y avait certaines commandes en fin d’existence avec RPN, comme TranslateXFunctionRPN.
Ces commandes n'ont jamais été inséré dans la version officielle (v1.0) et n'étaient donc
jamais destiné à être utilisé en dehors d'environnements de développement. Alors qu'elles
sont encore disponibles mais non documenté, elles seront supprimé de la version openBVE 2.
Si vous utilisez ces commandes, s'il vous plaît débarrasser vous d'elles dès que possible.
|
● A propos des formules
Tout d'abord, la notation infixe, qui est ce que vous pouvez entrer pour Formula, est convertie
en notation fonctionnelle. Ainsi, pour chaque notation infixe, il existe une notation fonctionnelle
correspondante. Certaines fonctions n'ont pas un opérateur infixe et ne peut donc être entrés en
notation fonctionnelle. Pour les opérateurs, la priorité joue un rôle important. Vous pouvez utiliser
des parenthèses pour modifier l'ordre de préséance comme dans n'importe quelle formule mathématique
habituelle. Les noms des fonctions sont insensibles à la casse.
⚠
S'il vous plaît noter que si le résultat de toute opération mathématique ou d'une fonction soit infini,
indéterminé ou non réel, zéro sera renvoyé. Le débordement numérique n'est pas empêchée, vous devez donc
en tenir compte vous-même.
|
|
|
3. Liste des opérateurs de notation infix
● Arithmétique de base
Infix
|
Fonctionnelle
|
Description
|
a + b
|
Plus[a,b, ...]
|
Représente une addition
|
a - b
|
Subtract[a,b]
|
Représente une soustraction
|
- a
|
Minus[a]
|
Rend négatif le nombre
|
a * b
|
Times[a,b,...]
|
Représente une multiplication
|
a / b
|
Divide[a,b]
|
Représente une division
|
● Comparaisons
Toutes les comparaisons retournent 1 pour vrai et 0 pour faux.
Infix
|
Fonctionnelle
|
Description
|
a == b
|
Equal[a,b]
|
Vrai (1) si a égal b
|
a != b
|
Unequal[a,b]
|
Vrai (1) si a est différent de b
|
a < b
|
Less[a,b]
|
Vrai (1) si a est plus petit que b
|
a > b
|
Greater[a,b]
|
Vrai (1) si a est plus grand que b
|
a <= b
|
LessEqual[a,b]
|
Vrai (1) si a est plus petit ou égal à b
|
a >= b
|
GreaterEqual[a,b]
|
Vrai (1) si a est plus grand ou égal à b
|
● Les opérations logiques
Toutes les opérations de traitement de valeur 0 sont faux et toutes les autres sont vrai,
et retourne 1 pour vraie et 0 pour faux.
Infix
|
Fonctionnelle
|
Description
|
!a
|
Not[a]
|
Vrai (1) si a est faux
|
a & b
|
And[a,b]
|
Vrai (1) si a et b sont vrais
|
a | b
|
Or[a,b]
|
Vrai (1) si chacun d'eux a ou b sont vrai
|
a ^ b
|
Xor[a,b]
|
True (1) si l'un d'eux a ou b est vrai
|
● La priorité des opérateurs
Du plus prioritaire au moins prioritaire. Les opérateurs de même priorité
sont évalués de gauche à droite dans l'ordre qu'ils se présentent dans la formule.
- (Moins)
|
/
|
*
|
+, - (Soustraction)
|
==, !=, <, >, <=, >=
|
!
|
&
|
^
|
|
|
⚠
S'il vous plaît noter que certaines combinaisons d'opérateurs de préfixe et infix
ne sont pas reconnus. Par exemple a*-b n'est pas acceptée. Utilisez a*(-b) ou -a*b à la place.
|
|
|
4. Liste des fonctions
● Arithmétique de base
Fonction
|
Description
|
Reciprocal[x]
|
Retourne le réciproque, égal à 1/x
|
Power[a,b,...]
|
Retourne a élevé à la puissance bth. b doit être un nombre non-négatif.
Par souci de cohérence, Power[0,b] renvoie toujours 1, même dans le cas détérioré Power[0,0],
et a étant négatif retourne toujours 0.
|
● Fonctions numériques
Fonction
|
Description
|
Quotient[a,b]
|
Divise a par b et arrondit le résultat vers le bas, égal à Floor[a/b].
|
Mod[a,b]
|
Retourne le reste de la division de a par b, égal à a-b*Floor[a/b].
|
Min[a,b,...]
|
Retourne le plus petit de ces termes.
|
Max[a,b,...]
|
Retourne le plus grand de ces termes.
|
Abs[x]
|
Retourne la valeur absolue.
|
Sign[x]
|
Retourne le signe de x, qui est soit -1, 0 ou 1.
|
Floor[x]
|
Arrondit vers le bas à l'entier le plus proche.
|
Ceiling[x]
|
Arrondit vers le haut à l'entier le plus proche.
|
Round[x]
|
Arrondit à l'entier le plus proche. Numéros se terminant par 0,5 est arrondi au même nombre entier.
|
● Fonctions élémentaires
Fonction
|
Description
|
Exp[x]
|
La fonction exponentielle, ou e à la puissance xth.
|
Log[x]
|
Le logarithme naturel, à base e.
|
Sqrt[x]
|
La racine carrée.
|
Sin[x]
|
Le sinus (entrée en radians).
|
Cos[x]
|
Le cosinus ( entrée en radians).
|
Tan[x]
|
La tangente ( entrée en radians).
|
ArcTan[x]
|
La tangente inverse (sortie en radians).
|
● Conditions
Fonction
|
Description
|
If[cond,truevalue,falsevalue]
|
Si cond est != 0, retourne truevalue, autrement falsevalue.
|
|
|
5. Liste des variables
● Primitives
Variable
|
Description
|
value
|
La valeur retournée par la fonction dans la dernière évaluation. Au début de la simulation, il s'agit de 0.
|
delta
|
La différence de temps depuis la dernière évaluation de la fonction en secondes. S'il vous plaît noter
qu'il n'y a aucune garantie du temps qui s'écoule entre les appels successifs des fonctions.
|
● Temps et camera
Variable
|
Description
|
time
|
Le temps courant dans le jeu mesuré en secondes depuis minuit du premier jour.
|
cameraDistance
|
La distance cartésienne non-négative mesurée de l'objet à la caméra en mètres.
|
● Trains
Généralement, les objets attachés à un train et voiture particulière retourne des valeurs
pour ce train et cette voiture, sauf indication contraire. Pour les objets du paysage,
la référence est la voiture du conducteur du train le plus proche (pas nécessairement le train du joueur).
Dans certaines des variables suivantes, carIndex a la signification suivante :
0 est la 1st voiture de devant, 1 est la 2nd voiture de devant, etc., alors que -1
est la 1st voiture de derrière, -2 est la 2nd voiture de derrière, etc. En général,
l'indice de voiture de -cars à cars-1 représente des voitures existantes, ou cars est
le nombre de voitures du train, tandis que les valeurs en dehors de cette plage représente
les voitures inexistantes. Comme tous les trains ont au moins 1 voiture, les indices -1 et 0
sont garantis d'exister pour chaque trains.
● Trains (général)
Variable
|
Description
|
cars
|
Le nombre de voitures du train.
|
speed
|
La vitesse réelle signalé de la voiture courante en m/s.
Est positive lorsque le train se déplace vers l'avant, et
négative lorsque le train se déplace vers l'arrière.
|
speed[carIndex]
|
La vitesse réelle signalé de la voiture carIndex en m/s.
Est positive lorsque le train se déplace vers l'avant, et négative lorsque
le train se déplace vers l'arrière.
|
speedometer
|
La vitesse signalée perçue de la voiture courante en m/s comme elle apparaîtrait
sur un compteur de vitesse entre le patinage et le blocage des roues.
|
speedometer[carIndex]
|
La vitesse signalée perçue de la voiture carIndex en m/s comme elle apparaîtrait
sur un compteur de vitesse entre le patinage et le blocage des roues.
|
acceleration
|
L’accélération réelle de la voiture courante en m/s².
|
acceleration[carIndex]
|
L’accélération réelle de la voiture carIndex en m/s².
|
accelerationMotor
|
L'accélération que le moteur de la première voiture motorisée génère actuellement en m/s².
|
accelerationMotor[carIndex]
|
L'accélération que le moteur de la voiture carIndex génère actuellement en m/s².
|
distance
|
La distance cartésienne non-négative mesurée de l'objet à la voiture la plus proche en mètres.
Seulement significatif pour les objets du paysage.
|
distance[carIndex]
|
La distance cartésienne non-négative mesurée de l'objet à la voiture carIndex en mètres,
ou 0 si la voiture n'existe pas. Seulement significatif pour les objets du paysage.
|
trackDistance
|
La distance de la voie signalé mesuré de l'objet à l'extrémité la plus proche du train en mètres.
Est positive quand le train est devant l'objet, négative quand il est derrière,
et zéro quand l'objet se trouve entre les extrémités du train.
Seulement significatif pour les objets du paysage.
|
trackDistance[carIndex]
|
La distance de la voie signalé mesuré de l'objet à la voiture carIndex en mètres.
Est positif lorsque le centre de la voiture est devant l'objet, et négative si elle est derrière.
Retourne 0 si la voiture n'existe pas. Seulement significatif pour les objets du paysage.
|
● Trains (frein)
Variable
|
Description
|
mainReservoir
|
La pression courante dans le réservoir principal de cette voiture, mesuré en Pa.
|
mainReservoir[carIndex]
|
La pression courante dans le réservoir principal de la voiture carIndex, mesuré en Pa.
|
emergencyReservoir
|
La pression courante dans le réservoir d'urgence de cette voiture, mesuré en Pa.
|
emergencyReservoir[carIndex]
|
La pression courante dans le réservoir d'urgence de la voiture carIndex, mesuré en Pa.
|
brakePipe
|
La pression courante dans le tuyau de frein de cette voiture, mesuré en Pa.
|
brakePipe[carIndex]
|
La pression courante dans le tuyau de frein de la voiture carIndex, mesuré en Pa.
|
brakeCylinder
|
La pression courante dans le cylindre de frein de cette voiture, mesuré en Pa.
|
brakeCylinder[carIndex]
|
La pression courante dans le cylindre de frein de la voiture carIndex, mesuré en Pa.
|
straightAirPipe
|
La pression courante dans le tuyaux d'air de cette voiture, mesuré en Pa.
|
straightAirPipe[carIndex]
|
La pression courante dans le tuyaux d'air de la voiture carIndex, mesuré en Pa.
|
● Trains (portes)
Variable
|
Description
|
doors
|
L'état des portes. Retourne 0 si pleinement fermée, 1 si pleinement ouverte,
ou n'importe quelle valeur intermédiaire, prévenant que les portes sont dans l'état ouvert complètement.
|
doors[carIndex]
|
L'état des portes de la voiture carIndex. Retourne 0 si pleinement fermée,
1 si pleinement ouverte, ou n'importe quelle valeur intermédiaire,
prévenant que les portes sont dans l'état ouvert complètement.
|
leftDoors
|
L'état des portes de gauche. Retourne 0 si pleinement fermée, 1 si pleinement ouverte,
ou n'importe quelle valeur intermédiaire, prévenant que les portes sont dans l'état ouvert complètement.
|
leftDoors[carIndex]
|
L'état des portes de gauche de la voiture carIndex. Retourne une valeur comprise entre 0 et 1,
prévenant que les portes sont dans l'état ouvert complètement, ou -1 si la voiture n'existe pas.
|
rightDoors
|
L'état des portes de droite. Retourne 0 si pleinement fermée, 1 si pleinement ouverte,
ou n'importe quelle valeur intermédiaire, prévenant que les portes sont dans l'état ouvert complètement.
|
rightDoors[carIndex]
|
L'état des portes de droite de la voiture carIndex. Retourne une valeur comprise entre 0 et 1,
prévenant que les portes sont dans l'état ouvert complètement, ou -1 si la voiture n'existe pas.
|
leftDoorsTarget
|
Cible l'état anticipé des portes gauches. Retourne soit 0 (fermé) ou 1 (ouvert).
|
leftDoorsTarget[carIndex]
|
Cible l'état anticipé des portes gauches de la voiture carIndex. Retourne soit 0 (fermé) ou 1 (ouvert).
|
rightDoorsTarget
|
Cible l'état anticipé des portes droites. Retourne soit 0 (fermé) ou 1 (ouvert).
|
rightDoorsTarget[carIndex]
|
Cible l'état anticipé des portes droites de la voiture carIndex. Retourne soit 0 (fermé) ou 1 (ouvert).
|
● Trains (Divers)
Variable
|
Description
|
reverserNotch
|
L'état de l'inverseur, qui est soit -1 (en arrière), 0 (neutre), ou 1 (en avant).
|
powerNotch
|
Le cran de la puissance actuelle, à savoir 0 pour N, 1 pour P1, 2 pour P2, 3 pour P3, etc.
|
powerNotches
|
La quantité de cran de puissance qu'a le train.
|
brakeNotch
|
Le cran de frein actuel.
● Pour les trains sans frein à air automatique : 0 pour N, 1 pour B1, 2 pour B2, 3 pour B3, etc.
● Pour les trains avec frein à air automatique : 0 pour REL, 1 pour LAP et 2 pour SRV.
|
brakeNotches
|
La quantité de cran de frein qu'a le train.
Pour les trains avec le frein à air comprimé automatique, cela retourne 2.
|
brakeNotchLinear
|
Une combinaison de cran de frein, frein de maintenance et frein d'urgence.
● Pour les trains sans le frein à air comprimé automatique et sans le frein de maintenance :
0 pour N, 1 pour B1, 2 pour B2, 3 pour B3, etc., jusqu'à BrakeNotches+1 pour EMG.
● Pour les trains sans le frein à air comprimé automatique mais avec le frein de maintenance :
0 pour N, 1 pour HLD, 2 pour B1, 3 pour B2, 4 pour B3, etc., jusqu'a BrakeNotches+2 pour EMG.
● Pour les trains avec le frein à air comprimé automatique :
0 pour REL, 1 pour LAP, 2 pour SRV or 3 pour EMG.
|
brakeNotchesLinear
|
La plus haute valeur retournée par brakeNotchesLinear.
● Pour les trains sans le frein à air comprimé automatique
et sans le frein de maintenance, c'est BrakeNotches+1.
● Pour les trains sans le frein à air comprimé automatique
mais avec le frein de maintenance, c'est BrakeNotches+2.
● Pour les trains avec le frein à air comprimé automatique, Cela retourne 3.
|
emergencyBrake
|
Que le frein d'urgence est actuellement actif (1) ou pas (0).
|
hasAirBrake
|
Que le train a des freins a air automatiques (1) ou non (0).
|
holdBrake
|
Que le frein d'immobilisation est actuellement actif (1) ou pas (0).
|
hasHoldBrake
|
Que le train a des freins d'immobilisation (1) ou non (0).
|
constSpeed
|
Que le système de vitesse constante est actuellement actif (1) ou pas (0).
|
hasConstSpeed
|
Que le train a un système de vitesse constante (1) ou non (0).
|
hasPlugin
|
Que le train utilise un plugin (1) ou non (0).
|
pluginState[i]
|
L'état de la variable de plugin ith,
retournant un nombre entier qui dépend du plugin.
Est le même que pour atsi dans le panel2.cfg.
|
Si pluginState[i] est utilisé avec les systèmes intégrés
de sécurité ATS et ATC, les mappages suivants pour i s'appliquent :
i
|
Anglais
|
日本語
|
Valeurs de retour
|
pluginState [271]
|
Signification
|
256
|
ATS
|
ATS
|
0 (non éclairé) ou 1 (éclairé)
|
0
|
ATC pas disponible
|
257
|
ATS RUN
|
ATS 作動
|
0 (non éclairé), 1 (éclairé) ou 2 (clignotant)
|
1
|
0 km/h
|
258
|
ATS RUN
|
ATS 作動
|
0 ( non éclairé / non clignotant), 1 ( éclairé / clignotant)
|
2
|
15 km/h
|
259
|
P POWER
|
P 電源
|
0 (non éclairé) ou 1 (éclairé)
|
3
|
25 km/h
|
260
|
PTN APPROACH
|
パターン接近
|
0 (non éclairé) ou 1 (éclairé)
|
4
|
45 km/h
|
261
|
BRAKE RELEASE
|
ブレーキ開放
|
0 (non éclairé) ou 1 (éclairé)
|
5
|
55 km/h
|
262
|
BRAKE APPLY
|
ブレーキ動作
|
0 (non éclairé) ou 1 (éclairé)
|
6
|
65 km/h
|
263
|
ATS P
|
ATS P
|
0 (non éclairé) ou 1 (éclairé)
|
7
|
75 km/h
|
264
|
FAILURE
|
故障
|
0 (non éclairé) ou 1 (éclairé)
|
8
|
90 km/h
|
265
|
ATC
|
ATC
|
0 (non éclairé) ou 1 (éclairé)
|
9
|
100 km/h
|
266
|
ATC POWER
|
ATC 電源
|
0 (non éclairé) ou 1 (éclairé)
|
10
|
110 km/h
|
267
|
ATC SRV
|
ATC 常用
|
0 (non éclairé) ou 1 (éclairé)
|
11
|
120 km/h
|
268
|
ATC EMG
|
ATC 非常
|
0 (non éclairé) ou 1 (éclairé)
|
12
|
ATS is active
|
269
|
CONST SPEED
|
定速
|
0 (non éclairé) ou 1 (éclairé)
|
|
|
270
|
EB
|
EB
|
0 (non éclairé) ou 1 (éclairé)
|
|
|
271
|
ATC speed indicator
|
|
0 - 12, voir le tableau sur la droite
|
|
|
● Sections (signalling)
Le contexte de la section est définie lorsque l'objet est placé en utilisant Track.SigF.
Variable
|
Description
|
section
|
La valeur de l'aspect de la section actuellement affiché.
Si cette variable est utilisée en dehors d'un contexte
Track.SigF, le comportement est actuellement indéfinie et sujet à changement.
|
|
|
6. Performance
Il y a certains types d'animation qui sont moins expansive,
et d'autres qui le sont plus. En outre, l'objet sous-jacent joue un rôle important.
Si vous souhaitez concevoir vos objets animés avec la meilleure performance possible
pour les future versions d'openBVE, jetez un oeil à la table des performances suivantes:
|
|
7. Conseils
● De façon générale, essayez de garder la complexité des fonctions aussi légère que possible.
Ce n'est pas l'aspect le plus critique, même si, la plupart de l'impact des performances résultera
de l'application des résultats d'une fonction, par exemple, la rotation d'un objet, et non
l'évaluation de la fonction.
● Utilisez le paramètre de rafraîchissement lorsque cela est possible pour optimiser les performances.
Habituellement, vous pouvez utiliser ce paramètre lorsque vous n'avez pas besoin d'une animation fluide,
ou lorsque vous voulez délibérément ne mettre à jour les fonctions qu'à intervalles réguliers.
● N'utiliser pas les fonctions qui sont toujours évaluées à la même constante. Par exemple,
n'utilisez pas RotateXFunction = 3,14159, mais faire pivoter l'objet CSV/B3D/X sous-jacent.
● Les changements d'état sont très peut coûteuse (en performance) aussi longtemps que l'état
ne change pas réellement entre deux exécutions de StateFunction. Si un changement se produit,
ce sera cependant une opération relativement coûteuse.
● Essayez d'optimiser les conditions if. Surtout essayer d'éviter d'imbriquées des fonctions if.
Souvent, il y a une solution mathématiques élégante.
● Certaines fonctions, par exemple Exp, Sin, Cos, etc., sont relativement coûteuses.
Utilisez-les seulement si c'est absolument nécessaire pour un effet. Ne pas inclure d'opérations inutiles.
Par exemple, le résultat de StateFunction est automatiquement arrondi vers le plus proche entier,
donc n'appliquer pas un Round explicite supplémentaire.
● Lorsque vous travaillez avec des objets voiture, garder à l'esprit que certaines variables
ont un index de voiture optionnel. Vous devriez utiliser cet index si vous voulez interroger
l'état d'une voiture particulière (qui n 'est pas nécessairement celle attaché à l'objet).
Si, toutefois, vous voulez juste interroger la valeur de la voiture particulière attaché
à l'objet, utilisez la variable sans index. Pour les objets de décor, vous ne devriez généralement
pas utiliser des index de voiture que vous ne pouvez pas être sûr du nombre de voitures qu'a le train interrogé.
|
|
8. Exemple de fonctions
● Lumière clignotante
Modèle pour une lumière clignotante :
|
States = OBJECT0, OBJECT1
StateFunction = value == 0
RefreshRate = SECONDS
|
● Rotation de la roue
Modèle pour le code utilisé dans un objet extérieur d'une voiture :
|
States = OBJECT
RotateXFunction = value + delta * speedometer / RADIUS_OF_THE_WHEEL
|
● Cycle d'objets d'une liste
Modèle pour les objets qui doivent être dans le cycle :
|
States = OBJECT0, OBJECT1, OBJECT2, ...
StateFunction = mod[value + 1, AMOUNT_OF_OBJECTS]
RefreshRate = TIME_PER_OBJECT
|
● Signal (3 aspects) pour Track.Section(0; 2; 4)
Modèle pour le signal (Track.Section) :
|
States = RED_OBJECT, YELLOW_OBJECT, GREEN_OBJECT
StateFunction = section / 2
|
● Employer un délai d'approche qui contrôle des signaux
Si vous voulez créer un signal qui ne cesse d'être rouge jusqu'à ce que le train
s'approche à une certaine distance, puis un compte à rebours d'une minuterie avant
qu'il ne passe au vert, s'il vous plaît se référer à ce
post
(anglais) sur le forum pour une explication détaillée.
Une fois que vous comprenez les concepts, vous pouvez utiliser ce modèle de code :
Modèle du délai d'approche qui contrôle un signal avec deux aspects :
|
States = RED_OBJECT, GREEN_OBJECT
StateFunction = if[trackDistance>DISTANCE | section==0, 0,
min[value + 0.5*delta/DELAY, 1]]
|
Modèle du délai d'approche qui contrôle un signal avec un certain nombre d'aspects :
|
States = RED_OBJECT, ..., GREEN_OBJECT
StateFunction = if[trackDistance>DISTANCE | section==0, 0,
if[value<0.5, value + 0.5*value/DELAY, section]]
|
|
|
|
|
|