-- cleaver.lua Cleaver = {} Cleaver.__index = Cleaver function Cleaver:new() local instance = setmetatable({}, Cleaver) instance.images = {} instance.state = "idle" instance.timer = 0 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 end end end function Cleaver:draw() local x, y = love.mouse.getPosition() for _, meatTable in ipairs(instances.meat_tables) do if meatTable:isHovering(x,y) then love.graphics.draw(self.currentImage, x - self.currentImage:getWidth() / 2, y - self.currentImage:getHeight() / 2) end end end function Cleaver:mousepressed(button) if button == 1 then -- Left mouse button self.state = "windup" self.currentImage = self.images.windup self.timer = 0 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 -- Check if the cleaver is hovering over a meat instance local x, y = love.mouse.getPosition() for i, meat in ipairs(instances.meats) do if x >= meat.x and x <= meat.x + meat.currentImage:getWidth() and y >= meat.y and y <= meat.y + meat.currentImage:getHeight() then -- Remove the meat instance from the table table.remove(instances.meats, i) self.score = self.score + 1 break end end 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