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

Auteur Sujet: Framework  (Lu 48878 fois)

0 Membres et 6 Invités sur ce sujet

Excellium

  • Jr. Member
  • **
  • Messages: 70
    • Voir le profil
Re : Framework
« Réponse #45 le: Décembre 04, 2013, 10:18:18 am »
Salut,

Est-ce que je peux éventuellement m'occuper de la partie GUI ?
Je bosse depuis pas mal de temps sur la mienne, j'aurai juste à adapter un peu le code pour la rendre opérationnelle.

PS: Voilà je me suis Mumblelisé  :D
« Modifié: Décembre 04, 2013, 10:24:53 am par Excellium »
"Everything should be made as simple as possible, but not simpler."

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Re : Framework
« Réponse #46 le: Décembre 04, 2013, 10:41:10 am »
Salut, bien sûr tu peu t'en occupé si ça te chante. :)


Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Re : Framework
« Réponse #47 le: Décembre 04, 2013, 11:56:29 am »
Bon, j'ai réussi à virer boost en utilisant de simple fonctions find et substr, étant donné que le compilateur mingw-tdm ne marche pas chez moi je pense que je vais opté pour sfml pour tout ce qui est thread. (Tant pis je ne vais pas m'occuper du c++11 pour l'instant je vais attendre je pense que tout ça soit plus stable)
Sinon je pense que pthread offre aussi la possibilité d'utiliser d'autre primitive de synchronisation que le mutex non ?
Bref là je dois m'absenter, je posterai une liste et un diagramme ce soir.



Cmdu76

  • Full Member
  • ***
  • Messages: 194
    • Voir le profil
Re : Framework
« Réponse #48 le: Décembre 04, 2013, 01:53:19 pm »
Salut Excellium,

J'ai une mini-base de Gui mais elle est loin d'être optimisée :)

Ducoup je te laisse travailler sur cette partie si tu veux :)

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Re : Framework
« Réponse #49 le: Décembre 04, 2013, 03:32:20 pm »
Sinon, j'utilise ce code source pour sauvegarder et restaurer des actions dans mon éditeur de map :

#ifndef UPS_ACTION_PARAMETER_H
#define UPS_ACTION_PARAMETER_H
#include "upsActionParameter.h"
#include <boost/any.hpp>
#include <string>
class UpsActionParameter {

    private :
        boost::any value;
        std::string name;

    public :
        UpsActionParameter (boost::any value, std::string name = "UnknowParameter") :
             value (value), name (name) {
                 this->value = value;
        }

        boost::any  getValue () const {
            return value;
        }
        void setValue (boost::any value) {
            this->value = value;
        }


        std::string getName() const {
            return name;
        }
        void setName(std::string name) {
            this->name = name;
        }
        ~UpsActionParameter() {

        }
};


#endif
 



class UpsAction {


    private :
        std::string name;
        bool (*function) (UpsAction &a);
        bool (*contFunction) (UpsAction &a);
        std::vector<UpsActionParameter*> parameters;
        UpsAction& operator= (const UpsAction &p);
        static int nbActions;

    public :

        UpsAction (std::string name, bool (*function) (UpsAction &a),
                   bool (*contFunction) (UpsAction &a));

        template <typename T> bool addParameter (std::string name, T value) {

            UpsActionParameter *p = new UpsActionParameter (value, name);

            for (unsigned int i = 0; i < parameters.size(); i++) {
                if (parameters[i]->getName() == name) {
                    delete p;
                    return false;
                }
            }

            parameters.push_back(p);
            return true;
        }
        template <typename T> bool addParameter (std::string name, T* value) {

            UpsActionParameter *p = new UpsActionParameter (value, name);

            for (unsigned int i = 0; i < parameters.size(); i++) {
                if (parameters[i]->getName() == name) {
                    delete p;
                    return false;
                }
            }

            parameters.push_back(p);
            return true;
        }
        bool removeParameter (std::string name);
        const UpsActionParameter& getParameter (const std::string name) throw (sfgl::Erreur) {
                for (unsigned int i = 0; i < parameters.size(); i++) {
                    if (parameters[i]->getName() == name) {

                        return *parameters[i];
                    }
                }
                throw sfgl::Erreur(5, "No such parameter for this action : " + name, 2);
        }
        template <typename T> void changeParameter (const std::string name, T value) {
            UpsActionParameter& parameter = getParameter(name);
            parameter.setValue(value);
        }
        std::string getName () const;
        void setName (std::string name);
        friend bool addTileAction(UpsAction &a);
        friend bool removeTileAction(UpsAction &a);
        friend bool removeTilesAction (UpsAction &a);
        friend bool addTilesAction (UpsAction &a);
        friend bool addAnimAction (UpsAction &a);
        friend bool removeAnimAction (UpsAction &a);
        friend bool selectTilesAction (UpsAction &a);
        friend bool deselectTilesAction (UpsAction &a);
        friend bool addLightAction (UpsAction &a);
        friend bool removeLightAction (UpsAction &a);
        friend bool setCollisionAction (UpsAction &a);
        bool execute ();
        bool executeContrary ();

