From e52e10c0c81828a459f3da58d897fff1a1c08758 Mon Sep 17 00:00:00 2001 From: mshj Date: Wed, 30 Jul 2025 00:15:28 -0400 Subject: [PATCH] Cleaver lua refactor --- assets/images/meats/chicken.png | Bin 0 -> 475 bytes assets/images/meats/cow.png | Bin 0 -> 677 bytes assets/images/meats/pig.png | Bin 0 -> 489 bytes cleaver.lua | 79 ++++++++++++++++++++++++++++ main.lua | 88 ++++++++------------------------ 5 files changed, 100 insertions(+), 67 deletions(-) create mode 100644 assets/images/meats/chicken.png create mode 100644 assets/images/meats/cow.png create mode 100644 assets/images/meats/pig.png create mode 100644 cleaver.lua diff --git a/assets/images/meats/chicken.png b/assets/images/meats/chicken.png new file mode 100644 index 0000000000000000000000000000000000000000..a89825587d33a111df1bdbb209c3247d9352516d GIT binary patch literal 475 zcmeAS@N?(olHy`uVBq!ia0y~yU@&1|U{K;|7YyNlowGa+UpagrgJ&V57;nF)hN`U2vAnto zi@KQ;44dSFk2EF5^KV?hec%(1caj8`ua1Jqqn1w`KJzDS((3xLclY+rP4zd93LKpF z=9s8#%GZR8j2jhuD&`3{xzDZH;xM2OwRmr&U=TKX^Fv`q>KxVCr#!47e3`rIzopr07TZcasU7T literal 0 HcmV?d00001 diff --git a/assets/images/meats/cow.png b/assets/images/meats/cow.png new file mode 100644 index 0000000000000000000000000000000000000000..7a450b60d439c9dec0359a4c0dbb89e66bc0d429 GIT binary patch literal 677 zcmeAS@N?(olHy`uVBq!ia0y~yV2EO1U{K>=V_;x#@#xvXz`(#*9OUlAuiDg-sW&Fd{rvw+z{9(OUxu{q}BRR+a zc8%lO4O@$jYR!{4>r%Eg>@+A0?d#qiyT6*K_wZ9s#T>RYe_2#S4*B4&p9J%r&V1?*X=d=A)eXsft zYCHF&HQkX+D%qJ?pKhF1r8m8N?qtzrYIS>SRKD}u?6VRUTs(7w*)6f#cif+r#M;c= zD6;Kpvv!h+@WCEAK6VC%4<8GBW+hV@B|NQ#7Jb^p!Ow0U#_hhfc*(3ahfh_a?TWl?2U|`@& fjqptK^<~gvU|`^2fPhQElR*qmS3j3^P6V9kE{<7=Y>zz&3f37euD!YHK=ZzDG|K^+i!GH4h>fM+V{3z!IyG2;m z?)APq=lHm|Jjvaj{fF_+^%oy=V!~t2KA$@)=a@j&>OZ@pERQXjC1kZ;_xa+99UV3D ze13BzOKjz=|F6IGUi$b*-nr`2lvfvnmdx7kb1zR)`U^xFJ&zxnn)$ICBWe_iI`=&8J!!zF0k z_ULWRf9`Lwn!H{Y%6=s5BF`f}mpGrxwK#)=x`Yn+jA+7^2;)Q9= 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 diff --git a/main.lua b/main.lua index fd19deb..ab945c0 100644 --- a/main.lua +++ b/main.lua @@ -1,10 +1,9 @@ +-- imports +local Cleaver = require("cleaver") + -- main.lua -local score = 0 local font -local cleaverImages = {} -local cleaverState = "idle" -local cleaverTimer = 0 -local scorePending = false +local cleaver local tileImage local bottomBar local profitLossBar @@ -12,104 +11,59 @@ local profitLossBar function love.load() font = love.graphics.newFont("assets/fonts/Born2bSportyFS.otf", 32) love.graphics.setFont(font) - love.mouse.setVisible(false) -- Hide the default cursor - - -- Load cleaver images - cleaverImages.idle = love.graphics.newImage("assets/images/cleaver/cleaver-idle.png") - cleaverImages.windup = love.graphics.newImage("assets/images/cleaver/cleaver-windup.png") - cleaverImages.charged = love.graphics.newImage("assets/images/cleaver/cleaver-charged.png") - cleaverImages.chop = love.graphics.newImage("assets/images/cleaver/cleaver-chop.png") - - -- Set initial cleaver image - cleaverCurrentImage = cleaverImages.idle - + love.mouse.setVisible(false) -- Hide the default cursor + + cleaver = Cleaver:new() + cleaver:loadImages() + -- Load tile image tileImage = love.graphics.newImage("assets/images/tiles/chop-floor-tile.png") - -- Load UI images for bottom bar and profit/loss bar bottomBar = love.graphics.newImage("assets/images/ui/chopping-bottom-bar.png") profitLossBar = love.graphics.newImage("assets/images/ui/chopping-profitloss-bar.png") end function love.update(dt) - -- Update cleaver state - if cleaverState == "windup" then - cleaverTimer = cleaverTimer + dt - if cleaverTimer >= 0.2 then - cleaverState = "charged" - cleaverCurrentImage = cleaverImages.charged - end - elseif cleaverState == "charged" then - -- Stay in charged state until mouse is released - elseif cleaverState == "chop" then - cleaverTimer = cleaverTimer + dt - if cleaverTimer >= 0.1 then - cleaverState = "idle" - cleaverCurrentImage = cleaverImages.idle - cleaverTimer = 0 - if scorePending then - score = score + 1 - scorePending = false - end - end - end + cleaver:update(dt) end function love.draw() -- Draw tile background local tileWidth = tileImage:getWidth() local tileHeight = tileImage:getHeight() - local scale = 4 -- Adjust this value to change the tile size + local scale = 4 -- Adjust this value to change the tile size for x = 0, love.graphics.getWidth(), tileWidth * scale do for y = 0, love.graphics.getHeight(), tileHeight * scale do love.graphics.draw(tileImage, x, y, 0, scale, scale) end end - + -- Draw bottom bar and score local bottomBarX = (love.graphics.getWidth() - bottomBar:getWidth()) / 2 local bottomBarY = love.graphics.getHeight() - bottomBar:getHeight() love.graphics.draw(bottomBar, bottomBarX, bottomBarY) - -- Draw score on bottom bar local scoreText = "Net Worth: " - local scoreValue = "$" .. tostring(score) + local scoreValue = "$" .. tostring(cleaver:getScore()) local scoreTextWidth = font:getWidth(scoreText) local scoreValueWidth = font:getWidth(scoreValue) - love.graphics.setColor(0, 0, 0) -- Black + love.graphics.setColor(0, 0, 0) -- Black love.graphics.print(scoreText, bottomBarX + 20, bottomBarY + (bottomBar:getHeight() - font:getHeight()) / 2 + 15) - love.graphics.setColor(0, 0.5, 0) + love.graphics.setColor(0, 0.5, 0) love.graphics.print(scoreValue, bottomBarX + 20 + scoreTextWidth, bottomBarY + (bottomBar:getHeight() - font:getHeight()) / 2 + 15) - love.graphics.setColor(1, 1, 1) -- Reset to white - + love.graphics.setColor(1, 1, 1) -- Reset to white + -- Draw profit/loss bar at top right love.graphics.draw(profitLossBar, love.graphics.getWidth() - profitLossBar:getWidth() - 10, 10) - + -- Draw cleaver - local x, y = love.mouse.getPosition() - love.graphics.draw(cleaverCurrentImage, x - cleaverCurrentImage:getWidth() / 2, y - cleaverCurrentImage:getHeight() / 2) + cleaver:draw() end function love.mousepressed(x, y, button) - if button == 1 then -- Left mouse button - cleaverState = "windup" - cleaverCurrentImage = cleaverImages.windup - cleaverTimer = 0 - scorePending = false - end + cleaver:mousepressed(button) end function love.mousereleased(x, y, button) - if button == 1 then -- Left mouse button - if cleaverState == "charged" then - cleaverState = "chop" - cleaverCurrentImage = cleaverImages.chop - cleaverTimer = 0 - scorePending = true - elseif cleaverState == "windup" then - cleaverState = "idle" - cleaverCurrentImage = cleaverImages.idle - cleaverTimer = 0 - end - end + cleaver:mousereleased(button) end \ No newline at end of file