Actions - HelmDefense/HelmDefense GitHub Wiki

Le système des actions

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

Diagramme de classe des Actions

Liste complète :


Détail des actions

Retour à la liste des actions

Action

Super action générale.

Méthode :

  • Aucune

Retour à la liste des actions

EntityAction

Super action pour les entités.

Méthode :

  • Entity getEntity() - Renvoie l'entité concernée par l'action.

Retour à la liste des actions

LivingEntityAction

Super action pour les entités vivantes.

Méthode :

  • @Override LivingEntity getEntity() - Renvoie l'entité vivante concernée par l'action.

Retour à la liste des actions

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.

Retour à la liste des actions

EntityDeathAction

Déclenché lorsque l'entité vivante meurt.

Méthode :

  • Entity getAttacker() - Renvoie l'entité qui a tué l'entité.

Retour à la liste des actions

ProjectileEntityAction

Super action pour les projectiles.

Méthode :

  • @Override Projectile getEntity() - Renvoie le projectile concernée par l'action.

Retour à la liste des actions

ProjectileEntityShootAction

Déclenché lorsqu'une entité tire le projectile.

Méthode :

  • Aucune

Retour à la liste des actions

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.

Retour à la liste des actions

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

Retour à la liste des actions

EntitySpawnAction

Déclenché juste après l'apparition de l'entité.

Méthode :

  • Location getSpawn() - Renvoie la Location d'apparition.

Retour à la liste des actions

EntityMoveAction

Déclenché au déplacement d'une entité.

Méthodes :

  • Location getFrom() - Renvoie la Location de départ.
  • Location getTo() - Renvoie la Location d'arrivé.

Retour à la liste des actions

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.

Retour à la liste des actions

EntityKillAction

Déclenché lorsqu'une entité tue une autre entité.

Méthode :

  • Entity getVictim() - Renvoie l'entité qui a été tuée.

Retour à la liste des actions

GameAction

Super action pour les niveaux.

Méthode :

  • Level getLvl() - Renvoie le niveau concernée par l'action.

Retour à la liste des actions

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.

Retour à la liste des actions

GameNewWaveAction

Déclenché à chaque nouvelle vague.

Méthodes :

  • Wave getOldWave() - Renvoie la Wave qui vient de se terminer, ou null pour la première vague.
  • Wave getNewWave() - Renvoie la Wave qui commence, ou null si celle qui vient de se terminer était la dernière vague.

Retour à la liste des actions

GameWinAction

Déclenché à la victoire.

Méthode :

  • Aucune

Retour à la liste des actions

GameLooseAction

Déclenché à la défaite.

Méthode :

  • Aucune

Retour à la liste des actions

GameAttackerPassedAction

Déclenché lorsqu'un attaquant arrive à la fin du niveau.

Méthode :

  • LivingEntity getAttacker() - Renvoie l'attaquant qui est passé.

Retour à la liste des actions