diff --git a/modules/client_options/game.otui b/modules/client_options/game.otui index 63d73613..905c23f8 100644 --- a/modules/client_options/game.otui +++ b/modules/client_options/game.otui @@ -34,6 +34,10 @@ Panel id: displayHealth !text: tr('Display creature health bars') + OptionCheckBox + id: displayMana + !text: tr('Display player mana bar') + OptionCheckBox id: displayText !text: tr('Display text messages') diff --git a/modules/client_options/options.lua b/modules/client_options/options.lua index 9ca73fa2..dc0ad0c7 100644 --- a/modules/client_options/options.lua +++ b/modules/client_options/options.lua @@ -25,6 +25,7 @@ local defaultOptions = { ambientLight = 25, displayNames = true, displayHealth = true, + displayMana = true, displayText = true, dontStretchShrink = false } @@ -155,15 +156,17 @@ function hide() end function toggleDisplays() - if options['displayNames'] and options['displayHealth'] then + if options['displayNames'] and options['displayHealth'] and options['displayMana'] then setOption('displayNames', false) elseif options['displayHealth'] then setOption('displayHealth', false) + setOption('displayMana', false) else if not options['displayNames'] and not options['displayHealth'] then setOption('displayNames', true) else setOption('displayHealth', true) + setOption('displayMana', true) end end end @@ -222,6 +225,8 @@ function setOption(key, value, force) gameMapPanel:setDrawNames(value) elseif key == 'displayHealth' then gameMapPanel:setDrawHealthBars(value) + elseif key == 'displayMana' then + gameMapPanel:setDrawManaBar(value) elseif key == 'displayText' then gameMapPanel:setDrawTexts(value) elseif key == 'dontStretchShrink' then diff --git a/src/client/const.h b/src/client/const.h index 2d650b92..5f5c6967 100644 --- a/src/client/const.h +++ b/src/client/const.h @@ -60,11 +60,12 @@ namespace Otc DrawBars = 4096, DrawNames = 8192, DrawLights = 16384, + DrawManaBar = 32768, DrawWalls = DrawOnBottom | DrawOnTop, DrawEverything = DrawGround | DrawGroundBorders | DrawWalls | DrawItems | DrawCreatures | DrawEffects | DrawMissiles | DrawCreaturesInformation | DrawStaticTexts | DrawAnimatedTexts | DrawAnimations | DrawBars | DrawNames | - DrawLights + DrawLights | DrawManaBar }; enum DatOpts { diff --git a/src/client/creature.cpp b/src/client/creature.cpp index 6c0df461..661aa717 100644 --- a/src/client/creature.cpp +++ b/src/client/creature.cpp @@ -241,10 +241,15 @@ void Creature::drawInformation(const Point& point, bool useGray, const Rect& par textRect.bind(parentRect); // distance them + uint32 offset = 12; + if(isLocalPlayer()) { + offset *= 2; + } + if(textRect.top() == parentRect.top()) - backgroundRect.moveTop(textRect.top() + 12); + backgroundRect.moveTop(textRect.top() + offset); if(backgroundRect.bottom() == parentRect.bottom()) - textRect.moveTop(backgroundRect.top() - 12); + textRect.moveTop(backgroundRect.top() - offset); // health rect is based on background rect, so no worries Rect healthRect = backgroundRect.expanded(-1); @@ -260,6 +265,27 @@ void Creature::drawInformation(const Point& point, bool useGray, const Rect& par g_painter->setColor(fillColor); g_painter->drawFilledRect(healthRect); + + if(drawFlags & Otc::DrawManaBar && isLocalPlayer()) { + LocalPlayerPtr player = g_game.getLocalPlayer(); + if(player) { + backgroundRect.moveTop(backgroundRect.bottom()); + + g_painter->setColor(Color::black); + g_painter->drawFilledRect(backgroundRect); + + Rect manaRect = backgroundRect.expanded(-1); + double maxMana = player->getMaxMana(); + if(maxMana == 0) { + manaRect.setWidth(25); + } else { + manaRect.setWidth(player->getMana() / (maxMana * 1.0) * 25); + } + + g_painter->setColor(Color::blue); + g_painter->drawFilledRect(manaRect); + } + } } if(drawFlags & Otc::DrawNames) { diff --git a/src/client/luafunctions.cpp b/src/client/luafunctions.cpp index 1c1ce018..2ceb26e6 100644 --- a/src/client/luafunctions.cpp +++ b/src/client/luafunctions.cpp @@ -749,6 +749,7 @@ void Client::registerLuaFunctions() g_lua.bindClassMemberFunction("setDrawNames", &UIMap::setDrawNames); g_lua.bindClassMemberFunction("setDrawHealthBars", &UIMap::setDrawHealthBars); g_lua.bindClassMemberFunction("setDrawLights", &UIMap::setDrawLights); + g_lua.bindClassMemberFunction("setDrawManaBar", &UIMap::setDrawManaBar); g_lua.bindClassMemberFunction("setAnimated", &UIMap::setAnimated); g_lua.bindClassMemberFunction("setKeepAspectRatio", &UIMap::setKeepAspectRatio); g_lua.bindClassMemberFunction("setMapShader", &UIMap::setMapShader); @@ -761,6 +762,7 @@ void Client::registerLuaFunctions() g_lua.bindClassMemberFunction("isDrawingNames", &UIMap::isDrawingNames); g_lua.bindClassMemberFunction("isDrawingHealthBars", &UIMap::isDrawingHealthBars); g_lua.bindClassMemberFunction("isDrawingLights", &UIMap::isDrawingLights); + g_lua.bindClassMemberFunction("isDrawingManaBar", &UIMap::isDrawingManaBar); g_lua.bindClassMemberFunction("isLimitVisibleRangeEnabled", &UIMap::isLimitVisibleRangeEnabled); g_lua.bindClassMemberFunction("isAnimating", &UIMap::isAnimating); g_lua.bindClassMemberFunction("isKeepAspectRatioEnabled", &UIMap::isKeepAspectRatioEnabled); diff --git a/src/client/mapview.cpp b/src/client/mapview.cpp index 752b1046..0e92029f 100644 --- a/src/client/mapview.cpp +++ b/src/client/mapview.cpp @@ -234,6 +234,7 @@ void MapView::draw(const Rect& rect) int flags = 0; if(m_drawNames){ flags = Otc::DrawNames; } if(m_drawHealthBars) { flags |= Otc::DrawBars; } + if(m_drawManaBar) { flags |= Otc::DrawManaBar; } creature->drawInformation(p, g_map.isCovered(pos, m_cachedFirstVisibleFloor), rect, flags); } } diff --git a/src/client/mapview.h b/src/client/mapview.h index b2aaf89a..a9482990 100644 --- a/src/client/mapview.h +++ b/src/client/mapview.h @@ -108,6 +108,9 @@ public: void setDrawLights(bool enable); bool isDrawingLights() { return m_drawLights; } + void setDrawManaBar(bool enable) { m_drawManaBar = enable; } + bool isDrawingManaBar() { return m_drawManaBar; } + void move(int x, int y); void setAnimated(bool animated) { m_animated = animated; requestVisibleTilesCacheUpdate(); } @@ -153,6 +156,7 @@ private: stdext::boolean m_drawNames; stdext::boolean m_drawHealthBars; stdext::boolean m_drawLights; + stdext::boolean m_drawManaBar; stdext::boolean m_smooth; stdext::boolean m_follow; diff --git a/src/client/uimap.h b/src/client/uimap.h index 4c33795c..da663dd7 100644 --- a/src/client/uimap.h +++ b/src/client/uimap.h @@ -57,6 +57,7 @@ public: void setDrawNames(bool enable) { m_mapView->setDrawNames(enable); } void setDrawHealthBars(bool enable) { m_mapView->setDrawHealthBars(enable); } void setDrawLights(bool enable) { m_mapView->setDrawLights(enable); } + void setDrawManaBar(bool enable) { m_mapView->setDrawManaBar(enable); } void setAnimated(bool enable) { m_mapView->setAnimated(enable); } void setKeepAspectRatio(bool enable); void setMapShader(const PainterShaderProgramPtr& shader, float fadeout, float fadein) { m_mapView->setShader(shader, fadein, fadeout); } @@ -70,6 +71,7 @@ public: bool isDrawingNames() { return m_mapView->isDrawingNames(); } bool isDrawingHealthBars() { return m_mapView->isDrawingHealthBars(); } bool isDrawingLights() { return m_mapView->isDrawingLights(); } + bool isDrawingManaBar() { return m_mapView->isDrawingManaBar(); } bool isAnimating() { return m_mapView->isAnimating(); } bool isKeepAspectRatioEnabled() { return m_keepAspectRatio; } bool isLimitVisibleRangeEnabled() { return m_limitVisibleRange; }