Historique des modifications - Message

Message #7424

Sujet: [irrnewt] pointeur NULL


Type Date Auteur Contenu
Création du message 23-11-2009 17:36:07 T6D98U
bon je débale le source de materials je sais pas si tu comprendras (pour l'op "=" ya un constructeur de copie généré auto wink ):

.h:

Code c++ :


    class Material : public irr::newton::IMaterial
    {
        public:
        Material(bool colid = true,double soft = 0.0,double elast = 0.0,float staticf = 0.f,float kineticf = 0.f);
        ~Material();

        bool colidable;
        double softness;
        double elasticity;
        float staticFriction;
        float kineticFriction;
    };

    class Materials
    {
        public:
        Materials();
        ~Materials();

        void add(string name,Material* mat);
        Material operator[](string name);

        protected:
        map<string,Material*> mats;
    };

    Materials *initMaterials();


.cpp:

Code c++ :


    Material::Material(bool colid,double soft,double elast,float staticf,float kineticf) : IMaterial(data.world->getNewtonWorld())
    {
        colidable = colid;
        softness = soft;
        elasticity = elast;
        staticFriction = staticf;
        kineticFriction = kineticf;
    }

    Material::~Material()
    {
    }




    Materials::Materials()
    {
    }

    Materials::~Materials()
    {
        for(map<string,Material*>::iterator it = mats.begin() ; it != mats.end() ; it++)
            delete it->second;
    }

    void Materials::add(string name,Material* mat)
    {
        mats[name] = mat;

        irr::newton::IMaterial *defaul = new irr::newton::IMaterial(data.world->getNewtonWorld());
        mat->setCollidable(defaul,mat->colidable);
        mat->setContinuousCollisionMode(defaul,false);
        mat->setSoftness(defaul,mat->softness);
        mat->setElasticity(defaul,mat->elasticity);
        mat->setFriction(defaul,mat->staticFriction,mat->kineticFriction);
        for(map<string,Material*>::iterator it = mats.begin() ; it != mats.end() ; it++)
        {
            mat->setCollidable(it->second,mat->colidable && it->second->colidable);
            mat->setContinuousCollisionMode(it->second,false);

            mat->setSoftness(it->second,
                            (mat->softness + it->second->softness)/2);
            mat->setElasticity(it->second,
                              (mat->elasticity + it->second->elasticity)/2 > 1 ? 1 : (mat->elasticity + it->second->elasticity)/2);
            mat->setFriction(it->second,
                            (mat->staticFriction + it->second->staticFriction)/2,
                            (mat->kineticFriction + it->second->kineticFriction)/2);
        }
    }
    Material Materials::operator[](string name)
    {
        return *mats[name];
    }

    Materials *initMaterials()
    {
        Materials *mat = new Materials();
        mat->add("sphere",new Material(true,0.0,1.0));
        return mat;
    }


mais ce code n'a aucun rapport avec mon problème: ce n'est qu'une utilisation du monde newton

Retour

Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
155 invités en ligne
membre en ligne: -
RSS Feed