summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorandrew <xdotftw@gmail.com>2014-03-01 13:03:16 +0100
committerandrew <xdotftw@gmail.com>2014-03-01 13:03:16 +0100
commita28e5eca1835e1be868c3bcd22d87e3cfae2f547 (patch)
tree278c6e7ac3743414539944fd2df6420e1ec651ed /src
parentExported and documented cScoreboard (diff)
downloadcuberite-a28e5eca1835e1be868c3bcd22d87e3cfae2f547.tar
cuberite-a28e5eca1835e1be868c3bcd22d87e3cfae2f547.tar.gz
cuberite-a28e5eca1835e1be868c3bcd22d87e3cfae2f547.tar.bz2
cuberite-a28e5eca1835e1be868c3bcd22d87e3cfae2f547.tar.lz
cuberite-a28e5eca1835e1be868c3bcd22d87e3cfae2f547.tar.xz
cuberite-a28e5eca1835e1be868c3bcd22d87e3cfae2f547.tar.zst
cuberite-a28e5eca1835e1be868c3bcd22d87e3cfae2f547.zip
Diffstat (limited to 'src')
-rw-r--r--src/Bindings/ManualBindings.cpp4
-rw-r--r--src/Scoreboard.cpp24
-rw-r--r--src/Scoreboard.h19
3 files changed, 43 insertions, 4 deletions
diff --git a/src/Bindings/ManualBindings.cpp b/src/Bindings/ManualBindings.cpp
index 461186d3b..3c3e78d25 100644
--- a/src/Bindings/ManualBindings.cpp
+++ b/src/Bindings/ManualBindings.cpp
@@ -2583,6 +2583,10 @@ void ManualBindings::Bind(lua_State * tolua_S)
tolua_beginmodule(tolua_S, "cMapManager");
tolua_function(tolua_S, "DoWithMap", tolua_DoWithID<cMapManager, cMap, &cMapManager::DoWithMap>);
tolua_endmodule(tolua_S);
+
+ tolua_beginmodule(tolua_S, "cScoreboard");
+ tolua_function(tolua_S, "ForEachObjective", tolua_ForEach<cScoreboard, cObjective, &cScoreboard::ForEachObjective>);
+ tolua_endmodule(tolua_S);
tolua_beginmodule(tolua_S, "cPlugin");
tolua_function(tolua_S, "Call", tolua_cPlugin_Call);
diff --git a/src/Scoreboard.cpp b/src/Scoreboard.cpp
index 1c5a22eff..43b8ba1ad 100644
--- a/src/Scoreboard.cpp
+++ b/src/Scoreboard.cpp
@@ -457,7 +457,7 @@ cObjective * cScoreboard::GetObjectiveIn(eDisplaySlot a_Slot)
-void cScoreboard::ForEachObjectiveWith(cObjective::eType a_Type, cObjectiveCallback& a_Callback)
+bool cScoreboard::ForEachObjectiveWith(cObjective::eType a_Type, cObjectiveCallback& a_Callback)
{
cCSLock Lock(m_CSObjectives);
@@ -468,10 +468,30 @@ void cScoreboard::ForEachObjectiveWith(cObjective::eType a_Type, cObjectiveCallb
// Call callback
if (a_Callback.Item(&it->second))
{
- return;
+ return false;
}
}
}
+ return true;
+}
+
+
+
+
+
+bool cScoreboard::ForEachObjective(cObjectiveCallback& a_Callback)
+{
+ cCSLock Lock(m_CSObjectives);
+
+ for (cObjectiveMap::iterator it = m_Objectives.begin(); it != m_Objectives.end(); ++it)
+ {
+ // Call callback
+ if (a_Callback.Item(&it->second))
+ {
+ return false;
+ }
+ }
+ return true;
}
diff --git a/src/Scoreboard.h b/src/Scoreboard.h
index f9a8665da..8e268516d 100644
--- a/src/Scoreboard.h
+++ b/src/Scoreboard.h
@@ -92,6 +92,12 @@ public:
/** Send this objective to the specified client */
void SendTo(cClientHandle & a_Client);
+ static const char * GetClassStatic(void) // Needed for ManualBindings's ForEach templates
+ {
+ return "cObjective";
+ }
+
+
private:
typedef std::pair<AString, Score> cTrackedPlayer;
@@ -246,8 +252,17 @@ public:
cTeam * QueryPlayerTeam(const AString & a_Name); // WARNING: O(n logn)
- /** Execute callback for each objective with the specified type */
- void ForEachObjectiveWith(cObjective::eType a_Type, cObjectiveCallback& a_Callback);
+ /** Execute callback for each objective with the specified type
+ *
+ * Returns true if all objectives processed, false if the callback aborted by returning true.
+ */
+ bool ForEachObjectiveWith(cObjective::eType a_Type, cObjectiveCallback& a_Callback);
+
+ /** Execute callback for each objective.
+ *
+ * Returns true if all objectives processed, false if the callback aborted by returning true.
+ */
+ bool ForEachObjective(cObjectiveCallback& a_Callback); // Exported in ManualBindings.cpp
void SetDisplay(cObjective * a_Objective, eDisplaySlot a_Slot);