Bonjour ceci est ma première routine que je poste sur le forum alors svp soyer l'indulgent

Cette classe permet ajouter des joueur/model 3d sans faire 15 ligne de code par modele est peut servir surtout pour les débutant moi je men serre dans mon MMORPG amateur.

player.hplayer.cppmain.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#ifndef DEF_PLAYER    //pour éviter les inclusion multiple
#define DEF_PLAYER

#include <irr\irrlicht.h>           //moteur 3d

using namespace irr;      // namespace
using namespace core;   // namespace
using namespace scene; // namespace
using namespace video; // namespace
using namespace io;      // namespace
using namespace gui;    // namespace
using namespace std;    // namespace

class Player
{
      public:
             Player();        // constructeur
             ~Player();     // destructeur
             
             void CreatePlayer(video::IVideoDriver* driver, scene::ISceneManager* smgr, char model[256], char Texture[256], irr::core::vector3df position, irr::core::vector3df rotation, irr::core::vector3df scale);  // pour cree le nouveau player
             void CreateBillboard(video::IVideoDriver* driver, scene::ISceneManager* smgr, char image[256], int x, int y);  // pour ajouter un billoard au dessu du player
           
             //pour cette partie je me passe de commentaire

             void setPosition(irr::core::vector3df Pposition);
             void setRotation(irr::core::vector3df Protation);
             void setFrameLoop(int debut, int fin);
                     
             IAnimatedMeshSceneNode* getPlayer();
             
             irr::core::vector3df getPosition();
             
             double getPositionX();
             double getPositionY();
             double getPositionZ();
             double getRotationX();
             double getRotationY();
             double getRotationZ();
             
             irr::core::vector3df getRotation();
             
             void Update();
             
      private:
             IAnimatedMeshSceneNode* NodePlayer;                 // le node du player
             
             irr::scene::IBillboardSceneNode *bilo;                    // le billoard
             
             irr::core::vector3df NodePlayerVector;                   // vector 3d
             irr::core::vector3df NodePlayerRotationVector;       // vector 3d
             
             video::ITexture *TXTbiloard;                                 // texture du billboard
             
             char FileModel[256];
             char FileTexture[256];
};

#endif
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132

#include "player.h"

#include <irr\irrlicht.h>
#include <stdio.h>
#include <stdlib.h>

using namespace irr;   // namespace
using namespace core;  // namespace
using namespace scene; // namespace
using namespace video; // namespace
using namespace io;    // namespace
using namespace gui;   // namespace
using namespace std;   // namespace

Player::Player()
{               
}
Player::~Player()
{               
}

/* ---------------------------------------- */
/* ---------------------------------------- */
/* ---------------------------------------- */

void Player::CreatePlayer(video::IVideoDriver* driver,
                          scene::ISceneManager* smgr,
                          char model[256],
                          char Texture[256],
                          irr::core::vector3df position,
                          irr::core::vector3df rotation,
                          irr::core::vector3df scale
                          )
{
      strcpy(FileModel, model);
      strcpy(FileTexture, Texture);
     
     
     
      IAnimatedMesh* mesh = smgr->getMesh(model);
        NodePlayer = smgr->addAnimatedMeshSceneNode(mesh); 
        NodePlayer->setMaterialFlag(EMF_LIGHTING, false);
      NodePlayer->setMaterialTexture( 0, driver->getTexture(Texture));
      NodePlayer->setPosition(position);
      NodePlayer->setScale(scale);
}
void Player::CreateBillboard(video::IVideoDriver* driver, scene::ISceneManager* smgr, char image[256], int x, int y)
{
     bilo = smgr->addBillboardSceneNode(NULL, core::dimension2d<f32>(x, y), NodePlayer->getPosition());
     bilo->setMaterialFlag(irr::video::EMF_LIGHTING, false);
     bilo->setMaterialType(irr::video::EMT_TRANSPARENT_ADD_COLOR);
     TXTbiloard = driver->getTexture(image);
     bilo->setMaterialTexture(0,TXTbiloard);                       
}

