LUADOC - Farming Simulator 22

I3DManager

Description
This class provides tools for loading shared i3d files. Access using g_i3DManager
Functions

cancelStreamI3DFile

Description
Definition
cancelStreamI3DFile()
Code
179function I3DManager:cancelStreamI3DFile(loadingRequestId)
180 if loadingRequestId ~= nil then
181 cancelStreamI3DFile(loadingRequestId)
182 else
183 Logging.error("I3DManager:cancelStreamedI3dFile - loadingRequestId is nil")
184 printCallstack()
185 end
186end

clearEntireSharedI3DFileCache

Description
Definition
clearEntireSharedI3DFileCache()
Code
231function I3DManager:clearEntireSharedI3DFileCache(verbose)
232 if verbose == true then
233 local numSharedI3ds = getNumOfSharedI3DFiles()
234 Logging.devInfo("I3DManager: Deleting %s shared i3d files", numSharedI3ds)
235 for i=0, numSharedI3ds-1 do
236 local filename, numRefs = getSharedI3DFilesData(i)
237 Logging.devWarning(" NumRef: %d - File: %s", numRefs, filename)
238 end
239 end
240
241 Logging.devInfo("I3DManager: Deleted shared i3d files")
242
243 clearEntireSharedI3DFileCache()
244end

consoleCommandPrintActiveLoadings

Description
Definition
consoleCommandPrintActiveLoadings()
Code
280function I3DManager:consoleCommandPrintActiveLoadings()
281
282 print("Non-Shared loading tasks:")
283 local loadingRequestIds = getAllStreamI3DFileRequestIds()
284 for k, loadingRequestId in ipairs(loadingRequestIds) do
285 local progress, timeSec, filename, callback, target, args = getStreamI3DFileProgressInfo(loadingRequestId)
286
287 local text = string.format("%03d: Progress: %s | Time %.3fs | File: %s | Callback: %s | Target: %s | Args: %s", loadingRequestId, progress, timeSec, filename, callback, tostring(target), tostring(args))
288 print(text)
289 end
290
291 print("\n\n")
292 print("Shared loading tasks:")
293
294 local sharedLoadingRequestIds = getAllSharedI3DFileRequestIds()
295 for k, sharedLoadingRequestId in ipairs(sharedLoadingRequestIds) do
296 local progress, timeSec, filename, callback, target, args = getSharedI3DFileProgressInfo(sharedLoadingRequestId)
297
298 local text = string.format("%03d: Progress: %s | Time %.3fs | File: %s | Callback: %s | Target: %s | Args: %s", sharedLoadingRequestId, progress, timeSec, filename, callback, tostring(target), tostring(args))
299 print(text)
300 end
301end

consoleCommandSetLoadingDelay

Description
Definition
consoleCommandSetLoadingDelay()
Code
262function I3DManager:consoleCommandSetLoadingDelay(minDelaySec, maxDelaySec, minDelayCachedSec, maxDelayCachedSec)
263 minDelaySec = tonumber(minDelaySec) or 0
264 maxDelaySec = tonumber(maxDelaySec) or minDelaySec
265 minDelayCachedSec = tonumber(minDelayCachedSec) or minDelaySec
266 maxDelayCachedSec = tonumber(maxDelayCachedSec) or maxDelaySec
267
268 self:setLoadingDelay(minDelaySec, maxDelaySec, minDelayCachedSec, maxDelayCachedSec)
269end

consoleCommandShowCache

Description
Definition
consoleCommandShowCache()
Code
273function I3DManager:consoleCommandShowCache(delay)
274 I3DManager.showCache = not I3DManager.showCache
275 return "showCache=" .. tostring(I3DManager.showCache)
276end

init

Description
Definition
init()
Code
31function I3DManager:init()
32 local loadingDelay = tonumber(StartParams.getValue("i3dLoadingDelay"))
33 if loadingDelay ~= nil and loadingDelay > 0 then
34 self:setLoadingDelay(loadingDelay / 1000)
35 end
36
37 if StartParams.getIsSet("scriptDebug") then
38 self:setupDebugLoading()
39 end
40end

loadI3DFile

Description
Definition
loadI3DFile()
Code
138function I3DManager:loadI3DFile(filename, callOnCreate, addToPhysics)
139 callOnCreate = Utils.getNoNil(callOnCreate, false)
140 addToPhysics = Utils.getNoNil(addToPhysics, false)
141
142 local node = loadI3DFile(filename, addToPhysics, callOnCreate, I3DManager.VERBOSE_LOADING)
143
144 return node
145end

loadI3DFileAsync

