local assertArgs = include "assertArgs" local util = include "util" local Button = lib "class" ("Button") Button:include(mixin "Position") Button:include(mixin "Angle") Button:include(mixin "Dimensions") Button:include(mixin "_has" ("Label")) Button:include(mixin "_has" ("Collider")) Button:include(mixin "_has" ("Hit")) Button:include(mixin "_has" ("Callback")) Button.static.DEPTH = 0.1 function Button:initialize(args) assertArgs(args, "world", "label", "x", "y", "z", "width", "height", "angle", "ax", "ay", "az", "callback") self:setLabel(args.label) self:setPosition(args.x, args.y, args.z) self:setDimensions(args.width, args.height, Button.static.DEPTH) self:setAngle(args.angle, args.ax, args.ay, args.az) self:setCollider(args.world:newBoxCollider(args.x, args.y, args.z, args.width, args.height, Button.static.DEPTH)) self:getCollider():setOrientation(args.angle, args.ax, args.ay, args.az) self:getCollider():setKinematic(true) self:getCollider():setUserData(self) self:setCallback(args.callback) self:setHit(false) self.lerpedScale = 1 return self end function Button:update(dt) self.lerpedScale = util.lerp( self.lerpedScale, self:getHit() and 1.1 or 1, 10 * dt ) end function Button:draw() lovr.graphics.box( "line", self:getX(), self:getY(), self:getZ(), self:getWidth() * self.lerpedScale, self:getHeight() * self.lerpedScale, self:getDepth(), self:getAngle(), self:getAX(), self:getAY(), self:getAZ() ) lovr.graphics.print( self:getLabel(), self:getX(), self:getY(), self:getZ(), 0.1 * (1 + self.lerpedScale) / 2, self:getAngle(), self:getAX(), self:getAY(), self:getAZ() ) end return Button