Overkillz Posted April 3, 2019 Share Posted April 3, 2019 (edited) Hello dear community, today I would like to ask you if there is a way to check when the objects are totally loaded. For example, the first things that I do is to remove world objects. Later, I created an amount of objects and set a cameraMatrix and at the end of it fade the camera to see it but while the camera is loading or is loaded, some objects are being loaded. What do I mean with loaded ? Objects goes from invisible to visible. I wont use setTimer to delay the fadeCamera. Im just asking if there is a way to do it for i=550,20000 do removeWorldModel(i,10000,0,0,0) end setOcclusionsEnabled(false) setWaterLevel(-5000) for k,objects in ipairs(garageObjects) do -- garageObjects table is already defined and with values local a,b,c,d,e,f,g,h,i = unpack(objects) local object = createObject ( a,b,c,d,e,f,g ) setObjectScale(object,h or 1) setElementDoubleSided(object, i or false ) setElementDimension(object,arenaCDimension) end fadeCamera(true) I hope you can bring me a hand with it. EXTRA QUESTION: setGarageOpen function has already built some objects by default ? I mean objects like some wheels, vehicle parts ... or whatever Thanks for reading, regards. Edited April 3, 2019 by Overkillz Link to comment
Swagy Posted April 3, 2019 Share Posted April 3, 2019 (edited) you can try to introduce tables, this way: for i=550,20000 do removeWorldModel(i,10000,0,0,0) end setOcclusionsEnabled(false) setWaterLevel(-5000) for k,objects in ipairs(garageObjects) do -- garageObjects table is already defined and with values local loadedObjects = {} local a,b,c,d,e,f,g,h,i = unpack(objects) local object = createObject ( a,b,c,d,e,f,g ) table.insert(loadedObjects, object) setObjectScale(object,h or 1) setElementDoubleSided(object, i or false ) setElementDimension(object,arenaCDimension) end if (#loadedObjects >= #garageObjects) then fadeCamera(true) loadedObjects = {} end In this case, fadeCamera will be executed only when all the objects were created. PS: setGarageOpen only opens the garage door. Edited April 3, 2019 by UDC Link to comment
Moderators IIYAMA Posted April 3, 2019 Moderators Share Posted April 3, 2019 @Overkillz Objects will only be loaded when they are streamed in. This also means that they can be unloaded and reloaded. for i=550,20000 do removeWorldModel(i,10000,0,0,0) end setOcclusionsEnabled(false) setWaterLevel(-5000) local container = createElement("container") local count = 0 local function elementCounter () count = count + 1 iprint("Streamed in: ", source, ", ", count, "/", #garageObjects) end addEventHandler("onClientElementStreamIn", container, elementCounter) for k,objects in ipairs(garageObjects) do -- garageObjects table is already defined and with values local a,b,c,d,e,f,g,h,i = unpack(objects) local object = createObject ( a,b,c,d,e,f,g ) setObjectScale(object,h or 1) setElementDoubleSided(object, i or false ) setElementDimension(object,arenaCDimension) setElementParent(object, container) -- !important end fadeCamera(true) Keep in mind that this doesn't mean that the texture has been loaded. It doesn't have to be painted to exist. I recommend to use lowLOD objects instead, those will show up faster. https://wiki.multitheftauto.com/wiki/SetLowLODElement See this useful function: https://wiki.multitheftauto.com/wiki/AssignLod function assignLOD(element) local lod = createObject(getElementModel(element),0, 0 ,0, 0, 0, 0, true) setElementDimension(lod,getElementDimension(element)) setElementPosition(lod, getElementPosition(element)) setElementRotation(lod, getElementRotation(element)) setElementCollisionsEnabled(lod,false) setLowLODElement(element,lod) return lod end 1 Link to comment
Overkillz Posted April 3, 2019 Author Share Posted April 3, 2019 28 minutes ago, UDC said: you can try to introduce tables, this way: for i=550,20000 do removeWorldModel(i,10000,0,0,0) end setOcclusionsEnabled(false) setWaterLevel(-5000) for k,objects in ipairs(garageObjects) do -- garageObjects table is already defined and with values local loadedObjects = {} local a,b,c,d,e,f,g,h,i = unpack(objects) local object = createObject ( a,b,c,d,e,f,g ) table.insert(loadedObjects, object) setObjectScale(object,h or 1) setElementDoubleSided(object, i or false ) setElementDimension(object,arenaCDimension) end if (#loadedObjects >= #garageObjects) then fadeCamera(true) loadedObjects = {} end In this case, fadeCamera will be executed only when all the objects were created. PS: setGarageOpen only opens the garage door. In fact there is not any different between your code and mine one. Adding the objects into another table doesn't guarantee you that the objects is loaded. Link to comment
Overkillz Posted April 3, 2019 Author Share Posted April 3, 2019 @IIYAMA I've just tried it and practically I can't apreciate the difference. There isn't a big different between the common method and the previous ones mentioned. Anyways, looks like I will be forced to use setTimer due to load player datas, create shaders, textures ...etc Thanks for it. Might I can implement it on my map Loader. Regards. Link to comment
Moderators IIYAMA Posted April 3, 2019 Moderators Share Posted April 3, 2019 9 minutes ago, Overkillz said: @IIYAMA I've just tried it and practically I can't apreciate the difference. There isn't a big different between the common method and the previous ones mentioned. Anyways, looks like I will be forced to use setTimer due to load player datas, create shaders, textures ...etc Thanks for it. Might I can implement it on my map Loader. Regards. There is a huge difference, MTA can create 10000+ of objects and the streamer can only load a part of it. Very hardware limited. The first example I gave you does not fix your issue directly, but it does answer your topic question. (except for the texture layer on the objects) 2 Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now