Les états et labels

  1. Les états
  2. Les labels
  3. Les appels

Créé le 01/10/2002
Dernière mise à jour le 01/04/2003

1) Les états

L'état est une partie de code ou on peut y mettre plusieurs functions et des labels.
On peut en mettre plusieurs dans un code mais un seul état tourne a la fois.
On peut toujours se servir des éventuelles autres functions qui se trouve dans le code.
Le fait que le code tourne dans un état (une fois celui-ci enclenché) on peut écrasé ou modifié des functions et des labels dans cet état.

Exemple:

state MyState
{
    ignores Touch, UnTouch;

    function BeginState()
    {
        // mon code déclenchéent en entrant dans l'état
    }

    function EndState()
    {
        // mon code déclenchéent en sortant de l'état
    }
}

La spécification ignores désactive une ou plusieurs function(s) de base dans cet état.
La function BeginState() s'éxécutera dés le début de l'état.
La function EndState() s'éxécutera en sortant de l'état ou en changeant.

Exemple pour vérifier qu'on est bien dans tel état:

function Test()
{
    if(IsInState('MyState'))
    {
        // mon code si l'état courant est bien "MyState"
    }
}

La function IsInState() est une function a retour de bool.
Si l'actor est bien dans l'état spécifié, IsInState() retourne vrai.
Autre function pour les états, GetStateName() aussi une function a retour, renvoie par un name le nom l'état courant.

Exemple pour écraser une function:

function Test(int MyNumber, vector MyLocation)
{
    // mon code
}

state MyState
{
    function Test(int MyNumber, vector MyLocation); // écrase la function (la reécri sans code)
}

Si le code tourne dans l'état MyState la function Test() est désactivé.

Note:
On peut mettre directement un point-virgule juste aprés la déclaration de la function écrasé, a la place d'ouvrir est fermer avec {};

Exemple pour que l'état s'auto-éxécute:

auto state MyState
{
    // mon code dans une function ou un label
}

Exemple pour avoir plusieurs utilisation du code:

state() MyState
{
    // mon code dans une function ou un label
}

En mettant des parenthèses juste aprés le mapper peut ainsi avoir plusieurs utilisation du code avec plusieurs états de se type. (voir dans les default properties : Object > InitialState)
L'état initial sélectionné serra auto-éxécute en début de partie.

Top

2) Les labels

Les labels sont des sous-partie d'un états, qui permette de coder directement dans un état (pratique s'il est auto-éxécutable).
C'est grace aux labels qu'on a accés aux functions lantentes comme Sleep() qui permet de stoper un certain temps l'éxécution du code.

Exemple de l'utilisation de Sleep():

state MyState
{
    Begin:
    Sleep(5.25);
    // mes paramètres ici
}

Dans un état, le label par default est Begin (on peut mettre n'importe quoi d'autre mais mieux vaut utiliser celui-la).
Dans cet état mes paramètres méttront 5.25 secondes avant de se déclenchéent.

Note:
S'il y a aussi des functions dans l'état, mettre toujours le ou les label(s) aprés celle-ci.

Top

3) Les appels

Pour appeler un état et éventuellement un label en particulier, on utilise la function GoToState().
Pour passer dans un autre label de l'état, c'est la function GoTo().

Exemple pour un état:

function Test()
{
    GoToState('MyState');
}

state MyState
{
    Begin:
    // mes paramètres ici
}

Exemple pour un label:

state MyState
{
    MyLabel:
    Log("Le label <MyLabel> à été appelé");
    GoTo('EndLabel');

    Begin:
    Log("Le label <Begin> à été appelé");
    GoTo('MyLabel');

    EndLabel:
    Log("Le label <EndLabel> à été appelé");
}

On remarque ici que c'est pas vraiment important de mettre le label Begin en premier car de toute façon c'est lui qui s'éxécutera en premier (mais je conseille quand même de le mettre pour mieux se retrouvé dans le code), ensuite s'il y en a plusieurs il faut mettre un label de fin (ici c'est EndLabel) si on veut pas que le label suivant s'éxécute.

Ca donne les messages suivant dans le log: (System\UT2003.log)
Le label <Begin> à été appelé
Le label <MyLabel> à été appelé
Le label <EndLabel> à été appelé

Exemple pour un label dans un état:

auto state Start
{
    GoToState('MyState', 'MyLabel');
}

state MyState
{
    Begin:
    // mes paramètres ici

    MyLabel:
    // mes paramètres ici
}

Ici un premier état-automatique Start éxécute l'état MyState en commençant par le label MyLabel et non avec celui par défault Begin.

Exemple pour sortir d'un état:

state MyState
{
    Begin:
    GoToState('');
}

Comme on peut constater avec les 2 derniers exemples, la function GoToState() a entièrement ses options optionnelles. On peut juste s'en servir pour aller vers un état ou un label dans un état ou même dans aucun état. (juste en sortir)

Top