Aller au contenu

Ajouter un évènement

Créer l'évènement

Pour créer un nouvel évènement, commencer par créer une nouvelle classe qui héritera de la classe ScriptEvent. Le constructeur de la classe ScriptEvent est ce qui va permettre de passer des variables au contexte local de l'évènement lorsqu'il sera déclenché. Par exemple, l'évènement suivant donne accès au fichier du script qui vient d'être chargé :

public class EvtOnScriptLoad extends ScriptEvent {

    public EvtOnScriptLoad(File scriptFile) {
        super(new ScriptAccessor(new TypeFile(scriptFile),"[script] file"));
    }

}

Le constructeur EvtOnScriptLoad peut prendre n'importe quels arguments en paramètres. C'est ce constructeur qui sera appelé lorsqu'il faudra déclencher l'évènement.

Le constructeur super accepte une infinité d'instances du type ScriptAccessor. Pour rappel, les ScriptAccessor sont des objets qui contiennent un élément de n'importe quel type, ainsi qu'un pattern RegEx. En utilisant le constructeur de ScriptAccessor, on peut transformer un pattern en RegEx facilement. Ici, l'accesseur reconnaîtra les expressions "file" et "script file", et retournera le TypeFile() nouvellement instancié.

Il faut maintenant enregistrer l'évènement. Il suffit pour cela d'ajouter l'annotation @Event à la classe créée, puis de remplir les paramètres demandés. Les patterns permettront de reconnaître l'évènement lors de la lecture de la ligne. Par exemple, le pattern [script] load[ed] reconnaîtra les lignes "load", "script load", "script loaded" et "loaded". Enfin, le paramètre accessors permet d'indiquer au système de compilation quels accesseurs cet évènement possède.

Voici une classe d'évènement complète :

@Event(name = "script load",
        description = "Called when script is loaded",
        examples = "on script load:",
        patterns = "[script] load[ed]",
        accessors = "[script] file:file")
public class EvtOnScriptLoad extends ScriptEvent {

    public EvtOnScriptLoad(File scriptFile) {
        super(new ScriptAccessor(new TypeFile(scriptFile),"[script] file"));
    }

}

Il est possible de configurer un side pour l'évènement en l'ajoutant dans l'annotation. Dans tous les cas, il ne faut jamais (il est en tout cas fortement déconseillé) d'utiliser l'annotation forge @Side pour en définir un. Sqript gère automatiquement ces problèmes et il suffit de le paramétrer dans l'annotation de l'élément concerné.

Déclencher l'évènement

Une fois que l'évènement est enregistré, il est possible de l'appeler depuis n'importe quel méthode ou fonction java. Pour cela, il suffit d'appeler la méthode ScriptManager.callEvent(ScriptEvent). L'argument ScriptEvent sera simplement une instance de votre classe. Par exemple, pour déclencher l'évènement définit par la classe ci-dessus, la fonction serait appelée comme suit :

ScriptManager.callEvent(new EvtOnScriptLoad(script_file));

Dans ce cas, toutes les instances de scripts recevront l'évènement. Cette méthode retournera true si l'évènement a été annulé par un script.

Tip

Pour cibler un script en particulier, il suffit d'appeler la même méthode de l'instance de ScriptInstance du script.

Pour récupérer le contexte après exécution du script, par exemple si on veut savoir la valeur d'un des accesseurs après exécution, il suffit d'appeler la méthode ScriptManager.callEventAndGetContext(ScriptEvent). Une instance du ScriptContext vous sera alors renvoyée.

Retour en haut de la page