From 923cdbef0a76190006a1a175b97836d0c3444214 Mon Sep 17 00:00:00 2001 From: David Walter Seikel Date: Mon, 2 Jun 2014 00:18:32 +1000 Subject: Load and rez stuffs in an idler, also fix some bugs in that part. --- lib/scenriLua.lua | 74 ++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 52 insertions(+), 22 deletions(-) (limited to 'lib') diff --git a/lib/scenriLua.lua b/lib/scenriLua.lua index 1b9f010..30ff7f0 100644 --- a/lib/scenriLua.lua +++ b/lib/scenriLua.lua @@ -19,7 +19,6 @@ do loadSim = function(sim) local file = sim .. '/index.omg' - print('Loading sim from file ' .. file) -- TODO - Stuffs should be local, but externally loaded functions can't access locals it seems. Stuffs = {} @@ -29,34 +28,65 @@ do setfenv(simData, getfenv(1)) simData() if Stuffs.details and Stuffs.details.stuffs then - local simStuffs = Stuffs - - for k, v in pairs(simStuffs.details.stuffs) do - file = sim .. '/' .. v.fileName - print('Rezzing ' .. file) - simData, err = loadfile(file) - if simData then - setfenv(simData, getfenv(1)) - simData() - if Stuffs.details and Stuffs.details.Mesh then - local eStuffs = addStuffs(Stuffs.uuid, Stuffs.name, Stuffs.description, - Stuffs.owner, v.fileName, MeshType[Stuffs.details.Mesh.kind], - v.pos[1], v.pos[2], v.pos[3], v.rot[1], v.rot[2], v.rot[3], v.rot[4]) - if eStuffs then - addMaterial(eStuffs, -1, TextureType[Stuffs.details.Mesh.materials[0].kind ], Stuffs.details.Mesh.materials[0].texture) - stuffsSetup(eStuffs, Stuffs.fake) - end - end - elseif 'cannot open ' ~= string.sub(err, 1, 12) then - print("ERROR - " .. err) - end + local count = 0 + -- Lua is useless sometimes. + for k, v in pairs(Stuffs.details.stuffs) do + count = count + 1 + end + preallocateStuffs(count) + for k, v in pairs(Stuffs.details.stuffs) do + partFillStuffs(k, v.fileName, v.pos[1], v.pos[2], v.pos[3], v.rot[1], v.rot[2], v.rot[3], v.rot[4]) end end elseif 'cannot open ' ~= string.sub(err, 1, 12) then print("ERROR - " .. err) end + print('Loaded sim from file ' .. file) end skang.thingasm('loadSim', 'Load a sim.', loadSim, 'string') + finishLoadStuffs = function(sim, stuffs) + local file = sim .. '/' .. stuffs + local name = string.sub(stuffs, 1, -5) + simData, err = loadfile(file) + if simData then + setfenv(simData, getfenv(1)) + simData() + if Stuffs.details and Stuffs.details.Mesh then + local meshFile = Stuffs.details.Mesh.fileName or stuffs + local eStuffs = finishStuffs(Stuffs.uuid, Stuffs.name, name, Stuffs.description, Stuffs.owner, meshFile, MeshType[Stuffs.details.Mesh.kind], Stuffs.fake) + if eStuffs then + addMaterial(eStuffs, -1, TextureType[Stuffs.details.Mesh.materials[0].kind ], Stuffs.details.Mesh.materials[0].texture) + end + end + elseif 'cannot open ' ~= string.sub(err, 1, 12) then + print("ERROR - " .. err) + end + end + skang.thingasm('finishLoadStuffs', 'Finish loading a stuffs.', finishLoadStuffs, 'string,string') + + loadStuffs = function(sim, stuffs) + local file = sim .. '/' .. stuffs + print('Rezzing ' .. file) + simData, err = loadfile(file) + if simData then + setfenv(simData, getfenv(1)) + simData() + if Stuffs.details and Stuffs.details.Mesh then + local meshFile = Stuffs.details.Mesh.fileName or v.fileName + local eStuffs = addStuffs(Stuffs.uuid, Stuffs.name, Stuffs.description, + Stuffs.owner, v.fileName, MeshType[Stuffs.details.Mesh.kind], + v.pos[1], v.pos[2], v.pos[3], v.rot[1], v.rot[2], v.rot[3], v.rot[4]) + if eStuffs then + addMaterial(eStuffs, -1, TextureType[Stuffs.details.Mesh.materials[0].kind ], Stuffs.details.Mesh.materials[0].texture) + stuffsSetup(eStuffs, Stuffs.fake) + end + end + elseif 'cannot open ' ~= string.sub(err, 1, 12) then + print("ERROR - " .. err) + end + end + skang.thingasm('loadStuffs', 'Load a stuffs.', loadStuffs, 'string') + skang.moduleEnd(_M) end -- cgit v1.1