$row SQL) et hydrate les variables. Elle ne gère pas la logique spécifique (ami/ennemi), juste les données brutes.
class Entity {
public $id;
public $user_id;
public $x; public $y;
public $hp; public $maxHp;
public $energy;
public $hidden = false; // Par défaut visible
public $name;
public $type; // Défini par l'enfant
public $subtype; // Défini par l'enfant
public function __construct($row) {
$this->id = (int)$row['id'];
$this->user_id = (int)$row['user_id'];
$this->x = (int)$row['coord_x'];
$this->y = (int)$row['coord_y'];
$this->hp = (int)$row['current_hp'];
$this->energy = (int)$row['energy'];
$this->name = $row['nom_vaisseau'] ?? $row['type_ship'];
}
}
parent::__construct) pour remplir X, Y, ID.class Drone extends Entity {
public function __construct($row) {
// Appelle le constructeur de Entity d'abord
parent::__construct($row);
$typeString = strtolower($row['type_ship']);
$this->type = 'drone'; // Marqueur pour le JS
// Détection automatique du sous-type
$this->subtype = (strpos($typeString, 'kamikaze') !== false)
? 'kamikaze'
: 'scout';
// Stats par défaut si non définies
if (!empty($row['base_hp'])) {
$this->maxHp = (int)$row['base_hp'];
} else {
$this->maxHp = 40;
}
}
}
$isEnemy (booléen).
Cela permet au JS de savoir s'il doit afficher le vaisseau en bleu (ship) ou en rouge (enemy) sans faire de calculs compliqués côté client.
class Vaisseau extends Entity {
public function __construct($row, $isEnemy) {
parent::__construct($row);
// Définit la couleur pour le front-end
$this->type = ($isEnemy) ? 'enemy' : 'ship';
$this->subtype = strtolower($row['type_ship']);
if (!empty($row['base_hp'])) {
$this->maxHp = (int)$row['base_hp'];
} else {
$this->maxHp = $this->hp;
}
}
}
getGameState() :type_ship.new Drone().new Vaisseau().// Extrait de getGameState() dans GameManager
foreach ($allRows as $row) {
$isEnemy = ($row['user_id'] != $this->userId);
$typeString = strtolower($row['type_ship']);
// FACTORY PATTERN : Choix de la classe
if (strpos($typeString, 'drone') !== false) {
// C'est un drone, on utilise la classe spécialisée
$ent = new Drone($row);
} else {
// C'est un vaisseau standard
$ent = new Vaisseau($row, $isEnemy);
}
// ... Suite logique (Brouillard de guerre) ...
$entities[] = $ent;
}