-- cleaver.lua Cleaver = {} Cleaver.__index = Cleaver function Cleaver:new() local instance = setmetatable({}, Cleaver) instance.images = {} instance.state = "idle" instance.timer = 0 instance.scorePending = false instance.score = 0 return instance end function Cleaver:loadImages() self.images.idle = love.graphics.newImage("assets/images/cleaver/cleaver-idle.png") self.images.windup = love.graphics.newImage("assets/images/cleaver/cleaver-windup.png") self.images.charged = love.graphics.newImage("assets/images/cleaver/cleaver-charged.png") self.images.chop = love.graphics.newImage("assets/images/cleaver/cleaver-chop.png") self.currentImage = self.images.idle end function Cleaver:update(dt) if self.state == "windup" then self.timer = self.timer + dt if self.timer >= 0.2 then self.state = "charged" self.currentImage = self.images.charged end elseif self.state == "charged" then -- Stay in charged state until mouse is released elseif self.state == "chop" then self.timer = self.timer + dt if self.timer >= 0.1 then self.state = "idle" self.currentImage = self.images.idle self.timer = 0 if self.scorePending then self.score = self.score + 1 self.scorePending = false end end end end function Cleaver:draw() local x, y = love.mouse.getPosition() love.graphics.draw(self.currentImage, x - self.currentImage:getWidth() / 2, y - self.currentImage:getHeight() / 2) end function Cleaver:mousepressed(button) if button == 1 then -- Left mouse button self.state = "windup" self.currentImage = self.images.windup self.timer = 0 self.scorePending = false end end function Cleaver:mousereleased(button) if button == 1 then -- Left mouse button if self.state == "charged" then self.state = "chop" self.currentImage = self.images.chop self.timer = 0 self.scorePending = true elseif self.state == "windup" then self.state = "idle" self.currentImage = self.images.idle self.timer = 0 end end end function Cleaver:getScore() return self.score end return Cleaver