Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: [ODFAEG] (Open Source Development Framework Adapted For Every Game)  (Lu 22175 fois)

0 Membres et 1 Invité sur ce sujet

Excellium

  • Jr. Member
  • **
  • Messages: 70
    • Voir le profil
Re : [ODFAEG] (Open Source Development Framework Adapted For Every Game)
« Réponse #30 le: Juillet 25, 2014, 09:42:58 pm »
Tu ne peux pas fournir les maps avec le client, puis simplement vérifier leur intégrité via des checksum (envoyés au serveur pour qu'il les compare) ?
Si tes maps évoluent tu fais faire une MAJ aux clients.
"Everything should be made as simple as possible, but not simpler."

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Re : [ODFAEG] (Open Source Development Framework Adapted For Every Game)
« Réponse #31 le: Juillet 25, 2014, 10:05:11 pm »
J'aurai pu faire ça aussi oui. ^^

Ceci dit, là, j'ai une IA à faire et un gameplay à finir afin de finaliser la version bêta du moteur.

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Nouvelle fonctionnalité puissante à venir!
« Réponse #32 le: Juillet 26, 2014, 12:42:46 pm »
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.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32108
    • Voir le profil
    • SFML's website
    • E-mail
Re : [ODFAEG] (Open Source Development Framework Adapted For Every Game)
« Réponse #33 le: Juillet 26, 2014, 02:08:42 pm »
Et c'est quoi l'avantage de télécharger toutes les ressources au fur et à mesure quand on joue, plutôt que de télécharger et installer l'ensemble d'un coup ?
Laurent Gomila - SFML developer

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Re : [ODFAEG] (Open Source Development Framework Adapted For Every Game)
« Réponse #34 le: Juillet 26, 2014, 04:45:00 pm »
Moins long à télécharger le client, hum, je télécharge pas au fur et à mesure qu'on joue, je télécharge seulement à chaque connexion, bref... (ou à chaque changement de map)

Je pensais que ça serait trop lent à charger la map en faisant ça mais non ça va.

G.

  • Hero Member
  • *****
  • Messages: 1392
    • Voir le profil
Re : [ODFAEG] (Open Source Development Framework Adapted For Every Game)
« Réponse #35 le: Juillet 26, 2014, 11:03:09 pm »
En gros au lieu de télécharger le jeu une fois pour toute, tu le télécharges et le retélécharges à chaque fois ?  ???
Faut obligatoirement une connexion quand tu joues aussi ?

Excellium

  • Jr. Member
  • **
  • Messages: 70
    • Voir le profil
Re : [ODFAEG] (Open Source Development Framework Adapted For Every Game)
« Réponse #36 le: Juillet 27, 2014, 01:04:04 am »
A la limite si c'était pour faire une sorte de streaming à la minecraft ça se comprendrait, mais la t'es juste motivé par faire un client léger, pour 0 intérêt...
Lis la première partie de la phrase de ma signature.
"Everything should be made as simple as possible, but not simpler."

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Re : [ODFAEG] (Open Source Development Framework Adapted For Every Game)
« Réponse #37 le: Juillet 27, 2014, 11:10:05 am »
Au pire j'envoie les fichiers au client avec toutes les données (textures, entités du jeux, etc....) une seule fois et je fais un check sum, ainsi, pas besoin de retélécharger à chaque fois, ça me fera un client légé avec des données compressées et vérifiée par le serveur.

Oui je pense que je vais faire ça, ça réglera les problèmes de confidentialité, d'intégrité et de lenteur.

Boost à l'air de bien marcher pour archiver les données sauf dans les cas complexe. (Si j'ai une classe C qui hérite d'une classe B et une classe B qui hérite d'une classe A)

Il y a peut être d'autres librairies pour faire ça mais je les connais pas.

« Modifié: Juillet 27, 2014, 11:13:53 am par Lolilolight »

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Re : [ODFAEG] (Open Source Development Framework Adapted For Every Game)
« Réponse #38 le: Août 04, 2014, 11:45:23 pm »
Je pense que je vais recoder ça en python, j'ai vu le tutoriel de Laurent (justement) sur le site développez.com et j'ai vu que la métha programmation avec les typlelists c'était..., assez crade (avec les macros), j'ai essayer un autre code mais, ça me renvoie toujours un pointeurs sur l'objet de base!

