Skip to content

Commit 35e442c

Browse files
committed
unity、ue4客户端组件支持直接调用自己的服务器方法
kbengine#638
1 parent c7292ea commit 35e442c

File tree

2 files changed

+41
-8
lines changed

2 files changed

+41
-8
lines changed

kbe/src/server/tools/kbcmd/client_sdk_ue4.cpp

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2060,7 +2060,7 @@ bool ClientSDKUE4::writeEntityModuleBegin(ScriptDefModule* pEntityScriptDefModul
20602060
if (!pEntityScriptDefModule->isComponentModule())
20612061
initBody_ = "\tEntity(),\n\tpBaseEntityCall(NULL),\n\tpCellEntityCall(NULL),\n";
20622062
else
2063-
initBody_ = "\tEntityComponent(),\n";
2063+
initBody_ = "\tEntityComponent(),\n\tpBaseEntityCall(NULL),\n\tpCellEntityCall(NULL),\n";
20642064

20652065
fileBody() = headerBody;
20662066
strutil::kbe_replace(fileBody(), "#REPLACE#", fmt::format("\tPlease inherit this module, such as: (class {} : public {}{})\n",
@@ -2117,6 +2117,10 @@ bool ClientSDKUE4::writeEntityModuleBegin(ScriptDefModule* pEntityScriptDefModul
21172117
{
21182118
fileBody() += fmt::format("class KBENGINEPLUGINS_API {} : public EntityComponent\n{{\npublic:\n", newModuleName);
21192119

2120+
// 写entityCall属性
2121+
fileBody() += fmt::format("\tEntityBaseEntityCall_{}* pBaseEntityCall;\n", newModuleName);
2122+
fileBody() += fmt::format("\tEntityCellEntityCall_{}* pCellEntityCall;\n\n", newModuleName);
2123+
21202124
changeContextToSource();
21212125
fileBody() += fmt::format("#include \"{}.h\"\n", newModuleName);
21222126
fileBody() += fmt::format("#include \"KBVar.h\"\n");
@@ -2207,22 +2211,18 @@ bool ClientSDKUE4::writeEntityModuleEnd(ScriptDefModule* pEntityScriptDefModule)
22072211

22082212
//EntityComponentType * pEntityComponentType = (EntityComponentType*)pPropertyDescription->getDataType();
22092213
fileBody() += fmt::format("\t{}->pOwner = this;\n", pPropertyDescription->getName());
2210-
fileBody() += fmt::format("\t{}->ownerID = id_;\n\n", pPropertyDescription->getName());
2214+
fileBody() += fmt::format("\t{}->ownerID = id_;\n", pPropertyDescription->getName());
2215+
fileBody() += fmt::format("\t{}->entityComponentPropertyID = {};\n\n", pPropertyDescription->getName(), pPropertyDescription->getUType());
22112216
}
22122217
}
22132218

22142219
fileBody() += fmt::format("}}\n");
22152220

22162221
fileBody() += fmt::format("\n{}::~{}()\n{{\n", newModuleName, newModuleName);
22172222

2223+
22182224
if (!pEntityScriptDefModule->isComponentModule())
22192225
{
2220-
fileBody() += fmt::format("\tif(pBaseEntityCall)\n");
2221-
fileBody() += fmt::format("\t\tdelete pBaseEntityCall;\n\n");
2222-
2223-
fileBody() += fmt::format("\tif(pCellEntityCall)\n");
2224-
fileBody() += fmt::format("\t\tdelete pCellEntityCall;\n\n");
2225-
22262226
ScriptDefModule::PROPERTYDESCRIPTION_MAP clientPropertys = pEntityScriptDefModule->getClientPropertyDescriptions();
22272227
ScriptDefModule::PROPERTYDESCRIPTION_MAP::const_iterator propIter = clientPropertys.begin();
22282228
for (; propIter != clientPropertys.end(); ++propIter)
@@ -2238,6 +2238,12 @@ bool ClientSDKUE4::writeEntityModuleEnd(ScriptDefModule* pEntityScriptDefModule)
22382238
}
22392239
}
22402240

2241+
fileBody() += fmt::format("\tif(pBaseEntityCall)\n");
2242+
fileBody() += fmt::format("\t\tdelete pBaseEntityCall;\n\n");
2243+
2244+
fileBody() += fmt::format("\tif(pCellEntityCall)\n");
2245+
fileBody() += fmt::format("\t\tdelete pCellEntityCall;\n\n");
2246+
22412247
fileBody() += "}\n\n";
22422248

22432249
changeContextToHeader();
@@ -2257,6 +2263,19 @@ bool ClientSDKUE4::writeEntityProcessMessagesMethod(ScriptDefModule* pEntityScri
22572263
// EntityCall
22582264
std::string newModuleName = fmt::format("{}{}", pEntityScriptDefModule->getName(), moduleSuffix);
22592265

2266+
if (pEntityScriptDefModule->isComponentModule())
2267+
{
2268+
changeContextToHeader();
2269+
fileBody() += fmt::format("\n\tvoid createFromStream(MemoryStream& stream) override;\n");
2270+
2271+
changeContextToSource();
2272+
fileBody() += fmt::format("\nvoid {}::createFromStream(MemoryStream& stream)\n{{\n", newModuleName);
2273+
fileBody() += fmt::format("\tEntityComponent::createFromStream(stream);\n");
2274+
fileBody() += fmt::format("\tpBaseEntityCall = new EntityBaseEntityCall_{}(entityComponentPropertyID, ownerID);\n", newModuleName);
2275+
fileBody() += fmt::format("\tpCellEntityCall = new EntityCellEntityCall_{}(entityComponentPropertyID, ownerID);\n", newModuleName);
2276+
fileBody() += fmt::format("}}\n");
2277+
}
2278+
22602279
if (!pEntityScriptDefModule->isComponentModule())
22612280
{
22622281
changeContextToHeader();

kbe/src/server/tools/kbcmd/client_sdk_unity.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1748,6 +1748,10 @@ bool ClientSDKUnity::writeEntityModuleBegin(ScriptDefModule* pEntityScriptDefMod
17481748
if (pEntityScriptDefModule->isComponentModule())
17491749
{
17501750
sourcefileBody_ += fmt::format("\tpublic abstract class {} : EntityComponent\n\t{{\n", newModuleName);
1751+
1752+
// 写entityCall属性
1753+
sourcefileBody_ += fmt::format("\t\tpublic EntityBaseEntityCall_{} baseEntityCall = null;\n", newModuleName);
1754+
sourcefileBody_ += fmt::format("\t\tpublic EntityCellEntityCall_{} cellEntityCall = null;\n\n", newModuleName);
17511755
}
17521756
else
17531757
{
@@ -1816,6 +1820,15 @@ bool ClientSDKUnity::writeEntityProcessMessagesMethod(ScriptDefModule* pEntitySc
18161820
// entityCall
18171821
std::string newModuleName = fmt::format("{}{}", pEntityScriptDefModule->getName(), moduleSuffix);
18181822

1823+
if (pEntityScriptDefModule->isComponentModule())
1824+
{
1825+
sourcefileBody_ += fmt::format("\n\t\tpublic override void createFromStream(MemoryStream stream)\n\t\t{{\n");
1826+
sourcefileBody_ += fmt::format("\t\t\tbase.createFromStream(stream);\n");
1827+
sourcefileBody_ += fmt::format("\t\t\tbaseEntityCall = new EntityBaseEntityCall_{}(entityComponentPropertyID, ownerID);\n", newModuleName);
1828+
sourcefileBody_ += fmt::format("\t\t\tcellEntityCall = new EntityCellEntityCall_{}(entityComponentPropertyID, ownerID);\n", newModuleName);
1829+
sourcefileBody_ += fmt::format("\t\t}}\n");
1830+
}
1831+
18191832
if (!pEntityScriptDefModule->isComponentModule())
18201833
{
18211834
sourcefileBody_ += fmt::format("\n\t\tpublic {}()\n\t\t{{\n", newModuleName);
@@ -1835,6 +1848,7 @@ bool ClientSDKUnity::writeEntityProcessMessagesMethod(ScriptDefModule* pEntitySc
18351848
sourcefileBody_ += fmt::format("\t\t\t\tif(entityComponentScript != null)\n\t\t\t\t{{\n");
18361849
sourcefileBody_ += fmt::format("\t\t\t\t\t{} = ({}{})Activator.CreateInstance(entityComponentScript);\n", pPropertyDescription->getName(), pEntityComponentType->pScriptDefModule()->getName(), moduleSuffix);
18371850
sourcefileBody_ += fmt::format("\t\t\t\t\t{}.owner = this;\n", pPropertyDescription->getName());
1851+
sourcefileBody_ += fmt::format("\t\t\t\t\t{}.entityComponentPropertyID = {};\n", pPropertyDescription->getName(), pPropertyDescription->getUType());
18381852
sourcefileBody_ += fmt::format("\t\t\t\t}}\n\t\t\t}}\n\n");
18391853

18401854
sourcefileBody_ += fmt::format("\t\t\tif({} == null)\n", pPropertyDescription->getName());

0 commit comments

Comments
 (0)