Les clients de jeux sont souvent lourd, et font souvent plusieurs gigas en comptant les images, les sons, etc...
Eh bah ça ça ne sera pas le cas avec odfaeg! (Toutes les ressources pourront être chargée qu'une seule fois par l'éditeur de map, pour ensuite être transférée au serveur et puis au client dès lors du chargement de la connexion d'un joueur!)
Le joueur n'aura donc qu'à télécharge, le code source du client.
Tout le reste, sera récupéré via le serveur au chargement de la map. (A part peut être les musiques qui elles, ne peuvent pas être chargée en une seule fois à cause de leur taille trop grande)
Toutes les ressources seront serializable c'est à dire que vous pourrez les sauvegardez soit dans un fichier ou un flux en mémoire pour les envoyer d'une machine à l'autre par exemple.
Voici un exemple de code source qui sauvegarde un terrain dans un fichier (texture comprise) :
int main(int argc, char* args[])
{
sf::VideoMode mode(800, 600);
sf::ContextSettings settings(0, 0, 4, 3, 0);
odfaeg::RenderWindow window(mode, "test", sf::Style::Default, settings);
odfaeg::Texture tex;
tex.loadFromFile("tilesets/herbe.png");
odfaeg::g2d::Tile tile (&tex, odfaeg::Vec3f(0, 0, 0), odfaeg::Vec3f(120, 60, 0), sf::IntRect(0, 0, 100, 50));
odfaeg::g2d::Entity* bt = new odfaeg::g2d::BigTile (odfaeg::Vec3f(0, 0, 0));
bt->addChild(&tile);
std::ofstream ofs("FichierDeSerialisation.tex");
{
boost::archive::text_oarchive oa(ofs);
oa<<bt;
}
ofs.close();
std::ifstream ifs("FichierDeSerialisation.tex");
{
boost::archive::text_iarchive ia(ifs);
ia>>bt;
}
ifs.close();
while (window.isOpen()) {
sf::Event event;
while(window.pollEvent(event)) {
if (event.type == sf::Event::Closed) {
window.close();
}
}
window.draw(*bt);
window.display();
window.clear();
}
delete bt;
return 0;
Ici je le fait dans un seule et même programme mais on pourrait très bien sauver le terrain et le recharger plus tard.
Ceci est une grande simplification de mon système complexe ou je devais sauvegarder tout des ids vers les textures, envoyer tout les attributs et la taille des vecteurs à la main, sans que ceux-ci soient compressés.