1365Fermer1367
JackosKingLe 17/05/2010 à 20:47
GoldenCrystal (./1327) :
Ah, grâce à JackosKing, j'ai compris le problème \o/
Je sais toujours pas à quoi servent tes task et tes modules, mais en gros, les méthodes d'action devraient se situer dans une classe plus générale, disons une classe "Main" (parce que je comprends pas ton architecture de task et module tongue), qui serait un singleton. (ça t'évite de passer l'instance de partout même si ça serait une manière plus propre de faire)
Dans ta classe Main tu as par exemple DoAddUnit(), DoKillSelectedUnits(), DoBuyItem(), etc. (ce sont des exemples, et je met le Do ici pour bien montrer que ce sont des actions, mais en vrai on s'en fout ^^).
Ensuite, tu peux avoir ton fichier de définition d'icônes. Par exemple:// Classe Icon de base class Icon { const std::string title; const std::string image; // En vrai il faudrait peut être stocker une ressource SDL à la place public: Icon(const std::string& title, const std::string& image) : title(title), image(image) { } const std::string& getTitle() { return title; } const std::string& getImage() { return image; } virtual void Action() = 0; }; #define REGISTER_ICON(title, image, action) class action ## Icon : public Icon { public: action ## Icon () : Icon(title, image) { } void Action() { Main::getInstance(). ## action ## (); } }; REGISTER_ICON("Buy Item", "buy.png", DoBuyItem) REGISTER_ICON("Kill Units", "kill.png", DoKillSelectedUnits) // Etc.Y'a moyen de faire mieux (c'est un exemple semi à l'arrache, idéalement tu pourrais même utiliser des classes anonymes pour les icônes, sous certaines conditions) et je suis pas complètement sur de pas m'être foiré sur la macro, mais bon tongue


Mouai déjà utiliser le preprocesseur pour ca c'est crade, mais en plus je vois pas ce qu'on y gagne:/
Folco, tu peux donner tes sources aussi wink