完善客户端功能并同步差距文档
This commit is contained in:
@@ -165,20 +165,41 @@ int main() {
|
||||
CHECK(!es.get(2)->moving, "stopped at t=1");
|
||||
CHECK(es.get(2)->func == FUNC_WAIT, "func back to WAIT");
|
||||
|
||||
// --- a non-move func snaps ---
|
||||
// --- §3.2 state queue: a near attack func (dir_len < 50) snaps and acts ---
|
||||
// entity 2 is at (1500,500); target (1530,500) -> dir_len 30 < 50.
|
||||
GCMove atk{};
|
||||
atk.header = GC_MOVE;
|
||||
atk.length = sizeof(atk);
|
||||
atk.vid = 2;
|
||||
atk.func = FUNC_ATTACK;
|
||||
atk.x = 1600;
|
||||
atk.y = 600;
|
||||
atk.x = 1530;
|
||||
atk.y = 500;
|
||||
atk.duration = 0;
|
||||
b = pkt(atk);
|
||||
es.apply(GC_MOVE, b.data(), (uint16_t)b.size());
|
||||
CHECK(!es.get(2)->moving && es.get(2)->x == 1600, "attack func snaps position");
|
||||
CHECK(!es.get(2)->moving && es.get(2)->x == 1530, "near attack func snaps position");
|
||||
CHECK(es.get(2)->func == FUNC_ATTACK, "func = ATTACK");
|
||||
|
||||
// --- §3.2 state queue: a far attack func (dir_len >= 50) walks, then attacks
|
||||
// on arrival (reference m_kMovAfterFunc). ---
|
||||
GCMove fatk{};
|
||||
fatk.header = GC_MOVE;
|
||||
fatk.length = sizeof(fatk);
|
||||
fatk.vid = 2;
|
||||
fatk.func = FUNC_ATTACK;
|
||||
fatk.x = 1700; // from (1530,500): dir_len 170 >= 50
|
||||
fatk.y = 500;
|
||||
fatk.duration = 0;
|
||||
b = pkt(fatk);
|
||||
es.set_now(2000);
|
||||
es.apply(GC_MOVE, b.data(), (uint16_t)b.size());
|
||||
CHECK(es.get(2)->moving && es.get(2)->func == FUNC_MOVE, "far attack func walks first");
|
||||
es.set_now(20000); // well past arrival
|
||||
es.tick();
|
||||
CHECK(!es.get(2)->moving && std::abs(es.get(2)->x - 1700.0f) < 0.01f,
|
||||
"far attack func: arrived at Dst");
|
||||
CHECK(es.get(2)->func == FUNC_ATTACK, "far attack func: attacks on arrival");
|
||||
|
||||
// --- movement metadata + batched correction packets ---
|
||||
{
|
||||
GCChangeSpeed speed{GC_CHANGE_SPEED, sizeof(GCChangeSpeed), 2, 175};
|
||||
@@ -964,9 +985,17 @@ int main() {
|
||||
xi.arg1 = 19; // vnum
|
||||
xi.arg2.cell = 2; // exchange slot
|
||||
xi.arg3 = 1; // count
|
||||
xi.sockets[0] = 7001;
|
||||
xi.sockets[2] = -1;
|
||||
xi.attrs[0] = {5, 42};
|
||||
b = pkt(xi);
|
||||
es.apply(GC_EXCHANGE, b.data(), (uint16_t)b.size());
|
||||
CHECK(es.exchange().self_items[2].vnum == 19, "exchange: self item add");
|
||||
CHECK(es.exchange().self_items[2].vnum == 19 &&
|
||||
es.exchange().self_items[2].sockets[0] == 7001 &&
|
||||
es.exchange().self_items[2].sockets[2] == -1 &&
|
||||
es.exchange().self_items[2].attrs[0].type == 5 &&
|
||||
es.exchange().self_items[2].attrs[0].value == 42,
|
||||
"exchange: self item add keeps sockets/attrs");
|
||||
|
||||
GCExchange xe{};
|
||||
xe.header = GC_EXCHANGE;
|
||||
|
||||
Reference in New Issue
Block a user