Bonjour,

le problème que je vais vous exposer a déjà été posé sur le chat, mais je pense que tout le monde a dû s'endormir avant la fin. J'ai déjà une solution, donc ce post n'est pas critique, et j'ai déjà farfouillé pas mal de doc sur le sujet, sans succès.

Voilà, j'ai repris le développement d'un jeu de stratégie "persistant" en PHP, et décidé de le passer en MVC (parce qu'il y en a marre des fonctions ultra-optimisées, en vitesse ET en effets de bord).

La base du jeu, c'est l'unité. La plupart des unités n'ont pas le droit d'attaquer. Du coup j'ai une classe mère :

Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
abstract class Unit {
 public static $canAttack=false;
 
public function canAttack(){
    return self::$canAttack;
}

Mais j'ai une classe d'unités qui peut attaquer, évidemment (c'est un jeu de guerre, tout de même).

Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
abstract class AttackingUnit extends Unit{
public static $canAttack=true;

Admettons qu'un fantassin soit une unité qui attaque :
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
class FootSoldier extends AttackingUnit{

J'ai une trentaine d'unités comme ça. Admettons que je charge dynamiquement l'unité :
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
$unit = "unNomDeClasseQuiVarie";
$unit_object = new $unit(); // et ça marche !

Je veux savoir si l'unité peut attaquer. Et bien la méthode qui consiste à faire
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
$unit->canAttack();

Me renvoie, pour un fantassin : false.


Je pourrais réimplanter un getter pour chaque paramètre dans chaque classe, l'ennui c'est que des paramètres comme ça, j'en ai environ 25... (et puis je voulais profiter de l'objet...)

Connaissez vous une syntaxe qui me permet de passer au dela de ça ? Ou un changer de conception éventuellement ? Qui soit à la fois clair et concis, car j'ai environ 35 classes rien que pour décrire mes unités, qui sont environ 10% du modèle...

Merci d'avance à ceux qui oseront se casser la tête sur le sujet ^_^