Présentation du système
Le système des actions est un système d'évènements, déclenchés suite à des actions qui se produisent.
Il est possible d'enregistrer des écouteurs à ces actions à travers la classe utilitaire Actions
. Pour enregistrer une méthode comme écouteur d'une action, elle doit se trouver dans une classe qui implémente ActionListener
, doit être annotée @ActionHandler
et prendre exactement un paramètre : L'action à écouter. On peut alors transmettre une instance de la classe possédant l'écouteur à la méthode Actions.registerListeners()
. Il est également possible de supprimer un écouteur via Actions.unregisterListeners()
.
Certaines actions (GameAction
) se déclenchent de manière globale (tous les écouteurs enregistrés sont appelés) tandis que d'autres (EntityAction
) ne se déclenchent que pour la partie des écouteurs concernée par l'action (seuls les écouteurs de l'entité concernée par l'action sont appelés).
Notre utilisation
Les capacités
Nous utilisons les actions pour créer le système de capacités des entités. En effet, la classe Ability
implémente ActionListener
et toutes les capacités sont automatiques enregistrées comme écouteurs des actions.
public class BountyHuntingAbility extends Ability { public BountyHuntingAbility(Tier unlock, Tier.Specification tierSpecification) { super(unlock, tierSpecification); } @ActionHandler public void onEntityKillAction(EntityKillAction action) { action.getEntity().getLevel().earnCoins(action.getVictim().data().getStats().getReward()); } }
Exemple d'utilisation : La capacité de gagner de l'argent en tuant des ennemis (
BountyHuntingAbility
)
Les actions de la GameLoop
À chaque tour de la GameLoop
, soit tous les ticks
(1/10s) de jeu, une action (GameTickAction
) est déclenchée. Certains éléments comme les niveaux ou les vagues ont besoin d'effectuer des actions en permanence (faire apparaître la vague suivante dans le niveau, faire apparaître l'entité suivante dans la vague, etc...) et implémentent donc ActionListener
pour s'enregistrer comme écouteurs d'action. Cependant, ces cas d'utilisation sont minoritaires par rapport aux capacités des entités.
Liste des actions
Liste complète :
Action
- Super action générale.EntityAction
- Super action pour les entités.LivingEntityAction
- Super action pour les entités vivantes.LivingEntityDamagedAction
- Déclenché lorsque l'entité vivante reçoit des dégâts.LivingEntityDeathAction
- Déclenché lorsque l'entité vivante meurt.
ProjectileEntityAction
- Super action pour les projectiles.ProjectileEntityShootAction
- Déclenché lorsqu'une entité tire le projectile.ProjectileEntityAttackAction
- Déclenché lorsque le projectile d'une entité touche une autre entité.ProjectileEntityFailAction
- Déclenché lorsque le projectile d'une entité touche un obstacle (bordure de map, etc...) ou arrive en bout de portée sans rien avoir touché.
EntitySpawnAction
- Déclenché juste après l'apparition de l'entité.EntityMoveAction
- Déclenché au déplacement d'une entité.EntityDirectAttackAction
- Déclenché lorsque l'entité inflige des dégâts de mêlée à une autre entité.EntityKillAction
- Déclenché lorsqu'une entité tue une autre entité.
GameAction
- Super action pour les niveaux.GameTickAction
- Déclenché à chaque tick (dixième de seconde) du jeu.GameNewWaveAction
- Déclenché à chaque nouvelle vague.GameWinAction
- Déclenché à la victoire.GameLooseAction
- Déclenché à la défaite.GameAttackerPassedAction
- Déclenché lorsqu'un attaquant arrive à la fin du niveau.
Détail des actions
Action
Super action générale.
Méthode :
- Aucune
EntityAction
Super action pour les entités.
Méthode :
Entity getEntity()
- Renvoie l'entité concernée par l'action.
LivingEntityAction
Super action pour les entités vivantes.
Méthode :
@Override LivingEntity getEntity()
- Renvoie l'entité vivante concernée par l'action.
EntityDamagedAction
Déclenché lorsque l'entité vivante reçoit des dégâts.
Méthodes :
Entity getAttacker()
- Renvoie l'entité qui a infligé les dégâts.int getHpBefore()
- Renvoie la valeur des points de vie de l'entité AVANT de subir l'attaque.int getDmg()
- Renvoie la valeur des dégâts infligés.
EntityDeathAction
Déclenché lorsque l'entité vivante meurt.
Méthode :
Entity getAttacker()
- Renvoie l'entité qui a tué l'entité.
ProjectileEntityAction
Super action pour les projectiles.
Méthode :
@Override Projectile getEntity()
- Renvoie le projectile concernée par l'action.
ProjectileEntityShootAction
Déclenché lorsqu'une entité tire le projectile.
Méthode :
- Aucune
ProjectileEntityAttackAction
Déclenché lorsque le projectile d'une entité touche une autre entité.
Méthodes :
Entity getVictim()
- Renvoie l'entité qui a reçu les dégâts.int getHpBefore()
- Renvoie la valeur des points de vie de la victime AVANT de subir l'attaque.int getDmg()
- Renvoie la valeur des dégâts infligés.
ProjectileEntityFailAction
Déclenché lorsque le projectile d'une entité touche un obstacle (bordure de map, etc...) ou arrive en bout de portée sans rien avoir touché.
Méthode :
- Aucune
EntitySpawnAction
Déclenché juste après l'apparition de l'entité.
Méthode :
Location getSpawn()
- Renvoie laLocation
d'apparition.
EntityMoveAction
Déclenché au déplacement d'une entité.
Méthodes :
Location getFrom()
- Renvoie laLocation
de départ.Location getTo()
- Renvoie laLocation
d'arrivé.
EntityDirectAttackAction
Déclenché lorsque l'entité inflige des dégâts de mêlée à une autre entité.
Note : Lors d'une attaque de zone, une action est déclenchée pour chaque ennemi touché.
Méthodes :
Entity getVictim()
- Renvoie l'entité qui a reçu les dégâts.int getHpBefore()
- Renvoie la valeur des points de vie de la victime AVANT de subir l'attaque.int getDmg()
- Renvoie la valeur des dégâts infligés.
EntityKillAction
Déclenché lorsqu'une entité tue une autre entité.
Méthode :
Entity getVictim()
- Renvoie l'entité qui a été tuée.
GameAction
Super action pour les niveaux.
Méthode :
Level getLvl()
- Renvoie le niveau concernée par l'action.
GameTickAction
Déclenché à chaque tick (dixième de seconde) du jeu.
Méthode :
long getTicks()
- Renvoie le nombre de ticks depuis le début du niveau.
GameNewWaveAction
Déclenché à chaque nouvelle vague.
Méthodes :
Wave getOldWave()
- Renvoie laWave
qui vient de se terminer, ounull
pour la première vague.Wave getNewWave()
- Renvoie laWave
qui commence, ounull
si celle qui vient de se terminer était la dernière vague.
GameWinAction
Déclenché à la victoire.
Méthode :
- Aucune
GameLooseAction
Déclenché à la défaite.
Méthode :
- Aucune
GameAttackerPassedAction
Déclenché lorsqu'un attaquant arrive à la fin du niveau.
Méthode :
LivingEntity getAttacker()
- Renvoie l'attaquant qui est passé.