mirror of
https://github.com/dvdvideo1234/TrackAssemblyTool.git
synced 2025-03-04 03:13:32 -05:00
Optimized: Context menu flags management
Added: Context menu on/off convar server controlled Renamed: Flag `en_context_menu` to `tg_context_menu` Renamed: Flag `en_dsv_exdblock` to `en_dsv_datalock` Added: Global callback remover hash suffix related to the file source Updated: Wire extension using the new way for making callbacks
This commit is contained in:
parent
9189be3458
commit
fcf99bc861
@ -72,7 +72,7 @@ local gtInitLogs = {"*Init", false, 0}
|
||||
|
||||
------ CONFIGURE ASMLIB ------
|
||||
asmlib.InitBase("track","assembly")
|
||||
asmlib.SetOpVar("TOOL_VERSION","7.574")
|
||||
asmlib.SetOpVar("TOOL_VERSION","7.575")
|
||||
asmlib.SetIndexes("V" , "x", "y", "z")
|
||||
asmlib.SetIndexes("A" ,"pitch","yaw","roll")
|
||||
asmlib.SetIndexes("WV",1,2,3)
|
||||
@ -105,6 +105,7 @@ asmlib.MakeAsmConvar("maxforce" , 100000, {0}, gnServerControled, "Maximum forc
|
||||
asmlib.MakeAsmConvar("maxactrad", 150, {1,500}, gnServerControled, "Maximum active radius to search for a point ID")
|
||||
asmlib.MakeAsmConvar("maxstcnt" , 200, {1,800}, gnServerControled, "Maximum spawned pieces in stacking mode")
|
||||
asmlib.MakeAsmConvar("enwiremod", 1 , {0, 1 }, gnServerControled, "Toggle the wire extension on/off server side")
|
||||
asmlib.MakeAsmConvar("enctxmenu", 1 , {0, 1 }, gnServerControled, "Toggle the context menu on/off in general")
|
||||
asmlib.MakeAsmConvar("enctxmall", 0 , {0, 1 }, gnServerControled, "Toggle the context menu on/off for all props")
|
||||
asmlib.MakeAsmConvar("endsvlock", 0 , {0, 1 }, gnServerControled, "Toggle the DSV external database file update on/off")
|
||||
|
||||
@ -115,11 +116,10 @@ if(SERVER) then
|
||||
end
|
||||
|
||||
------ CONFIGURE INTERNALS -----
|
||||
asmlib.IsFlag("new_close_frame", false)
|
||||
asmlib.IsFlag("old_close_frame", false)
|
||||
asmlib.IsFlag("en_context_menu", false)
|
||||
asmlib.IsFlag("en_logging_file", false)
|
||||
asmlib.IsFlag("en_dsv_exdblock", false)
|
||||
asmlib.IsFlag("new_close_frame", false) -- The old state for frame shorcut detecting a pulse
|
||||
asmlib.IsFlag("old_close_frame", false) -- The new state for frame shorcut detecting a pulse
|
||||
asmlib.IsFlag("tg_context_menu", false) -- Raises whenever the user opens the game context menu
|
||||
asmlib.IsFlag("en_dsv_datalock", asmlib.GetAsmConvar("endsvlock", "BUL"))
|
||||
asmlib.SetOpVar("MODE_DATABASE", asmlib.GetAsmConvar("modedb" , "STR"))
|
||||
asmlib.SetOpVar("TRACE_MARGIN" , asmlib.GetAsmConvar("maxtrmarg", "FLT"))
|
||||
|
||||
@ -171,36 +171,37 @@ local conWorkMode = asmlib.MakeContainer("WORK_MODE")
|
||||
|
||||
-------- CALLBACKS ----------
|
||||
local gsVarName -- This stores current variable name
|
||||
local gsCbcHash = "_init" -- This keeps suffix realted to the file
|
||||
|
||||
gsVarName = asmlib.GetAsmConvar("maxtrmarg", "NAM")
|
||||
cvarsRemoveChangeCallback(gsVarName, gsVarName.."_call")
|
||||
cvarsRemoveChangeCallback(gsVarName, gsVarName..gsCbcHash)
|
||||
cvarsAddChangeCallback(gsVarName, function(sVar, vOld, vNew)
|
||||
local nM = (tonumber(vNew) or 0)
|
||||
nM = ((nM > 0) and nM or 0) end)
|
||||
asmlib.SetOpVar("TRACE_MARGIN", nM)
|
||||
end, gsVarName.."_call")
|
||||
end, gsVarName..gsCbcHash)
|
||||
|
||||
gsVarName = asmlib.GetAsmConvar("logsmax", "NAM")
|
||||
cvarsRemoveChangeCallback(gsVarName, gsVarName.."_call")
|
||||
cvarsRemoveChangeCallback(gsVarName, gsVarName..gsCbcHash)
|
||||
cvarsAddChangeCallback(gsVarName, function(sVar, vOld, vNew)
|
||||
local nM = asmlib.BorderValue((tonumber(vNew) or 0), "non-neg")
|
||||
asmlib.SetOpVar("TRACE_MARGIN", nM)
|
||||
end, gsVarName.."_call")
|
||||
end, gsVarName..gsCbcHash)
|
||||
|
||||
gsVarName = asmlib.GetAsmConvar("logfile", "NAM")
|
||||
cvarsRemoveChangeCallback(gsVarName, gsVarName.."_call")
|
||||
cvarsRemoveChangeCallback(gsVarName, gsVarName..gsCbcHash)
|
||||
cvarsAddChangeCallback(gsVarName, function(sVar, vOld, vNew)
|
||||
asmlib.IsFlag("en_logging_file", tobool(vNew))
|
||||
end, gsVarName.."_call")
|
||||
end, gsVarName..gsCbcHash)
|
||||
|
||||
gsVarName = asmlib.GetAsmConvar("endsvlock", "NAM")
|
||||
cvarsRemoveChangeCallback(gsVarName, gsVarName.."_call")
|
||||
cvarsRemoveChangeCallback(gsVarName, gsVarName..gsCbcHash)
|
||||
cvarsAddChangeCallback(gsVarName, function(sVar, vOld, vNew)
|
||||
asmlib.IsFlag("en_dsv_exdblock", tobool(vNew))
|
||||
end, gsVarName.."_call")
|
||||
asmlib.IsFlag("en_dsv_datalock", tobool(vNew))
|
||||
end, gsVarName..gsCbcHash)
|
||||
|
||||
gsVarName = asmlib.GetAsmConvar("timermode", "NAM")
|
||||
cvarsRemoveChangeCallback(gsVarName, gsVarName.."_call")
|
||||
cvarsRemoveChangeCallback(gsVarName, gsVarName..gsCbcHash)
|
||||
cvarsAddChangeCallback(gsVarName, function(sVar, vOld, vNew)
|
||||
local arTim = asmlib.GetOpVar("OPSYM_DIRECTORY"):Explode(vNew)
|
||||
local mkTab, ID = asmlib.GetBuilderID(1), 1
|
||||
@ -209,7 +210,7 @@ cvarsAddChangeCallback(gsVarName, function(sVar, vOld, vNew)
|
||||
asmlib.LogInstance("Timer apply {"..defTab.Nick.."}<"..tostring(sTim)..">",gtInitLogs)
|
||||
ID = ID + 1; mkTab = asmlib.GetBuilderID(ID) -- Next table on the list
|
||||
end; asmlib.LogInstance("Timer update <"..tostring(vNew)..">",gtInitLogs)
|
||||
end, gsVarName.."_call")
|
||||
end, gsVarName..gsCbcHash)
|
||||
|
||||
-------- RECORDS ----------
|
||||
asmlib.SetOpVar("STRUCT_SPAWN",{
|
||||
@ -369,8 +370,8 @@ if(CLIENT) then asmlib.InitLocalify(varLanguage:GetString())
|
||||
asmlib.ToIcon("nocollidew" , "world_go" )
|
||||
asmlib.ToIcon("dsvlist_extdb", "database_go" )
|
||||
|
||||
asmlib.SetAction("CTXMENU_OPEN" , function() asmlib.IsFlag("en_context_menu", true ) end)
|
||||
asmlib.SetAction("CTXMENU_CLOSE", function() asmlib.IsFlag("en_context_menu", false) end)
|
||||
asmlib.SetAction("CTXMENU_OPEN" , function() asmlib.IsFlag("tg_context_menu", true ) end)
|
||||
asmlib.SetAction("CTXMENU_CLOSE", function() asmlib.IsFlag("tg_context_menu", false) end)
|
||||
|
||||
asmlib.SetAction("CLEAR_RELATION",
|
||||
function(nLen) local oPly = netReadEntity(); gtArgsLogs[1] = "*CLEAR_RELATION"
|
||||
@ -1204,12 +1205,13 @@ end
|
||||
if(CLIENT) then
|
||||
asmlib.SetAction("UPDATE_CONTEXTVAL", -- Must have the same parameters as the hook
|
||||
function() gtArgsLogs[1] = "*UPDATE_CONTEXTVAL"
|
||||
if(not asmlib.IsFlag("tg_context_menu")) then return nil end -- Menu not opened
|
||||
if(not asmlib.GetAsmConvar("enctxmenu", "BUL")) then return nil end -- Menu not enabled
|
||||
local oPly = LocalPlayer(); if(not asmlib.IsPlayer(oPly)) then
|
||||
asmlib.LogInstance("Player invalid "..asmlib.GetReport(oPly)..">", gtArgsLogs); return nil end
|
||||
local vEye, vAim, tTrig = EyePos(), oPly:GetAimVector(), asmlib.GetOpVar("HOVER_TRIGGER")
|
||||
local oEnt = propertiesGetHovered(vEye, vAim); tTrig[2] = tTrig[1]; tTrig[1] = oEnt
|
||||
if(asmlib.IsOther(oEnt) or tTrig[1] == tTrig[2]) then return nil end -- Enity trigger
|
||||
if(not asmlib.IsFlag("en_context_menu")) then return nil end -- Menu not opened
|
||||
if(not asmlib.GetAsmConvar("enctxmall", "BUL")) then -- Enable for all props
|
||||
local oRec = asmlib.CacheQueryPiece(oEnt:GetModel())
|
||||
if(not asmlib.IsHere(oRec)) then return nil end
|
||||
@ -1224,10 +1226,11 @@ gtOptionsCM.Filter = function(self, ent, ply)
|
||||
if(asmlib.IsOther(ent)) then return false end
|
||||
if(not (ply and ply:IsValid())) then return false end
|
||||
if(not gamemodeCall("CanProperty", ply, gsOptionsCM, ent)) then return false end
|
||||
if(not asmlib.GetAsmConvar("enctxmenu", "BUL")) then return false end
|
||||
if(not asmlib.GetAsmConvar("enctxmall", "BUL")) then
|
||||
local oRec = asmlib.CacheQueryPiece(ent:GetModel())
|
||||
if(not asmlib.IsHere(oRec)) then return false end
|
||||
end -- If the menu is not enabled for all props ged-a-ud!
|
||||
end -- If the menu is not enabled for all props check for track and ged-a-ud!
|
||||
return true -- The entity is track piece and TA menu is available
|
||||
end
|
||||
-- The routine which builds the context menu
|
||||
|
@ -2,12 +2,14 @@
|
||||
local asmlib = trackasmlib
|
||||
|
||||
----- Localizing needed functions
|
||||
local Vector = Vector
|
||||
local Angle = Angle
|
||||
local Color = Color
|
||||
local tonumber = tonumber
|
||||
local tostring = tostring
|
||||
local mathClamp = math and math.Clamp
|
||||
local Vector = Vector
|
||||
local Angle = Angle
|
||||
local Color = Color
|
||||
local tonumber = tonumber
|
||||
local tostring = tostring
|
||||
local mathClamp = math and math.Clamp
|
||||
local cvarsAddChangeCallback = cvars and cvars.AddChangeCallback
|
||||
local cvarsRemoveChangeCallback = cvars and cvars.RemoveChangeCallback
|
||||
|
||||
----- Get extension enabled flag
|
||||
local anyTrue, anyFalse = 1, 0
|
||||
@ -22,18 +24,26 @@ local gsToolPrefL = asmlib.GetOpVar("TOOLNAME_PL")
|
||||
local gsINS = "PIECES:Record({\"%s\", \"%s\", \"%s\", %d, \"%s\", \"%s\", \"%s\", \"%s\"})"
|
||||
local gsDSV = "TRACKASSEMBLY_PIECES\t\"%s\"\t\"%s\"\t\"%s\"\t%d\t\"%s\"\t\"%s\"\t\"%s\"\t\"%s\""
|
||||
|
||||
----- Refresh callbacks global variables
|
||||
cvars.AddChangeCallback(gsToolPrefL.."bnderrmod", function()
|
||||
gsBErr = asmlib.GetAsmConvar("bnderrmod","STR")
|
||||
end)
|
||||
--------- CALLBACKS ---------
|
||||
local gsVarName -- This stores current variable name
|
||||
local gsCbcHash = "_wire" -- This keeps suffix realted to the file
|
||||
|
||||
cvars.AddChangeCallback(gsToolPrefL.."enwiremod", function()
|
||||
enFlag = asmlib.GetAsmConvar("enwiremod","BUL")
|
||||
end)
|
||||
gsVarName = asmlib.GetAsmConvar("enwiremod", "NAM")
|
||||
cvarsRemoveChangeCallback(gsVarName, gsVarName..gsCbcHash)
|
||||
cvarsAddChangeCallback(gsVarName, function(sVar, vOld, vNew)
|
||||
enFlag = ((tonumber(vNew) or 0) ~= 0) end, gsVarName..gsCbcHash)
|
||||
|
||||
cvars.AddChangeCallback(gsToolPrefL.."maxmass", function()
|
||||
gnMaxMass = asmlib.GetAsmConvar("maxmass","FLT")
|
||||
end)
|
||||
gsVarName = asmlib.GetAsmConvar("bnderrmod", "NAM")
|
||||
cvarsRemoveChangeCallback(gsVarName, gsVarName..gsCbcHash)
|
||||
cvarsAddChangeCallback(gsVarName, function(sVar, vOld, vNew)
|
||||
gsBErr = tostring(vNew) end, gsVarName..gsCbcHash)
|
||||
|
||||
gsVarName = asmlib.GetAsmConvar("maxmass", "NAM")
|
||||
cvarsRemoveChangeCallback(gsVarName, gsVarName..gsCbcHash)
|
||||
cvarsAddChangeCallback(gsVarName, function(sVar, vOld, vNew)
|
||||
local nM = (tonumber(vNew) or 0) -- Zero is invalid mass
|
||||
gnMaxMass = ((nM > 0) and nM or 1) -- Apply mass clamp
|
||||
end, gsVarName..gsCbcHash)
|
||||
|
||||
--------- EXPORT ---------
|
||||
|
||||
|
@ -2711,7 +2711,7 @@ function ExportCategory(vEq, tData, sPref)
|
||||
LogInstance("Wrong equality <"..tostring(vEq)..">"); return false end
|
||||
local fPref = tostring(sPref or GetInstPref()); if(IsBlank(sPref)) then
|
||||
LogInstance("("..fPref..") Prefix empty"); return false end
|
||||
if(IsFlag("en_dsv_exdblock")) then
|
||||
if(IsFlag("en_dsv_datalock")) then
|
||||
LogInstance("("..sPref..") User disabled"); return true end
|
||||
local fName, sFunc = GetOpVar("DIRPATH_BAS"), "ExportCategory"
|
||||
if(not fileExists(fName,"DATA")) then fileCreateDir(fName) end
|
||||
@ -2790,7 +2790,7 @@ function ExportDSV(sTable, sPref, sDelim)
|
||||
local defTab = makTab:GetDefinition(); if(not IsHere(defTab)) then
|
||||
LogInstance("("..fPref..") Missing table definition",sTable); return nil end
|
||||
local fName, fPref = GetOpVar("DIRPATH_BAS"), tostring(sPref or GetInstPref())
|
||||
if(IsFlag("en_dsv_exdblock")) then
|
||||
if(IsFlag("en_dsv_datalock")) then
|
||||
LogInstance("("..sPref..") User disabled"); return true end
|
||||
if(not fileExists(fName,"DATA")) then fileCreateDir(fName) end
|
||||
fName = fName..GetOpVar("DIRPATH_DSV")
|
||||
@ -2881,7 +2881,7 @@ end
|
||||
function SynchronizeDSV(sTable, tData, bRepl, sPref, sDelim)
|
||||
local fPref = tostring(sPref or GetInstPref()); if(not IsString(sTable)) then
|
||||
LogInstance("("..fPref..") Table mismatch "..GetReport(sTable)); return false end
|
||||
if(IsFlag("en_dsv_exdblock")) then
|
||||
if(IsFlag("en_dsv_datalock")) then
|
||||
LogInstance("("..sPref..") User disabled"); return true end
|
||||
local makTab = GetBuilderNick(sTable); if(not IsHere(makTab)) then
|
||||
LogInstance("("..fPref.."@"..sTable..") Missing table builder"); return false end
|
||||
@ -2968,7 +2968,7 @@ end
|
||||
function TranslateDSV(sTable, sPref, sDelim)
|
||||
local fPref = tostring(sPref or GetInstPref()); if(not IsString(sTable)) then
|
||||
LogInstance("("..fPref..") Table mismatch "..GetReport(sTable)); return false end
|
||||
if(IsFlag("en_dsv_exdblock")) then
|
||||
if(IsFlag("en_dsv_datalock")) then
|
||||
LogInstance("("..sPref..") User disabled"); return true end
|
||||
local makTab = GetBuilderNick(sTable); if(not IsHere(makTab)) then
|
||||
LogInstance("("..fPref..") Missing table builder",sTable); return false end
|
||||
@ -3015,7 +3015,7 @@ end
|
||||
function RegisterDSV(sProg, sPref, sDelim, bSkip)
|
||||
local sPref = tostring(sPref or GetInstPref()); if(IsBlank(sPref)) then
|
||||
LogInstance("("..sPref..") Prefix empty"); return false end
|
||||
if(IsFlag("en_dsv_exdblock")) then
|
||||
if(IsFlag("en_dsv_datalock")) then
|
||||
LogInstance("("..sPref..") User disabled"); return true end
|
||||
if(CLIENT and gameSinglePlayer()) then
|
||||
LogInstance("("..sPref..") Single client"); return true end
|
||||
|
Loading…
Reference in New Issue
Block a user