rectgen = {} function rectgen:new(x,y,w,h) Rect = {x,y,w,h} function Rect:move(x,y) self[1] = self[1] + x self[2] = self[2] + y self:reAdapt() end function Rect:move_ip(x,y) self[1] = x self[2] = y self:reAdapt() end function Rect:setSize(w,h) self[3] = w self[4] = h self:reAdapt() end function Rect:move_center(x,y) self[1] = x-self.w/2 self[2] = y-self.h/2 self:reAdapt() end function Rect:reAdapt() self.x = self[1] self.y = self[2] self.w = self[3] self.h = self[4] self.center = {self.x+self.w/2,self.y+self.h/2} self.center.x = self.x+self.w/2 self.center.y = self.y+self.h/2 self.up = self.y self.left = self.x self.right = self.x+self.w self.down = self.y+self.h end function Rect:colliderect(orect,xoffset,yoffset,semisolid) -- AABB collision check local result = true local offx = xoffset or 0 local offy = yoffset or 0 if self.right+offx <= orect.left or self.left+offx>=orect.right then result = false end if self.down+offy <= orect.up or self.up+offy>=orect.down then result = false end if semi and result then if not self.bottom