Script v1_7_1_0
- AI
- Animals
- Collections
- Contracts
- Debug
- Economy
- Elements
- EnvironmentalScore
- Errors
- Events
- GUI
- Handtools
- Hud
- I3d
- Input
- Jobs
- Maps
- Materials
- Misc
- Objects
- Parameters
- Placeables
- Placement
- Player
- Shop
- Sounds
- Specialization
- Specializations
- StateMachine
- Statistics
- Tasks
- Triggers
- Utils
- Vehicles
Engine v1_7_1_0
- AI
- Animation
- Camera
- Entity
- Fillplanes
- general
- General
- I3D
- Input
- Lighting
- Math
- Network
- Node
- NoteNode
- Overlays
- Particle System
- Physics
- Rendering
- Scenegraph
- Shape
- Sound
- Spline
- String
- Terrain Detail
- Text Rendering
- Tire Track
- VoiceChat
- XML
Foundation Reference
I3DManager
DescriptionThis class provides tools for loading shared i3d files. Access using g_i3DManagerFunctions
- cancelStreamI3DFile
- clearEntireSharedI3DFileCache
- consoleCommandPrintActiveLoadings
- consoleCommandSetLoadingDelay
- consoleCommandShowCache
- init
- loadI3DFile
- loadI3DFileAsync
- loadSharedI3DFile
- loadSharedI3DFileAsync
- loadSharedI3DFileAsyncFinished
- loadSharedI3DFileFinished
- new
- pinSharedI3DFileInCache
- releaseSharedI3DFile
- setLoadingDelay
- unpinSharedI3DFileInCache
- update
cancelStreamI3DFile
DescriptionDefinitioncancelStreamI3DFile()Code
179 | function 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 |
186 | end |
clearEntireSharedI3DFileCache
DescriptionDefinitionclearEntireSharedI3DFileCache()Code
231 | function 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() |
244 | end |
consoleCommandPrintActiveLoadings
DescriptionDefinitionconsoleCommandPrintActiveLoadings()Code
280 | function 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 |
301 | end |
consoleCommandSetLoadingDelay
DescriptionDefinitionconsoleCommandSetLoadingDelay()Code
262 | function 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) |
269 | end |
consoleCommandShowCache
DescriptionDefinitionconsoleCommandShowCache()Code
273 | function I3DManager:consoleCommandShowCache(delay) |
274 | I3DManager.showCache = not I3DManager.showCache |
275 | return "showCache=" .. tostring(I3DManager.showCache) |
276 | end |
init
DescriptionDefinitioninit()Code
31 | function 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 |
40 | end |
loadI3DFile
DescriptionDefinitionloadI3DFile()Code
138 | function 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 |
145 | end |
loadI3DFileAsync
DescriptionDefinitionloadI3DFileAsync()Code
149 | function 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 |
165 | end |
loadSharedI3DFile
DescriptionLoads an i3D file. A cache system is used for faster loadingDefinition
loadSharedI3DFile(string filename, boolean callOnCreate, boolean addToPhysics)Arguments
string | filename | filename |
boolean | callOnCreate | true if onCreate i3d callbacks should be called |
boolean | addToPhysics | true if collisions should be added to physics |
integer | id | i3d rootnode |
integer | sharedLoadRequestId | sharedLoadRequestId |
integer | failedReason | loading failed |
85 | function 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 |
94 | end |
loadSharedI3DFileAsync
DescriptionLoads an i3D file async. A cache system is used for faster loadingDefinition
loadSharedI3DFileAsync(string filename, boolean callOnCreate, boolean addToPhysics, function asyncCallbackFunction, table asyncCallbackObject, table asyncCallbackArguments)Arguments
string | filename | filename |
boolean | callOnCreate | true if onCreate i3d callbacks should be called |
boolean | addToPhysics | true if collisions should be added to physics |
function | asyncCallbackFunction | a callback function with parameters (node, failedReason, args) |
table | asyncCallbackObject | callback function target object |
table | asyncCallbackArguments | a list of arguments |
integer | sharedLoadRequestId | sharedLoadRequestId |
105 | function 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 |
121 | end |
loadSharedI3DFileAsyncFinished
DescriptionCalled once i3d async loading is finishedDefinition
loadSharedI3DFileAsyncFinished(integer nodeId, integer failedReason, table arguments)Arguments
integer | nodeId | i3d node id |
integer | failedReason | fail reason enum type |
table | arguments | a list of arguments |
128 | function 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) |
134 | end |
loadSharedI3DFileFinished
DescriptionDefinitionloadSharedI3DFileFinished()Code
169 | function 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) |
175 | end |
new
DescriptionCreating managerDefinition
new()Return Values
table | instance | instance of object |
19 | function 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 |
27 | end |
pinSharedI3DFileInCache
DescriptionAdds an i3d file to cacheDefinition
pinSharedI3DFileInCache(string filename)Arguments
string | filename | filename |
204 | function 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 |
214 | end |
releaseSharedI3DFile
DescriptionReleases one instance. If ref count <= 0 i3d will be removed from cacheDefinition
releaseSharedI3DFile(int sharedLoadRequestId)Arguments
int | sharedLoadRequestId | sharedLoadRequestId request id |
191 | function 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 |
199 | end |
setLoadingDelay
DescriptionDefinitionsetLoadingDelay()Code
248 | function 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) |
258 | end |
unpinSharedI3DFileInCache
DescriptionRemoves an i3d file from cacheDefinition
unpinSharedI3DFileInCache(string filename)Arguments
string | filename | filename |
219 | function 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 |
227 | end |
update
DescriptionDefinitionupdate()Code
44 | function 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 |
75 | end |