template <typename B>
class DynamicTupleBaseElement {
  public :
      DynamicTupleBaseElement() {

      }
      virtual B get() const = 0;
};
template<typename E, typename B>
class DynamicTupleElement : public DynamicTupleBaseElement<B> {
    public :
    DynamicTupleElement(E element) {
        this->element = element;
    }
    E get() const override {
        std::cout<<"get derived element"<<std::endl;
       return element;
    }
    E element;
};
template <typename B>
class DynamicTuple {
    private :
    typename std::map<std::string, DynamicTupleBaseElement<B>*>::iterator f (std::string type) {
        return elements.find(type);
    }
    std::map<std::string, DynamicTupleBaseElement<B>*> elements;
    public :
    template <typename E>
    void addElement (std::string type, E element) {
        DynamicTupleBaseElement<B>* base_element = new DynamicTupleElement<E, B>(element);
        elements[type] = base_element;
    }
    template <typename E>
    bool exists (E element) {
        typename std::map<std::string, DynamicTupleBaseElement<B>*>::iterator it;
        for (it = elements.begin(); it != elements.end(); it++) {
            if (std::is_same<decltype(it->second->get()), E>::value)
                return true;
        }
        return false;
    }
    template <typename E>
    std::string getType(E element) {
        typename std::map<std::string, DynamicTupleBaseElement<B>*>::iterator it;
        for (it = elements.begin(); it != elements.end(); it++) {
            if (std::is_same<decltype(it->second->get()), E>::value)
                return it->first;
        }
    }
    auto get(std::string type) -> decltype(this->f(type)->second->get()) {
        std::cout<<"get : "<<typeid(decltype(this->f(type)->second->get()))
        .name()<<std::endl;
        return elements[type]->get();
    }
};
 

Il me recréer une surcharge avec B get() dans la classe dynamictupleelement et il me cast l'objet de type e en un objet de type b hors c'est pas ce que je veux.

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Re : [ODFAEG] (Open Source Development Framework Adapted For Every Game)
« Réponse #39 le: Août 07, 2014, 10:08:19 am »
Non en fait ça ne sera pas nécessaire de passer à python finalement j'ai trouvé une autre méthode pour sérialiser des entités dans un centenaire c'est juste qu'il me faut faire un dynamic_cast mais je n'ai pas le choix je suis obligé car en c++ il est impossible de récupérer le type réel d'un objet polymorphique ne compilation bref.

Ceci dis si j'ai le temps je ferai peut être un binding vers d'autres languages du framework tout comme le fait SFML.  :)
 

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Re : [ODFAEG] (Open Source Development Framework Adapted For Every Game)
« Réponse #40 le: Août 14, 2014, 07:33:05 pm »
J'ai commencé à faire mon propre système de sérialisation, finalement avec le c++11 ce n'est pas si compliqué grâce aux tuples, et aux "type_traits", voici un tutoriel :
http://linor.fr/tutoriaux/tuto-723-la-serialization-et-la-compression-de-donnees-avec-odfaeg.php

J'ai mis à jour ça sur le git-hub, merci les tuples et les macros.  :D

PS : j'en ai aussi profité pour inclure un algorithme de compression que j'ai trouvé sur un site web.


« Modifié: Août 14, 2014, 07:37:07 pm par Lolilolight »

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Passage de la librairie en "header only" prochainement.
« Réponse #41 le: Août 19, 2014, 07:02:19 pm »
Re, hum..., j'ai quelques soucis actuellement avec les objets polymorphique qui en utilise d'autres, si je change la définition d'une classe de la librairie en compilation à l'aide d'une macro, je dois forcément recompiler la librairie sinon ça crash. (Car lé définition de la classe ne correspond plus avec ce qu'il y a dans le fichier .a.

Mais je veux garder le côté "méta-programmation" qu'offre le c++11 et que je trouve très pratique (ça m'évite de devoir passé par un système de réflexion et c'est plus rapide à l'exécution)

Par exemple lors de la sérialisation, si je décide de rajouter une classe dérivée à une classe de base je change la définition du wrapper du fichier .h de la librairie en redéfinissant une macro de la librairie dans mon projet utilisant la librairie. (Exactement comme le fait boost)

Je pense que la seule solution pour éviter d'avoir un crash est de rendre ma librairie "header only". (Ainsi si je modifie la définition de la classe, pas besoin de recompiler toute la librairie! (Ou bien de modifier le header de la librairie à la main)
« Modifié: Août 19, 2014, 07:04:43 pm par Lolilolight »

TheKingArthur

  • Invité
Re : [ODFAEG] (Open Source Development Framework Adapted For Every Game)
« Réponse #42 le: Août 29, 2014, 04:27:36 pm »
Les liens vers ton github ou ton dev-blog sont morts.

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Re : [ODFAEG] (Open Source Development Framework Adapted For Every Game)
« Réponse #43 le: Août 31, 2014, 08:23:26 am »
Ha oui c'est vrai, j'ai update les liens, merci de me l'avoir signalé!

J'ai changé mon système pour la sérialisation, car, mon précédent système causait trop de problème à cause des forward déclarations.

J'en ai profiter pour faire "un genre" de système de réflexion, et je dis bien un "genre" car n'ayant pas de système de réflexion intégré dans le language comme en java, je dois enregistrer les types et les fonctions à la main.

Il y a peut être moyen de le faire automatiquement mais je ne connais pas la technique.

msteve

  • Newbie
  • *
  • Messages: 25
    • Voir le profil
    • idevlog
Re : [ODFAEG] (Open Source Development Framework Adapted For Every Game)
« Réponse #44 le: Septembre 03, 2014, 10:44:07 am »
images, vidéo ?