Updated: Avoid creating a matrix in real-time

Updated: Snap directions are updated in every frame
This commit is contained in:
dvdvideo1234 2025-01-26 18:00:54 +02:00
parent 10aaf4d4df
commit ee9920c23e
2 changed files with 9 additions and 6 deletions

View File

@ -87,7 +87,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present
------------ CONFIGURE ASMLIB ------------
asmlib.InitBase("track","assembly")
asmlib.SetOpVar("TOOL_VERSION","9.774")
asmlib.SetOpVar("TOOL_VERSION","9.775")
------------ CONFIGURE GLOBAL INIT OPVARS ------------

View File

@ -4525,6 +4525,7 @@ function GetNormalSpawn(oPly,ucsPos,ucsAng,shdModel,ivhdPoID,
local stSpawn = GetCacheSpawn(oPly, stData)
stSpawn.HID = ihdPoID
stSpawn.HRec = hdRec
local aRev = GetOpVar("ANG_REV")
if(ucsPos) then stSpawn.BPos:Set(ucsPos) end
if(ucsAng) then stSpawn.BAng:Set(ucsAng) end
stSpawn.OPos:Set(stSpawn.BPos); stSpawn.OAng:Set(stSpawn.BAng)
@ -4540,10 +4541,11 @@ function GetNormalSpawn(oPly,ucsPos,ucsAng,shdModel,ivhdPoID,
NegAngle(stSpawn.ANxt, true, true, false)
local vW, aW = LocalToWorld(stSpawn.PNxt, stSpawn.ANxt, stSpawn.BPos, stSpawn.BAng)
stSpawn.OPos:Set(vW); stSpawn.OAng:Set(aW)
end
-- Update snap directions
stSpawn.F:Set(stSpawn.OAng:Forward())
stSpawn.R:Set(stSpawn.OAng:Right())
stSpawn.U:Set(stSpawn.OAng:Up())
end
-- Read holder record
stSpawn.HPnt:SetUnpacked(hdPOA.P:Get())
stSpawn.HOrg:SetUnpacked(hdPOA.O:Get())
@ -4556,10 +4558,11 @@ function GetNormalSpawn(oPly,ucsPos,ucsAng,shdModel,ivhdPoID,
stSpawn.HMtx:Identity()
stSpawn.HMtx:Translate(stSpawn.HOrg)
stSpawn.HMtx:Rotate(stSpawn.HAng)
stSpawn.HMtx:Rotate(GetOpVar("ANG_REV"))
stSpawn.HMtx:Rotate(aRev)
stSpawn.HMtx:Invert()
-- Calculate the spawn matrix
stSpawn.SMtx:Set(stSpawn.TMtx * stSpawn.HMtx)
stSpawn.SMtx:Set(stSpawn.TMtx)
stSpawn.SMtx:Mul(stSpawn.HMtx)
-- Read the spawn origin position and angle
stSpawn.SPos:Set(stSpawn.SMtx:GetTranslation())
stSpawn.SAng:Set(stSpawn.SMtx:GetAngles())