Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErodeesFleurs <862959461@qq.com>2025-01-22 22:11:47 +0800
committerErodeesFleurs <862959461@qq.com>2025-01-22 22:11:47 +0800
commit77e3b5017570bdbe742f7843e800ee941784e3da (patch)
treeff209c6151b0aa384176aa4289985b5dce6bf0ce
parent099773621bc5eb6500829bcc5adf38ada3450f74 (diff)
add "team" lua callbacks
-rw-r--r--source/game/CMakeLists.txt2
-rw-r--r--source/game/StarUniverseClient.cpp2
-rw-r--r--source/game/scripting/StarTeamClientLuaBindings.cpp33
-rw-r--r--source/game/scripting/StarTeamClientLuaBindings.hpp12
4 files changed, 49 insertions, 0 deletions
diff --git a/source/game/CMakeLists.txt b/source/game/CMakeLists.txt
index affe2b3..4825d31 100644
--- a/source/game/CMakeLists.txt
+++ b/source/game/CMakeLists.txt
@@ -251,6 +251,7 @@ SET (star_game_HEADERS
scripting/StarRootLuaBindings.hpp
scripting/StarScriptedAnimatorLuaBindings.hpp
scripting/StarStatusControllerLuaBindings.hpp
+ scripting/StarTeamClientLuaBindings.hpp
scripting/StarWorldLuaBindings.hpp
scripting/StarUniverseServerLuaBindings.hpp
@@ -490,6 +491,7 @@ SET (star_game_SOURCES
scripting/StarRootLuaBindings.cpp
scripting/StarScriptedAnimatorLuaBindings.cpp
scripting/StarStatusControllerLuaBindings.cpp
+ scripting/StarTeamClientLuaBindings.cpp
scripting/StarWorldLuaBindings.cpp
scripting/StarUniverseServerLuaBindings.cpp
diff --git a/source/game/StarUniverseClient.cpp b/source/game/StarUniverseClient.cpp
index 70a227e..75d1dbf 100644
--- a/source/game/StarUniverseClient.cpp
+++ b/source/game/StarUniverseClient.cpp
@@ -24,6 +24,7 @@
#include "StarPlayerUniverseMap.hpp"
#include "StarWorldTemplate.hpp"
#include "StarCelestialLuaBindings.hpp"
+#include "StarTeamClientLuaBindings.hpp"
namespace Star {
@@ -499,6 +500,7 @@ void UniverseClient::setLuaCallbacks(String const& groupName, LuaCallbacks const
void UniverseClient::startLua() {
m_luaRoot->restart();
setLuaCallbacks("celestial", LuaBindings::makeCelestialCallbacks(this));
+ setLuaCallbacks("team", LuaBindings::makeTeamClientCallbacks(m_teamClient.get()));
setLuaCallbacks("world", LuaBindings::makeWorldCallbacks(m_worldClient.get()));
auto assets = Root::singleton().assets();
diff --git a/source/game/scripting/StarTeamClientLuaBindings.cpp b/source/game/scripting/StarTeamClientLuaBindings.cpp
new file mode 100644
index 0000000..53ebb62
--- /dev/null
+++ b/source/game/scripting/StarTeamClientLuaBindings.cpp
@@ -0,0 +1,33 @@
+#include "StarTeamClientLuaBindings.hpp"
+#include "StarTeamClient.hpp"
+
+namespace Star {
+
+LuaCallbacks LuaBindings::makeTeamClientCallbacks(TeamClient* teamClient) {
+ LuaCallbacks callbacks;
+
+ callbacks.registerCallbackWithSignature<void>("isMemberOfTeam", bind(mem_fn(&TeamClient::isMemberOfTeam), teamClient));
+ callbacks.registerCallbackWithSignature<void, String>("invitePlayer", bind(mem_fn(&TeamClient::invitePlayer), teamClient, _1));
+
+ callbacks.registerCallback("isTeamLeader", [teamClient](Maybe<String> const& playerUuid) -> bool {
+ if (playerUuid)
+ return teamClient->isTeamLeader(Uuid(*playerUuid));
+ return teamClient->isTeamLeader();
+ });
+ callbacks.registerCallback("currentTeam", [teamClient]() -> Maybe<String> {
+ auto teamUuid = teamClient->currentTeam();
+ if (teamUuid)
+ return teamUuid->hex();
+ return {};
+ });
+ callbacks.registerCallback("makeLeader", [teamClient](String const& playerUuid) {
+ teamClient->makeLeader(Uuid(playerUuid));
+ });
+ callbacks.registerCallback("removeFromTeam", [teamClient](String const& playerUuid) {
+ teamClient->removeFromTeam(Uuid(playerUuid));
+ });
+
+ return callbacks;
+}
+
+}
diff --git a/source/game/scripting/StarTeamClientLuaBindings.hpp b/source/game/scripting/StarTeamClientLuaBindings.hpp
new file mode 100644
index 0000000..8001477
--- /dev/null
+++ b/source/game/scripting/StarTeamClientLuaBindings.hpp
@@ -0,0 +1,12 @@
+#pragma once
+
+#include "StarLua.hpp"
+
+namespace Star {
+
+STAR_CLASS(TeamClient);
+
+namespace LuaBindings {
+ LuaCallbacks makeTeamClientCallbacks(TeamClient* teamClient);
+}
+}