/* ---------------------------------------- */
/* ---------------------------------------- */
/* ---------------------------------------- */

void Player::setPosition(irr::core::vector3df Pposition)
{
      NodePlayer->setPosition(Pposition);           
}

/* ---------------------------------------- */

void Player::setRotation(irr::core::vector3df Protation)
{
     NodePlayer->setRotation(Protation);               
}

/* ---------------------------------------- */
/* ---------------------------------------- */
/* ---------------------------------------- */

IAnimatedMeshSceneNode* Player::getPlayer()
{
     return NodePlayer;
}

/* ---------------------------------------- */

irr::core::vector3df Player::getPosition()
{
     return NodePlayer->getPosition();
}
double Player::getPositionX()
{
     return NodePlayer->getPosition().X;
}
double Player::getPositionY()
{
     return NodePlayer->getPosition().Y;
}
double Player::getPositionZ()
{
     return NodePlayer->getPosition().Z;
}
/* ---------------------------------------- */

irr::core::vector3df Player::getRotation()
{
     return NodePlayer->getRotation();               
}
double Player::getRotationX()
{
     return NodePlayer->getRotation().X;
}
double Player::getRotationY()
{
     return NodePlayer->getRotation().Y;
}
double Player::getRotationZ()
{
     return NodePlayer->getRotation().Z;
}

/* ---------------------------------------- */

void Player::setFrameLoop(int debut, int fin)
{
     NodePlayer->setFrameLoop(debut, fin);
}

/* ---------------------------------------- */
/* ---------------------------------------- */
/* ---------------------------------------- */

void Player::Update()
{
     bilo->setPosition(vector3df(NodePlayer->getPosition().X, NodePlayer->getPosition().Y + 75,NodePlayer->getPosition().Z));
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

#include <irr\irrlicht.h>
#include "player.h"


using namespace irr;   // namespace
using namespace core;  // namespace
using namespace scene; // namespace
using namespace video; // namespace
using namespace io;    // namespace
using namespace gui;   // namespace
using namespace std;   // namespace

int main()
{
         IrrlichtDevice *device = createDevice( video::EDT_SOFTWARE, dimension2d<s32>(640, 480), 16, false, false, false, 0);
    IVideoDriver* driver = device->getVideoDriver();
    ISceneManager* smgr = device->getSceneManager();

        Player player;
        player.CreatePlayer(driver, smgr, "sydney.md2", "sydney.bmp", vector3df(326.592804, 400.892242, 390.750366), vector3df(2.000000, 1.5, 2.000000), vector3df(2.0, 1.5, 2.0));
       player.CreateBillboard(driver, smgr, "nom.bmp", 78, 58);
       player.setFrameLoop(0, 150);

        while(device->run())
    {
                player.Update();
        driver->beginScene(true, true, SColor(255,100,101,140));
        smgr->drawAll();
        driver->endScene();
    }
}


Liste des fonction
-CreatePlayer
->pour crée un nouveau joueur

-CreateBillboard
->Pour cree un billboard

-setPosition
->Pour définir la position

-setRotation
->Pour définir la rotation

-setFrameLoop
->Pour définir les frame d'animation

-getPlayer
->Pour récupéré le IAnimatedMeshSceneNode du player

-getPosition
->Pour recuperer la position du player

-getPositionX
-getPositionY
-getPositionZ
->Pour récupérer les valeur de chaque parametre de position separement

-getRotationX
-getRotationY
-getRotationZ
->Pour recuperer les valeur de chaque parametre de rotation separement

-getRotation
->Pour récupérer la rotation du player

-Update
->Pour Mettre a jour la position du billboard


ATTENTION
N'OUBLIER PAS D'UTILISER LA FONCTION UPDATE SI VOUS UTILISER UN BILLBOARD


Bon ben voila. j'espère que sa poura aider quelque personne et tant donner que c'est ma première aide.