Added multi.compat.backwards[ver] Require this to be able to use features that were changed from that version. loops callback args are now: self,dt steps callback args are now: self,pos If requiring the backwards compat for the previous version do so after requiring all of the modules you are using.
283 lines
5.8 KiB
Lua
283 lines
5.8 KiB
Lua
multi.OnObjectCreated(function(obj)
|
|
if obj.Type=="loop" then
|
|
function obj:Act()
|
|
for i=1,#self.func do
|
|
self.func[i](self.Parent.clock()-self.Start,self)
|
|
end
|
|
end
|
|
elseif obj.Type=="step" then
|
|
function obj:Act()
|
|
if self~=nil then
|
|
if self.spos==0 then
|
|
if self.pos==self.start then
|
|
for fe=1,#self.funcS do
|
|
self.funcS[fe](self)
|
|
end
|
|
end
|
|
for i=1,#self.func do
|
|
self.func[i](self.pos,self)
|
|
end
|
|
self.pos=self.pos+self.count
|
|
if self.pos-self.count==self.endAt then
|
|
self:Pause()
|
|
for fe=1,#self.funcE do
|
|
self.funcE[fe](self)
|
|
end
|
|
self.pos=self.start
|
|
end
|
|
end
|
|
end
|
|
self.spos=self.spos+1
|
|
if self.spos>=self.skip then
|
|
self.spos=0
|
|
end
|
|
end
|
|
elseif obj.Type=="tstep" then
|
|
function c:Act()
|
|
if self.clock()-self.timer>=self.set then
|
|
self:Reset()
|
|
if self.pos==self.start then
|
|
for fe=1,#self.funcS do
|
|
self.funcS[fe](self)
|
|
end
|
|
end
|
|
for i=1,#self.func do
|
|
self.func[i](self.pos,self)
|
|
end
|
|
self.pos=self.pos+self.count
|
|
if self.pos-self.count==self.endAt then
|
|
self:Pause()
|
|
for fe=1,#self.funcE do
|
|
self.funcE[fe](self)
|
|
end
|
|
self.pos=self.start
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
if thread then
|
|
function multi:newThreadedLoop(name,func)
|
|
local c=self:newTBase()
|
|
c.Type='loopThread'
|
|
c.Start=os.clock()
|
|
if func then
|
|
c.func={func}
|
|
end
|
|
function c:tofile(path)
|
|
local m=bin.new()
|
|
m:addBlock(self.Type)
|
|
m:addBlock(self.func)
|
|
m:addBlock(self.Active)
|
|
m:tofile(path)
|
|
end
|
|
function c:Resume()
|
|
self.rest=false
|
|
end
|
|
function c:Pause()
|
|
self.rest=true
|
|
end
|
|
function c:OnLoop(func)
|
|
table.insert(self.func,func)
|
|
end
|
|
c.rest=false
|
|
c.updaterate=0
|
|
c.restRate=.75
|
|
multi:newThread(name,function(ref)
|
|
while true do
|
|
if c.rest then
|
|
thread.sleep(c.restRate)
|
|
else
|
|
for i=1,#c.func do
|
|
c.func[i](os.clock()-self.Start,c)
|
|
end
|
|
thread.sleep(c.updaterate)
|
|
end
|
|
end
|
|
end)
|
|
self:create(c)
|
|
return c
|
|
end
|
|
function multi:newThreadedStep(name,start,reset,count,skip)
|
|
local c=self:newTBase()
|
|
local think=1
|
|
c.Type='stepThread'
|
|
c.pos=start or 1
|
|
c.endAt=reset or math.huge
|
|
c.skip=skip or 0
|
|
c.spos=0
|
|
c.count=count or 1*think
|
|
c.funcE={}
|
|
c.funcS={}
|
|
c.start=start or 1
|
|
if start~=nil and reset~=nil then
|
|
if start>reset then
|
|
think=-1
|
|
end
|
|
end
|
|
function c:tofile(path)
|
|
local m=bin.new()
|
|
m:addBlock(self.Type)
|
|
m:addBlock(self.func)
|
|
m:addBlock(self.funcE)
|
|
m:addBlock(self.funcS)
|
|
m:addBlock({pos=self.pos,endAt=self.endAt,skip=self.skip,spos=self.spos,count=self.count,start=self.start})
|
|
m:addBlock(self.Active)
|
|
m:tofile(path)
|
|
end
|
|
function c:Resume()
|
|
self.rest=false
|
|
end
|
|
function c:Pause()
|
|
self.rest=true
|
|
end
|
|
c.Reset=c.Resume
|
|
function c:OnStart(func)
|
|
table.insert(self.funcS,func)
|
|
end
|
|
function c:OnStep(func)
|
|
table.insert(self.func,1,func)
|
|
end
|
|
function c:OnEnd(func)
|
|
table.insert(self.funcE,func)
|
|
end
|
|
function c:Break()
|
|
self.rest=true
|
|
end
|
|
function c:Update(start,reset,count,skip)
|
|
self.start=start or self.start
|
|
self.endAt=reset or self.endAt
|
|
self.skip=skip or self.skip
|
|
self.count=count or self.count
|
|
self:Resume()
|
|
end
|
|
c.updaterate=0
|
|
c.restRate=.1
|
|
multi:newThread(name,function(ref)
|
|
while true do
|
|
if c.rest then
|
|
ref:sleep(c.restRate)
|
|
else
|
|
if c~=nil then
|
|
if c.spos==0 then
|
|
if c.pos==c.start then
|
|
for fe=1,#c.funcS do
|
|
c.funcS[fe](c)
|
|
end
|
|
end
|
|
for i=1,#c.func do
|
|
c.func[i](c.pos,c)
|
|
end
|
|
c.pos=c.pos+c.count
|
|
if c.pos-c.count==c.endAt then
|
|
c:Pause()
|
|
for fe=1,#c.funcE do
|
|
c.funcE[fe](c)
|
|
end
|
|
c.pos=c.start
|
|
end
|
|
end
|
|
end
|
|
c.spos=c.spos+1
|
|
if c.spos>=c.skip then
|
|
c.spos=0
|
|
end
|
|
ref:sleep(c.updaterate)
|
|
end
|
|
end
|
|
end)
|
|
self:create(c)
|
|
return c
|
|
end
|
|
function multi:newThreadedTStep(name,start,reset,count,set)
|
|
local c=self:newTBase()
|
|
local think=1
|
|
c.Type='tstepThread'
|
|
c.Priority=self.Priority_Low
|
|
c.start=start or 1
|
|
local reset = reset or math.huge
|
|
c.endAt=reset
|
|
c.pos=start or 1
|
|
c.skip=skip or 0
|
|
c.count=count or 1*think
|
|
c.funcE={}
|
|
c.timer=os.clock()
|
|
c.set=set or 1
|
|
c.funcS={}
|
|
function c:Update(start,reset,count,set)
|
|
self.start=start or self.start
|
|
self.pos=self.start
|
|
self.endAt=reset or self.endAt
|
|
self.set=set or self.set
|
|
self.count=count or self.count or 1
|
|
self.timer=os.clock()
|
|
self:Resume()
|
|
end
|
|
function c:tofile(path)
|
|
local m=bin.new()
|
|
m:addBlock(self.Type)
|
|
m:addBlock(self.func)
|
|
m:addBlock(self.funcE)
|
|
m:addBlock(self.funcS)
|
|
m:addBlock({pos=self.pos,endAt=self.endAt,skip=self.skip,timer=self.timer,count=self.count,start=self.start,set=self.set})
|
|
m:addBlock(self.Active)
|
|
m:tofile(path)
|
|
end
|
|
function c:Resume()
|
|
self.rest=false
|
|
end
|
|
function c:Pause()
|
|
self.rest=true
|
|
end
|
|
function c:OnStart(func)
|
|
table.insert(self.funcS,func)
|
|
end
|
|
function c:OnStep(func)
|
|
table.insert(self.func,func)
|
|
end
|
|
function c:OnEnd(func)
|
|
table.insert(self.funcE,func)
|
|
end
|
|
function c:Break()
|
|
self.Active=nil
|
|
end
|
|
function c:Reset(n)
|
|
if n then self.set=n end
|
|
self.timer=os.clock()
|
|
self:Resume()
|
|
end
|
|
c.updaterate=0
|
|
c.restRate=0
|
|
multi:newThread(name,function(ref)
|
|
while true do
|
|
if c.rest then
|
|
thread.sleep(c.restRate)
|
|
else
|
|
if os.clock()-c.timer>=c.set then
|
|
c:Reset()
|
|
if c.pos==c.start then
|
|
for fe=1,#c.funcS do
|
|
c.funcS[fe](c)
|
|
end
|
|
end
|
|
for i=1,#c.func do
|
|
c.func[i](c.pos,c)
|
|
end
|
|
c.pos=c.pos+c.count
|
|
if c.pos-c.count==c.endAt then
|
|
c:Pause()
|
|
for fe=1,#c.funcE do
|
|
c.funcE[fe](c)
|
|
end
|
|
c.pos=c.start
|
|
end
|
|
end
|
|
thread.skip(c.updaterate)
|
|
end
|
|
end
|
|
end)
|
|
self:create(c)
|
|
return c
|
|
end
|
|
end
|