From b37522537cd7049e82172fbae87b4c240f80b07a Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Tue, 14 Aug 2012 19:37:45 +0300 Subject: Add npc cycle select. --- src/actorspritemanager.cpp | 14 +++++++++----- src/actorspritemanager.h | 1 + src/defaults.cpp | 1 + src/gui/setup_other.cpp | 3 +++ 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/actorspritemanager.cpp b/src/actorspritemanager.cpp index 61ca20a79..3206fe36a 100644 --- a/src/actorspritemanager.cpp +++ b/src/actorspritemanager.cpp @@ -191,6 +191,7 @@ ActorSpriteManager::ActorSpriteManager() : mTargetOnlyReachable(config.getBoolValue("targetOnlyReachable")), mCyclePlayers(config.getBoolValue("cyclePlayers")), mCycleMonsters(config.getBoolValue("cycleMonsters")), + mCycleNPC(config.getBoolValue("cycleNPC")), mExtMouseTargeting(config.getBoolValue("extMouseTargeting")) { config.addListener("targetDeadPlayers", this); @@ -861,10 +862,11 @@ Being *ActorSpriteManager::findNearestLivingBeing(Being *aroundBeing, maxDist = maxDist * maxDist; bool cycleSelect = (mCyclePlayers && type == Being::PLAYER) - || (mCycleMonsters && type == Being::MONSTER); + || (mCycleMonsters && type == Being::MONSTER) + || (mCycleNPC && type == Being::NPC); bool filtered = config.getBoolValue("enableAttackFilter") - && type != Being::PLAYER; + && type == Being::MONSTER; bool ignoreDefault = false; if (filtered) @@ -962,7 +964,7 @@ Being *ActorSpriteManager::findNearestLivingBeing(Being *aroundBeing, { Being *target = sortedBeings.at(0); - if (specialDistance && target->getType() == Being::MONSTER + if (specialDistance && target->getType() == type && target->getDistance() <= 2) { return nullptr; @@ -1027,7 +1029,7 @@ Being *ActorSpriteManager::findNearestLivingBeing(Being *aroundBeing, int d = being->getDistance(); // logger->log("dist: %d", dist); // logger->log("name: %s, %d, %d", being->getName().c_str(), (int)valid, d); - if (being->getType() != Being::MONSTER + if (being->getType() != type || !mTargetOnlyReachable) { // if distance not calculated, use old distance d = (being->getTileX() - x) * (being->getTileX() - x) @@ -1038,7 +1040,7 @@ Being *ActorSpriteManager::findNearestLivingBeing(Being *aroundBeing, continue; if (specialDistance && being->getDistance() <= 2 - && being->getType() == Being::MONSTER) + && being->getType() == type) { continue; } @@ -1467,6 +1469,8 @@ void ActorSpriteManager::optionChanged(const std::string &name) mCyclePlayers = config.getBoolValue("cyclePlayers"); else if (name == "cycleMonsters") mCycleMonsters = config.getBoolValue("cycleMonsters"); + else if (name == "cycleNPC") + mCycleNPC = config.getBoolValue("cycleNPC"); else if (name == "extMouseTargeting") mExtMouseTargeting = config.getBoolValue("extMouseTargeting"); } diff --git a/src/actorspritemanager.h b/src/actorspritemanager.h index 1491ca6d4..86bc7d9cd 100644 --- a/src/actorspritemanager.h +++ b/src/actorspritemanager.h @@ -306,6 +306,7 @@ class ActorSpriteManager: public ConfigListener bool mTargetOnlyReachable; bool mCyclePlayers; bool mCycleMonsters; + bool mCycleNPC; bool mExtMouseTargeting; #define defVarsP(mob) \ diff --git a/src/defaults.cpp b/src/defaults.cpp index 1eb87a677..1ddad88d4 100644 --- a/src/defaults.cpp +++ b/src/defaults.cpp @@ -163,6 +163,7 @@ DefaultsData* getConfigDefaults() AddDEF(configData, "logToChat", false); AddDEF(configData, "cyclePlayers", true); AddDEF(configData, "cycleMonsters", true); + AddDEF(configData, "cycleNPC", true); AddDEF(configData, "floorItemsHighlight", true); AddDEF(configData, "enableBotCheker", true); AddDEF(configData, "removeColors", true); diff --git a/src/gui/setup_other.cpp b/src/gui/setup_other.cpp index bfc3059c7..e011be983 100644 --- a/src/gui/setup_other.cpp +++ b/src/gui/setup_other.cpp @@ -155,6 +155,9 @@ Setup_Other::Setup_Other() new SetupItemLabel(_("NPC"), "", this); + new SetupItemCheckBox(_("Cycle npc targets"), "", + "cycleNPC", this, "cycleNPCEvent"); + new SetupItemCheckBox(_("Log NPC dialogue"), "", "logNpcInGui", this, "logNpcInGuiEvent"); -- cgit v1.2.3-60-g2f50