Description
Definition
loadI3DFileAsync()
Code
149function I3DManager:loadI3DFileAsync(filename, callOnCreate, addToPhysics, asyncCallbackFunction, asyncCallbackObject, asyncCallbackArguments)
150 assert(filename ~= nil, "I3DManager:loadI3DFileAsync - missing filename")
151 assert(asyncCallbackFunction ~= nil, "I3DManager:loadI3DFileAsync - missing callback function")
152 assert(type(asyncCallbackFunction) == "function", "I3DManager:loadI3DFileAsync - Callback value is not a function")
153
154 callOnCreate = Utils.getNoNil(callOnCreate, false)
155 addToPhysics = Utils.getNoNil(addToPhysics, false)
156
157 local arguments = {}
158 arguments.asyncCallbackFunction = asyncCallbackFunction
159 arguments.asyncCallbackObject = asyncCallbackObject
160 arguments.asyncCallbackArguments = asyncCallbackArguments
161
162 local loadRequestId = streamI3DFile(filename, "loadSharedI3DFileFinished", self, arguments, addToPhysics, callOnCreate, I3DManager.VERBOSE_LOADING)
163
164 return loadRequestId
165end

loadSharedI3DFile

Description
Loads an i3D file. A cache system is used for faster loading
Definition
loadSharedI3DFile(string filename, boolean callOnCreate, boolean addToPhysics)
Arguments
stringfilenamefilename
booleancallOnCreatetrue if onCreate i3d callbacks should be called
booleanaddToPhysicstrue if collisions should be added to physics
Return Values
integeridi3d rootnode
integersharedLoadRequestIdsharedLoadRequestId
integerfailedReasonloading failed
Code
85function I3DManager:loadSharedI3DFile(filename, callOnCreate, addToPhysics)
86 -- always print all loading texts
87 local verbose = true
88 callOnCreate = Utils.getNoNil(callOnCreate, false)
89 addToPhysics = Utils.getNoNil(addToPhysics, false)
90
91 local node, sharedLoadRequestId, failedReason = loadSharedI3DFile(filename, addToPhysics, callOnCreate, verbose)
92
93 return node, sharedLoadRequestId, failedReason
94end

loadSharedI3DFileAsync

Description
Loads an i3D file async. A cache system is used for faster loading
Definition
loadSharedI3DFileAsync(string filename, boolean callOnCreate, boolean addToPhysics, function asyncCallbackFunction, table asyncCallbackObject, table asyncCallbackArguments)
Arguments
stringfilenamefilename
booleancallOnCreatetrue if onCreate i3d callbacks should be called
booleanaddToPhysicstrue if collisions should be added to physics
functionasyncCallbackFunctiona callback function with parameters (node, failedReason, args)
tableasyncCallbackObjectcallback function target object
tableasyncCallbackArgumentsa list of arguments
Return Values
integersharedLoadRequestIdsharedLoadRequestId
Code
105function I3DManager:loadSharedI3DFileAsync(filename, callOnCreate, addToPhysics, asyncCallbackFunction, asyncCallbackObject, asyncCallbackArguments)
106 assert(filename ~= nil, "I3DManager:loadSharedI3DFileAsync - missing filename")
107 assert(asyncCallbackFunction ~= nil, "I3DManager:loadSharedI3DFileAsync - missing callback function")
108 assert(type(asyncCallbackFunction) == "function", "I3DManager:loadSharedI3DFileAsync - Callback value is not a function")
109
110 callOnCreate = Utils.getNoNil(callOnCreate, false)
111 addToPhysics = Utils.getNoNil(addToPhysics, false)
112
113 local arguments = {}
114 arguments.asyncCallbackFunction = asyncCallbackFunction
115 arguments.asyncCallbackObject = asyncCallbackObject
116 arguments.asyncCallbackArguments = asyncCallbackArguments
117
118 local sharedLoadRequestId = streamSharedI3DFile(filename, "loadSharedI3DFileAsyncFinished", self, arguments, addToPhysics, callOnCreate, I3DManager.VERBOSE_LOADING)
119
120 return sharedLoadRequestId
121end

loadSharedI3DFileAsyncFinished

Description
Called once i3d async loading is finished
Definition
loadSharedI3DFileAsyncFinished(integer nodeId, integer failedReason, table arguments)
Arguments
integernodeIdi3d node id
integerfailedReasonfail reason enum type
tableargumentsa list of arguments
Code
128function I3DManager:loadSharedI3DFileAsyncFinished(nodeId, failedReason, arguments)
129 local asyncCallbackFunction = arguments.asyncCallbackFunction
130 local asyncCallbackObject = arguments.asyncCallbackObject
131 local asyncCallbackArguments = arguments.asyncCallbackArguments
132
133 asyncCallbackFunction(asyncCallbackObject, nodeId, failedReason, asyncCallbackArguments)
134end

loadSharedI3DFileFinished

Description
Definition
loadSharedI3DFileFinished()
Code
169function I3DManager:loadSharedI3DFileFinished(nodeId, failedReason, arguments)
170 local asyncCallbackFunction = arguments.asyncCallbackFunction
171 local asyncCallbackObject = arguments.asyncCallbackObject
172 local asyncCallbackArguments = arguments.asyncCallbackArguments
173
174 asyncCallbackFunction(asyncCallbackObject, nodeId, failedReason, asyncCallbackArguments)
175end

