- added other events (now animations/threads/timers should work like intended) - fixed a bug with auto resize (especially for craftos pc) - removed importantScroll (i really disliked this, but now its just not necessary anymore) - removed setMaxScroll and setMinScroll, now it's only 1 method called :setScrollAmount() - if you make a frame scrollable (:setScrollable()) the frame will calculate the allowed scroll amount by it's childrens object's position+height unless you are using :setScrollAmount()
99 lines
2.8 KiB
Lua
99 lines
2.8 KiB
Lua
local xmlValue = require("utils").getValueFromXML
|
|
|
|
return function(name)
|
|
local object
|
|
local objectType = "Thread"
|
|
|
|
local func
|
|
local cRoutine
|
|
local isActive = false
|
|
|
|
local generateXMLEventFunction = function(self, str)
|
|
if(str:sub(1,1)=="#")then
|
|
local o = self:getBaseFrame():getDeepObject(str:sub(2,str:len()))
|
|
if(o~=nil)and(o.internalObjetCall~=nil)then
|
|
return (function()o:internalObjetCall()end)
|
|
end
|
|
else
|
|
return self:getBaseFrame():getVariable(str)
|
|
end
|
|
return self
|
|
end
|
|
|
|
object = {
|
|
name = name,
|
|
getType = function(self)
|
|
return objectType
|
|
end;
|
|
getZIndex = function(self)
|
|
return 1
|
|
end;
|
|
getName = function(self)
|
|
return self.name
|
|
end;
|
|
|
|
getBaseFrame = function(self)
|
|
if(self.parent~=nil)then
|
|
return self.parent:getBaseFrame()
|
|
end
|
|
return self
|
|
end;
|
|
|
|
setValuesByXMLData = function(self, data)
|
|
local f
|
|
if(xmlValue("thread", data)~=nil)then f = generateXMLEventFunction(self, xmlValue("thread", data)) end
|
|
if(xmlValue("start", data)~=nil)then if(xmlValue("start", data))and(f~=nil)then self:start(f) end end
|
|
return self
|
|
end,
|
|
|
|
start = function(self, f)
|
|
if (f == nil) then
|
|
error("Function provided to thread is nil")
|
|
end
|
|
func = f
|
|
cRoutine = coroutine.create(func)
|
|
isActive = true
|
|
local ok, result = coroutine.resume(cRoutine)
|
|
if not (ok) then
|
|
if (result ~= "Terminated") then
|
|
error("Thread Error Occurred - " .. result)
|
|
end
|
|
end
|
|
self.parent:addEvent("other_event", self)
|
|
return self
|
|
end;
|
|
|
|
getStatus = function(self, f)
|
|
if (cRoutine ~= nil) then
|
|
return coroutine.status(cRoutine)
|
|
end
|
|
return nil
|
|
end;
|
|
|
|
stop = function(self, f)
|
|
isActive = false
|
|
self.parent:removeEvent("other_event", self)
|
|
return self
|
|
end;
|
|
|
|
eventHandler = function(self, event, p1, p2, p3)
|
|
if (isActive) then
|
|
if (coroutine.status(cRoutine) ~= "dead") then
|
|
local ok, result = coroutine.resume(cRoutine, event, p1, p2, p3)
|
|
if not (ok) then
|
|
if (result ~= "Terminated") then
|
|
error("Thread Error Occurred - " .. result)
|
|
end
|
|
end
|
|
else
|
|
isActive = false
|
|
end
|
|
end
|
|
end;
|
|
|
|
}
|
|
|
|
object.__index = object
|
|
|
|
return object
|
|
end |