Lazily committing the entire splice at once (read more)
(this message is copied from my blog) So I took the lazy route and just committed the entire splice between the jam branch and the development branch all at once. It is exactly as terrible as you think it is, but I've been out of coding for 2 weeks, and I want to get some shit done. I'll pick through each piece one by one, by comparing the diffs from the develop branch to the current jam-merge branch. Those developers I met on Monday said they were impressed by my ability to manage a large codebase, but if they saw this I'd expect they'd probably take that back. And oh god it's been 3 weeks since I touched the main branch WTF?
This commit is contained in:
@@ -32,19 +32,18 @@ Region* RegionPagerLua::LoadRegion(int x, int y) {
|
||||
Region tmpRegion(x, y);
|
||||
|
||||
//API hook
|
||||
lua_getglobal(luaState, "Region");
|
||||
lua_getfield(luaState, -1, "OnLoad");
|
||||
lua_pushlightuserdata(luaState, &tmpRegion);
|
||||
lua_pushstring(luaState, directory.c_str());
|
||||
if (lua_pcall(luaState, 2, 1, 0) != LUA_OK) {
|
||||
throw(std::runtime_error(std::string() + "Lua error: " + lua_tostring(luaState, -1) ));
|
||||
lua_getglobal(lua, "Region");
|
||||
lua_getfield(lua, -1, "Load");
|
||||
lua_pushlightuserdata(lua, &tmpRegion);
|
||||
if (lua_pcall(lua, 1, 1, 0) != LUA_OK) {
|
||||
throw(std::runtime_error(std::string() + "Lua error: " + lua_tostring(lua, -1) ));
|
||||
}
|
||||
//success or failure
|
||||
if (!lua_toboolean(luaState, -1)) {
|
||||
lua_pop(luaState, 2);
|
||||
if (!lua_toboolean(lua, -1)) {
|
||||
lua_pop(lua, 2);
|
||||
return nullptr;
|
||||
}
|
||||
lua_pop(luaState, 2);
|
||||
lua_pop(lua, 2);
|
||||
regionList.push_front(tmpRegion);
|
||||
return ®ionList.front();
|
||||
}
|
||||
@@ -54,14 +53,13 @@ Region* RegionPagerLua::SaveRegion(int x, int y) {
|
||||
Region* ptr = FindRegion(x, y);
|
||||
if (ptr) {
|
||||
//API hook
|
||||
lua_getglobal(luaState, "Region");
|
||||
lua_getfield(luaState, -1, "OnSave");
|
||||
lua_pushlightuserdata(luaState, ptr);
|
||||
lua_pushstring(luaState, directory.c_str());
|
||||
if (lua_pcall(luaState, 2, 0, 0) != LUA_OK) {
|
||||
throw(std::runtime_error(std::string() + "Lua error: " + lua_tostring(luaState, -1) ));
|
||||
lua_getglobal(lua, "Region");
|
||||
lua_getfield(lua, -1, "Save");
|
||||
lua_pushlightuserdata(lua, ptr);
|
||||
if (lua_pcall(lua, 1, 0, 0) != LUA_OK) {
|
||||
throw(std::runtime_error(std::string() + "Lua error: " + lua_tostring(lua, -1) ));
|
||||
}
|
||||
lua_pop(luaState, 1);
|
||||
lua_pop(lua, 1);
|
||||
}
|
||||
return ptr;
|
||||
}
|
||||
@@ -75,30 +73,29 @@ Region* RegionPagerLua::CreateRegion(int x, int y) {
|
||||
Region tmpRegion(x, y);
|
||||
|
||||
//API hook
|
||||
lua_getglobal(luaState, "Region");
|
||||
lua_getfield(luaState, -1, "OnCreate");
|
||||
lua_pushlightuserdata(luaState, &tmpRegion);
|
||||
lua_getglobal(lua, "Region");
|
||||
lua_getfield(lua, -1, "Create");
|
||||
lua_pushlightuserdata(lua, &tmpRegion);
|
||||
//TODO: parameters
|
||||
if (lua_pcall(luaState, 1, 0, 0) != LUA_OK) {
|
||||
throw(std::runtime_error(std::string() + "Lua error: " + lua_tostring(luaState, -1) ));
|
||||
if (lua_pcall(lua, 1, 0, 0) != LUA_OK) {
|
||||
throw(std::runtime_error(std::string() + "Lua error: " + lua_tostring(lua, -1) ));
|
||||
}
|
||||
lua_pop(luaState, 1);
|
||||
lua_pop(lua, 1);
|
||||
regionList.push_front(tmpRegion);
|
||||
return ®ionList.front();
|
||||
}
|
||||
|
||||
void RegionPagerLua::UnloadRegion(int x, int y) {
|
||||
lua_getglobal(luaState, "Region");
|
||||
lua_getglobal(lua, "Region");
|
||||
|
||||
regionList.remove_if([&](Region& region) -> bool {
|
||||
if (region.GetX() == x && region.GetY() == y) {
|
||||
|
||||
//API hook
|
||||
lua_getfield(luaState, -1, "OnUnload");
|
||||
lua_pushlightuserdata(luaState, ®ion);
|
||||
lua_pushstring(luaState, directory.c_str());
|
||||
if (lua_pcall(luaState, 2, 0, 0) != LUA_OK) {
|
||||
throw(std::runtime_error(std::string() + "Lua error: " + lua_tostring(luaState, -1) ));
|
||||
lua_getfield(lua, -1, "Unload");
|
||||
lua_pushlightuserdata(lua, ®ion);
|
||||
if (lua_pcall(lua, 1, 0, 0) != LUA_OK) {
|
||||
throw(std::runtime_error(std::string() + "Lua error: " + lua_tostring(lua, -1) ));
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -106,22 +103,21 @@ void RegionPagerLua::UnloadRegion(int x, int y) {
|
||||
return false;
|
||||
});
|
||||
|
||||
lua_pop(luaState, 1);
|
||||
lua_pop(lua, 1);
|
||||
}
|
||||
|
||||
void RegionPagerLua::UnloadAll() {
|
||||
lua_getglobal(luaState, "Region");
|
||||
lua_getglobal(lua, "Region");
|
||||
|
||||
for (auto& it : regionList) {
|
||||
//API hook
|
||||
lua_getfield(luaState, -1, "OnUnload");
|
||||
lua_pushlightuserdata(luaState, &it);
|
||||
lua_pushstring(luaState, directory.c_str());
|
||||
if (lua_pcall(luaState, 2, 0, 0) != LUA_OK) {
|
||||
throw(std::runtime_error(std::string() + "Lua error: " + lua_tostring(luaState, -1) ));
|
||||
lua_getfield(lua, -1, "Unload");
|
||||
lua_pushlightuserdata(lua, &it);
|
||||
if (lua_pcall(lua, 1, 0, 0) != LUA_OK) {
|
||||
throw(std::runtime_error(std::string() + "Lua error: " + lua_tostring(lua, -1) ));
|
||||
}
|
||||
}
|
||||
|
||||
lua_pop(luaState, 1);
|
||||
lua_pop(lua, 1);
|
||||
regionList.clear();
|
||||
}
|
||||
Reference in New Issue
Block a user