mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-10-31 10:56:38 +00:00 
			
		
		
		
	basic mouse-over info for in-game objects
This commit is contained in:
		
							parent
							
								
									cac662ca98
								
							
						
					
					
						commit
						d37bc9cba8
					
				
					 7 changed files with 426 additions and 26 deletions
				
			
		|  | @ -6,6 +6,7 @@ using namespace MyGUI; | ||||||
| ToolTips::ToolTips() : | ToolTips::ToolTips() : | ||||||
|     Layout("openmw_tooltips.xml") |     Layout("openmw_tooltips.xml") | ||||||
|     , mGameMode(true) |     , mGameMode(true) | ||||||
|  |     , mFocusChanged(true) | ||||||
| { | { | ||||||
|     getWidget(mTextToolTip, "TextToolTip"); |     getWidget(mTextToolTip, "TextToolTip"); | ||||||
|     getWidget(mTextToolTipBox, "TextToolTipBox"); |     getWidget(mTextToolTipBox, "TextToolTipBox"); | ||||||
|  | @ -27,6 +28,10 @@ void ToolTips::onFrame(float frameDuration) | ||||||
| 
 | 
 | ||||||
|     const IntSize &viewSize = RenderManager::getInstance().getViewSize(); |     const IntSize &viewSize = RenderManager::getInstance().getViewSize(); | ||||||
| 
 | 
 | ||||||
|  |     if (!mGameMode) | ||||||
|  |     { | ||||||
|  |         mDynamicToolTipBox->setVisible(false); | ||||||
|  | 
 | ||||||
|         Widget* focus = InputManager::getInstance().getMouseFocusWidget(); |         Widget* focus = InputManager::getInstance().getMouseFocusWidget(); | ||||||
|         if (focus == 0) return; |         if (focus == 0) return; | ||||||
| 
 | 
 | ||||||
|  | @ -50,6 +55,362 @@ void ToolTips::onFrame(float frameDuration) | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         setCoord(tooltipPosition.left, tooltipPosition.top, size.width, size.height); |         setCoord(tooltipPosition.left, tooltipPosition.top, size.width, size.height); | ||||||
|  |     } | ||||||
|  |     else | ||||||
|  |     { | ||||||
|  |         mTextToolTipBox->setVisible(false); | ||||||
|  | 
 | ||||||
|  |         if (!mFocusObject.isEmpty()) | ||||||
|  |         { | ||||||
|  |             if (mFocusChanged) | ||||||
|  |             { | ||||||
|  |                 for (size_t i=0; i<mDynamicToolTipBox->getChildCount(); ++i) | ||||||
|  |                 { | ||||||
|  |                     mDynamicToolTipBox->_destroyChildWidget(mDynamicToolTipBox->getChildAt(i)); | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 // this the maximum width of the tooltip before it starts word-wrapping
 | ||||||
|  |                 setCoord(0, 0, 300, 300); | ||||||
|  | 
 | ||||||
|  |                 IntSize tooltipSize; | ||||||
|  | 
 | ||||||
|  |                 /// \todo Not sure about levelled lists (ESM::CreateLevList and ESM::ItemLevList). I think
 | ||||||
|  |                 /// they are supposed to spawn a concrete object (Creature or item of any type), so
 | ||||||
|  |                 /// the player wouldn't encounter them and we don't have to handle them here. 
 | ||||||
|  | 
 | ||||||
|  |                 // --------------------  Door -------------------------------
 | ||||||
|  |                 if (mFocusObject.getTypeName() == typeid(ESM::Door).name()) | ||||||
|  |                 { | ||||||
|  |                     ESMS::LiveCellRef<ESM::Door, MWWorld::RefData>* ref = mFocusObject.get<ESM::Door>(); | ||||||
|  | 
 | ||||||
|  |                     EditBox* box = mDynamicToolTipBox->createWidget<EditBox>("MW_TextEdit", IntCoord(0, 0, 300, 300), Align::Stretch, "ToolTip"); | ||||||
|  |                     box->setTextAlign(Align::HCenter); | ||||||
|  |                     box->setProperty("Static", "true"); | ||||||
|  |                     box->setProperty("MultiLine", "true"); | ||||||
|  | 
 | ||||||
|  |                     std::string caption = ref->base->name; | ||||||
|  |                     /// \todo If destCell is empty, the teleport target is an exterior cell. In that case we 
 | ||||||
|  |                     /// need to fetch that cell (via target position) and retrieve the region name.
 | ||||||
|  |                     if (ref->ref.teleport && (ref->ref.destCell != "")) | ||||||
|  |                     { | ||||||
|  |                         caption += "\n-"; | ||||||
|  |                         caption += "\n"+ref->ref.destCell; | ||||||
|  |                     } | ||||||
|  |                     box->setCaption(caption); | ||||||
|  | 
 | ||||||
|  |                     /// \todo Lock level, trap (retrieve GMST)
 | ||||||
|  | 
 | ||||||
|  |                     tooltipSize = box->getTextSize() + IntSize(12,12); | ||||||
|  | 
 | ||||||
|  |                     mDynamicToolTipBox->setVisible(true); | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 // --------------------  NPC -------------------------------
 | ||||||
|  |                 else if (mFocusObject.getTypeName() == typeid(ESM::NPC).name()) | ||||||
|  |                 { | ||||||
|  |                     /// \todo We don't want tooltips for NPCs in combat mode.
 | ||||||
|  |                     ESMS::LiveCellRef<ESM::NPC, MWWorld::RefData>* ref = mFocusObject.get<ESM::NPC>(); | ||||||
|  | 
 | ||||||
|  |                     EditBox* box = mDynamicToolTipBox->createWidget<EditBox>("MW_TextEdit", IntCoord(0, 0, 300, 300), Align::Stretch, "ToolTip"); | ||||||
|  |                     box->setTextAlign(Align::HCenter); | ||||||
|  |                     box->setProperty("Static", "true"); | ||||||
|  |                     box->setCaption(ref->base->name); | ||||||
|  | 
 | ||||||
|  |                     tooltipSize = box->getTextSize() + IntSize(12,12); | ||||||
|  | 
 | ||||||
|  |                     mDynamicToolTipBox->setVisible(true); | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 // --------------------  Creature -------------------------------
 | ||||||
|  |                 else if (mFocusObject.getTypeName() == typeid(ESM::Creature).name()) | ||||||
|  |                 { | ||||||
|  |                     ESMS::LiveCellRef<ESM::Creature, MWWorld::RefData>* ref = mFocusObject.get<ESM::Creature>(); | ||||||
|  | 
 | ||||||
|  |                     EditBox* box = mDynamicToolTipBox->createWidget<EditBox>("MW_TextEdit", IntCoord(0, 0, 300, 300), Align::Stretch, "ToolTip"); | ||||||
|  |                     box->setTextAlign(Align::HCenter); | ||||||
|  |                     box->setProperty("Static", "true"); | ||||||
|  |                     box->setCaption(ref->base->name); | ||||||
|  | 
 | ||||||
|  |                     /// \todo
 | ||||||
|  | 
 | ||||||
|  |                     tooltipSize = box->getTextSize() + IntSize(12,12); | ||||||
|  | 
 | ||||||
|  |                     mDynamicToolTipBox->setVisible(true); | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 // --------------------  CreatureLevList -------------------------------
 | ||||||
|  |                 else if (mFocusObject.getTypeName() == typeid(ESM::Creature).name()) | ||||||
|  |                 { | ||||||
|  |                     ESMS::LiveCellRef<ESM::Creature, MWWorld::RefData>* ref = mFocusObject.get<ESM::Creature>(); | ||||||
|  | 
 | ||||||
|  |                     EditBox* box = mDynamicToolTipBox->createWidget<EditBox>("MW_TextEdit", IntCoord(0, 0, 300, 300), Align::Stretch, "ToolTip"); | ||||||
|  |                     box->setTextAlign(Align::HCenter); | ||||||
|  |                     box->setProperty("Static", "true"); | ||||||
|  |                     box->setCaption(ref->base->name); | ||||||
|  | 
 | ||||||
|  |                     /// \todo
 | ||||||
|  | 
 | ||||||
|  |                     tooltipSize = box->getTextSize() + IntSize(12,12); | ||||||
|  | 
 | ||||||
|  |                     mDynamicToolTipBox->setVisible(true); | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 // --------------------  Container -------------------------------
 | ||||||
|  |                 else if (mFocusObject.getTypeName() == typeid(ESM::Container).name()) | ||||||
|  |                 { | ||||||
|  |                     ESMS::LiveCellRef<ESM::Container, MWWorld::RefData>* ref = mFocusObject.get<ESM::Container>(); | ||||||
|  | 
 | ||||||
|  |                     EditBox* box = mDynamicToolTipBox->createWidget<EditBox>("MW_TextEdit", IntCoord(0, 0, 300, 300), Align::Stretch, "ToolTip"); | ||||||
|  |                     box->setTextAlign(Align::HCenter); | ||||||
|  |                     box->setProperty("Static", "true"); | ||||||
|  |                     box->setCaption(ref->base->name); | ||||||
|  | 
 | ||||||
|  |                     /// \todo Lock level, trap (retrieve GMST)
 | ||||||
|  | 
 | ||||||
|  |                     tooltipSize = box->getTextSize() + IntSize(12,12); | ||||||
|  | 
 | ||||||
|  |                     mDynamicToolTipBox->setVisible(true); | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 // --------------------  Potion -------------------------------
 | ||||||
|  |                 else if (mFocusObject.getTypeName() == typeid(ESM::Potion).name()) | ||||||
|  |                 { | ||||||
|  |                     ESMS::LiveCellRef<ESM::Potion, MWWorld::RefData>* ref = mFocusObject.get<ESM::Potion>(); | ||||||
|  | 
 | ||||||
|  |                     EditBox* box = mDynamicToolTipBox->createWidget<EditBox>("MW_TextEdit", IntCoord(0, 0, 300, 300), Align::Stretch, "ToolTip"); | ||||||
|  |                     box->setTextAlign(Align::HCenter); | ||||||
|  |                     box->setProperty("Static", "true"); | ||||||
|  |                     box->setCaption(ref->base->name); | ||||||
|  | 
 | ||||||
|  |                     /// \todo
 | ||||||
|  | 
 | ||||||
|  |                     tooltipSize = box->getTextSize() + IntSize(12,12); | ||||||
|  | 
 | ||||||
|  |                     mDynamicToolTipBox->setVisible(true); | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 // --------------------  Apparatus -------------------------------
 | ||||||
|  |                 else if (mFocusObject.getTypeName() == typeid(ESM::Apparatus).name()) | ||||||
|  |                 { | ||||||
|  |                     ESMS::LiveCellRef<ESM::Potion, MWWorld::RefData>* ref = mFocusObject.get<ESM::Potion>(); | ||||||
|  | 
 | ||||||
|  |                     EditBox* box = mDynamicToolTipBox->createWidget<EditBox>("MW_TextEdit", IntCoord(0, 0, 300, 300), Align::Stretch, "ToolTip"); | ||||||
|  |                     box->setTextAlign(Align::HCenter); | ||||||
|  |                     box->setProperty("Static", "true"); | ||||||
|  |                     box->setCaption(ref->base->name); | ||||||
|  | 
 | ||||||
|  |                     /// \todo
 | ||||||
|  | 
 | ||||||
|  |                     tooltipSize = box->getTextSize() + IntSize(12,12); | ||||||
|  | 
 | ||||||
|  |                     mDynamicToolTipBox->setVisible(true); | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 // --------------------  Armor -------------------------------
 | ||||||
|  |                 else if (mFocusObject.getTypeName() == typeid(ESM::Armor).name()) | ||||||
|  |                 { | ||||||
|  |                     ESMS::LiveCellRef<ESM::Armor, MWWorld::RefData>* ref = mFocusObject.get<ESM::Armor>(); | ||||||
|  | 
 | ||||||
|  |                     EditBox* box = mDynamicToolTipBox->createWidget<EditBox>("MW_TextEdit", IntCoord(0, 0, 300, 300), Align::Stretch, "ToolTip"); | ||||||
|  |                     box->setTextAlign(Align::HCenter); | ||||||
|  |                     box->setProperty("Static", "true"); | ||||||
|  |                     box->setCaption(ref->base->name); | ||||||
|  | 
 | ||||||
|  |                     /// \todo weight, armor value, value, durability..
 | ||||||
|  | 
 | ||||||
|  |                     tooltipSize = box->getTextSize() + IntSize(12,12); | ||||||
|  | 
 | ||||||
|  |                     mDynamicToolTipBox->setVisible(true); | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 // --------------------  Book -------------------------------
 | ||||||
|  |                 else if (mFocusObject.getTypeName() == typeid(ESM::Book).name()) | ||||||
|  |                 { | ||||||
|  |                     ESMS::LiveCellRef<ESM::Book, MWWorld::RefData>* ref = mFocusObject.get<ESM::Book>(); | ||||||
|  | 
 | ||||||
|  |                     EditBox* box = mDynamicToolTipBox->createWidget<EditBox>("MW_TextEdit", IntCoord(0, 0, 300, 300), Align::Stretch, "ToolTip"); | ||||||
|  |                     box->setTextAlign(Align::HCenter); | ||||||
|  |                     box->setProperty("Static", "true"); | ||||||
|  |                     box->setCaption(ref->base->name); | ||||||
|  | 
 | ||||||
|  |                     /// \todo
 | ||||||
|  | 
 | ||||||
|  |                     tooltipSize = box->getTextSize() + IntSize(12,12); | ||||||
|  | 
 | ||||||
|  |                     mDynamicToolTipBox->setVisible(true); | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 // --------------------  Clothing -------------------------------
 | ||||||
|  |                 else if (mFocusObject.getTypeName() == typeid(ESM::Clothing).name()) | ||||||
|  |                 { | ||||||
|  |                     ESMS::LiveCellRef<ESM::Clothing, MWWorld::RefData>* ref = mFocusObject.get<ESM::Clothing>(); | ||||||
|  | 
 | ||||||
|  |                     EditBox* box = mDynamicToolTipBox->createWidget<EditBox>("MW_TextEdit", IntCoord(0, 0, 300, 300), Align::Stretch, "ToolTip"); | ||||||
|  |                     box->setTextAlign(Align::HCenter); | ||||||
|  |                     box->setProperty("Static", "true"); | ||||||
|  |                     box->setCaption(ref->base->name); | ||||||
|  | 
 | ||||||
|  |                     /// \todo
 | ||||||
|  | 
 | ||||||
|  |                     tooltipSize = box->getTextSize() + IntSize(12,12); | ||||||
|  | 
 | ||||||
|  |                     mDynamicToolTipBox->setVisible(true); | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 // --------------------  Ingredient -------------------------------
 | ||||||
|  |                 else if (mFocusObject.getTypeName() == typeid(ESM::Ingredient).name()) | ||||||
|  |                 { | ||||||
|  |                     ESMS::LiveCellRef<ESM::Ingredient, MWWorld::RefData>* ref = mFocusObject.get<ESM::Ingredient>(); | ||||||
|  | 
 | ||||||
|  |                     EditBox* box = mDynamicToolTipBox->createWidget<EditBox>("MW_TextEdit", IntCoord(0, 0, 300, 300), Align::Stretch, "ToolTip"); | ||||||
|  |                     box->setTextAlign(Align::HCenter); | ||||||
|  |                     box->setProperty("Static", "true"); | ||||||
|  |                     box->setCaption(ref->base->name); | ||||||
|  | 
 | ||||||
|  |                     /// \todo
 | ||||||
|  | 
 | ||||||
|  |                     tooltipSize = box->getTextSize() + IntSize(12,12); | ||||||
|  | 
 | ||||||
|  |                     mDynamicToolTipBox->setVisible(true); | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 // --------------------  Light -------------------------------
 | ||||||
|  |                 else if (mFocusObject.getTypeName() == typeid(ESM::Light).name()) | ||||||
|  |                 { | ||||||
|  |                     ESMS::LiveCellRef<ESM::Light, MWWorld::RefData>* ref = mFocusObject.get<ESM::Light>(); | ||||||
|  | 
 | ||||||
|  |                     EditBox* box = mDynamicToolTipBox->createWidget<EditBox>("MW_TextEdit", IntCoord(0, 0, 300, 300), Align::Stretch, "ToolTip"); | ||||||
|  |                     box->setTextAlign(Align::HCenter); | ||||||
|  |                     box->setProperty("Static", "true"); | ||||||
|  |                     box->setCaption(ref->base->name); | ||||||
|  | 
 | ||||||
|  |                     /// \todo
 | ||||||
|  | 
 | ||||||
|  |                     tooltipSize = box->getTextSize() + IntSize(12,12); | ||||||
|  | 
 | ||||||
|  |                     mDynamicToolTipBox->setVisible(ref->base->name != ""); | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 // --------------------  Tool -------------------------------
 | ||||||
|  |                 else if (mFocusObject.getTypeName() == typeid(ESM::Tool).name()) | ||||||
|  |                 { | ||||||
|  |                     ESMS::LiveCellRef<ESM::Tool, MWWorld::RefData>* ref = mFocusObject.get<ESM::Tool>(); | ||||||
|  | 
 | ||||||
|  |                     EditBox* box = mDynamicToolTipBox->createWidget<EditBox>("MW_TextEdit", IntCoord(0, 0, 300, 300), Align::Stretch, "ToolTip"); | ||||||
|  |                     box->setTextAlign(Align::HCenter); | ||||||
|  |                     box->setProperty("Static", "true"); | ||||||
|  |                     box->setCaption(ref->base->name); | ||||||
|  | 
 | ||||||
|  |                     /// \todo
 | ||||||
|  | 
 | ||||||
|  |                     tooltipSize = box->getTextSize() + IntSize(12,12); | ||||||
|  | 
 | ||||||
|  |                     mDynamicToolTipBox->setVisible(true); | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 // --------------------  Miscellaneous -------------------------------
 | ||||||
|  |                 else if (mFocusObject.getTypeName() == typeid(ESM::Miscellaneous).name()) | ||||||
|  |                 { | ||||||
|  |                     ESMS::LiveCellRef<ESM::Miscellaneous, MWWorld::RefData>* ref = mFocusObject.get<ESM::Miscellaneous>(); | ||||||
|  | 
 | ||||||
|  |                     EditBox* box = mDynamicToolTipBox->createWidget<EditBox>("MW_TextEdit", IntCoord(0, 0, 300, 300), Align::Stretch, "ToolTip"); | ||||||
|  |                     box->setTextAlign(Align::HCenter); | ||||||
|  |                     box->setProperty("Static", "true"); | ||||||
|  |                     box->setCaption(ref->base->name); | ||||||
|  | 
 | ||||||
|  |                     /// \todo
 | ||||||
|  | 
 | ||||||
|  |                     tooltipSize = box->getTextSize() + IntSize(12,12); | ||||||
|  | 
 | ||||||
|  |                     mDynamicToolTipBox->setVisible(true); | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 // --------------------  Probe -------------------------------
 | ||||||
|  |                 else if (mFocusObject.getTypeName() == typeid(ESM::Probe).name()) | ||||||
|  |                 { | ||||||
|  |                     ESMS::LiveCellRef<ESM::Probe, MWWorld::RefData>* ref = mFocusObject.get<ESM::Probe>(); | ||||||
|  | 
 | ||||||
|  |                     EditBox* box = mDynamicToolTipBox->createWidget<EditBox>("MW_TextEdit", IntCoord(0, 0, 300, 300), Align::Stretch, "ToolTip"); | ||||||
|  |                     box->setTextAlign(Align::HCenter); | ||||||
|  |                     box->setProperty("Static", "true"); | ||||||
|  |                     box->setCaption(ref->base->name); | ||||||
|  | 
 | ||||||
|  |                     /// \todo
 | ||||||
|  | 
 | ||||||
|  |                     tooltipSize = box->getTextSize() + IntSize(12,12); | ||||||
|  | 
 | ||||||
|  |                     mDynamicToolTipBox->setVisible(true); | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 // --------------------  Repair -------------------------------
 | ||||||
|  |                 else if (mFocusObject.getTypeName() == typeid(ESM::Repair).name()) | ||||||
|  |                 { | ||||||
|  |                     ESMS::LiveCellRef<ESM::Repair, MWWorld::RefData>* ref = mFocusObject.get<ESM::Repair>(); | ||||||
|  | 
 | ||||||
|  |                     EditBox* box = mDynamicToolTipBox->createWidget<EditBox>("MW_TextEdit", IntCoord(0, 0, 300, 300), Align::Stretch, "ToolTip"); | ||||||
|  |                     box->setTextAlign(Align::HCenter); | ||||||
|  |                     box->setProperty("Static", "true"); | ||||||
|  |                     box->setCaption(ref->base->name); | ||||||
|  | 
 | ||||||
|  |                     /// \todo
 | ||||||
|  | 
 | ||||||
|  |                     tooltipSize = box->getTextSize() + IntSize(12,12); | ||||||
|  | 
 | ||||||
|  |                     mDynamicToolTipBox->setVisible(true); | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 // --------------------  Weapon -------------------------------
 | ||||||
|  |                 else if (mFocusObject.getTypeName() == typeid(ESM::Weapon).name()) | ||||||
|  |                 { | ||||||
|  |                     ESMS::LiveCellRef<ESM::Weapon, MWWorld::RefData>* ref = mFocusObject.get<ESM::Weapon>(); | ||||||
|  | 
 | ||||||
|  |                     EditBox* box = mDynamicToolTipBox->createWidget<EditBox>("MW_TextEdit", IntCoord(0, 0, 300, 300), Align::Stretch, "ToolTip"); | ||||||
|  |                     box->setTextAlign(Align::HCenter); | ||||||
|  |                     box->setProperty("Static", "true"); | ||||||
|  |                     box->setCaption(ref->base->name); | ||||||
|  | 
 | ||||||
|  |                     /// \todo
 | ||||||
|  | 
 | ||||||
|  |                     tooltipSize = box->getTextSize() + IntSize(12,12); | ||||||
|  | 
 | ||||||
|  |                     mDynamicToolTipBox->setVisible(true); | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 // --------------------  Activator -------------------------------
 | ||||||
|  |                 else if (mFocusObject.getTypeName() == typeid(ESM::Activator).name()) | ||||||
|  |                 { | ||||||
|  |                     ESMS::LiveCellRef<ESM::Activator, MWWorld::RefData>* ref = mFocusObject.get<ESM::Activator>(); | ||||||
|  | 
 | ||||||
|  |                     EditBox* box = mDynamicToolTipBox->createWidget<EditBox>("MW_TextEdit", IntCoord(0, 0, 300, 300), Align::Stretch, "ToolTip"); | ||||||
|  |                     box->setTextAlign(Align::HCenter); | ||||||
|  |                     box->setProperty("Static", "true"); | ||||||
|  |                     box->setCaption(ref->base->name); | ||||||
|  | 
 | ||||||
|  |                     /// \todo
 | ||||||
|  | 
 | ||||||
|  |                     tooltipSize = box->getTextSize() + IntSize(12,12); | ||||||
|  | 
 | ||||||
|  |                     mDynamicToolTipBox->setVisible(ref->base->name != ""); | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 else | ||||||
|  |                 { | ||||||
|  |                     // object without tooltip
 | ||||||
|  |                     mDynamicToolTipBox->setVisible(false); | ||||||
|  |                 } | ||||||
|  | 
 | ||||||
|  |                 // adjust tooltip size to fit its content, position it above the crosshair
 | ||||||
|  |                 /// \todo Slide the tooltip along the bounding box of the focused object (like in Morrowind)
 | ||||||
|  |                 setCoord(viewSize.width/2 - (tooltipSize.width)/2.f, | ||||||
|  |                         viewSize.height/2 - (tooltipSize.height) - 32, | ||||||
|  |                         tooltipSize.width, | ||||||
|  |                         tooltipSize.height); | ||||||
|  |             } | ||||||
|  |             mFocusChanged = false; | ||||||
|  |         } | ||||||
|  |         else | ||||||
|  |             mDynamicToolTipBox->setVisible(false); | ||||||
|  |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void ToolTips::enterGameMode() | void ToolTips::enterGameMode() | ||||||
|  | @ -61,3 +422,12 @@ void ToolTips::enterGuiMode() | ||||||
| { | { | ||||||
|     mGameMode = false; |     mGameMode = false; | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | void ToolTips::setFocusObject(const MWWorld::Ptr& focus) | ||||||
|  | { | ||||||
|  |     if (focus != mFocusObject) | ||||||
|  |     { | ||||||
|  |         mFocusObject = focus; | ||||||
|  |         mFocusChanged = true; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -3,6 +3,7 @@ | ||||||
| #define MWGUI_TOOLTIPS_H | #define MWGUI_TOOLTIPS_H | ||||||
| 
 | 
 | ||||||
| #include <openengine/gui/layout.hpp> | #include <openengine/gui/layout.hpp> | ||||||
|  | #include "../mwworld/ptr.hpp" | ||||||
| 
 | 
 | ||||||
| namespace MWGui | namespace MWGui | ||||||
| { | { | ||||||
|  | @ -16,6 +17,8 @@ namespace MWGui | ||||||
|         void enterGameMode(); |         void enterGameMode(); | ||||||
|         void enterGuiMode(); |         void enterGuiMode(); | ||||||
| 
 | 
 | ||||||
|  |         void setFocusObject(const MWWorld::Ptr& focus); | ||||||
|  | 
 | ||||||
|         void adjustScreen(int screenWidth, int screenHeight); |         void adjustScreen(int screenWidth, int screenHeight); | ||||||
| 
 | 
 | ||||||
|     private: |     private: | ||||||
|  | @ -24,6 +27,9 @@ namespace MWGui | ||||||
| 
 | 
 | ||||||
|         MyGUI::Widget* mDynamicToolTipBox; |         MyGUI::Widget* mDynamicToolTipBox; | ||||||
| 
 | 
 | ||||||
|  |         MWWorld::Ptr mFocusObject; | ||||||
|  |         bool mFocusChanged; | ||||||
|  | 
 | ||||||
|         bool mGameMode; |         bool mGameMode; | ||||||
|     }; |     }; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -492,3 +492,8 @@ int WindowManager::toggleFps() | ||||||
|     Settings::Manager::setInt("fps", "HUD", showFPSLevel); |     Settings::Manager::setInt("fps", "HUD", showFPSLevel); | ||||||
|     return showFPSLevel; |     return showFPSLevel; | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | void WindowManager::setFocusObject(const MWWorld::Ptr& focus) | ||||||
|  | { | ||||||
|  |     mToolTips->setFocusObject(focus); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -158,6 +158,8 @@ namespace MWGui | ||||||
|     void setPlayerPos(const float x, const float y); ///< set player position in map space
 |     void setPlayerPos(const float x, const float y); ///< set player position in map space
 | ||||||
|     void setPlayerDir(const float x, const float y); ///< set player view direction in map space
 |     void setPlayerDir(const float x, const float y); ///< set player view direction in map space
 | ||||||
| 
 | 
 | ||||||
|  |     void setFocusObject(const MWWorld::Ptr& focus); | ||||||
|  | 
 | ||||||
|     void toggleFogOfWar(); |     void toggleFogOfWar(); | ||||||
| 
 | 
 | ||||||
|     int toggleFps(); |     int toggleFps(); | ||||||
|  |  | ||||||
|  | @ -66,7 +66,10 @@ void Shadows::recreate() | ||||||
|     if (split) |     if (split) | ||||||
|     { |     { | ||||||
|         mPSSMSetup = new PSSMShadowCameraSetup(); |         mPSSMSetup = new PSSMShadowCameraSetup(); | ||||||
|         mPSSMSetup->setSplitPadding(5); | 
 | ||||||
|  |         // Make sure to keep this in sync with the camera's near clip distance!
 | ||||||
|  |         mPSSMSetup->setSplitPadding(mRendering->getCamera()->getNearClipDistance()); | ||||||
|  | 
 | ||||||
|         mPSSMSetup->calculateSplitPoints(3, mRendering->getCamera()->getNearClipDistance(), mShadowFar); |         mPSSMSetup->calculateSplitPoints(3, mRendering->getCamera()->getNearClipDistance(), mShadowFar); | ||||||
| 
 | 
 | ||||||
|         const Real adjustFactors[3] = {64, 64, 64}; |         const Real adjustFactors[3] = {64, 64, 64}; | ||||||
|  |  | ||||||
|  | @ -13,6 +13,7 @@ | ||||||
| 
 | 
 | ||||||
| #include "../mwsound/soundmanager.hpp" | #include "../mwsound/soundmanager.hpp" | ||||||
| 
 | 
 | ||||||
|  | #include "../mwgui/window_manager.hpp" | ||||||
| 
 | 
 | ||||||
| #include "ptr.hpp" | #include "ptr.hpp" | ||||||
| #include "environment.hpp" | #include "environment.hpp" | ||||||
|  | @ -737,6 +738,17 @@ namespace MWWorld | ||||||
| 
 | 
 | ||||||
|         mWeatherManager->update (duration); |         mWeatherManager->update (duration); | ||||||
| 
 | 
 | ||||||
|  |         // inform the GUI about focused object
 | ||||||
|  |         try | ||||||
|  |         { | ||||||
|  |             mEnvironment.mWindowManager->setFocusObject(getPtrViaHandle(mFacedHandle)); | ||||||
|  |         } | ||||||
|  |         catch (std::runtime_error&) | ||||||
|  |         { | ||||||
|  |             MWWorld::Ptr null; | ||||||
|  |             mEnvironment.mWindowManager->setFocusObject(null); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         if (!mRendering->occlusionQuerySupported()) |         if (!mRendering->occlusionQuerySupported()) | ||||||
|         { |         { | ||||||
|             // cast a ray from player to sun to detect if the sun is visible
 |             // cast a ray from player to sun to detect if the sun is visible
 | ||||||
|  |  | ||||||
|  | @ -1,11 +1,12 @@ | ||||||
| <?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | ||||||
| 
 | 
 | ||||||
| <MyGUI type="Layout"> | <MyGUI type="Layout"> | ||||||
|     <Widget type="Widget" layer="Popup" position="0 0 300 200" name="_Main"> |     <Widget type="Widget" layer="Popup" position="0 0 300 300" name="_Main"> | ||||||
| 
 | 
 | ||||||
|         <!-- Simple text-only tooltip --> |         <!-- Simple text-only tooltip --> | ||||||
|         <Widget type="Widget" skin="HUD_Box" position="0 0 300 200" align="Stretch" name="TextToolTipBox"> |         <Widget type="Widget" skin="HUD_Box" position="0 0 300 300" align="Stretch" name="TextToolTipBox"> | ||||||
|             <Widget type="EditBox" skin="MW_TextEdit" position="0 0 300 200" align="Stretch" name="TextToolTip"> |             <Property key="Visible" value="false"/> | ||||||
|  |             <Widget type="EditBox" skin="MW_TextEdit" position="0 0 300 300" align="Stretch" name="TextToolTip"> | ||||||
|                 <Property key="WordWrap" value="true"/> |                 <Property key="WordWrap" value="true"/> | ||||||
|                 <Property key="Static" value="true"/> |                 <Property key="Static" value="true"/> | ||||||
|                 <Property key="TextAlign" value="Left Top"/> |                 <Property key="TextAlign" value="Left Top"/> | ||||||
|  | @ -13,7 +14,8 @@ | ||||||
|         </Widget> |         </Widget> | ||||||
| 
 | 
 | ||||||
|         <!-- Dynamically constructed tooltip goes here --> |         <!-- Dynamically constructed tooltip goes here --> | ||||||
|         <Widget type="Widget" skin="HUD_Box" position="0 0 300 200" align="Stretch" name="DynamicToolTipBox"> |         <Widget type="Widget" skin="HUD_Box" position="0 0 300 300" align="Stretch" name="DynamicToolTipBox"> | ||||||
|  |             <Property key="Visible" value="false"/> | ||||||
|         </Widget> |         </Widget> | ||||||
| 
 | 
 | ||||||
|     </Widget> |     </Widget> | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue