Fixed automatic registration to not break gate datablock transmission

This commit is contained in:
Redo 2019-04-09 23:57:21 -05:00
parent 5f58a531a8
commit d47e6a50dc
4 changed files with 217 additions and 180 deletions

View File

@ -83,18 +83,42 @@ function fxDTSBrick::Logic_SetOutput(%this, %port, %state)
lualogic_send("SP;" @ %this @ ";" @ %port+1 @ ";" @ %state); lualogic_send("SP;" @ %this @ ";" @ %port+1 @ ";" @ %state);
} }
function fxDtsBrick::Logic_HandlePlant(%brick){
if(!%brick.Logic_HasPlanted){
%brick.Logic_HasPlanted = true;
%data = %brick.getDatablock();
if(isFunction(%data.getName(), "Logic_onPlant")){
%data.Logic_onPlant(%brick);
}
}
}
function fxDtsBrick::Logic_HandleRemove(%brick){
if(!%brick.Logic_HasRemoved){
%brick.Logic_HasRemoved = true;
%data = %brick.getDatablock();
if(isFunction(%data.getName(), "Logic_onRemove")){
%data.Logic_onRemove(%brick);
}
}
}
package LuaLogic_Bricks package LuaLogic_Bricks
{ {
function fxDTSBrickData::onPlant(%this, %brick) function fxDTSBrickData::onPlant(%data, %brick)
{ {
parent::onPlant(%this, %brick); parent::onPlant(%data, %brick);
if(isObject(%brick) && %this.isLogic) if(isObject(%brick) && %data.isLogic)
{ {
if(%this.isLogicWire) if(%data.isLogicWire)
lualogic_addwire(%brick); lualogic_addwire(%brick);
else if(%this.isLogicGate) else if(%data.isLogicGate)
lualogic_addgate(%brick); lualogic_addgate(%brick);
%brick.Logic_HandlePlant();
} }
} }
@ -108,6 +132,8 @@ package LuaLogic_Bricks
lualogic_addwire(%brick); lualogic_addwire(%brick);
else if(%this.isLogicGate) else if(%this.isLogicGate)
lualogic_addgate(%brick); lualogic_addgate(%brick);
%brick.Logic_HandlePlant();
} }
} }
@ -127,6 +153,8 @@ package LuaLogic_Bricks
lualogic_removewire(%brick); lualogic_removewire(%brick);
else if(%this.isLogicGate) else if(%this.isLogicGate)
lualogic_removegate(%brick); lualogic_removegate(%brick);
%brick.Logic_HandleRemove();
} }
parent::onDeath(%this, %brick); parent::onDeath(%this, %brick);
@ -140,6 +168,8 @@ package LuaLogic_Bricks
lualogic_removewire(%brick); lualogic_removewire(%brick);
else if(%this.isLogicGate) else if(%this.isLogicGate)
lualogic_removegate(%brick); lualogic_removegate(%brick);
%brick.Logic_HandleRemove();
} }
parent::onRemove(%this, %brick); parent::onRemove(%this, %brick);

View File

@ -117,7 +117,10 @@ package LuaLogic
activatePackage("LuaLogic"); activatePackage("LuaLogic");
function llr(){ function llr(){
%path = $LuaLogic::Path;
deleteVariables("$LuaLogic*"); deleteVariables("$LuaLogic*");
$LuaLogic::Path = %path;
resetAllOpCallFunc(); resetAllOpCallFunc();
exec("./lualogic.cs"); exec("./lualogic.cs");
schedule(3000, 0, lualogic_connect, 25000); schedule(3000, 0, lualogic_connect, 25000);

View File

@ -11,7 +11,9 @@ function lualogic_escapelogicfunction(%text){
} }
function lualogic_registergatedefinition(%data){ function lualogic_registergatedefinition(%data){
lualogic_registergatedefinition_auto(%data); //lualogic_registergatedefinition_auto(%data);
//handled automatically now
} }
function lualogic_registergatedefinition_auto(%data) function lualogic_registergatedefinition_auto(%data)
@ -19,8 +21,8 @@ function lualogic_registergatedefinition_auto(%data)
if(!isObject(%data)) if(!isObject(%data))
return; return;
if(%data.luaLogic_isRegistered) //if(%data.luaLogic_isRegistered)
return; //return;
%id = %data.getID(); %id = %data.getID();
@ -48,10 +50,12 @@ function lualogic_registergatedefinition_auto(%data)
$LuaLogic::GateDefintion[%idx] = %def; $LuaLogic::GateDefintion[%idx] = %def;
%data.luaLogic_isRegistered = true; //%data.luaLogic_isRegistered = true;
} }
function lualogic_registerAllGateDefinitions(){ function lualogic_registerAllGateDefinitions(){
echo("LuaLogic: Registering gate definitions");
for(%dbidx=0; %dbidx<DatablockGroup.getCount(); %dbidx++){ for(%dbidx=0; %dbidx<DatablockGroup.getCount(); %dbidx++){
%db = DatablockGroup.getObject(%dbidx); %db = DatablockGroup.getObject(%dbidx);
if(%db.isLogic && %db.isLogicGate){ if(%db.isLogic && %db.isLogicGate){
@ -60,7 +64,7 @@ function lualogic_registerAllGateDefinitions(){
} }
} }
lualogic_registerAllGateDefinitions(); schedule(1, 0, lualogic_registerAllGateDefinitions);
function lualogic_print(%text) function lualogic_print(%text)
{ {

View File

@ -1,4 +1,4 @@
$LuaLogic::Path = filePath(ExpandFilename("./server.cs")) @ "/"; $LuaLogic::Path = filePath($Con::File) @ "/";
exec("./scripts/lualogic.cs"); exec("./scripts/lualogic.cs");