Changeset 4

Show
Ignore:
Timestamp:
01/05/09 00:17:57 (3 years ago)
Author:
nktug
Message:

Add code to manage object in editor from text file
Add code to add object by cliking the name from a QT list
Add other code from FreeQuest?

Location:
trunk
Files:
21 added
8 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/LevelEditor.cc

    r3 r4  
    1010#include "LevelEditor.hh" 
    1111#include "dreamforge/GameEngine.hh" 
     12 
     13#include "dreamforge/GameObjectManager.hh" 
     14 
    1215 
    1316#if (OGRE_PLATFORM  == OGRE_PLATFORM_LINUX) 
     
    4245        mCurentObject = 0; // Trace the curent selected object. 
    4346        closestObject = 0; 
     47 
     48 
     49  mInsertMode = false; 
     50  mEditionMode = true; // We must always enter on this screen with edition mode 
    4451         
    4552        //this->setupResources(); 
     
    4754  CEngineSystem::getInstance()->initEngine(); 
    4855  mRoot = CEngineSystem::getInstance()->getRoot(); 
     56  
     57  // Enable tracking mouse event even if we do not clic any buttons 
     58  setMouseTracking(true); 
    4959} 
    5060 
     
    5767        } 
    5868  */ 
     69        // Destroy all object loaded in game 
     70        //CObjectManager::getInstance()->cleanAll(); 
     71        //CObjectManager::getInstance()->destroy(); 
     72  // Destroy the factory 
     73  //CObjectFactory::getInstance()->destroy(); 
     74   
     75  // Stop and destroy the Graphic engine 
    5976  CEngineSystem::getInstance()->stopEngine(); 
    6077  CEngineSystem::getInstance()->destroy();     
     
    6380 
    6481//******************************Setup Ogre*********************************** 
    65  
    66 void LevelEdWidget::setupResources() 
    67 { 
    68         mRoot = new Ogre::Root(); 
    69  
    70         Ogre::ConfigFile cf; 
    71         cf.load("resources.cfg"); 
    72  
    73         Ogre::ConfigFile::SectionIterator seci = cf.getSectionIterator(); 
    74         Ogre::String secName, typeName, archName; 
    75         while(seci.hasMoreElements()) 
    76         { 
    77                 secName = seci.peekNextKey(); 
    78                 Ogre::ConfigFile::SettingsMultiMap* settings = seci.getNext(); 
    79                 Ogre::ConfigFile::SettingsMultiMap::iterator i; 
    80                 for(i=settings->begin(); i!=settings->end(); ++i){ 
    81                         typeName = i->first; 
    82                         archName = i->second; 
    83                         Ogre::ResourceGroupManager::getSingleton().addResourceLocation(archName, typeName, secName); 
    84                 } 
    85         } 
    86  
    87         //mRoot->restoreConfig(); 
    88  
    89         QSettings settings; 
    90         QString system; 
    91         QString renderSysName; 
    92         QMap<QString, QVariant> options; 
    93         Ogre::RenderSystemList *list = Ogre::Root::getSingleton().getAvailableRenderers(); 
    94  
    95         if(settings.contains("General/RenderSystem")) 
    96         { 
    97                 renderSysName = settings.value("General/RenderSystem").toString(); 
    98         } 
    99         else 
    100         { 
    101         renderSysName = "OpenGL Rendering Subsystem"; 
    102         } 
    103  
    104         for(Ogre::RenderSystemList::iterator it = list->begin(); it != list->end(); it++) 
    105         { 
    106                 if( renderSysName == QString( (*it)->getName().c_str() ) ) 
    107                 { 
    108                         mRoot->setRenderSystem(*it); 
    109                         break; 
    110                 } 
    111  
    112                 system = QString( (*it)->getName().c_str() ); 
    113         system.replace(" ", ""); 
    114  
    115         options.clear(); 
    116         options = settings.value(QString("%1/RenderOptions").arg(renderSysName), options).toMap(); 
    117  
    118         // Prevent DirectX from crashing 
    119         if(options.contains("Full Screen")) 
    120             options["Full Screen"] = "No"; 
    121  
    122         QMapIterator<QString, QVariant> i(options); 
    123         while(i.hasNext()) 
    124         { 
    125             i.next(); 
    126             (*it)->setConfigOption( Ogre::String(i.key().toLatin1().data()),  Ogre::String(i.value().toString().toLatin1().data()) ); 
    127         } 
    128     } 
    129  
    130         mRoot->initialise(false); 
    131 } 
    13282 
    13383//------------------------------------------------------------------------------------------------  
     
    167117        // Above the camera, facing down 
    168118        plane.normal = -Ogre::Vector3::UNIT_Y; 
    169          
     119/* 
    170120        Ogre::Entity *ent = mSceneMgr->createEntity("head", "ogrehead.mesh"); 
    171121        // Add entity to the root scene node 
    172         //mSceneMgr->getRootSceneNode()->createChildSceneNode()->attachObject(ent); 
    173122        Ogre::SceneNode* headNode = mSceneMgr->getRootSceneNode()->createChildSceneNode(); 
    174123        headNode->attachObject(ent); 
     
    176125        headNode->setPosition(500,600,600); 
    177126        headNode->showBoundingBox(false); 
    178          
    179         clamToTerrain(headNode); 
     127 */ 
     128  ObjectPtr tObj = CObjectFactory::getInstance()->createObject("PJ"); 
     129  tObj->setObjectName("toto"); 
     130  tObj->setObjectMeshFile("ninja.mesh"); 
     131  tObj->initNodeObject(); 
     132  tObj->getSceneNode()->yaw(Ogre::Degree(-180)); 
     133  tObj->getSceneNode()->setPosition(500,600,600); 
     134  tObj->getSceneNode()->showBoundingBox(false); 
     135  tObj->init(); 
     136   
     137        clamToTerrain(tObj->getSceneNode());   
     138   
     139  CObjectManager::getInstance()->addObject(tObj); 
    180140         
    181141} 
     
    226186        Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups(); 
    227187 
    228         createScene(); 
     188        this->createScene(); 
    229189        //createFog(); 
    230190        //createLight(); 
     
    250210    startTimer(5); 
    251211}; 
     212 
     213//************************************************************************ 
     214void LevelEdWidget::changeInsertionMode(bool val) 
     215{ 
     216  if(val) 
     217  { 
     218    mInsertMode = true; 
     219    mEditionMode = false; 
     220    if(mCurentObject) 
     221    { 
     222      mCurentObject->showBoundingBox(false); 
     223      mCurentObject = 0; 
     224    } 
     225  } 
     226  else 
     227  { 
     228    mInsertMode = false; 
     229    mEditionMode = true; 
     230     
     231    if(mTempObject.use_count()) 
     232    { 
     233      mSceneMgr->destroyEntity (mTempObject->getEntity()); 
     234      mSceneMgr->destroySceneNode(mTempObject->getSceneNode()->getName()); 
     235      mTempObject.reset(); 
     236    } 
     237  } 
     238} 
     239 
     240//------------------------------------------------------------------------------------------------  
     241void LevelEdWidget::createTempObject(std::string& name, std::string& file) 
     242{ 
     243  this->changeInsertionMode(true); 
     244   
     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(); 
     252} 
     253 
    252254 
    253255//------------------------------------------------------------------------------------------------  
     
    264266                 
    265267                //updateStats(); 
     268    // Update all object in Game 
     269    if(mTempObject.use_count()) 
     270    { 
     271      mTempObject->update(mRenderWindow->getBestFPS()/100000); 
     272    } 
     273     
     274    CObjectManager::getInstance()->updateObject( mRenderWindow->getBestFPS()/100000 ); 
    266275                mRoot->_fireFrameEnded(); 
    267276        } 
     
    313322void LevelEdWidget::keyReleaseEvent(QKeyEvent* evt) 
    314323{ 
    315  
     324  if(evt->key() == Qt::Key_Escape) 
     325  { 
     326    if(mInsertMode) 
     327    { 
     328      this->changeInsertionMode(false); 
     329    } 
     330     
     331    if(mEditionMode && mCurentObject) 
     332    { 
     333      mCurentObject->showBoundingBox(false); 
     334      mCurentObject = 0; 
     335    } 
     336  } 
    316337} 
    317338 
     
    331352        if(evt->button() == Qt::LeftButton) 
    332353        { 
    333                 mouseLeftPressed = true; 
    334                  
    335         Ogre::Ray mouseRay = mCamera->getCameraToViewportRay((double)evt->pos().x()/(double)width(), (double)evt->pos().y()/(double)height()); 
    336  
    337         Ogre::RaySceneQuery* mRaySceneQuery = mSceneMgr->createRayQuery(Ogre::Ray());; 
    338         mRaySceneQuery->setRay(mouseRay); 
    339          
    340         mRaySceneQuery->setSortByDistance(true); 
    341         Ogre::RaySceneQueryResult &result = mRaySceneQuery->execute(); 
    342  
    343         //Ogre::Real closestDistance = 100000; 
    344  
    345         closestObject = 0; 
    346         bool mSelectedObject = false; 
    347          
    348         Ogre::RaySceneQueryResult::iterator rayIterator; 
    349  
    350         for(rayIterator = result.begin(); rayIterator != result.end(); rayIterator++ )  
    351         { 
    352                 if (rayIterator->movable !=NULL && rayIterator->movable->getMovableType() == "Entity") 
    353                 { 
    354                         closestObject = rayIterator->movable; 
    355                         std::cout << "** found **" << std::endl; 
    356                 } 
    357         } 
    358  
    359         mRaySceneQuery->clearResults(); 
    360          
    361          
    362         if(closestObject)  
    363         { 
    364                 if(mCurentObject) 
    365                 { 
    366                         mSelectedObject = isHoverObjectSelected(); 
    367                          
    368                         if (!mSelectedObject) 
    369                         { 
    370                                 mCurentObject->showBoundingBox(false); 
    371                                 mCurentObject = closestObject->getParentSceneNode(); 
    372                                 mCurentObject->showBoundingBox(true); 
    373                                 std::cout << "** objet trouve diff objet courant **" << std::endl; 
    374                         } 
    375                         else{ 
    376                                 std::cout << "** objet deja selectionne **" << std::endl; 
    377                         } 
    378                 } 
    379                 else{ 
    380                         mCurentObject = closestObject->getParentSceneNode(); 
    381                         mCurentObject->showBoundingBox(true); 
    382                         std::cout << "** objet trouve mais objet courant inexistant **" << std::endl; 
    383                 } 
    384         }                
    385         else 
    386         { 
    387                 std::cout << "** pas objet trouve **" << std::endl; 
    388                 if(mCurentObject) 
    389                 { 
    390                         mCurentObject->showBoundingBox(false); 
    391                         mCurentObject = 0; 
    392                         std::cout << "** deselection object courant **" << std::endl; 
    393                 }        
    394         } 
    395         } 
    396          
    397   // Handle right clic button 
     354    if(mEditionMode) // Edition mode only select, move, change object settings 
     355    { 
     356      mouseLeftPressed = true; 
     357      // Create a Ogre ray from the 2D coordinate of the viewport   
     358      Ogre::Ray mouseRay = mCamera->getCameraToViewportRay((double)evt->pos().x()/(double)width(), (double)evt->pos().y()/(double)height()); 
     359 
     360      Ogre::RaySceneQuery* mRaySceneQuery = mSceneMgr->createRayQuery(Ogre::Ray());; 
     361      mRaySceneQuery->setRay(mouseRay); 
     362       
     363      mRaySceneQuery->setSortByDistance(true); 
     364      Ogre::RaySceneQueryResult &result = mRaySceneQuery->execute(); 
     365 
     366      //Ogre::Real closestDistance = 100000; 
     367 
     368      closestObject = 0; 
     369      bool mSelectedObject = false; 
     370       
     371      Ogre::RaySceneQueryResult::iterator rayIterator; 
     372 
     373      // Look if we have reach a Ogre movable object 
     374      for(rayIterator = result.begin(); rayIterator != result.end(); rayIterator++ )  
     375      { 
     376        if (rayIterator->movable !=NULL && rayIterator->movable->getMovableType() == "Entity") 
     377        { 
     378          // get this movable object 
     379          closestObject = rayIterator->movable; 
     380          std::cout << "** found **" << std::endl; 
     381        } 
     382      } 
     383 
     384      // Clear the ray result 
     385      mRaySceneQuery->clearResults(); 
     386       
     387      // If we have found something from the ray 
     388      if(closestObject)  
     389      { 
     390        if(mCurentObject) // check if we do not have an object already selected 
     391        { 
     392          // if we are over it 
     393          mSelectedObject = isHoverObjectSelected(); 
     394           
     395          if (!mSelectedObject) // if it is not the case, it is an other object 
     396          { 
     397            mCurentObject->showBoundingBox(false); 
     398            mCurentObject = closestObject->getParentSceneNode(); 
     399            mCurentObject->showBoundingBox(true); 
     400            std::cout << "** objet trouve diff objet courant **" << std::endl; 
     401          } 
     402          else // if it is true, it is already selected so do nothing 
     403          { 
     404            std::cout << "** objet deja selectionne **" << std::endl; 
     405          } 
     406        } 
     407        else // We have no object selected, marked this one 
     408        { 
     409          mCurentObject = closestObject->getParentSceneNode(); 
     410          mCurentObject->showBoundingBox(true); 
     411          std::cout << "** objet trouve mais objet courant inexistant **" << std::endl; 
     412        } 
     413      }          
     414      else // We found nothing from our ray tracing, it means that we have clicked over the terrain 
     415      { 
     416        std::cout << "** pas objet trouve **" << std::endl; 
     417        if(mCurentObject) // if an other object is selected so disable it 
     418        { 
     419          mCurentObject->showBoundingBox(false); 
     420          mCurentObject = 0; 
     421          std::cout << "** deselection object courant **" << std::endl; 
     422        }        
     423      } 
     424    } // end Edition Mode 
     425       
     426    if(mInsertMode) // Insert new object in the map 
     427    { 
     428      // Next time handle multi insertion object 
     429    } 
     430        } // end LeftButton clic 
     431         
     432  // Handle right clic button to move the camera 
    398433        if(evt->button() == Qt::RightButton) 
    399434        { 
     
    402437        } 
    403438         
    404   // Handle mid clic button 
     439  // Handle mid clic button to zoom the camera 
    405440        if(evt->button() == Qt::MidButton) 
    406441        { 
     
    413448{ 
    414449        Q_UNUSED(evt); 
     450   
     451  if(mouseLeftPressed && mInsertMode) 
     452  { 
     453     
     454  } 
     455   
    415456        mouseLeftPressed = false; 
    416457        mouseRightPressed = false; 
     
    425466 
    426467        } 
     468   
     469   
    427470        if(mouseRightPressed) 
    428471        { 
     
    449492        } 
    450493         
    451         if (mouseLeftPressed) 
    452         {        
    453                 Ogre::Ray mouseRay = mCamera->getCameraToViewportRay((double)evt->pos().x()/(double)width(), (double)evt->pos().y()/(double)height()); 
    454  
    455                 Ogre::RaySceneQuery* mRaySceneQuery = mSceneMgr->createRayQuery(Ogre::Ray());; 
    456                 mRaySceneQuery->setRay(mouseRay); 
     494  if(mEditionMode) 
     495  { 
     496    if (mouseLeftPressed && mCurentObject) // If we have left click and we have an object selected 
     497    {    
     498      Ogre::Ray mouseRay = mCamera->getCameraToViewportRay((double)evt->pos().x()/(double)width(), (double)evt->pos().y()/(double)height()); 
     499 
     500      Ogre::RaySceneQuery* mRaySceneQuery = mSceneMgr->createRayQuery(Ogre::Ray());; 
     501      mRaySceneQuery->setRay(mouseRay); 
     502       
     503      //mRaySceneQuery->setSortByDistance(true); 
     504      Ogre::RaySceneQueryResult &result = mRaySceneQuery->execute(); 
     505      Ogre::RaySceneQueryResult::iterator itr = result.begin(); 
     506 
     507      if (itr != result.end() && itr->worldFragment && mCurentObject) 
     508      { 
     509          mCurentObject->setPosition(itr->worldFragment->singleIntersection.x,itr->worldFragment->singleIntersection.y + 10, itr->worldFragment->singleIntersection.z); 
     510      } 
     511    } 
     512  } 
     513   
     514  if(mInsertMode)// && mTempObject.use_count()) 
     515  { 
     516    Ogre::Ray mRay = mCamera->getCameraToViewportRay((double)evt->pos().x()/(double)width(), (double)evt->pos().y()/(double)height()); 
     517 
     518                Ogre::RaySceneQuery* mRayScQuery = mSceneMgr->createRayQuery(Ogre::Ray());; 
     519                mRayScQuery->setRay(mRay); 
    457520                 
    458521                //mRaySceneQuery->setSortByDistance(true); 
    459                 Ogre::RaySceneQueryResult &result = mRaySceneQuery->execute(); 
    460                 Ogre::RaySceneQueryResult::iterator itr = result.begin(); 
    461  
    462                 if (itr != result.end() && itr->worldFragment && mCurentObject) 
     522                Ogre::RaySceneQueryResult &reslt = mRayScQuery->execute(); 
     523                Ogre::RaySceneQueryResult::iterator it = reslt.begin(); 
     524 
     525                if (it != reslt.end() && it->worldFragment) 
    463526                { 
    464                                 mCurentObject->setPosition(itr->worldFragment->singleIntersection.x,itr->worldFragment->singleIntersection.y + 10, itr->worldFragment->singleIntersection.z); 
    465                 } 
    466          
    467         } 
     527                                mTempObject->getSceneNode()->setPosition(it->worldFragment->singleIntersection.x,it->worldFragment->singleIntersection.y + 10, it->worldFragment->singleIntersection.z); 
     528                }     
     529  } 
    468530         
    469531} 
  • trunk/src/LevelEditor.hh

    r3 r4  
    1010#endif 
    1111 
    12  // use for object global variables 
    13  #define GLOBAL   
     12#include "dreamforge/objects/Object.hh"  
    1413 
     14  
    1515namespace dreamforge  
    1616{ 
     
    2828        ~LevelEdWidget(); 
    2929   
     30  void createTempObject(std::string& name, std::string& file); 
     31  void changeInsertionMode(bool val); 
     32   
    3033  inline Ogre::Root* getRoot(void) { return mRoot; } 
    3134  inline Ogre::RenderWindow* getRenderWindow(void) { return mRenderWindow; } 
     
    3437protected: 
    3538  void setupView(); 
    36  
    3739        void update(); 
    38         void setupResources(); 
    3940         
    4041        void clamToTerrain(Ogre::SceneNode* node); 
     
    6465        ///// Deplacement Camera 
    6566        Ogre::Vector3 mDirection; 
    66         //Ogre::Real mRotate; 
    67         //Ogre::Real mMove; 
    68         //bool isMoving; 
    6967        QPoint mousePressPos; 
    7068        QPoint mousePos; 
     
    7674        bool mouseRightPressed; 
    7775        bool mouseMiddleBtn; 
    78         //bool isLoopOn; 
    79         //bool isAnimEnabled; 
    80         Ogre::SceneNode*                        mCurentObject; 
    81         Ogre::MovableObject*    closestObject; 
     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 
    8280         
    83         //////// Rotation handler 
    84         //Ogre::SceneNode* mSceneNode; 
    85         //Ogre::SceneNode* mNode[3]; 
    86         //Ogre::Entity* mEnt[3]; 
     81  // Action mode 
     82  bool mInsertMode; 
     83  bool mEditionMode; 
    8784         
    8885}; 
  • trunk/src/Properties.cc

    r3 r4  
    99using namespace dreamforge; 
    1010 
     11 
     12//------------------------------------------------------------------------------------------------  
     13SelectedObjProp::SelectedObjProp(QWidget* parent) : QWidget(parent) 
     14{ 
     15  /*QGroupBox* groupCombo = new QGroupBox("Sélection"); 
     16   
     17  QLabel* objCat = new QLabel(tr("Objet Catégorie :")); 
     18  QComboBox* objCatCombo = new QComboBox; 
     19  objCatCombo->addItem(tr("Faune")); 
     20  objCatCombo->addItem(tr("Flore")); 
     21 
     22  QLabel* objType = new QLabel(tr("Objet Type :")); 
     23  QComboBox* objTypeCombo = new QComboBox; 
     24  objTypeCombo->addItem(tr("Batiments")); 
     25  objTypeCombo->addItem(tr("Monstres")); 
     26  objTypeCombo->addItem(tr("NPJ")); 
     27   
     28  QGridLayout* gridObjLayout = new QGridLayout; 
     29  gridObjLayout->addWidget(objCat, 0, 0); 
     30  gridObjLayout->addWidget(objCatCombo, 0, 1); 
     31  gridObjLayout->addWidget(objType, 1, 0); 
     32  gridObjLayout->addWidget(objTypeCombo, 1, 1); 
     33   
     34  groupCombo->setLayout(gridObjLayout); 
     35 
     36  //******************************************** 
     37  mObjectList = new QListWidget; 
     38  new QListWidgetItem(tr("Chien"), mObjectList); 
     39  new QListWidgetItem(tr("Loup"), mObjectList); 
     40  new QListWidgetItem(tr("Loup sauvage"), mObjectList); 
     41  new QListWidgetItem(tr("Ogre"), mObjectList); 
     42  new QListWidgetItem(tr("Tigre"), mObjectList); 
     43 
     44  connect(mObjectList, SIGNAL(itemClicked ( QListWidgetItem * )), this, SLOT(chooseObject()));*/ 
     45     
     46 
     47  QStringList headers; 
     48  headers << tr("Nom") << tr("Fichier") << tr("Description"); 
     49 
     50  QFile file("../../config/objects.txt"); 
     51  file.open(QIODevice::ReadOnly); 
     52  model = new TreeModel(headers, file.readAll()); 
     53  file.close(); 
     54 
     55  objectView = new QTreeView; 
     56  objectView->setObjectName(QString::fromUtf8("view")); 
     57  objectView->setAlternatingRowColors(true); 
     58  objectView->setSelectionBehavior(QAbstractItemView::SelectItems); 
     59  objectView->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel); 
     60  objectView->setAnimated(false); 
     61  objectView->setAllColumnsShowFocus(true); 
     62   
     63  objectView->setModel(model); 
     64  /*for (int column = 0; column < model->columnCount(); ++column) 
     65  { 
     66    objectView->resizeColumnToContents(column); 
     67  }*/ 
     68     
     69  objectView->hideColumn (1); 
     70  objectView->hideColumn (2);                                                         
     71   
     72  //******************************************** 
     73  QGroupBox* groupProp = new QGroupBox("Propriétés de l'objet"); 
     74   
     75  QLabel* sObjSelec = new QLabel(tr("Nom :")); 
     76  QLineEdit* sObjInput = new QLineEdit; 
     77   
     78  // Object Postion 
     79  QGroupBox* groupNodePos = new QGroupBox("Node Position"); 
     80  QLabel* nodeXText = new QLabel(tr("X :")); 
     81  QSpinBox* nodeXVal = new QSpinBox; 
     82  QLabel* nodeYText = new QLabel(tr("Y :")); 
     83  QSpinBox* nodeYVal = new QSpinBox;   
     84  QLabel* nodeZText = new QLabel(tr("Z :")); 
     85  QSpinBox* nodeZVal = new QSpinBox; 
     86   
     87  // Grille 
     88  QGridLayout* gridNodePosLayout = new QGridLayout; 
     89  gridNodePosLayout->addWidget(nodeXText, 0, 0); 
     90  gridNodePosLayout->addWidget(nodeXVal, 0, 1); 
     91  gridNodePosLayout->addWidget(nodeYText, 1, 0); 
     92  gridNodePosLayout->addWidget(nodeYVal, 1, 1); 
     93  gridNodePosLayout->addWidget(nodeZText, 2, 0); 
     94  gridNodePosLayout->addWidget(nodeZVal, 2, 1); 
     95   
     96  groupNodePos->setLayout(gridNodePosLayout); 
     97   
     98  // Object Scale 
     99  QGroupBox* groupNodeScal = new QGroupBox("Node Scale"); 
     100  QLabel* snodeXText = new QLabel(tr("X :")); 
     101  QSpinBox* snodeXVal = new QSpinBox; 
     102  QLabel* snodeYText = new QLabel(tr("Y :")); 
     103  QSpinBox* snodeYVal = new QSpinBox;   
     104  QLabel* snodeZText = new QLabel(tr("Z :")); 
     105  QSpinBox* snodeZVal = new QSpinBox; 
     106   
     107  // Grille 
     108  QGridLayout* gridNodeScalLayout = new QGridLayout; 
     109  gridNodeScalLayout->addWidget(snodeXText, 0, 0); 
     110  gridNodeScalLayout->addWidget(snodeXVal, 0, 1); 
     111  gridNodeScalLayout->addWidget(snodeYText, 1, 0); 
     112  gridNodeScalLayout->addWidget(snodeYVal, 1, 1); 
     113  gridNodeScalLayout->addWidget(snodeZText, 2, 0); 
     114  gridNodeScalLayout->addWidget(snodeZVal, 2, 1); 
     115   
     116  groupNodeScal->setLayout(gridNodeScalLayout); 
     117   
     118  // Grille 
     119  QGridLayout* gridsObjLayout = new QGridLayout; 
     120  gridsObjLayout->addWidget(sObjSelec, 0, 0); 
     121  gridsObjLayout->addWidget(sObjInput, 0, 1); 
     122  gridsObjLayout->addWidget(groupNodePos, 1, 0); 
     123  gridsObjLayout->addWidget(groupNodeScal, 1, 1); 
     124   
     125  groupProp->setLayout(gridsObjLayout); 
     126   
     127  //******************************************** 
     128  QVBoxLayout* regroupLayout = new QVBoxLayout; 
     129  //regroupLayout->addWidget(groupCombo); 
     130  //regroupLayout->addWidget(mObjectList); 
     131  regroupLayout->addWidget(objectView); 
     132  regroupLayout->addWidget(groupProp); 
     133   
     134  setLayout(regroupLayout); 
     135} 
     136 
     137//------------------------------------------------------------------------------------------------  
     138SelectedObjProp::~SelectedObjProp() 
     139{ 
     140 
     141} 
     142 
     143//------------------------------------------------------------------------------------------------  
     144void SelectedObjProp::mousePressEvent(QMouseEvent* evt) 
     145{ 
     146} 
     147 
     148//------------------------------------------------------------------------------------------------  
     149void SelectedObjProp::mouseReleaseEvent(QMouseEvent* evt) 
     150{ 
     151} 
     152 
     153//------------------------------------------------------------------------------------------------  
     154// 
    11155//------------------------------------------------------------------------------------------------  
    12156EnvProperties::EnvProperties(QWidget* parent) : QWidget(parent) 
  • trunk/src/Properties.hh

    r3 r4  
    66 
    77#include <QtGui/QtGui> 
     8#include "treemodel.h" 
    89 
    910namespace dreamforge  
    1011{ 
     12 
     13class SelectedObjProp : public QWidget 
     14{ 
     15  Q_OBJECT 
     16  
     17  public: 
     18    SelectedObjProp(QWidget *parent = 0); 
     19    ~SelectedObjProp(); 
     20   
     21  protected: 
     22    void mousePressEvent(QMouseEvent* evt); 
     23    void mouseReleaseEvent(QMouseEvent* evt); 
     24  
     25  public: 
     26    QTreeView* objectView; 
     27    TreeModel *model; 
     28//    QListWidget *mObjectList; 
     29//    QString mCurSelect; 
     30}; 
    1131 
    1232class EnvProperties : public QWidget 
  • trunk/src/SConscript

    r3 r4  
    1515  'dreamforge/GameObjectManager.cc', 
    1616  'dreamforge/GameEngine.cc', 
     17  'treemodel.cpp', 
     18  'treeitem.cpp', 
    1719  'Properties.cc', 
    1820  'LevelEditor.cc', 
  • trunk/src/Workbench.cc

    r3 r4  
    33#include "config.h" 
    44#endif 
     5 
     6// use for object global variables 
     7#define GLOBAL   
    58 
    69 
     
    1013 
    1114#include "Workbench.hh" 
     15 
    1216 
    1317using namespace dreamforge; 
     
    2630   
    2731  // Create a tree widget 
    28   envProperties = new EnvProperties; 
    29   //envProperties->show(); 
     32  objProperties = new SelectedObjProp; 
    3033   
    3134  // Create a widget we can drag around the workbench 
    3235  QDockWidget *dock = new QDockWidget(tr("Propriétés"), this); 
    3336  dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); 
    34   dock->setWidget(envProperties); 
     37  dock->setWidget(objProperties); 
    3538 
    3639  addDockWidget(Qt::RightDockWidgetArea, dock); 
     40   
     41  // Connect action 
     42  connect(objProperties->objectView, SIGNAL(clicked( const QModelIndex & )),this, SLOT(chooseObject()));    
    3743   
    3844  // Try to register the icon resources : Fix me does not work 
     
    5662 
    5763//------------------------------------------------------------------------------------------------  
     64// ACTIONS 
     65//------------------------------------------------------------------------------------------------  
     66void 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  } 
     79 
     80} 
     81 
     82//------------------------------------------------------------------------------------------------  
    5883void Workbench::closeEvent(QCloseEvent *event) 
    5984{ 
     
    6186  event->accept(); 
    6287} 
    63  
    64  
    6588 
    6689//------------------------------------------------------------------------------------------------  
  • trunk/src/Workbench.hh

    r3 r4  
    44 #include <QtGui/QMainWindow> 
    55 #include <QtGui/QtGui> 
     6  
    67  
    78 #include "LevelEditor.hh" 
     
    3132 private slots: 
    3233    void about(); 
     34    void chooseObject(); 
    3335 
    3436 private: 
     
    5759    LevelEdWidget *mLevelEd; 
    5860 
    59     EnvProperties* envProperties; 
     61    SelectedObjProp* objProperties; 
    6062 }; 
    6163 
  • trunk/src/dreamforge/GameEngine.cc

    r3 r4  
    123123                Ogre::ResourceGroupManager::getSingleton().addResourceLocation("../../data", "FileSystem", "General"); 
    124124                Ogre::ResourceGroupManager::getSingleton().addResourceLocation("../../data/fonts", "FileSystem", "General"); 
    125                 //Ogre::ResourceGroupManager::getSingleton().addResourceLocation("../../data/gui", "FileSystem", "General"); 
    126125                Ogre::ResourceGroupManager::getSingleton().addResourceLocation("../../data/models", "FileSystem", "General"); 
     126                Ogre::ResourceGroupManager::getSingleton().addResourceLocation("../../data/models/mesh", "FileSystem", "General"); 
     127                Ogre::ResourceGroupManager::getSingleton().addResourceLocation("../../data/models/textures", "FileSystem", "General"); 
     128                Ogre::ResourceGroupManager::getSingleton().addResourceLocation("../../data/models/animation", "FileSystem", "General");     
    127129                Ogre::ResourceGroupManager::getSingleton().addResourceLocation("../../data/terrain", "FileSystem", "General"); 
    128130                Ogre::ResourceGroupManager::getSingleton().addResourceLocation("../../data/world", "FileSystem", "General");