La base de l'éditeur de niveaux est fournie par le module lionengine-editor
,
et donne accès à une application autonome, pouvant également être étendue pour des cas plus spécifiques.
Dans cette section nous allons voir comment utiliser les principaux outils, et la façon de les étendre.
L'éditeur est construit à l'aide de Eclipse RCP 4, en tant que plug-in, il est donc recommandé de comprendre d'abord comment fonctionne Eclipse RCP avant d'essayer d'étendre l'éditeur.
L'éditeur par défaut affiche le contenu suivant :
Rapide tour d'horizon des différentes zones :
- Le dossier des ressources, là où il est possible d'en éditer certaines
- Pointeur: Permet de sélectionner les tiles et d'ajouter / supprimer des objets
- Main: Navigation à la souris dans le monde
- Sélection: Sélectionne les objets dans la zone
- Pipette: Permet la copie d'un élément
- Grille: Affiche / cache la grille (en fonction de la taille des tiles)
- Exporter les tuiles : Permet de générer les tuiles à partir d'une image de niveau
- Importer map : Permet d'importer une map à partir d'une image de niveau rippé et d'un répertoire de tile sheets
- Tile Collision: Permet de contrôler les collisions de la map et leurs formules
- Tile : Element primaire composant le niveau
Voici un exemple de l'éditeur standard en utilisant le tutoriel Mario en projet :
Importer le projet :
Importer un niveau depuis une image :
L'éditeur supporte le système de points d'extension, et peut être facilement étendu. Voici un exemple de personnalisation de l'éditeur avec Lionheart Remake Editor:
Il y a les extensions suivantes:
Extensions disponibles:
com.b3dgs.lionengine.editor.worldViewRenderer
Permet d'étendre le rendu du monde. Il est ainsi possible d'ajouter du contenu supplémentaire et d'interagir avec (comme c'est fait avec les Checkpoints
pour Lionheart Remake Editor).
PaletteView
Interface à implémenter afin d'ajouter une nouvelle palette, devant être ajoutée de la manière suivante:
public class ApplicationConfiguration { @Inject EPartService partService; @PostConstruct public void execute(IEventBroker eventBroker) { eventBroker.subscribe(UIEvents.UILifeCycle.APP_STARTUP_COMPLETE, new AppStartupCompleteEventHandler()); } private class AppStartupCompleteEventHandler implements EventHandler { @Override public void handleEvent(Event event) { final PalettePart palette = UtilEclipse.getPart(partService, PalettePart.ID, PalettePart.class); final PaletteView newPalette = new MyPalette(partService); palette.addPalette("Palette Name", newPalette); } } }
plugin.xml
Voici un exemple minimaliste d'un fragment de plugin étendant l'éditeur:
<plugin> <extension id="product" point="org.eclipse.core.runtime.products"> <product application="org.eclipse.e4.ui.workbench.swt.E4Application" name="Title"> <property name="applicationCSS" value="platform:/plugin/your.package/css/default.css"> </property> <property name="appName" value="Title"> </property> <property name="lifeCycleURI" value="bundleclass://com.b3dgs.lionengine.editor/com.b3dgs.lionengine.editor.Manager"> </property> <property name="applicationXMI" value="platform:/plugin/com.b3dgs.lionengine.editor/Application.e4xmi"> </property> </product> </extension> <extension id="yourFragment.fragment" point="org.eclipse.e4.workbench.model"> <fragment apply="always" uri="fragment.e4xmi"> </fragment> <processor apply="always" beforefragment="false" class="your.package.ApplicationConfiguration"> </processor> </extension> <extension id="your.package.worldViewRenderer" name="World View Renderer" point="com.b3dgs.lionengine.editor.worldViewRenderer"> <implementation renderer="your.package.WorldViewRenderer"> </implementation> </extension> </plugin>
fragment.xmi
Voici un exemple de base d'une extension de fragment, pour étendre la bare d'outil:
<fragment:ModelFragments xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:fragment="http://www.eclipse.org/ui/2010/UIModel/fragment" xmlns:menu="http://www.eclipse.org/ui/2010/UIModel/application/ui/menu" xmi:id="_PL6tEDICEeSWn5KthPTSXA"> <fragments xsi:type="fragment:StringModelFragment" xmi:id="_kEk98EPdEeSGkM-KZ-3cEw" featurename="children" parentElementId="com.b3dgs.lionengine.editor.part.world-view.toolbar"> <elements xsi:type="menu:DirectToolItem" xmi:id="_vkwrwEXOEeSgZZSdFI2NoQ" elementId="your.package.world-view-renderer.function" label="Name" iconURI="platform:/plugin/your.package/icons/function.png" contributionURI="bundleclass://your.package/your.package.FunctionHandler"/> </fragments> </fragment:ModelFragments>
Lire la suite: Tutoriel