Changes related to ray-collision, and luprex global variable stuff
This commit is contained in:
@@ -305,36 +305,15 @@ void World::diff_source(World *master, StreamBuffer *sb) {
|
||||
assert(tsb.empty());
|
||||
}
|
||||
|
||||
const eng::string &World::get_gvname_serial(const eng::string &gvar) {
|
||||
static eng::string empty;
|
||||
auto iter = gvname_to_serial_.find(gvar);
|
||||
if (iter == gvname_to_serial_.end()) {
|
||||
return empty;
|
||||
} else {
|
||||
return iter->second;
|
||||
}
|
||||
}
|
||||
|
||||
void World::patch_globals(StreamBuffer *sb, DebugCollector *dbc) {
|
||||
DebugBlock dbb(dbc, "patch_globals");
|
||||
int64_t seqno = sb->read_int64();
|
||||
int32_t total = sb->read_int32();
|
||||
if (total > 0) {
|
||||
lua_State *L = state();
|
||||
LuaVar globaldb, copy;
|
||||
LuaExtStack LS(L, globaldb, copy);
|
||||
LS.rawget(globaldb, LuaRegistry, "globaldb");
|
||||
for (int i = 0; i < total; i++) {
|
||||
eng::string gvar = sb->read_string();
|
||||
eng::string serial = sb->read_string();
|
||||
gvname_to_serial_[gvar] = serial;
|
||||
StreamBuffer sb(serial);
|
||||
eng::string error = deserialize_lua(LS, copy, &sb);
|
||||
if (error.empty()) {
|
||||
LS.rawset(globaldb, gvar, copy);
|
||||
} else {
|
||||
DebugLine(dbc) << "Invalid global serialized data: " << gvar << ":" << error;
|
||||
}
|
||||
}
|
||||
}
|
||||
assign_seqno_ = seqno;
|
||||
@@ -350,8 +329,8 @@ void World::diff_globals(World *master, StreamBuffer *sb) {
|
||||
int64_t count_pos = tsb.total_writes();
|
||||
int32_t total_mods = 0;
|
||||
for (const eng::string &gvar : gvname_modified_) {
|
||||
const eng::string &mval = master->get_gvname_serial(gvar);
|
||||
const eng::string &sval = get_gvname_serial(gvar);
|
||||
const eng::string &mval = master->get_global(gvar);
|
||||
const eng::string &sval = get_global(gvar);
|
||||
if (mval != sval) {
|
||||
total_mods += 1;
|
||||
tsb.write_string(gvar);
|
||||
@@ -362,8 +341,8 @@ void World::diff_globals(World *master, StreamBuffer *sb) {
|
||||
while (iter != master->seqno_to_gvname_.end()) {
|
||||
const auto &gvar = iter->second;
|
||||
if (gvname_modified_.find(gvar) == gvname_modified_.end()) {
|
||||
const eng::string &mval = master->get_gvname_serial(gvar);
|
||||
const eng::string &sval = get_gvname_serial(gvar);
|
||||
const eng::string &mval = master->get_global(gvar);
|
||||
const eng::string &sval = get_global(gvar);
|
||||
if (mval != sval) {
|
||||
total_mods += 1;
|
||||
tsb.write_string(gvar);
|
||||
|
||||
Reference in New Issue
Block a user