diff options
author | ErodeesFleurs <862959461@qq.com> | 2025-01-22 22:11:47 +0800 |
---|---|---|
committer | ErodeesFleurs <862959461@qq.com> | 2025-01-22 22:11:47 +0800 |
commit | 77e3b5017570bdbe742f7843e800ee941784e3da (patch) | |
tree | ff209c6151b0aa384176aa4289985b5dce6bf0ce | |
parent | 099773621bc5eb6500829bcc5adf38ada3450f74 (diff) |
add "team" lua callbacks
-rw-r--r-- | source/game/CMakeLists.txt | 2 | ||||
-rw-r--r-- | source/game/StarUniverseClient.cpp | 2 | ||||
-rw-r--r-- | source/game/scripting/StarTeamClientLuaBindings.cpp | 33 | ||||
-rw-r--r-- | source/game/scripting/StarTeamClientLuaBindings.hpp | 12 |
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); +} +} |