void PropertiesPanelView::createPropertiesWidgetsPair(MyGUI::WidgetPtr _window, std::string _property, std::string _value, std::string _type,int y) { pairs_counter++; int x1 = 0, x2 = 125; int w1 = 120; int w2 = _window->getWidth() - x2; const int h = PropertyItemHeight; if (_property == "Position") { x1 = 66; w1 = w1 - x1; } MyGUI::StaticTextPtr text; MyGUI::WidgetPtr editOrCombo; //int string_int_float; // 0 - string, 1 - int, 2 - float int widget_for_type;// 0 - Edit, 1 - Combo mode drop, 2 - ... std::string type_names[2] = {"Edit", "ComboBox"}; if ("Name" == _type) widget_for_type = 0; else if ("Skin" == _type) widget_for_type = 1; else if ("Position" == _type) widget_for_type = 0; else if ("Layer" == _type) widget_for_type = 1; else if ("String" == _type) widget_for_type = 0; else if ("Align" == _type) widget_for_type = 1; // не совсем правильно FIXME else if ("1 int" == _type) widget_for_type = 0; else if ("2 int" == _type) widget_for_type = 0; else if ("4 int" == _type) widget_for_type = 0; else if ("1 float" == _type) widget_for_type = 0; else if ("2 float" == _type) widget_for_type = 0; // надо сделать проще FIXME else if ("Colour" == _type) widget_for_type = 0;//"Colour" хорошо бы колорпикером else if ("MessageButton" == _type) widget_for_type = 1; else if ("FileName" == _type) widget_for_type = 0; else widget_for_type = 1; if ((propertiesText.size() < pairs_counter) || (propertiesText[pairs_counter-1]->getParent() != _window)) { text = _window->createWidget<MyGUI::StaticText>("Editor_StaticText", x1, y, w1, h, MyGUI::Align::Default); text->setTextAlign(MyGUI::Align::Right); if (propertiesText.size() < pairs_counter) { propertiesText.push_back(text); } else { MyGUI::Gui::getInstance().destroyWidget(propertiesText[pairs_counter-1]); propertiesText[pairs_counter-1] = text; } } else { text = propertiesText[pairs_counter-1]; text->setVisible(true); text->setCoord(x1, y, w1, h); } std::string prop = _property; // trim widget name std::string::iterator iter = std::find(prop.begin(), prop.end(), '_'); if (iter != prop.end()) prop.erase(prop.begin(), ++iter); text->setCaption(prop); if ((propertiesElement.size() < pairs_counter) || (propertiesElement[pairs_counter-1]->getParent() != _window) || (type_names[widget_for_type] != propertiesElement[pairs_counter-1]->getTypeName())) { if (widget_for_type == 0) { editOrCombo = _window->createWidget<MyGUI::Edit>("Edit", x2, y, w2, h, MyGUI::Align::Top | MyGUI::Align::HStretch); editOrCombo->castType<MyGUI::Edit>()->eventEditTextChange = newDelegate (this, &PropertiesPanelView::notifyTryApplyProperties); editOrCombo->castType<MyGUI::Edit>()->eventEditSelectAccept = newDelegate (this, &PropertiesPanelView::notifyForceApplyProperties); } else if (widget_for_type == 1) { editOrCombo = _window->createWidget<MyGUI::ComboBox>("ComboBox", x2, y, w2, h, MyGUI::Align::Top | MyGUI::Align::HStretch); editOrCombo->castType<MyGUI::ComboBox>()->eventComboAccept = newDelegate (this, &PropertiesPanelView::notifyForceApplyProperties2); editOrCombo->castType<MyGUI::ComboBox>()->setComboModeDrop(true); } if (propertiesElement.size() < pairs_counter) { propertiesElement.push_back(editOrCombo); } else { MyGUI::Gui::getInstance().destroyWidget(propertiesElement[pairs_counter-1]); propertiesElement[pairs_counter-1] = editOrCombo; } } else { editOrCombo = propertiesElement[pairs_counter-1]; if (widget_for_type == 1) editOrCombo->castType<MyGUI::ComboBox>()->removeAllItems(); editOrCombo->setVisible(true); editOrCombo->setCoord(x2, y, w2, h); } // fill possible values if (widget_for_type == 1) { std::vector<std::string> values; if (_type == "Skin") values = WidgetTypes::getInstance().find(current_widget->getTypeName())->skin; else values = WidgetTypes::getInstance().findPossibleValues(_type); for (std::vector<std::string>::iterator iter = values.begin(); iter != values.end(); ++iter) editOrCombo->castType<MyGUI::ComboBox>()->addItem(*iter); } editOrCombo->setUserString("action", _property); editOrCombo->setUserString("type", _type); if (_value.empty()){ editOrCombo->setCaption(DEFAULT_VALUE); } else { editOrCombo->castType<MyGUI::Edit>()->setOnlyText(_value); checkType(editOrCombo->castType<MyGUI::Edit>(), _type); } }
void PlayState::createScene() { // Needed to separate translate from rotate mDebugCamNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("DebugCamNode", Vector3(0.0f, 0.0f, 0.0f)); mTransitionCamNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("TransitionCamNode", Vector3(0.0f, 0.0f, 0.0f)); mTransitionRotate=0; mTransitionHeight=50; mTransitionRadius=50; mWorld = new OgreBulletDynamics::DynamicsWorld(mSceneMgr, AxisAlignedBox(Vector3(-1000,-1000,-1000), Vector3(1000,1000,1000)), Vector3(0,-9.801,0)); mDebugDrawer = new OgreBulletCollisions::DebugDrawer(); SceneNode *debug = mSceneMgr->getRootSceneNode()->createChildSceneNode("debugDrawer"); mWorld->setDebugDrawer(mDebugDrawer); mDebugShapesOn = NORMAL; gContactAddedCallback = &PlayState::contactAddedWrapper; mWorld->getBulletDynamicsWorld()->setInternalTickCallback(PlayState::internalTickCallbackWrapper); if(mLoadSavedGame) { rapidxml::file<> savedFile(mSavedGameFilename.c_str()); rapidxml::xml_document<> XMLDocDotLost; XMLDocDotLost.parse<0>( savedFile.data() ); rapidxml::xml_node<>* pElement; pElement = XMLDocDotLost.first_node("LostMarblesSavedGame"); std::string levelName = "currentLevelName"; levelName = pElement->first_attribute(levelName.c_str())->value(); int levelNumber = mCurrentLevel; for(std::vector<LevelInformation>::iterator i = mLevels.begin(); i != mLevels.end(); i++) { if((*i).filename == levelName) levelNumber = (*i).number; } mCurrentLevel = (unsigned int)(levelNumber - 1); } Ogre::DotLevelLoader loader(mLuaState); loader.parseDotLevel(mLevels[mCurrentLevel].filename+".level","General", mSceneMgr); loader.parseActors(mLevels[mCurrentLevel].filename+".actors","General", mSceneMgr, mWorld, mActors, mFriends, mRivals, mTargets, &mFocusActor); mFocusActor->mNeedsHelp = true; mNumTargets = mTargets.size(); mCamera = mSceneMgr->getCamera("PlayerCam"); mCamNode = mSceneMgr->getSceneNode("PlayerCam"); if(mLoadSavedGame) { mLoadSavedGame = false; } if(!mLevels[mCurrentLevel].music.empty()) mSoundMgr->PlaySound(mLevels[mCurrentLevel].music, NULL, &mSoundMgr->mBgmChannel); if(mViewport) mViewport->setCamera(mCamera); if(mRenderTexture) mRenderTexture->getViewport(0)->setCamera(mCamera); PlayState::alterPlayState(PlayState::TRANSITION); if(!mGUI) { MyGUI::OgreRenderManager::getInstance().setSceneManager(mSceneMgr); mGUI = MyGUI::Gui::getInstancePtr(); mGUI->setVisiblePointer(false); } mTransitionLayout = MyGUI::LayoutManager::getInstance().loadLayout("Transition.layout"); MyGUI::StaticTextPtr staticText = mGUI->findWidget<MyGUI::StaticText>("LevelNameText"); staticText->setCaption(mLevels[mCurrentLevel].levelname); staticText = mGUI->findWidget<MyGUI::StaticText>("LevelNumberText"); staticText->setCaption("Level " + Ogre::StringConverter::toString(mLevels[mCurrentLevel].number)); try { MyGUI::StaticImagePtr image = mGUI->findWidget<MyGUI::StaticImage>("RivalScoreBG"); MyGUI::StaticTextPtr rivalScoreLabel = mGUI->findWidget<MyGUI::StaticText>("RivalScore"); if(mRivals.empty()) { if(image) image->setVisible(false); if(rivalScoreLabel) rivalScoreLabel->setVisible(false); } else { if(image) image->setVisible(true); if(rivalScoreLabel) rivalScoreLabel->setVisible(true); } } catch(MyGUI::Exception &) {} }