diff options
-rw-r--r-- | src/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/Makefile.am | 1 | ||||
-rw-r--r-- | src/being/being.cpp | 16 | ||||
-rw-r--r-- | src/being/localplayer.cpp | 56 | ||||
-rw-r--r-- | src/being/localplayer.h | 2 | ||||
-rw-r--r-- | src/defaults.cpp | 4 | ||||
-rw-r--r-- | src/enums/being/visiblename.h | 34 | ||||
-rw-r--r-- | src/gui/widgets/tabs/setup_players.cpp | 22 | ||||
-rw-r--r-- | src/gui/widgets/tabs/setup_players.h | 1 |
9 files changed, 119 insertions, 18 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d02f7d049..55fd86d09 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1197,6 +1197,7 @@ SET(SRCS enums/being/relation.h enums/being/targetcursorsize.h enums/being/targetcursortype.h + enums/being/visiblename.h listeners/playerrelationslistener.h listeners/renamelistener.cpp listeners/renamelistener.h diff --git a/src/Makefile.am b/src/Makefile.am index ac3eb779f..cf2f1ce76 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -657,6 +657,7 @@ SRC += events/actionevent.h \ enums/being/relation.h \ enums/being/targetcursorsize.h \ enums/being/targetcursortype.h \ + enums/being/visiblename.h \ position.cpp \ position.h \ render/safeopenglgraphics.cpp\ diff --git a/src/being/being.cpp b/src/being/being.cpp index 5ad4a1006..c401f9d0b 100644 --- a/src/being/being.cpp +++ b/src/being/being.cpp @@ -275,7 +275,7 @@ Being::Being(const BeingId id, setMap(map); setSubtype(subtype, 0); - bool showName1 = false; + VisibleName::Type showName1 = VisibleName::Hide; switch (mType) { @@ -284,11 +284,12 @@ Being::Being(const BeingId id, case ActorType::Pet: case ActorType::Homunculus: case ActorType::Elemental: - showName1 = config.getBoolValue("visiblenames"); + showName1 = static_cast<VisibleName::Type>( + config.getIntValue("visiblenames")); break; case ActorType::Portal: case ActorType::SkillUnit: - showName1 = false; + showName1 = VisibleName::Hide; break; default: case ActorType::Unknown: @@ -306,10 +307,11 @@ Being::Being(const BeingId id, reReadConfig(); - if (mType == ActorType::Npc) + if (mType == ActorType::Npc || + showName1 == VisibleName::Show) + { setShowName(true); - else if (showName1) - setShowName(showName1); + } updateColors(); updatePercentHP(); @@ -2398,7 +2400,7 @@ void Being::updateCoords() restrict2 void Being::optionChanged(const std::string &restrict value) restrict2 { if (mType == ActorType::Player && value == "visiblenames") - setShowName(config.getBoolValue("visiblenames")); + setShowName(config.getIntValue("visiblenames") == VisibleName::Show); } void Being::flashName(const int time) restrict2 diff --git a/src/being/localplayer.cpp b/src/being/localplayer.cpp index 23186dc2c..9af1371bf 100644 --- a/src/being/localplayer.cpp +++ b/src/being/localplayer.cpp @@ -166,6 +166,8 @@ LocalPlayer::LocalPlayer(const BeingId id, mBlockAdvert(false), mTargetDeadPlayers(config.getBoolValue("targetDeadPlayers")), mServerAttack(fromBool(config.getBoolValue("serverAttack"), Keep)), + mVisibleNames(static_cast<VisibleName::Type>( + config.getIntValue("visiblenames"))), mEnableAdvert(config.getBoolValue("enableAdvert")), mTradebot(config.getBoolValue("tradebot")), mTargetOnlyReachable(config.getBoolValue("targetOnlyReachable")), @@ -216,6 +218,7 @@ LocalPlayer::LocalPlayer(const BeingId id, config.addListener("tradebot", this); config.addListener("targetOnlyReachable", this); config.addListener("showserverpos", this); + config.addListener("visiblenames", this); setShowName(config.getBoolValue("showownname")); } @@ -553,21 +556,27 @@ void LocalPlayer::setTarget(Being *const target) oldTarget = mTarget; } - if (mTarget && mTarget->getType() == ActorType::Monster) - mTarget->setShowName(false); + if (mTarget) + { + if (mTarget->getType() == ActorType::Monster) + mTarget->setShowName(false); + } mTarget = target; if (oldTarget) oldTarget->updateName(); - if (mTarget) + if (target) { - mLastTargetX = mTarget->mX; - mLastTargetY = mTarget->mY; - mTarget->updateName(); + mLastTargetX = target->mX; + mLastTargetY = target->mY; + target->updateName(); + if (mVisibleNames == VisibleName::ShowOnSelection) + target->setShowName(true); } - + if (oldTarget && mVisibleNames == VisibleName::ShowOnSelection) + oldTarget->setShowName(false); if (target && target->getType() == ActorType::Monster) target->setShowName(true); } @@ -1073,33 +1082,66 @@ void LocalPlayer::addMessageToQueue(const std::string &message, void LocalPlayer::optionChanged(const std::string &value) { if (value == "showownname") + { setShowName(config.getBoolValue("showownname")); + } else if (value == "targetDeadPlayers") + { mTargetDeadPlayers = config.getBoolValue("targetDeadPlayers"); + } else if (value == "enableBuggyServers") + { mIsServerBuggy = serverConfig.getBoolValue("enableBuggyServers"); + } else if (value == "syncPlayerMove") + { mSyncPlayerMove = config.getBoolValue("syncPlayerMove"); + } else if (value == "syncPlayerMoveDistance") + { mSyncPlayerMoveDistance = config.getIntValue("syncPlayerMoveDistance"); + } else if (value == "drawPath") + { mDrawPath = config.getBoolValue("drawPath"); + } else if (value == "serverAttack") + { mServerAttack = fromBool(config.getBoolValue("serverAttack"), Keep); + } else if (value == "attackMoving") + { mAttackMoving = config.getBoolValue("attackMoving"); + } else if (value == "attackNext") + { mAttackNext = config.getBoolValue("attackNext"); + } else if (value == "showJobExp") + { mShowJobExp = config.getBoolValue("showJobExp"); + } else if (value == "enableAdvert") + { mEnableAdvert = config.getBoolValue("enableAdvert"); + } else if (value == "tradebot") + { mTradebot = config.getBoolValue("tradebot"); + } else if (value == "targetOnlyReachable") + { mTargetOnlyReachable = config.getBoolValue("targetOnlyReachable"); + } else if (value == "showserverpos") + { mShowServerPos = config.getBoolValue("showserverpos"); + } + else if (value == "visiblenames") + { + mVisibleNames = static_cast<VisibleName::Type>( + config.getIntValue("visiblenames")); + } } void LocalPlayer::addJobMessage(const int change) diff --git a/src/being/localplayer.h b/src/being/localplayer.h index 7a3985a32..3a7f4605d 100644 --- a/src/being/localplayer.h +++ b/src/being/localplayer.h @@ -26,6 +26,7 @@ #include "being/being.h" #include "enums/being/pickup.h" +#include "enums/being/visiblename.h" #include "enums/simpletypes/allowsort.h" #include "enums/simpletypes/keep.h" @@ -514,6 +515,7 @@ class LocalPlayer final : public Being, bool mBlockAdvert; bool mTargetDeadPlayers; Keep mServerAttack; + VisibleName::Type mVisibleNames; bool mEnableAdvert; bool mTradebot; bool mTargetOnlyReachable; diff --git a/src/defaults.cpp b/src/defaults.cpp index 48febf17f..aa357648c 100644 --- a/src/defaults.cpp +++ b/src/defaults.cpp @@ -30,6 +30,8 @@ #include "enums/screendensity.h" +#include "enums/being/visiblename.h" + #include "enums/input/inputaction.h" #include "render/graphics.h" @@ -82,7 +84,7 @@ DefaultsData* getConfigDefaults() AddDEF("OverlayDetail", 2); AddDEF("speechBubbleAlpha", 1.0F); AddDEF("MostUsedServerName0", "server.themanaworld.org"); - AddDEF("visiblenames", true); + AddDEF("visiblenames", VisibleName::Show); AddDEF("speech", CAST_S32(BeingSpeech::NO_NAME_IN_BUBBLE)); AddDEF("showgender", true); AddDEF("showlevel", false); diff --git a/src/enums/being/visiblename.h b/src/enums/being/visiblename.h new file mode 100644 index 000000000..70b607502 --- /dev/null +++ b/src/enums/being/visiblename.h @@ -0,0 +1,34 @@ +/* + * The ManaPlus Client + * Copyright (C) 2011-2016 The ManaPlus Developers + * + * This file is part of The ManaPlus Client. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef ENUMS_BEING_VISIBLENAME_H +#define ENUMS_BEING_VISIBLENAME_H + +namespace VisibleName +{ + enum Type + { + Hide = 0, + Show = 1, + ShowOnSelection = 2 + }; +} // namespace BeingDirection + +#endif // ENUMS_BEING_VISIBLENAME_H diff --git a/src/gui/widgets/tabs/setup_players.cpp b/src/gui/widgets/tabs/setup_players.cpp index 0ed677af0..4f6daa272 100644 --- a/src/gui/widgets/tabs/setup_players.cpp +++ b/src/gui/widgets/tabs/setup_players.cpp @@ -51,9 +51,22 @@ static const char *const badgesList[] = N_("show at bottom"), }; +static const int visibleNamesListSize = 3; + +static const char *const visibleNamesList[] = +{ + // TRANSLATORS: visible name type + N_("hide"), + // TRANSLATORS: visible name type + N_("show"), + // TRANSLATORS: visible name type + N_("show on selection") +}; + Setup_Players::Setup_Players(const Widget2 *const widget) : SetupTabScroll(widget), - mBadgesList(new NamesModel) + mBadgesList(new NamesModel), + mVisibleNamesList(new NamesModel) { // TRANSLATORS: settings tab name setName(_("Players")); @@ -82,9 +95,12 @@ Setup_Players::Setup_Players(const Widget2 *const widget) : new SetupItemCheckBox(_("Target dead players"), "", "targetDeadPlayers", this, "targetDeadPlayersEvent"); + mVisibleNamesList->fillFromArray(&visibleNamesList[0], + visibleNamesListSize); // TRANSLATORS: settings option - new SetupItemCheckBox(_("Visible names"), "", - "visiblenames", this, "visiblenamesEvent"); + new SetupItemDropDown(_("Show player names"), "", + "visiblenames", this, "visiblenamesEvent", + mVisibleNamesList, 150); // TRANSLATORS: settings option new SetupItemCheckBox(_("Auto move names"), "", diff --git a/src/gui/widgets/tabs/setup_players.h b/src/gui/widgets/tabs/setup_players.h index c2fe43ba6..efc8e6ecd 100644 --- a/src/gui/widgets/tabs/setup_players.h +++ b/src/gui/widgets/tabs/setup_players.h @@ -42,6 +42,7 @@ class Setup_Players final : public SetupTabScroll private: NamesModel *mBadgesList; + NamesModel *mVisibleNamesList; }; #endif // GUI_WIDGETS_TABS_SETUP_PLAYERS_H |