Changeset 5

Show
Ignore:
Timestamp:
01/07/09 00:45:59 (3 years ago)
Author:
nktug
Message:

Add all buttons in the workbench to manipulate an object
Add code to change position, scale and rotation for the selected Object
Fix some crash when choosing an Object
Fix some crash when closing the app
/////////////// NEXT
+ Add an object to the map if we click on the left button
+ Save the world Objects
+ Load the world objects

Location:
trunk
Files:
9 modified

Legend:

Unmodified
Added
Removed
  • trunk/include/dreamforge/GameObjectManager.hh

    r4 r5  
    6161                        // ACCESSORS 
    6262                        ObjectPtr getObjectById(const std::string &objectId); 
     63      ObjectPtr getObjectByName(const std::string &objectName); 
    6364                 /**  
    6465                        * getInstance 
  • trunk/src/LevelEditor.cc

    r4 r5  
    1010#include "LevelEditor.hh" 
    1111#include "dreamforge/GameEngine.hh" 
    12  
     12 #include "Properties.hh" 
     13  
    1314#include "dreamforge/GameObjectManager.hh" 
    1415 
     
    3132        mVp = 0; 
    3233         
    33  
    3434        mouseLeftPressed = false; 
    3535        mouseRightPressed = false; 
     
    4343        angleY = 0.0; // when I upgraded to Qt4.2, they were left undefined. 
    4444         
    45         mCurentObject = 0; // Trace the curent selected object. 
    46         closestObject = 0; 
    47  
     45        //mCurentObject = 0;  
     46        closestObject = 0;// Trace the curent selected object. 
     47  mTempEnt = 0; 
     48  mTempObject = 0; 
     49  mAnimState = 0; 
    4850 
    4951  mInsertMode = false; 
     
    5456  CEngineSystem::getInstance()->initEngine(); 
    5557  mRoot = CEngineSystem::getInstance()->getRoot(); 
    56   
     58   
     59    // Create a tree widget 
     60  objProperties = new SelectedObjProp; 
     61   
     62   // Connect action 
     63  connect(objProperties->objectView, SIGNAL(clicked( const QModelIndex & )),this, SLOT(chooseObject())); 
     64  connect(objProperties->sObjInput, SIGNAL(editingFinished()),this, SLOT(changeObjectName())); 
     65  connect(objProperties->nodeXVal, SIGNAL(valueChanged ( double )),this, SLOT(changeObjectPositionX())); 
     66  connect(objProperties->nodeYVal, SIGNAL(valueChanged ( double )),this, SLOT(changeObjectPositionY())); 
     67  connect(objProperties->nodeZVal, SIGNAL(valueChanged ( double )),this, SLOT(changeObjectPositionZ()));  
     68  connect(objProperties->snodeXVal, SIGNAL(valueChanged ( double )),this, SLOT(changeObjectScaleX())); 
     69  connect(objProperties->snodeYVal, SIGNAL(valueChanged ( double )),this, SLOT(changeObjectScaleY())); 
     70  connect(objProperties->snodeZVal, SIGNAL(valueChanged ( double )),this, SLOT(changeObjectScaleZ()));  
     71  connect(objProperties->rnodeXVal, SIGNAL(valueChanged ( double )),this, SLOT(pitchSelectedObject())); 
     72  connect(objProperties->rnodeYVal, SIGNAL(valueChanged ( double )),this, SLOT(yawSelectedObject())); 
     73  connect(objProperties->rnodeZVal, SIGNAL(valueChanged ( double )),this, SLOT(rollSelectedObject()));  
    5774  // Enable tracking mouse event even if we do not clic any buttons 
    5875  setMouseTracking(true); 
     
    6784        } 
    6885  */ 
    69         // Destroy all object loaded in game 
    70         //CObjectManager::getInstance()->cleanAll(); 
    71         //CObjectManager::getInstance()->destroy(); 
     86  /*if(mTempEnt || mTempObject) 
     87  { 
     88    mSceneMgr->destroyEntity (mTempEnt); 
     89    mSceneMgr->destroySceneNode(mTempObject->getName()); 
     90    mAnimState = 0; 
     91    mTempEnt = 0; 
     92    mTempObject = 0; 
     93  }*/ 
     94       
     95  // Destroy all object loaded in game 
     96  CObjectManager::getInstance()->cleanAll(); 
     97  CObjectManager::getInstance()->destroy(); 
    7298  // Destroy the factory 
    73   //CObjectFactory::getInstance()->destroy(); 
     99  CObjectFactory::getInstance()->destroy(); 
    74100   
    75101  // Stop and destroy the Graphic engine 
     
    77103  CEngineSystem::getInstance()->destroy();     
    78104  mRoot = 0; 
     105} 
     106 
     107//------------------------------------------------------------------------------------------------  
     108///////////////////////////////// ACTIONS ////////////////////////////////////////////////////// 
     109//------------------------------------------------------------------------------------------------  
     110void LevelEdWidget::chooseObject( void ) 
     111{ 
     112  //QListWidgetItem* item = mObjectList->currentItem(); 
     113  QModelIndex item = objProperties->objectView->currentIndex(); 
     114  QModelIndex itemTmp = item.sibling( item.row(), item.column()+1); 
     115    
     116  if(!itemTmp.data().toString().isEmpty()) 
     117  { 
     118    QString name = item.data().toString(); 
     119    QString meshfile = itemTmp.data().toString(); 
     120     
     121    this->createTempObject(name.toStdString() , meshfile.toStdString()); 
     122  } 
     123 
     124} 
     125 
     126//------------------------------------------------------------------------------------------------  
     127void LevelEdWidget::changeObjectName( void ) 
     128{ 
     129  //Get the new text enter in the QLineEdit box 
     130  mCurentObject->setObjectName(objProperties->sObjInput->text().toStdString()); 
     131 
     132} 
     133 
     134//------------------------------------------------------------------------------------------------  
     135void LevelEdWidget::changeObjectPositionX( void) 
     136{ 
     137  float x = objProperties->nodeXVal->value();   
     138  //Get the new text enter in the QLineEdit box 
     139  mCurentObject->getSceneNode()->setPosition(x, mCurentObject->getSceneNode()->getPosition().y, mCurentObject->getSceneNode()->getPosition().z); 
     140} 
     141//------------------------------------------------------------------------------------------------  
     142void LevelEdWidget::changeObjectPositionY( void) 
     143{ 
     144  float y = objProperties->nodeYVal->value();  
     145  //Get the new text enter in the QLineEdit box 
     146  mCurentObject->getSceneNode()->setPosition(mCurentObject->getSceneNode()->getPosition().x, y, mCurentObject->getSceneNode()->getPosition().z); 
     147} 
     148//------------------------------------------------------------------------------------------------  
     149void LevelEdWidget::changeObjectPositionZ( void) 
     150{ 
     151  float z = objProperties->nodeZVal->value(); 
     152  //Get the new text enter in the QLineEdit box 
     153  mCurentObject->getSceneNode()->setPosition(mCurentObject->getSceneNode()->getPosition().x, mCurentObject->getSceneNode()->getPosition().y, z); 
     154} 
     155//------------------------------------------------------------------------------------------------  
     156//------------------------------------------------------------------------------------------------  
     157void LevelEdWidget::changeObjectScaleX( void) 
     158{ 
     159  float x = objProperties->snodeXVal->value();   
     160  //Get the new text enter in the QLineEdit box 
     161  mCurentObject->getSceneNode()->setScale(x, mCurentObject->getSceneNode()->getScale().y, mCurentObject->getSceneNode()->getScale().z); 
     162} 
     163//------------------------------------------------------------------------------------------------  
     164void LevelEdWidget::changeObjectScaleY( void) 
     165{ 
     166  float y = objProperties->snodeYVal->value();  
     167  //Get the new text enter in the QLineEdit box 
     168  mCurentObject->getSceneNode()->setScale(mCurentObject->getSceneNode()->getScale().x, y, mCurentObject->getSceneNode()->getScale().z); 
     169} 
     170//------------------------------------------------------------------------------------------------  
     171void LevelEdWidget::changeObjectScaleZ( void) 
     172{ 
     173  float z = objProperties->snodeZVal->value(); 
     174  //Get the new text enter in the QLineEdit box 
     175  mCurentObject->getSceneNode()->setScale(mCurentObject->getSceneNode()->getScale().x, mCurentObject->getSceneNode()->getScale().y, z); 
     176} 
     177//------------------------------------------------------------------------------------------------  
     178//------------------------------------------------------------------------------------------------  
     179void LevelEdWidget::pitchSelectedObject( void) 
     180{ 
     181  float x = objProperties->rnodeXVal->value();   
     182    Ogre::Degree rX(x); 
     183  //Get the new text enter in the QLineEdit box 
     184  mCurentObject->getSceneNode()->pitch(rX); 
     185} 
     186//------------------------------------------------------------------------------------------------  
     187void LevelEdWidget::yawSelectedObject( void) 
     188{ 
     189  float y = objProperties->rnodeYVal->value(); 
     190  Ogre::Degree rY(y); 
     191  //Get the new text enter in the QLineEdit box 
     192  mCurentObject->getSceneNode()->yaw(rY); 
     193} 
     194//------------------------------------------------------------------------------------------------  
     195void LevelEdWidget::rollSelectedObject( void) 
     196{ 
     197  float z = objProperties->rnodeZVal->value(); 
     198    Ogre::Degree rZ(z); 
     199  //Get the new text enter in the QLineEdit box 
     200  mCurentObject->getSceneNode()->roll(rZ); 
    79201} 
    80202 
     
    214336void LevelEdWidget::changeInsertionMode(bool val) 
    215337{ 
    216   if(val) 
     338  if(true == val) 
    217339  { 
    218340    mInsertMode = true; 
    219341    mEditionMode = false; 
    220     if(mCurentObject) 
     342    if(mCurentObject.use_count()) 
    221343    { 
    222       mCurentObject->showBoundingBox(false); 
    223       mCurentObject = 0; 
     344      mCurentObject->getSceneNode()->showBoundingBox(false); 
     345      mCurentObject.reset(); 
     346       
     347      this->resetSelectedObjectInfo(); 
    224348    } 
    225349  } 
     
    229353    mEditionMode = true; 
    230354     
    231     if(mTempObject.use_count()) 
     355    if(mTempObject) 
    232356    { 
    233       mSceneMgr->destroyEntity (mTempObject->getEntity()); 
    234       mSceneMgr->destroySceneNode(mTempObject->getSceneNode()->getName()); 
    235       mTempObject.reset(); 
     357      mSceneMgr->destroyEntity (mTempEnt); 
     358      mSceneMgr->destroySceneNode(mTempObject->getName()); 
     359      mTempEnt = 0; 
     360      mTempObject = 0; 
     361      mAnimState = 0; 
    236362    } 
    237363  } 
     
    243369  this->changeInsertionMode(true); 
    244370   
    245   mTempObject = CObjectFactory::getInstance()->createObject("PJ"); 
    246   mTempObject->setObjectName(name); 
    247   mTempObject->setObjectMeshFile(file); 
    248   mTempObject->initNodeObject(); 
    249   mTempObject->getSceneNode()->setPosition(100,100,100); 
    250   //mTempObject->getSceneNode()->showBoundingBox(false); 
    251   mTempObject->init(); 
     371  if(mTempEnt) 
     372  { 
     373    mSceneMgr->destroyEntity (mTempEnt); 
     374    mTempEnt = 0; 
     375    mAnimState = 0;     
     376  } 
     377   
     378  if(mTempObject) 
     379  { 
     380    mSceneMgr->destroySceneNode(mTempObject->getName()); 
     381    mTempObject = 0;     
     382  } 
     383   
     384  mTempEnt = mSceneMgr->createEntity("tempObject", file); 
     385        // Add entity to the root scene node 
     386        mTempObject = mSceneMgr->getRootSceneNode()->createChildSceneNode(); 
     387        mTempObject->attachObject(mTempEnt); 
     388  mTempObject->scale( 1, 1, 1 ); 
     389   
     390  if(mTempEnt->hasSkeleton()) 
     391  { 
     392    Ogre::AnimationStateIterator animIter = mTempEnt->getAllAnimationStates()->getAnimationStateIterator(); 
     393    mAnimState = mTempEnt->getAnimationState(animIter.getNext()->getAnimationName()); 
     394    mAnimState->setEnabled(true); 
     395    mAnimState->setLoop(true); 
     396  } 
    252397} 
    253398 
     
    267412                //updateStats(); 
    268413    // Update all object in Game 
    269     if(mTempObject.use_count()) 
     414    if(mTempObject && mAnimState) 
    270415    { 
    271       mTempObject->update(mRenderWindow->getBestFPS()/100000); 
     416      mAnimState->addTime(mRenderWindow->getBestFPS()/100000); 
    272417    } 
    273418     
     
    329474    } 
    330475     
    331     if(mEditionMode && mCurentObject) 
     476    if(mEditionMode && mCurentObject.use_count()) 
    332477    { 
    333       mCurentObject->showBoundingBox(false); 
    334       mCurentObject = 0; 
     478      mCurentObject->getSceneNode()->showBoundingBox(false); 
     479      mCurentObject.reset(); 
     480       
     481      this->resetSelectedObjectInfo(); 
    335482    } 
    336483  } 
     
    340487bool LevelEdWidget::isHoverObjectSelected(void) const 
    341488{ 
    342         if (mCurentObject == closestObject->getParentSceneNode()) 
     489        if (mCurentObject->getObjectID() == closestObject->getParentNode()->getName()) 
    343490        { 
    344491                return true; 
    345492        } 
    346493        return false; 
     494} 
     495 
     496//------------------------------------------------------------------------------------------------  
     497void LevelEdWidget::getSelectedObjectInfo(void) 
     498{ 
     499  QString str = mCurentObject->getObjectName().c_str(); 
     500  objProperties->sObjInput->setText( str ); 
     501  objProperties->nodeXVal->setValue ( mCurentObject->getSceneNode()->getPosition().x ); 
     502  objProperties->nodeYVal->setValue ( mCurentObject->getSceneNode()->getPosition().y ); 
     503  objProperties->nodeZVal->setValue ( mCurentObject->getSceneNode()->getPosition().z ); 
     504   
     505  objProperties->snodeXVal->setValue ( mCurentObject->getSceneNode()->getScale().x ); 
     506  objProperties->snodeYVal->setValue ( mCurentObject->getSceneNode()->getScale().y ); 
     507  objProperties->snodeZVal->setValue ( mCurentObject->getSceneNode()->getScale().z ); 
     508 
     509} 
     510 
     511//------------------------------------------------------------------------------------------------  
     512void LevelEdWidget::resetSelectedObjectInfo(void) 
     513{ 
     514  objProperties->sObjInput->clear(); 
     515  objProperties->nodeXVal->clear (); 
     516  objProperties->nodeYVal->clear (); 
     517  objProperties->nodeZVal->clear (); 
     518   
     519  objProperties->snodeXVal->clear(); 
     520  objProperties->snodeYVal->clear(); 
     521  objProperties->snodeZVal->clear();  
     522   
     523  objProperties->rnodeXVal->clear(); 
     524  objProperties->rnodeYVal->clear(); 
     525  objProperties->rnodeZVal->clear();   
    347526} 
    348527 
     
    388567      if(closestObject)  
    389568      { 
    390         if(mCurentObject) // check if we do not have an object already selected 
     569        if(mCurentObject.use_count()) // check if we do not have an object already selected 
    391570        { 
    392571          // if we are over it 
     
    395574          if (!mSelectedObject) // if it is not the case, it is an other object 
    396575          { 
    397             mCurentObject->showBoundingBox(false); 
    398             mCurentObject = closestObject->getParentSceneNode(); 
    399             mCurentObject->showBoundingBox(true); 
     576            mCurentObject->getSceneNode()->showBoundingBox(false); 
     577            mCurentObject.reset(); 
     578            mCurentObject = CObjectManager::getInstance()->getObjectById(closestObject->getParentNode()->getName()); 
     579            mCurentObject->getSceneNode()->showBoundingBox(true); 
     580             
     581            this->getSelectedObjectInfo(); 
     582             
    400583            std::cout << "** objet trouve diff objet courant **" << std::endl; 
    401584          } 
     
    407590        else // We have no object selected, marked this one 
    408591        { 
    409           mCurentObject = closestObject->getParentSceneNode(); 
    410           mCurentObject->showBoundingBox(true); 
     592          mCurentObject = CObjectManager::getInstance()->getObjectById(closestObject->getParentNode()->getName()); 
     593          mCurentObject->getSceneNode()->showBoundingBox(true); 
     594           
     595          this->getSelectedObjectInfo(); 
     596    
    411597          std::cout << "** objet trouve mais objet courant inexistant **" << std::endl; 
    412598        } 
     
    415601      { 
    416602        std::cout << "** pas objet trouve **" << std::endl; 
    417         if(mCurentObject) // if an other object is selected so disable it 
     603        if(mCurentObject.use_count()) // if an other object is selected so disable it 
    418604        { 
    419           mCurentObject->showBoundingBox(false); 
    420           mCurentObject = 0; 
     605          mCurentObject->getSceneNode()->showBoundingBox(false); 
     606          mCurentObject.reset(); 
     607           
     608          this->resetSelectedObjectInfo(); 
     609           
    421610          std::cout << "** deselection object courant **" << std::endl; 
    422611        }        
     
    494683  if(mEditionMode) 
    495684  { 
    496     if (mouseLeftPressed && mCurentObject) // If we have left click and we have an object selected 
     685    if (mouseLeftPressed && mCurentObject.use_count()) // If we have left click and we have an object selected 
    497686    {    
    498687      Ogre::Ray mouseRay = mCamera->getCameraToViewportRay((double)evt->pos().x()/(double)width(), (double)evt->pos().y()/(double)height()); 
     
    505694      Ogre::RaySceneQueryResult::iterator itr = result.begin(); 
    506695 
    507       if (itr != result.end() && itr->worldFragment && mCurentObject) 
     696      if (itr != result.end() && itr->worldFragment) 
    508697      { 
    509           mCurentObject->setPosition(itr->worldFragment->singleIntersection.x,itr->worldFragment->singleIntersection.y + 10, itr->worldFragment->singleIntersection.z); 
     698          mCurentObject->getSceneNode()->setPosition(itr->worldFragment->singleIntersection.x,itr->worldFragment->singleIntersection.y + 10, itr->worldFragment->singleIntersection.z); 
    510699      } 
    511700    } 
    512701  } 
    513702   
    514   if(mInsertMode)// && mTempObject.use_count()) 
     703  if(mInsertMode)// && mTempObject) 
    515704  { 
    516705    Ogre::Ray mRay = mCamera->getCameraToViewportRay((double)evt->pos().x()/(double)width(), (double)evt->pos().y()/(double)height()); 
     
    525714                if (it != reslt.end() && it->worldFragment) 
    526715                { 
    527                                 mTempObject->getSceneNode()->setPosition(it->worldFragment->singleIntersection.x,it->worldFragment->singleIntersection.y + 10, it->worldFragment->singleIntersection.z); 
     716                                mTempObject->setPosition(it->worldFragment->singleIntersection.x,it->worldFragment->singleIntersection.y + 10, it->worldFragment->singleIntersection.z); 
    528717                }     
    529718  } 
  • trunk/src/LevelEditor.hh

    r4 r5  
    1010#endif 
    1111 
     12#include "Properties.hh" 
    1213#include "dreamforge/objects/Object.hh"  
    1314 
     
    3435  inline Ogre::RenderWindow* getRenderWindow(void) { return mRenderWindow; } 
    3536  inline Ogre::SceneManager* getSceneMgr(void) { return mSceneMgr; }  
     37   
     38        ObjectPtr                               mCurentObject; // Selected object 
     39        Ogre::MovableObject*    closestObject; // Object use in the ray cast 
     40  Ogre::Entity*         mTempEnt; 
     41  Ogre::SceneNode*                      mTempObject;   // Object use to fallow the mouse cursor for insertion 
     42  Ogre::AnimationState* mAnimState;   
    3643 
     44  /////////////////////// 
     45  SelectedObjProp* objProperties; 
     46 
     47private slots: 
     48  void chooseObject(void); 
     49  void changeObjectName( void ); 
     50  void changeObjectPositionX( void); 
     51  void changeObjectPositionY( void); 
     52  void changeObjectPositionZ( void); 
     53  void changeObjectScaleX( void); 
     54  void changeObjectScaleY( void); 
     55  void changeObjectScaleZ( void); 
     56  void pitchSelectedObject(void); 
     57  void yawSelectedObject(void); 
     58  void rollSelectedObject(void); 
     59   
    3760protected: 
    3861  void setupView(); 
     
    4467 
    4568        void createScene(); 
     69  void getSelectedObjectInfo(void); 
     70  void resetSelectedObjectInfo(void); 
    4671         
    4772        void keyPressEvent(QKeyEvent* evt); 
     
    7499        bool mouseRightPressed; 
    75100        bool mouseMiddleBtn; 
    76  
    77         Ogre::SceneNode*                        mCurentObject; // Selected object 
    78         Ogre::MovableObject*    closestObject; // Object use in the ray cast 
    79   ObjectPtr                             mTempObject;   // Object use to fallow the mouse cursor for insertion 
    80101         
    81102  // Action mode 
  • trunk/src/Properties.cc

    r4 r5  
    7272  //******************************************** 
    7373  QGroupBox* groupProp = new QGroupBox("Propriétés de l'objet"); 
     74  QGroupBox* groupRotObj = new QGroupBox("Rotation objet"); 
    7475   
    7576  QLabel* sObjSelec = new QLabel(tr("Nom :")); 
    76   QLineEdit* sObjInput = new QLineEdit; 
     77  sObjInput = new QLineEdit; 
    7778   
    7879  // Object Postion 
    7980  QGroupBox* groupNodePos = new QGroupBox("Node Position"); 
    8081  QLabel* nodeXText = new QLabel(tr("X :")); 
    81   QSpinBox* nodeXVal = new QSpinBox; 
     82  nodeXVal = new QDoubleSpinBox; 
    8283  QLabel* nodeYText = new QLabel(tr("Y :")); 
    83   QSpinBox* nodeYVal = new QSpinBox;   
     84  nodeYVal = new QDoubleSpinBox;   
    8485  QLabel* nodeZText = new QLabel(tr("Z :")); 
    85   QSpinBox* nodeZVal = new QSpinBox; 
    86    
    87   // Grille 
     86  nodeZVal = new QDoubleSpinBox; 
     87   
     88  nodeXVal->setSingleStep ( 10.0 ); 
     89  nodeXVal->setMaximum  ( 9999999.99 ); 
     90  nodeYVal->setSingleStep ( 10.0 ); 
     91  nodeYVal->setMaximum  ( 9999999.99 ); 
     92  nodeZVal->setSingleStep ( 10.0 ); 
     93  nodeZVal->setMaximum  ( 9999999.99 ); 
     94   
     95  // Grille position 
    8896  QGridLayout* gridNodePosLayout = new QGridLayout; 
    8997  gridNodePosLayout->addWidget(nodeXText, 0, 0); 
     
    99107  QGroupBox* groupNodeScal = new QGroupBox("Node Scale"); 
    100108  QLabel* snodeXText = new QLabel(tr("X :")); 
    101   QSpinBox* snodeXVal = new QSpinBox; 
     109  snodeXVal = new QDoubleSpinBox; 
    102110  QLabel* snodeYText = new QLabel(tr("Y :")); 
    103   QSpinBox* snodeYVal = new QSpinBox;   
     111  snodeYVal = new QDoubleSpinBox;   
    104112  QLabel* snodeZText = new QLabel(tr("Z :")); 
    105   QSpinBox* snodeZVal = new QSpinBox; 
    106    
    107   // Grille 
     113  snodeZVal = new QDoubleSpinBox; 
     114 
     115  snodeXVal->setSingleStep ( 0.1 ); 
     116  snodeXVal->setMaximum  ( 9999.90 ); 
     117  snodeYVal->setSingleStep ( 0.1 ); 
     118  snodeYVal->setMaximum  ( 10.0 ); 
     119  snodeZVal->setSingleStep ( 0.1 ); 
     120  snodeZVal->setMaximum  ( 10.0 );   
     121   
     122   
     123  // Grille scale 
    108124  QGridLayout* gridNodeScalLayout = new QGridLayout; 
    109125  gridNodeScalLayout->addWidget(snodeXText, 0, 0); 
     
    115131   
    116132  groupNodeScal->setLayout(gridNodeScalLayout); 
    117    
    118   // Grille 
     133  
     134   // Object Rotation 
     135  QGroupBox* groupNodeRot = new QGroupBox("Node Rotation"); 
     136  QLabel* rnodeXText = new QLabel(tr("Xaxis (pitch) :")); 
     137  rnodeXVal = new QDoubleSpinBox; 
     138  QLabel* rnodeYText = new QLabel(tr("Yaxis (yaw) :")); 
     139  rnodeYVal = new QDoubleSpinBox;   
     140  QLabel* rnodeZText = new QLabel(tr("Zaxis (roll) :")); 
     141  rnodeZVal = new QDoubleSpinBox; 
     142 
     143  rnodeXVal->setSingleStep ( 10.0 ); 
     144  rnodeXVal->setMaximum  ( 360.0 ); 
     145  rnodeXVal->setMinimum  ( -360.0 );   
     146  rnodeYVal->setSingleStep ( 10.0 ); 
     147  rnodeYVal->setMaximum  ( 360.0 ); 
     148  rnodeYVal->setMinimum  ( -360.0 );   
     149  rnodeZVal->setSingleStep ( 10.0 ); 
     150  rnodeZVal->setMaximum  ( 360.0 );   
     151  rnodeZVal->setMinimum  ( -360.0 );  
     152   
     153  // Grille Rotation 
     154  QGridLayout* gridNodeRotLayout = new QGridLayout; 
     155  gridNodeRotLayout->addWidget(rnodeXText, 0, 0); 
     156  gridNodeRotLayout->addWidget(rnodeXVal, 0, 1); 
     157  gridNodeRotLayout->addWidget(rnodeYText, 1, 0); 
     158  gridNodeRotLayout->addWidget(rnodeYVal, 1, 1); 
     159  gridNodeRotLayout->addWidget(rnodeZText, 2, 0); 
     160  gridNodeRotLayout->addWidget(rnodeZVal, 2, 1); 
     161   
     162  groupNodeRot->setLayout(gridNodeRotLayout);  
     163   
     164   
     165  // Grille global 
    119166  QGridLayout* gridsObjLayout = new QGridLayout; 
    120167  gridsObjLayout->addWidget(sObjSelec, 0, 0); 
     
    122169  gridsObjLayout->addWidget(groupNodePos, 1, 0); 
    123170  gridsObjLayout->addWidget(groupNodeScal, 1, 1); 
    124    
     171 
     172  // Grille special rotation 
     173  QGridLayout* gridsObjRotLayout = new QGridLayout; 
     174  gridsObjRotLayout->addWidget(groupNodeRot); 
     175   
     176  // add all our layout to a group box 
    125177  groupProp->setLayout(gridsObjLayout); 
     178  groupRotObj->setLayout(gridsObjRotLayout); 
    126179   
    127180  //******************************************** 
    128181  QVBoxLayout* regroupLayout = new QVBoxLayout; 
    129   //regroupLayout->addWidget(groupCombo); 
    130   //regroupLayout->addWidget(mObjectList); 
    131182  regroupLayout->addWidget(objectView); 
    132183  regroupLayout->addWidget(groupProp); 
     184  regroupLayout->addWidget(groupRotObj); 
    133185   
    134186  setLayout(regroupLayout); 
  • trunk/src/Properties.hh

    r4 r5  
    1818    SelectedObjProp(QWidget *parent = 0); 
    1919    ~SelectedObjProp(); 
    20    
     20     
     21    QTreeView* objectView; 
     22    TreeModel *model; 
     23    QLineEdit* sObjInput; 
     24    // Postion 
     25    QDoubleSpinBox* nodeXVal; 
     26    QDoubleSpinBox* nodeYVal; 
     27    QDoubleSpinBox* nodeZVal; 
     28    // Scale 
     29    QDoubleSpinBox* snodeXVal; 
     30    QDoubleSpinBox* snodeYVal; 
     31    QDoubleSpinBox* snodeZVal;       
     32    // Rotation 
     33    QDoubleSpinBox* rnodeXVal; 
     34    QDoubleSpinBox* rnodeYVal; 
     35    QDoubleSpinBox* rnodeZVal;   
     36     
    2137  protected: 
    2238    void mousePressEvent(QMouseEvent* evt); 
    23     void mouseReleaseEvent(QMouseEvent* evt); 
    24   
    25   public: 
    26     QTreeView* objectView; 
    27     TreeModel *model; 
    28 //    QListWidget *mObjectList; 
    29 //    QString mCurSelect; 
     39    void mouseReleaseEvent(QMouseEvent* evt);    
     40     
    3041}; 
    3142 
  • trunk/src/Workbench.cc

    r4 r5  
    2929  tabWidget->addTab(mLevelEd, tr("Editeur de niveau")); 
    3030   
    31   // Create a tree widget 
    32   objProperties = new SelectedObjProp; 
    3331   
    3432  // Create a widget we can drag around the workbench 
    3533  QDockWidget *dock = new QDockWidget(tr("Propriétés"), this); 
    3634  dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); 
    37   dock->setWidget(objProperties); 
     35  dock->setWidget(mLevelEd->objProperties); 
    3836 
    3937  addDockWidget(Qt::RightDockWidgetArea, dock); 
    4038   
    41   // Connect action 
    42   connect(objProperties->objectView, SIGNAL(clicked( const QModelIndex & )),this, SLOT(chooseObject()));    
    4339   
    44   // Try to register the icon resources : Fix me does not work 
     40  // Try to register the icon resources : Fix me does not work  
    4541  QResource::registerResource("application.rcc"); 
    4642   
     
    6157} 
    6258 
    63 //------------------------------------------------------------------------------------------------  
    64 // ACTIONS 
    65 //------------------------------------------------------------------------------------------------  
    66 void Workbench::chooseObject() 
    67 { 
    68   //QListWidgetItem* item = mObjectList->currentItem(); 
    69   QModelIndex item = objProperties->objectView->currentIndex(); 
    70   QModelIndex itemTmp = item.sibling( item.row(), item.column()+1); 
    71     
    72   if(!itemTmp.data().toString().isEmpty()) 
    73   { 
    74     QString name = item.data().toString(); 
    75     QString meshfile = itemTmp.data().toString(); 
    76      
    77     mLevelEd->createTempObject(name.toStdString() , meshfile.toStdString()); 
    78   } 
    7959 
    80 } 
    8160 
    8261//------------------------------------------------------------------------------------------------  
     
    185164  Q_UNUSED(evt); 
    186165} 
     166 
     167//------------------------------------------------------------------------------------------------  
     168void Workbench::timerEvent(QTimerEvent* evt) 
     169{ 
     170        Q_UNUSED(evt); 
     171     
     172} 
  • trunk/src/Workbench.hh

    r4 r5  
    77  
    88 #include "LevelEditor.hh" 
    9  #include "Properties.hh" 
     9  
    1010  
    1111 //class QAction; 
     
    2929 protected: 
    3030    void closeEvent(QCloseEvent *event); 
     31    void timerEvent(QTimerEvent* evt); 
    3132   
    3233 private slots: 
    33     void about(); 
    34     void chooseObject(); 
     34    void about(void); 
     35 
    3536 
    3637 private: 
     
    5960    LevelEdWidget *mLevelEd; 
    6061 
    61     SelectedObjProp* objProperties; 
    6262 }; 
    6363 
  • trunk/src/dreamforge/GameObjectManager.cc

    r3 r5  
    111111 
    112112//------------------------------------------------------------------------------------------------ 
     113ObjectPtr CObjectManager::getObjectByName(const std::string &objectName) 
     114{ 
     115        ObjectPtr obj; 
     116   
     117        mObjectMap::const_iterator iter; 
     118        for(iter = mObjectList.begin(); iter != mObjectList.end(); ++iter) 
     119        { 
     120    if(iter->second->getObjectName() == objectName) 
     121    { 
     122      obj = iter->second; 
     123      return obj; 
     124    } 
     125        } 
     126         
     127} 
     128 
     129//------------------------------------------------------------------------------------------------ 
    113130// OBJECT FACTORY 
    114131//------------------------------------------------------------------------------------------------ 
  • trunk/src/dreamforge/objects/Object.cc

    r3 r5  
    5252{ 
    5353  //TODO : Check the file and name if it empty 
    54         mObjectNode = CEngineSystem::getInstance()->getSceneMgr()->getRootSceneNode()->createChildSceneNode(mObjectName); 
     54        mObjectNode = CEngineSystem::getInstance()->getSceneMgr()->getRootSceneNode()->createChildSceneNode(mObjectID); 
    5555        mEntity = CEngineSystem::getInstance()->getSceneMgr( )->createEntity(mObjectID, mObjectMesh); 
    5656        mEntity->setCastShadows(true); 
     
    6565  //TODO : Check the file and name if it empty 
    6666  mParentNode = parent; 
    67         mObjectNode = mParentNode->createChildSceneNode(mObjectName); 
     67        mObjectNode = mParentNode->createChildSceneNode(mObjectID); 
    6868        mEntity = CEngineSystem::getInstance()->getSceneMgr( )->createEntity(mObjectID, mObjectMesh); 
    6969        mEntity->setCastShadows(true); 
     
    103103  { 
    104104    mParentNode = parent; 
    105     mObjectNode = static_cast<Ogre::SceneNode*>(CEngineSystem::getInstance()->getSceneMgr()->getRootSceneNode()->removeChild(mObjectName)); 
     105    mObjectNode = static_cast<Ogre::SceneNode*>(CEngineSystem::getInstance()->getSceneMgr()->getRootSceneNode()->removeChild(mObjectID)); 
    106106    mParentNode->addChild(mObjectNode); 
    107107  } 
    108108  else // Otherwise detach it from its current parent 
    109109  { 
    110     mObjectNode = static_cast<Ogre::SceneNode*>(mParentNode->removeChild(mObjectName)); 
     110    mObjectNode = static_cast<Ogre::SceneNode*>(mParentNode->removeChild(mObjectID)); 
    111111    mParentNode = parent; 
    112112    mParentNode->addChild(mObjectNode); 
     
    116116void CGameObject::detachToParent( void ) 
    117117{ 
    118   mObjectNode = static_cast<Ogre::SceneNode*>(mParentNode->removeChild(mObjectName)); 
     118  mObjectNode = static_cast<Ogre::SceneNode*>(mParentNode->removeChild(mObjectID)); 
    119119} 
    120120