        static int getNbActions () {
            return nbActions;
        }
        ~UpsAction () {
            for (unsigned int i = 0; i < parameters.size(); i++) {
                delete parameters[i];
            }
            parameters.clear();
            nbActions--;
        }
};
bool addTileAction(UpsAction &a);
bool removeTileAction(UpsAction &a);
bool removeTilesAction (UpsAction &a);
bool addTilesAction (UpsAction &a);
bool addAnimAction (UpsAction &a);
bool removeAnimAction (UpsAction &a);
bool selectTilesAction (UpsAction &a);
bool deselectTilesAction (UpsAction &a);
bool addLightAction (UpsAction &a);
bool removeLightAction (UpsAction &a);
bool setCollisionAction (UpsAction &a);
#endif

 

Je pense que je vais le réadapter pour sauvegarder et restaurer des states...(Les states pourront avoir n'importe quel type de paramètres et autant de paramètre qu'on veut)

Exactement comme pour les actions dans mon éditeur de map et il y aura un conteneur de states qui servira à sauvegarder et restaurer les states. :P

Il faut juste que je trouve un moyen de virer boost mais je pense qu'un pointeur sur void* devrait faire l'affaire. :P





Excellium

  • Jr. Member
  • **
  • Messages: 70
    • Voir le profil
Re : Framework
« Réponse #50 le: Décembre 04, 2013, 03:40:05 pm »
OK. Je suis sur Mumble, j'attend que quelqu'un se connecte pour poser quelques questions.
"Everything should be made as simple as possible, but not simpler."

Lo-X

  • Hero Member
  • *****
  • Messages: 618
    • Voir le profil
    • My personal website, with CV, portfolio and projects
Re : Re : Framework
« Réponse #51 le: Décembre 04, 2013, 04:29:39 pm »
Il faut juste que je trouve un moyen de virer boost mais je pense qu'un pointeur sur void* devrait faire l'affaire. :P

Tu peux pas passer par des templates ? En général on essaie d'éviter d'utiliser du void*

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : Framework
« Réponse #52 le: Décembre 04, 2013, 04:37:40 pm »
boost::any n'est pas difficile à réimplémenter :

class Holder
{
public:

    virtual std::typeinfo id() const = 0;

    virtual void* get() const = 0;
}

template <typename T>
class HolderImpl
{
public:

    HolderImpl(T value) : m_value(value) {}

    virtual std::typeinfo id() const
    {
        return typeid(T);
    }

    virtual const void* get() const
    {
        return &m_value;
    }

private:

    T m_value;
}

class any
{
public:

    template >typename T>
    void set(T value)
    {
        delete m_holder;
        m_holder = new HolderImpl<T>(value);
    }

    template <typename T>
    T get() const
    {
        if (typeid(T) != m_holder->id())
            throw bad_type;
        return *(const T*)m_holder->get();
    }

private:

    Holder* m_holder;
};

Plus ou moins (et sans les constructeurs / destructeurs / opérateurs = / etc.). Pour les détails cf. le code source de boost.
Laurent Gomila - SFML developer

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Re : Framework
« Réponse #53 le: Décembre 04, 2013, 05:12:27 pm »
Ca, c'est une bonne nouvelle. :)

Ca veut dire qu'il ne me restera plus qu'à implémenter ce système de states et améliorer l'ES du framework.  :) (Car je compte changé quelques petites choses (regrouper quelques classes abstraites, en rajouté quelques unes, etc...)

Je ne vais pas tarder à poster le diagramme et la liste sur gith-hub, j'attend juste que Cmdu se co, je viens de finir la liste pour l'architecture du framework.  :)

Lo-X

  • Hero Member
  • *****
  • Messages: 618
    • Voir le profil
    • My personal website, with CV, portfolio and projects
Re : Framework
« Réponse #54 le: Décembre 04, 2013, 05:34:33 pm »
Juste par curiosité, plutôt que de réinventer la roue, pourquoi tu te donnes tant de mal pour ne pas utiliser boost ? C'est super bien boost !

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Re : Framework
« Réponse #55 le: Décembre 04, 2013, 05:54:53 pm »
Je ne me donne pas de mal surtout que je n'ai besoin que de très peu de fonctionnalités de boost.

