require("multi") function multi:newStep(start,reset,count,skip) local c=self:newBase() think=1 c.Type='step' 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: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 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.Active=nil 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 self:create(c) return c end