Retour à la leçon
Mission

Mission : un PNJ qui n'aboie jamais

Diagnostiquer une chaîne d'héritage cassée entre entités de jeu et implémenter une surcharge d'opérateur manquante.

Contexte

Un système d'entités de jeu définit une hiérarchie Animal -> Dog, mais quelque chose cloche :

lua
local Animal = {}
Animal.__index = Animal

function Animal.new(name, sound)
  local self = setmetatable({}, Animal)
  self.name = name
  self.sound = sound
  return self
end

function Animal:makeSound()
  print(self.name .. " fait " .. self.sound)
end

local Dog = {}   -- oubli : pas de setmetatable(Dog, { __index = Animal })

function Dog.new(name)
  local self = Animal.new(name, "Wouf")
  return setmetatable(self, Dog)
end

local rex = Dog.new("Rex")
rex:makeSound()   -- erreur: attempt to call a nil value (method 'makeSound')

L'équipe veut aussi pouvoir additionner deux entités Vector2 (positions) avec +, mais l'opérateur n'est pas encore défini pour ce type.