new

Description
Creating manager
Definition
new()
Return Values
tableinstanceinstance of object
Code
19function I3DManager.new(customMt)
20 local self = setmetatable({}, customMt or I3DManager_mt)
21
22 addConsoleCommand("gsI3DLoadingDelaySet", "Sets loading delay for i3d files", "consoleCommandSetLoadingDelay", self)
23 addConsoleCommand("gsI3DShowCache", "Show active i3d cache", "consoleCommandShowCache", self)
24 addConsoleCommand("gsI3DPrintActiveLoadings", "Print active loadings", "consoleCommandPrintActiveLoadings", self)
25
26 return self
27end

pinSharedI3DFileInCache

Description
Adds an i3d file to cache
Definition
pinSharedI3DFileInCache(string filename)
Arguments
stringfilenamefilename
Code
204function I3DManager:pinSharedI3DFileInCache(filename)
205 if filename ~= nil then
206 if getSharedI3DFileRefCount(filename) < 0 then
207--#debug log("pinSharedI3DFileInCache", filename)
208 pinSharedI3DFileInCache(filename, true)
209 end
210 else
211 Logging.error("I3DManager:pinSharedI3DFileInCache - Filename is nil")
212 printCallstack()
213 end
214end

releaseSharedI3DFile

Description
Releases one instance. If ref count <= 0 i3d will be removed from cache
Definition
releaseSharedI3DFile(int sharedLoadRequestId)
Arguments
intsharedLoadRequestIdsharedLoadRequestId request id
Code
191function I3DManager:releaseSharedI3DFile(sharedLoadRequestId, warnIfInvalid)
192 if sharedLoadRequestId ~= nil then
193 warnIfInvalid = Utils.getNoNil(warnIfInvalid, false)
194 releaseSharedI3DFile(sharedLoadRequestId, warnIfInvalid)
195 else
196 Logging.error("I3DManager:releaseSharedI3DFile - sharedLoadRequestId is nil")
197 printCallstack()
198 end
199end

setLoadingDelay

Description
Definition
setLoadingDelay()
Code
248function I3DManager:setLoadingDelay(minDelaySeconds, maxDelaySeconds, minDelayCachedSeconds, maxDelayCachedSeconds)
249 minDelaySeconds = minDelaySeconds or 0
250 maxDelaySeconds = maxDelaySeconds or minDelaySeconds
251 minDelayCachedSeconds = minDelayCachedSeconds or minDelaySeconds
252 maxDelayCachedSeconds = maxDelayCachedSeconds or maxDelaySeconds
253
254 setStreamI3DFileDelay(minDelaySeconds, maxDelaySeconds)
255 setStreamSharedI3DFileDelay(minDelaySeconds, maxDelaySeconds, minDelayCachedSeconds, maxDelayCachedSeconds)
256
257 Logging.info("Set new loading delay. MinDelay: %.2fs, MaxDelay: %.2fs, MinDelayCached: %.2fs, MaxDelayCached: %.2fs", minDelaySeconds, maxDelaySeconds, minDelayCachedSeconds, maxDelayCachedSeconds)
258end

unpinSharedI3DFileInCache

Description
Removes an i3d file from cache
Definition
unpinSharedI3DFileInCache(string filename)
Arguments
stringfilenamefilename
Code
219function I3DManager:unpinSharedI3DFileInCache(filename)
220 if filename ~= nil then
221--#debug log("unpinSharedI3DFileInCache", filename)
222 unpinSharedI3DFileInCache(filename)
223 else
224 Logging.error("I3DManager:unpinSharedI3DFileInCache - filename is nil")
225 printCallstack()
226 end
227end

update

Description
Definition
update()
Code
44function I3DManager:update(dt)
45 if I3DManager.showCache then
46 local data = {}
47
48 local numSharedI3ds = getNumOfSharedI3DFiles()
49 for i=0, numSharedI3ds-1 do
50 local filename, numRefs = getSharedI3DFilesData(i)
51
52 table.insert(data, {filename=filename, numRefs=numRefs})
53 end
54
55 table.sort(data, function(a, b)
56 return a.filename < b.filename
57 end)
58
59
60 local posX = 0.01
61 local posY = 0.99
62 for _, item in ipairs(data) do
63 setTextAlignment(RenderText.ALIGN_LEFT)
64 renderText(posX, posY, 0.01, "Refcount: " .. tostring(item.numRefs))
65 renderText(posX + 0.04, posY, 0.01, "File: " .. tostring(item.filename))
66
67 posY = posY - 0.011
68
69 if posY < 0 then
70 posX = posX + 0.3
71 posY = 0.99
72 end
73 end
74 end
75end