Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update: Ghost count upper limit to 2500 #53

Merged
merged 7 commits into from
Mar 18, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 19 additions & 17 deletions lua/autorun/trackassembly_init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present
------------ CONFIGURE ASMLIB ------------

asmlib.InitBase("track","assembly")
asmlib.SetOpVar("TOOL_VERSION","8.739")
asmlib.SetOpVar("TOOL_VERSION","8.740")
asmlib.SetIndexes("V" ,1,2,3)
asmlib.SetIndexes("A" ,1,2,3)
asmlib.SetIndexes("WV",1,2,3)
Expand Down Expand Up @@ -130,7 +130,7 @@ asmlib.SetBorder(gsToolPrefL.."enctxmenu", 0, 1)
asmlib.SetBorder(gsToolPrefL.."endsvlock", 0, 1)
asmlib.SetBorder(gsToolPrefL.."enwiremod", 0, 1)
asmlib.SetBorder(gsToolPrefL.."enmultask", 0, 1)
asmlib.SetBorder(gsToolPrefL.."ghostcnt" , 0, 200)
asmlib.SetBorder(gsToolPrefL.."ghostcnt" , 0)
asmlib.SetBorder(gsToolPrefL.."angsnap" , 0, gnMaxRot)
asmlib.SetBorder(gsToolPrefL.."incsnpang", 0, gnMaxRot)
asmlib.SetBorder(gsToolPrefL.."incsnplin", 0, 250)
Expand All @@ -144,6 +144,7 @@ asmlib.SetBorder(gsToolPrefL.."maxmass" , 1)
asmlib.SetBorder(gsToolPrefL.."maxmenupr", 0, 10)
asmlib.SetBorder(gsToolPrefL.."maxstatts", 1, 10)
asmlib.SetBorder(gsToolPrefL.."maxstcnt" , 1)
asmlib.SetBorder(gsToolPrefL.."maxghcnt" , 1)
asmlib.SetBorder(gsToolPrefL.."maxtrmarg", 0, 1)
asmlib.SetBorder(gsToolPrefL.."maxspmarg", -100, 100)
asmlib.SetBorder(gsToolPrefL.."sizeucs" , 0, 50)
Expand Down Expand Up @@ -176,6 +177,7 @@ asmlib.MakeAsmConvar("maxlinear", 5000 , nil, gnServerControled, "Maximum linea
asmlib.MakeAsmConvar("maxforce" , 100000, nil, gnServerControled, "Maximum force limit when creating welds")
asmlib.MakeAsmConvar("maxactrad", 200 , nil, gnServerControled, "Maximum active radius to search for a point ID")
asmlib.MakeAsmConvar("maxstcnt" , 200 , nil, gnServerControled, "Maximum spawned pieces in stacking mode")
asmlib.MakeAsmConvar("maxghcnt" , 1500 , nil, gnServerControled, "Maximum ghost pieces being spawned by client")
asmlib.MakeAsmConvar("enwiremod", 1 , nil, gnServerControled, "Toggle the wire extension on/off server side")
asmlib.MakeAsmConvar("enmultask", 1 , nil, gnServerControled, "Toggle the spawn multitasking on/off server side")
asmlib.MakeAsmConvar("enctxmenu", 1 , nil, gnServerControled, "Toggle the context menu on/off in general")
Expand Down Expand Up @@ -237,37 +239,37 @@ local conWorkMode = asmlib.GetContainer("WORK_MODE")
------------ CALLBACKS ------------

local conCallBack = asmlib.GetContainer("CALLBAC_FUNC")
conCallBack:Push({"maxtrmarg", function(sVar, vOld, vNew)
local nM = (tonumber(vNew) or 0); nM = ((nM > 0) and nM or 0)
conCallBack:Push({"maxtrmarg", function(sV, vO, vN)
local nM = (tonumber(vN) or 0); nM = ((nM > 0) and nM or 0)
asmlib.SetOpVar("TRACE_MARGIN", nM)
end})
conCallBack:Push({"maxspmarg", function(sVar, vOld, vNew)
local nM = (tonumber(vNew) or 0)
conCallBack:Push({"maxspmarg", function(sV, vO, vN)
local nM = (tonumber(vN) or 0)
asmlib.SetOpVar("SPAWN_MARGIN", nM)
end})
conCallBack:Push({"logsmax", function(sVar, vOld, vNew)
local nM = asmlib.BorderValue((tonumber(vNew) or 0), "non-neg")
conCallBack:Push({"logsmax", function(sV, vO, vN)
local nM = asmlib.BorderValue((tonumber(vN) or 0), "non-neg")
asmlib.SetOpVar("LOG_MAXLOGS", nM)
end})
conCallBack:Push({"logfile", function(sVar, vOld, vNew)
asmlib.IsFlag("en_logging_file", tobool(vNew))
conCallBack:Push({"logfile", function(sV, vO, vN)
asmlib.IsFlag("en_logging_file", tobool(vN))
end})
conCallBack:Push({"endsvlock", function(sVar, vOld, vNew)
asmlib.IsFlag("en_dsv_datalock", tobool(vNew))
conCallBack:Push({"endsvlock", function(sV, vO, vN)
asmlib.IsFlag("en_dsv_datalock", tobool(vN))
end})
conCallBack:Push({"timermode", function(sVar, vOld, vNew)
local arTim = gsSymDir:Explode(vNew)
conCallBack:Push({"timermode", function(sV, vO, vN)
local arTim = gsSymDir:Explode(vN)
local mkTab, ID = asmlib.GetBuilderID(1), 1
while(mkTab) do local sTim = arTim[ID]
local defTab = mkTab:GetDefinition(); mkTab:TimerSetup(sTim)
asmlib.LogInstance("Timer apply "..asmlib.GetReport2(defTab.Nick,sTim),gtInitLogs)
ID = ID + 1; mkTab = asmlib.GetBuilderID(ID) -- Next table on the list
end; asmlib.LogInstance("Timer update "..asmlib.GetReport(vNew),gtInitLogs)
end; asmlib.LogInstance("Timer update "..asmlib.GetReport(vN),gtInitLogs)
end})
conCallBack:Push({"dtmessage", function(sVar, vOld, vNew)
conCallBack:Push({"dtmessage", function(sV, vO, vN)
if(SERVER) then
local sK = gsToolPrefL.."dtmessage"
local nD = (tonumber(vNew) or 0)
local nD = (tonumber(vN) or 0)
nD = asmlib.BorderValue(nD, sK)
asmlib.SetOpVar("MSDELTA_SEND", nD)
end
Expand Down
32 changes: 14 additions & 18 deletions lua/trackassembly/trackasmlib.lua
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ local getmetatable = getmetatable
local setmetatable = setmetatable
local collectgarbage = collectgarbage
local LocalToWorld = LocalToWorld
local SafeRemoveEntityDelayed = SafeRemoveEntityDelayed
local osClock = os and os.clock
local osDate = os and os.date
local bitBand = bit and bit.band
Expand Down Expand Up @@ -715,6 +716,7 @@ function InitBase(sName, sPurp)
SetOpVar("TIME_STAMP",Time())
SetOpVar("TIME_INIT",Time())
SetOpVar("DELAY_ACTION",0.01)
SetOpVar("DELAY_REMOVE",0.5)
SetOpVar("MAX_ROTATION",360)
SetOpVar("ANG_ZERO",Angle())
SetOpVar("VEC_ZERO",Vector())
Expand Down Expand Up @@ -2098,6 +2100,7 @@ local function MakeEntityNone(sModel, vPos, aAng) local eNone
local vPos = Vector(vPos or GetOpVar("VEC_ZERO"))
local aAng = Angle(aAng or GetOpVar("ANG_ZERO"))
eNone:SetPos(vPos); eNone:SetAngles(aAng)
eNone.DoNotDuplicate = true -- Disable duping
eNone:SetCollisionGroup(COLLISION_GROUP_NONE)
eNone:SetSolid(SOLID_NONE); eNone:SetMoveType(MOVETYPE_NONE)
eNone:SetNotSolid(true); eNone:SetNoDraw(true); eNone:SetModel(sModel)
Expand Down Expand Up @@ -2186,11 +2189,13 @@ function DecodePOA(sStr)
end; return arPOA -- Return the converted string to POA
end

function GetTransformOA(sModel,sKey)
function GetTransformOA(sModel, sKey)
if(not IsString(sModel)) then
LogInstance("Model mismatch "..GetReport(sKey)); return nil end
LogInstance("Model mismatch "..GetReport2(sModel, sKey)); return nil end
if(not fileExists(sModel, "GAME")) then
LogInstance("Model missing "..GetReport2(sModel, sKey)); return nil end
if(not IsString(sKey)) then
LogInstance("Key mismatch "..GetReport(sKey)..sModel); return nil end
LogInstance("Key mismatch "..GetReport2(sModel, sKey)); return nil end
local ePiece = GetOpVar("ENTITY_TRANSFORMPOA")
if(ePiece and ePiece:IsValid()) then -- There is basis entity then update and extract
if(ePiece:GetModel() ~= sModel) then ePiece:SetModel(sModel)
Expand Down Expand Up @@ -5000,17 +5005,9 @@ function ClearGhosts(vSiz, bCol)
local tGho = GetOpVar("ARRAY_GHOST")
if(not IsHere(tGho)) then return true end
local iSiz = mathCeil(tonumber(vSiz) or tGho.Size)
local nDer = GetOpVar("DELAY_ACTION")
local nDer = GetOpVar("DELAY_REMOVE")
for iD = 1, iSiz do local eGho = tGho[iD]
if(eGho and eGho:IsValid()) then
timerSimple(nDer, function()
if(eGho and eGho:IsValid()) then
eGho:SetNoDraw(true)
eGho:Remove()
tGho[iD] = nil
end
end)
end
SafeRemoveEntityDelayed(eGho, nDer)
end; tGho.Size, tGho.Slot = 0, GetOpVar("MISS_NOMD")
if(bCol) then collectgarbage() end; return true
end
Expand Down Expand Up @@ -5081,11 +5078,10 @@ function MakeGhosts(nCnt, sModel) -- Only he's not a shadow, he's a green ghost!
LogInstance("Invalid ["..iD.."]"..sModel); return false end
end; iD = iD + 1 -- Fade all the ghosts and refresh these that must be drawn
end -- Remove all others that must not be drawn to save memory
for iK = iD, tGho.Size do -- Executes only when (nCnt <= tGho.Size)
local eGho = tGho[iD] -- Read the current ghosted entity
if(eGho and eGho:IsValid()) then -- When valid remove it
eGho:SetNoDraw(true); eGho:Remove() -- Stop drawing and remove
end; eGho = nil; tGho[iD] = nil -- Make sure the item is NIL
local nDer = GetOpVar("DELAY_REMOVE")
for iR = iD, tGho.Size do -- Executes only when (nCnt <= tGho.Size)
local eGho = tGho[iR] -- Read the current ghosted entity
SafeRemoveEntityDelayed(eGho, nDer) -- Make sure the item is NIL
end; tGho.Size, tGho.Slot = nCnt, sModel; return true
end

Expand Down
28 changes: 13 additions & 15 deletions lua/weapons/gmod_tool/stools/trackassembly.lua
Original file line number Diff line number Diff line change
Expand Up @@ -320,7 +320,7 @@ function TOOL:GetGravity()
end

function TOOL:GetGhostsCount()
return mathClamp(self:GetClientNumber("ghostcnt", 0), 0, asmlib.GetAsmConvar("maxstcnt", "INT"))
return mathClamp(self:GetClientNumber("ghostcnt", 0), 0, asmlib.GetAsmConvar("maxghcnt", "INT"))
end

function TOOL:GetUpSpawnAnchor()
Expand Down Expand Up @@ -556,15 +556,12 @@ function TOOL:GetGhostsDepth()
local stackcnt = self:GetStackCount()
if(workmode == 1) then -- Defined by the stack count otherwise 1
return mathMin(ghostcnt, mathMax(stackcnt, 1))
elseif(workmode == 2) then -- Put second value 1 here
return mathMin(ghostcnt, 1) -- to be able to disable it
elseif(workmode == 3 or workmode == 5) then -- Track interpolation curving
local nC = mathMin(mathMax(stackcnt, 1), ghostcnt)
return (stackcnt > 0 and nC or ghostcnt)
elseif(workmode == 4) then -- Put second value 1 here
local tArr = self:GetFlipOver() -- to be used in no array
local nLen = (tArr and #tArr or 1) -- flip-over mode snapping
return mathMin(ghostcnt, nLen) -- Use ghosts count to disable it
elseif(workmode == 2) then -- Intersection. Force lower bound here
return mathMin(ghostcnt, 1) -- Force lower bound one otherwise ghosts
elseif(workmode == 3 or workmode == 5) then -- Track curving interpolation
return (stackcnt > 0 and mathMin(stackcnt, ghostcnt) or ghostcnt)
elseif(workmode == 4) then local tArr = self:GetFlipOver() -- Read flip array
return mathMin(ghostcnt, (tArr and #tArr or 1)) -- Disable via ghosts count
end; return 0
end

Expand Down Expand Up @@ -2440,8 +2437,8 @@ function TOOL.BuildCPanel(CPanel)
end

cvarsRemoveChangeCallback(sName, sName..sCall)
cvarsAddChangeCallback(sName, function(sVar, vOld, vNew)
pComboPhysName:SetValue(vNew) end, sName..sCall);
cvarsAddChangeCallback(sName, function(sV, vO, vN)
pComboPhysName:SetValue(vN) end, sName..sCall);
asmlib.LogTable(cqProperty, "Property", sLog)

-- http://wiki.garrysmod.com/page/Category:DTextEntry
Expand All @@ -2454,11 +2451,12 @@ function TOOL.BuildCPanel(CPanel)

local sName = asmlib.GetAsmConvar("bgskids", "NAM")
cvarsRemoveChangeCallback(sName, sName..sCall)
cvarsAddChangeCallback(sName, function(sVar, vOld, vNew)
pText:SetText(vNew); pText:SetValue(vNew) end, sName..sCall);
cvarsAddChangeCallback(sName, function(sV, vO, vN)
pText:SetText(vN); pText:SetValue(vN) end, sName..sCall);
asmlib.SetNumSlider(CPanel, "mass" , iMaxDec, 0, asmlib.GetAsmConvar("maxmass" , "FLT"))
asmlib.SetNumSlider(CPanel, "activrad", iMaxDec, 0, asmlib.GetAsmConvar("maxactrad", "FLT"))
asmlib.SetNumSlider(CPanel, "stackcnt", 0 , 0, asmlib.GetAsmConvar("maxstcnt" , "INT"))
asmlib.SetNumSlider(CPanel, "ghostcnt", 0 , 0, asmlib.GetAsmConvar("maxghcnt" , "INT"))
asmlib.SetNumSlider(CPanel, "angsnap" , iMaxDec)
asmlib.SetButton(CPanel, "resetvars")
local tBAng = { -- Button interactive slider ( angle offsets )
Expand Down Expand Up @@ -2506,7 +2504,6 @@ if(CLIENT) then
asmlib.SetNumSlider(CPanel, "sizeucs" , iMaxDec)
asmlib.SetNumSlider(CPanel, "incsnplin", 0)
asmlib.SetNumSlider(CPanel, "incsnpang", 0)
asmlib.SetNumSlider(CPanel, "ghostcnt" , 0)
asmlib.SetNumSlider(CPanel, "ghostblnd", iMaxDec)
asmlib.SetNumSlider(CPanel, "crvturnlm", iMaxDec)
asmlib.SetNumSlider(CPanel, "crvleanlm", iMaxDec)
Expand Down Expand Up @@ -2541,6 +2538,7 @@ if(CLIENT) then
asmlib.SetNumSlider(CPanel, "maxforce" , iMaxDec)
asmlib.SetNumSlider(CPanel, "maxactrad", iMaxDec)
asmlib.SetNumSlider(CPanel, "maxstcnt" , 0)
asmlib.SetNumSlider(CPanel, "maxghcnt" , 0)
asmlib.SetNumSlider(CPanel, "maxstatts", 0)
asmlib.SetNumSlider(CPanel, "maxfruse" , 0)
asmlib.SetNumSlider(CPanel, "dtmessage", iMaxDec)
Expand Down
2 changes: 2 additions & 0 deletions resource/localization/bg/trackassembly.properties
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,8 @@ tool.trackassembly.maxactrad=Променете тук за да настрои
tool.trackassembly.maxactrad_con=Граница на радиус\:
tool.trackassembly.maxstcnt=Променете тук за да настроите максималния брой парчета в режим на натрупване
tool.trackassembly.maxstcnt_con=Граница на натрупване\:
tool.trackassembly.maxghcnt=Променете тук за да настроите максималния брой парчета сенки при натрупване
tool.trackassembly.maxghcnt_con=Граница на парчета сенки\:
tool.trackassembly.enwiremod=Когато е разрешено включва разширението за wiremod expression чипа
tool.trackassembly.enwiremod_con=Включи wiremod expression
tool.trackassembly.enmultask=Когато е разрешено включва многозадачната система по време на натрупване
Expand Down
2 changes: 2 additions & 0 deletions resource/localization/en/trackassembly.properties
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,8 @@ tool.trackassembly.maxactrad=Change this to adjust the maximum active radius for
tool.trackassembly.maxactrad_con=Radius limit\:
tool.trackassembly.maxstcnt=Change this to adjust the maximum pieces to be created in stacking mode
tool.trackassembly.maxstcnt_con=Stack limit\:
tool.trackassembly.maxghcnt=Change this to adjust the maximum pieces to be ghosted in stacking mode
tool.trackassembly.maxghcnt_con=Ghosts limit\:
tool.trackassembly.enwiremod=When enabled turns on the wiremod expression chip extension
tool.trackassembly.enwiremod_con=Enable wire expression
tool.trackassembly.enmultask=When enabled turns on the multitasking during stacking mode
Expand Down
Loading