66
77namespace pc {
88
9- void Hooked_OriginalFunction (CallbackManager& mgr, int damage) {
10- Game::EventScope scope;
11-
12- mgr.invokeCallback (" OnTakeDamage" , damage);
13-
14- if (scope.isPrevented ()) {
15- PrimordialCoreTest::getLogger ().warn (" Original default functionality was prevented by a callback!" );
16- return ; // 直接返回,从而阻止原函数的默认行为
17- }
18-
19- PrimordialCoreTest::getLogger ().info (" Executing default original functionality. Damage: {}" , damage);
20- }
21-
229PrimordialCoreTest& PrimordialCoreTest::getInstance () {
2310 static PrimordialCoreTest instance;
2411 return instance;
@@ -30,89 +17,11 @@ bool PrimordialCoreTest::load() {
3017
3118 CallbackManager& mgr = CallbackManager::getInstance ();
3219
33- // 添加不同签名的事件
34- mgr.addCallback (
35- " OnLogin" ,
36- [](std::string user, int age) { getLogger ().info (" [User] {} logged in. Age: {}" , user, age); },
37- 10
38- );
39-
40- mgr.addCallback (" OnSystem" , [](int code) { getLogger ().info (" Code: {}" , code); });
41-
42- // 高优先级测试
43- mgr.addCallback (
44- " OnLogin" ,
45- [](std::string user, int ) { getLogger ().info (" [Admin] Priority check for {}" , user); },
46- 100
47- );
48-
49- // 调用
50- getLogger ().info (" --- Triggering Login ---" );
51- // 注意:必须显式构造std::string,否则推导为const char*导致类型不匹配
52- mgr.invokeCallback (" OnLogin" , std::string (" Alice" ), 25 );
53-
54- getLogger ().info (" --- Triggering System ---" );
55- mgr.invokeCallback (" OnSystem" , 404 );
56-
57- // 回调 A:不阻止默认行为
58- mgr.addCallback (
59- " OnTakeDamage" ,
60- [](int damage) { getLogger ().info (" Callback A saw damage: {}" , damage); },
61- 10
62- );
63-
64- // 回调 B:满足特定条件时阻止默认行为
65- mgr.addCallback (
66- " OnTakeDamage" ,
67- [](int damage) {
68- if (damage > 100 ) {
69- getLogger ().warn (" Callback B: Damage too high! Preventing default." );
70- Game::getInstance ().preventDefault (); // 直接调用,无需返回特定类型
71- }
72- },
73- 20
74- );
75-
76- getLogger ().info (" === 测试1:不会被阻止(damage=50) ===" );
77- Hooked_OriginalFunction (mgr, 50 );
78-
79- getLogger ().info (" === 测试2:会被回调 B 阻止(damage=150) ===" );
80- Hooked_OriginalFunction (mgr, 150 );
81-
82- // 测试嵌套调用
83- getLogger ().info (" === 测试3:嵌套调用测试 ===" );
84- mgr.addCallback (
85- " OnTakeDamage" ,
86- [&mgr](int damage) {
87- getLogger ().info (" Callback C: Triggering nested event" );
88- Game::EventScope scope;
89- mgr.invokeCallback (" OnNestedEvent" , damage);
90- },
91- 30
92- );
93-
94- mgr.addCallback (" OnNestedEvent" , [](int damage) {
95- getLogger ().info (" Nested callback: Damage = {}" , damage);
96- // 这里调用 preventDefault 不会影响外层 OnTakeDamage 的状态
97- Game::getInstance ().preventDefault ();
20+ mgr.addCallback (" LevelInitialize" , [](bool isClientSide, uint64 levelId, std::string levelName) {
21+ if (isClientSide) getLogger ().info (" OnClientLevelInitialize: {}, {}" , levelId, levelName);
22+ else getLogger ().info (" OnServerLevelInitialize: {}, {}" , levelId, levelName);
9823 });
9924
100- {
101- Game::EventScope scope;
102- mgr.invokeCallback (" OnTakeDamage" , 200 );
103- getLogger ().info (" Outer scope prevented: {}" , scope.isPrevented () ? " Yes" : " No" );
104- }
105-
106- {
107- Game::EventScope scope;
108- mgr.invokeCallback (" OnTakeDamage" , 20 );
109- getLogger ().info (" Outer scope prevented: {}" , scope.isPrevented () ? " Yes" : " No" );
110- }
111-
112- // mgr.addCallback("OnServerLevelTick", [](uint64 tick) { getLogger().info("OnServerLevelTick: {}", tick); });
113- // mgr.addCallback("OnClientLevelTick", [](uint64 tick) { getLogger().info("OnClientLevelTick: {}", tick); });
114- // mgr.addCallback("tick", []() { getLogger().info("tick"); });
115-
11625 return true ;
11726}
11827
0 commit comments