Et moins il y a de dépendances plus c'est facile pour moi à gérer car, plus il y a de librairies plus c'est rapide au niveau encodage mais plus c'est galère à installé surtout quand elles ne sont pas toutes compilées avec le même compilateur ou la même version du compilateur.

Toutes les librairies ne sont pas forcément à jour, et, je n'ai pas le temps de m'occuper de la partie c++11 maintenant, donc, je vais d'abord me charger d'ajouter ce qui doit être ajouté et je m'occuperai de résoudre ces problèmes de compilation plus tard, quand les compilateurs seront plus stable et que je n'aurai plus ces problèmes d'incompatibilité à la compilation qui ne sortent je ne sais même pas d'ou. :/

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Re : Framework
« Réponse #56 le: Décembre 04, 2013, 07:26:10 pm »
Voilà j'ai update en mettant une liste reprenant l'architecture de base du framework. (Je vais la modifier un peu)

Le système de states et le module réseau ne sont pas encore intégré j'attend d'avoir le diagramme complet pour le mettre sur github.

Et ensuite je créerai un thread sur le forum Anglais.

Cmdu76

  • Full Member
  • ***
  • Messages: 194
    • Voir le profil
Re : Framework
« Réponse #57 le: Décembre 04, 2013, 08:03:33 pm »
Desolé Excellium j'ai pas pu passer aujourd'hui mais sinon tu peux poser tes questions ici :)

En effet je suis moi aussi pour le fait qu'on arrive à virer boost, moins on repose sur d'autres lib plus c'est simple pour l'utilisateur

Ensuite je vois pas réellement pourquoi tu te galères à retoucher les States, ils marchent déjà très très bien comme ça :)
Après toutes les utilisations que j'ai pu en faire, j'ai pas réellement trouver de moyen de les optimiser

Normalement je t'ai envoyé le diagramme "final" par Skype

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Re : Framework
« Réponse #58 le: Décembre 04, 2013, 09:09:53 pm »
Si tu peux me renvoyé le diagramme sur skype se serait bien ça n'a pas marché.

Ok, je vais regardé ton système pour les states alors, c'est pas vraiment le fait que je galère c'est juste que sans diagramme j'ai du mal de comprendre donc je pense que je vais imposé aux contributeurs de me fournir un diagramme et une liste résumant leurs idées plutôt qu'un bout de code tiré d'un bouquin ou je dois relire 2-3 fois le code et parcourir une dizaines de fichier pour comprendre l'idée. :/

Mais avec ton diagramme ça ira ne t'inquiètes pas.  ;)

J'ai mis un fichier texte sur github pour l'architecture, je pense que je vais rajouté un générateur pour pouvoir générer des entités aléatoirement et implémenté une fenêtre de rendu personnalisée dans le framework pour le tutoriel, ça allégera le main, ça rendra donc le code moins brouillon et ça fera moins peur à certains. :)

PS : tes states sont très bien certes je n'ai jamais pensé le contraire mais c'est juste que j'aimerais y apporter ma petit touche si ça ne te dérange pas.  :)
Ma façon de faire n'est pas fort différente de ce qu'il y a dans le bouquin.
Mais la chose que j'ai toujours reproché aux bouquin c'est que ça manque souvent d'illustrations, et souvent j'ai du mal de comprendre l'idée. (Je dois relire plusieurs fois le bouquin pour comprendre parfois)
Je tombe aussi souvent parfois sur des tutoriels sur internet ou ce n'est pas assez détaillé, ou bien, le code source n'est pas bon. (Alors j'ai du mal à comprendre l'idée et à modifier le code source)
Bref je ne voudrais pas parler de ce qui qualifie un bon d'un mauvais tutoriel ici, donc, je pense que l'on va revenir au sujet.  :)
« Modifié: Décembre 04, 2013, 09:17:07 pm par Lolilolight »

Lolilolight

  • Hero Member
  • *****
  • Messages: 1232
    • Voir le profil
Re : Framework
« Réponse #59 le: Décembre 04, 2013, 10:20:48 pm »
Ou bien si tu le fork ça, ça me va aussi.

PS : j'ai regardé tes fichiers sources sur github et La fonction draw je ne la mettrai pas dans la classe State par contre, je ne vois pas trop comment on pourrait dessiner un état, moi je mettrai la classe renderwindow dans la classe application et je dessinerai tout avec cette classe.

Sinon pour le reste (popStates, pushStates, etc...), je trouve ça super.





« Modifié: Décembre 04, 2013, 10:52:39 pm par Lolilolight »

 

anything