L'idée est d'arriver au résultat ci-dessous. Ce qui change par rapport à l'exemple précédent, c'est qu'il y a un nouveau SWF qui est chargé d'animer le texte :

MasapiComplexDependency

La liaison des dépendences se présente comme ceci : architecture

Le point très intéressant est que, malgré le changement d'architecture, il n'y a pas besoin de toucher le code du preloader ! Il suffit juste de remanier le fichier de configuration pour que masapi s'adapte automatiquement.

Le nouveau XML est donc celui-ci :

<?xml version="1.0" encoding="utf-8" ?>
<application>
        <files>
                <file name="astorm"     url="astorm.swf"     type="swf" />
                <file name="font"       url="font.swf"       type="swf" />
                <file name="background" url="storm.jpg"      type="swf" />
		<file name="text"	url="text.txt"	     type="text" />
		<file name="animation"  url="textAnim.swf"   type="binary" />
        </files>
        <dependencies>
		<dependency name="astorm">
			<file name="background" />
			<file name="animation" />
		</dependency>
		<dependency name="animation">
			<file name="text" />
			<file name="font" />
		</dependency>
	</dependencies>
</application>

Grâce à cela, masapi va automatiquement détecter que les fichiers text.txt et font.swf doivent être chargés avant textAnim.swf pour que ce dernier fonctionne correctement. Le processus de téléchargement par défaut sera le suivant :

DownloadSteps

  1. Les fichiers nécessaires à l'animation du texte sont chargés. Ceux-ci sont ceux qui ont la priorité la plus élevée.
  2. Les fichiers nécessaires à la page sont chargés. Les deux fichiers chargés à l'étape 1 sont déjà prêts à être utilisés.
  3. La page (astorm) est chargée et tous les fichiers sont prêts à être utilisés.

Dernier détail : le fichier texteAnim.swf est chargé au format "binary". Cela veut dire comme un fichier binaire (via URLLoader) et non pas comme un simple SWF (Loader). Il ne sera donc pas exécuté une fois chargé. Il faudra manuellement le passer à un objet Loader pour l'afficher :

var animationFile:ApplicationFile = ApplicationFile.getFile("animation");
var animationLoader:Loader = new Loader();
animationLoader.loadBytes(animationFile.loadableFile.getData() as ByteArray);
addChild(animationLoader);

Au final, même avec une architecture compliquée (voire même dynamique), il n'y a pas besoin de changer une seule ligne de code pour que le preloader fonctionne. Je pense que c'est la le point fort de masapi par rapport à BulkLoader ! Mes prochaines mises à jour du package iront dans ce sens afin de prendre en compte un maximum de cas.

En espérant éclairicir les choses et faire des heureux :) Il y a également toute une série d'exemples sur le répository !