Make custom can_move settings persistent (fixes #764)

This commit is contained in:
Tamás Bálint Misius 2021-04-17 21:23:39 +02:00
parent 6a6b14f871
commit bcbcdbe06b
No known key found for this signature in database
GPG Key ID: 5B472A12F6ECA9F2
2 changed files with 47 additions and 4 deletions

View File

@ -133,6 +133,14 @@ LuaScriptInterface::LuaScriptInterface(GameController * c, GameModel * m):
luacon_ren = m->GetRenderer(); luacon_ren = m->GetRenderer();
luacon_ci = this; luacon_ci = this;
for (auto moving = 0; moving < PT_NUM; ++moving)
{
for (auto into = 0; into < PT_NUM; ++into)
{
custom_can_move[moving][into] = 0;
}
}
//New TPT API //New TPT API
l = luaL_newstate(); l = luaL_newstate();
tpt_lua_setmainthread(l); tpt_lua_setmainthread(l);
@ -384,6 +392,21 @@ tpt.partsdata = nil");
} }
} }
void LuaScriptInterface::custom_init_can_move()
{
luacon_sim->init_can_move();
for (auto moving = 0; moving < PT_NUM; ++moving)
{
for (auto into = 0; into < PT_NUM; ++into)
{
if (custom_can_move[moving][into] & 0x80)
{
luacon_sim->can_move[moving][into] = custom_can_move[moving][into] & 0x7F;
}
}
}
}
void LuaScriptInterface::Init() void LuaScriptInterface::Init()
{ {
if(Client::Ref().FileExists("autorun.lua")) if(Client::Ref().FileExists("autorun.lua"))
@ -1957,7 +1980,9 @@ int LuaScriptInterface::simulation_canMove(lua_State * l)
} }
else else
{ {
luacon_sim->can_move[movingElement][destinationElement] = luaL_checkint(l, 3); int setting = luaL_checkint(l, 3) & 0x7F;
luacon_ci->custom_can_move[movingElement][destinationElement] = setting | 0x80;
luacon_sim->can_move[movingElement][destinationElement] = setting;
return 0; return 0;
} }
} }
@ -2711,7 +2736,14 @@ int LuaScriptInterface::elements_loadDefault(lua_State * l)
} }
luacon_model->BuildMenus(); luacon_model->BuildMenus();
luacon_sim->init_can_move(); for (auto moving = 0; moving < PT_NUM; ++moving)
{
for (auto into = 0; into < PT_NUM; ++into)
{
luacon_ci->custom_can_move[moving][into] = 0;
}
}
luacon_ci->custom_init_can_move();
std::fill(luacon_ren->graphicscache, luacon_ren->graphicscache+PT_NUM, gcache_item()); std::fill(luacon_ren->graphicscache, luacon_ren->graphicscache+PT_NUM, gcache_item());
return 0; return 0;
} }
@ -2780,6 +2812,13 @@ int LuaScriptInterface::elements_allocate(lua_State * l)
lua_pop(l, 1); lua_pop(l, 1);
} }
for (auto elem = 0; elem < PT_NUM; ++elem)
{
luacon_ci->custom_can_move[elem][newID] = 0;
luacon_ci->custom_can_move[newID][elem] = 0;
}
luacon_ci->custom_init_can_move();
lua_pushinteger(l, newID); lua_pushinteger(l, newID);
return 1; return 1;
} }
@ -2987,7 +3026,7 @@ int LuaScriptInterface::elements_element(lua_State * l)
lua_pop(l, 1); lua_pop(l, 1);
luacon_model->BuildMenus(); luacon_model->BuildMenus();
luacon_sim->init_can_move(); luacon_ci->custom_init_can_move();
luacon_ren->graphicscache[id].isready = 0; luacon_ren->graphicscache[id].isready = 0;
return 0; return 0;
@ -3054,7 +3093,7 @@ int LuaScriptInterface::elements_property(lua_State * l)
} }
luacon_model->BuildMenus(); luacon_model->BuildMenus();
luacon_sim->init_can_move(); luacon_ci->custom_init_can_move();
luacon_ren->graphicscache[id].isready = 0; luacon_ren->graphicscache[id].isready = 0;
} }
else if (propertyName == "Update") else if (propertyName == "Update")

View File

@ -8,6 +8,7 @@
#include "CommandInterface.h" #include "CommandInterface.h"
#include "lua/LuaEvents.h" #include "lua/LuaEvents.h"
#include "simulation/StructProperty.h" #include "simulation/StructProperty.h"
#include "simulation/ElementDefs.h"
#include <map> #include <map>
@ -200,6 +201,9 @@ public:
std::map<LuaComponent *, LuaSmartRef> grabbed_components; std::map<LuaComponent *, LuaSmartRef> grabbed_components;
LuaScriptInterface(GameController * c, GameModel * m); LuaScriptInterface(GameController * c, GameModel * m);
char custom_can_move[PT_NUM][PT_NUM];
void custom_init_can_move();
void OnTick() override; void OnTick() override;
bool HandleEvent(LuaEvents::EventTypes eventType, Event * event) override; bool HandleEvent(LuaEvents::EventTypes eventType, Event * event) override;