diff --git a/assets/images/cleaver/cleaver-charged-1.png b/assets/images/cleaver/cleaver-charged-1.png new file mode 100644 index 0000000..641a3a4 Binary files /dev/null and b/assets/images/cleaver/cleaver-charged-1.png differ diff --git a/assets/images/cleaver/cleaver-charged-2.png b/assets/images/cleaver/cleaver-charged-2.png new file mode 100644 index 0000000..8549b6d Binary files /dev/null and b/assets/images/cleaver/cleaver-charged-2.png differ diff --git a/assets/images/cleaver/cleaver-charged-3.png b/assets/images/cleaver/cleaver-charged-3.png new file mode 100644 index 0000000..8523663 Binary files /dev/null and b/assets/images/cleaver/cleaver-charged-3.png differ diff --git a/assets/images/cleaver/cleaver-charged.png b/assets/images/cleaver/cleaver-charged.png deleted file mode 100644 index a0258a1..0000000 Binary files a/assets/images/cleaver/cleaver-charged.png and /dev/null differ diff --git a/assets/images/cleaver/cleaver-chop-2.png b/assets/images/cleaver/cleaver-chop-2.png new file mode 100644 index 0000000..8ad48a3 Binary files /dev/null and b/assets/images/cleaver/cleaver-chop-2.png differ diff --git a/assets/images/cleaver/cleaver-chop-3.png b/assets/images/cleaver/cleaver-chop-3.png new file mode 100644 index 0000000..8ad48a3 Binary files /dev/null and b/assets/images/cleaver/cleaver-chop-3.png differ diff --git a/assets/images/cleaver/cleaver-chop.png b/assets/images/cleaver/cleaver-chop.png index 60b00a1..5e14ee0 100644 Binary files a/assets/images/cleaver/cleaver-chop.png and b/assets/images/cleaver/cleaver-chop.png differ diff --git a/assets/images/cleaver/cleaver-idle.png b/assets/images/cleaver/cleaver-idle.png index bba8d1c..42f825a 100644 Binary files a/assets/images/cleaver/cleaver-idle.png and b/assets/images/cleaver/cleaver-idle.png differ diff --git a/assets/images/cleaver/cleaver-retract.png b/assets/images/cleaver/cleaver-retract.png new file mode 100644 index 0000000..887237d Binary files /dev/null and b/assets/images/cleaver/cleaver-retract.png differ diff --git a/assets/images/cleaver/cleaver-windup-1.png b/assets/images/cleaver/cleaver-windup-1.png new file mode 100644 index 0000000..1eba721 Binary files /dev/null and b/assets/images/cleaver/cleaver-windup-1.png differ diff --git a/assets/images/cleaver/cleaver-windup-2.png b/assets/images/cleaver/cleaver-windup-2.png new file mode 100644 index 0000000..cfd2702 Binary files /dev/null and b/assets/images/cleaver/cleaver-windup-2.png differ diff --git a/assets/images/cleaver/cleaver-windup.png b/assets/images/cleaver/cleaver-windup.png deleted file mode 100644 index 43bfeac..0000000 Binary files a/assets/images/cleaver/cleaver-windup.png and /dev/null differ diff --git a/assets/images/meats/chicken.png b/assets/images/meats/chicken.png index a898255..41ffed4 100644 Binary files a/assets/images/meats/chicken.png and b/assets/images/meats/chicken.png differ diff --git a/assets/images/meats/cow.png b/assets/images/meats/cow.png index 7a450b6..be203d2 100644 Binary files a/assets/images/meats/cow.png and b/assets/images/meats/cow.png differ diff --git a/assets/images/meats/meat-spawn-1.png b/assets/images/meats/meat-spawn-1.png new file mode 100644 index 0000000..520b5a9 Binary files /dev/null and b/assets/images/meats/meat-spawn-1.png differ diff --git a/assets/images/meats/meat-spawn-2.png b/assets/images/meats/meat-spawn-2.png new file mode 100644 index 0000000..6c71dad Binary files /dev/null and b/assets/images/meats/meat-spawn-2.png differ diff --git a/assets/images/meats/meat-spawn-3.png b/assets/images/meats/meat-spawn-3.png new file mode 100644 index 0000000..fb09203 Binary files /dev/null and b/assets/images/meats/meat-spawn-3.png differ diff --git a/assets/images/meats/meat-spawn-4.png b/assets/images/meats/meat-spawn-4.png new file mode 100644 index 0000000..d3962a1 Binary files /dev/null and b/assets/images/meats/meat-spawn-4.png differ diff --git a/assets/images/meats/meat-spawn-5.png b/assets/images/meats/meat-spawn-5.png new file mode 100644 index 0000000..28cb4a6 Binary files /dev/null and b/assets/images/meats/meat-spawn-5.png differ diff --git a/assets/images/meats/meat-spawn-6.png b/assets/images/meats/meat-spawn-6.png new file mode 100644 index 0000000..7712dd9 Binary files /dev/null and b/assets/images/meats/meat-spawn-6.png differ diff --git a/assets/images/meats/pig.png b/assets/images/meats/pig.png index c97258f..feec022 100644 Binary files a/assets/images/meats/pig.png and b/assets/images/meats/pig.png differ diff --git a/assets/images/meats/pig_.png b/assets/images/meats/pig_.png new file mode 100644 index 0000000..feec022 Binary files /dev/null and b/assets/images/meats/pig_.png differ diff --git a/main.lua b/main.lua index 59a41b4..55d2c1b 100644 --- a/main.lua +++ b/main.lua @@ -25,7 +25,7 @@ function love.load() cursor = Cursor:new() -- Create a MeatFactory instance - meatFactory = MeatFactory:new(5, {"chicken", "cow", "pig"}) + meatFactory = MeatFactory:new(5, {"chicken"}) instances = {} instances.meats = {} @@ -37,6 +37,9 @@ end function love.update(dt) cursor:update(dt) meatFactory:update(dt) + for _, meat in ipairs(instances.meats) do + meat:update(dt) + end end function love.draw() diff --git a/src/cleaver.lua b/src/cleaver.lua index 7ff586b..22d1f95 100644 --- a/src/cleaver.lua +++ b/src/cleaver.lua @@ -8,75 +8,111 @@ function Cleaver:new() instance.timer = 0 instance.score = 0 instance.images = {} + instance.frame = 1 Cleaver.loadImages(instance) 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 + self.images.idle = {love.graphics.newImage("assets/images/cleaver/cleaver-idle.png")} + self.images.windup = { + love.graphics.newImage("assets/images/cleaver/cleaver-windup-1.png"), + love.graphics.newImage("assets/images/cleaver/cleaver-windup-2.png"), + } + self.images.charged = { + love.graphics.newImage("assets/images/cleaver/cleaver-charged-1.png"), + love.graphics.newImage("assets/images/cleaver/cleaver-charged-2.png"), + love.graphics.newImage("assets/images/cleaver/cleaver-charged-3.png"), + } + self.images.chop = { + love.graphics.newImage("assets/images/cleaver/cleaver-chop.png"), + love.graphics.newImage("assets/images/cleaver/cleaver-chop-2.png"), + love.graphics.newImage("assets/images/cleaver/cleaver-chop-3.png"), + love.graphics.newImage("assets/images/cleaver/cleaver-retract.png"), + } + self.currentImage = self.images.idle[1] 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 + if self.timer >= 0.1 then + self.frame = self.frame + 1 + if self.frame > #self.images.windup then + self.state = "charged" + self.frame = 1 + self.currentImage = self.images.charged[self.frame] + else + self.currentImage = self.images.windup[self.frame] + end + self.timer = 0 end elseif self.state == "charged" then - -- Stay in charged state until mouse is released + self.timer = self.timer + dt + if self.timer >= 0.1 then + self.frame = self.frame + 1 + if self.frame > #self.images.charged then + self.frame = 1 + end + self.currentImage = self.images.charged[self.frame] + self.timer = 0 + end elseif self.state == "chop" then self.timer = self.timer + dt if self.timer >= 0.1 then + self.frame = self.frame + 1 + if self.frame > #self.images.chop then self.state = "idle" - self.currentImage = self.images.idle - self.timer = 0 + self.frame = 1 + self.currentImage = self.images.idle[self.frame] + else + self.currentImage = self.images.chop[self.frame] end + self.timer = 0 end end - -function Cleaver:draw(x,y) - love.graphics.draw(self.currentImage, x - self.currentImage:getWidth() / 2, y - self.currentImage:getHeight() / 2) end +function Cleaver:draw(x, y) + 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.frame = 1 + self.currentImage = self.images.windup[self.frame] 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 + if button == 1 then -- Left mouse button + if self.state == "charged" then + self.state = "chop" + self.frame = 1 + self.currentImage = self.images.chop[self.frame] + 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 + meat.meatFactory.hasMeat = false + table.remove(instances.meats, i) + self.score = self.score + 1 + break + end + end + elseif self.state == "windup" then + self.state = "idle" + self.frame = 1 + self.currentImage = self.images.idle[self.frame] + self.timer = 0 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 diff --git a/src/meat.lua b/src/meat.lua index beae489..adeb202 100644 --- a/src/meat.lua +++ b/src/meat.lua @@ -2,16 +2,21 @@ Meat = {} Meat.__index = Meat -function Meat:new(x , y, meatType) +function Meat:new(x, y, meatType, meatFactory) local instance = setmetatable({}, Meat) + instance.meatFactory = meatFactory instance.meatType = meatType instance.images = {} + instance.spawnImages = {} instance.currentImage = "" instance.scorePending = false instance.value = 1 instance.x = x instance.y = y + instance.spawnFrame = 1 + instance.spawnTimer = 0 Meat.loadImages(instance) + instance.currentImage = instance.spawnImages[instance.spawnFrame] return instance end @@ -19,22 +24,41 @@ function Meat:loadImages() self.images.chicken = love.graphics.newImage("assets/images/meats/chicken.png") self.images.pig = love.graphics.newImage("assets/images/meats/pig.png") self.images.cow = love.graphics.newImage("assets/images/meats/cow.png") - if self.meatType == "chicken" then - self.currentImage = self.images.chicken + for i = 1, 6 do + table.insert(self.spawnImages, love.graphics.newImage("assets/images/meats/meat-spawn-" .. i .. ".png")) end - if self.meatType == "pig" then - self.currentImage = self.images.pig - end - if self.meatType == "cow" then - self.currentImage = self.images.cow +end + +function Meat:update(dt) + self.spawnTimer = self.spawnTimer + dt + if self.spawnTimer >= 0.1 then + self.spawnFrame = self.spawnFrame + 1 + if self.spawnFrame == 2 then + if self.meatType == "chicken" then + self.baseImage = self.images.chicken + elseif self.meatType == "pig" then + self.baseImage = self.images.pig + elseif self.meatType == "cow" then + self.baseImage = self.images.cow + end + self.currentImage = self.spawnImages[self.spawnFrame] + elseif self.spawnFrame > 2 and self.spawnFrame <= #self.spawnImages then + self.currentImage = self.spawnImages[self.spawnFrame] + end + self.spawnTimer = 0 end end function Meat:draw() local tableImage = love.graphics.newImage("assets/images/env/newer_table.png") - local x = self.x + (tableImage:getWidth() - self.currentImage:getWidth()) - 15 + local x = self.x + (tableImage:getWidth() - self.currentImage:getWidth()) local y = self.y + (tableImage:getHeight() - self.currentImage:getHeight()) - 30 - love.graphics.draw(self.currentImage, x, y) + if self.baseImage then + love.graphics.draw(self.baseImage, x, y) + end + if self.spawnFrame > 1 and self.spawnFrame <= #self.spawnImages then + love.graphics.draw(self.currentImage, x, y) + end end return Meat \ No newline at end of file diff --git a/src/meat_factory.lua b/src/meat_factory.lua index 4d30e99..496bfd9 100644 --- a/src/meat_factory.lua +++ b/src/meat_factory.lua @@ -11,7 +11,8 @@ function MeatFactory:new(spawnRate, meatTypes) instance.spawnTimer = 0 instance.image = love.graphics.newImage("assets/images/env/newer_table.png") instance.x = (love.graphics.getWidth() - instance.image:getWidth()) / 2; - instance.y = (love.graphics.getHeight() - instance.image:getHeight()) / 2; + instance.y = (love.graphics.getHeight() - instance.image:getHeight()) / 2; + instance.hasMeat = false return instance end @@ -32,10 +33,12 @@ end function MeatFactory:spawnMeat() - local meatType = self.meatTypes[math.random(#self.meatTypes)] - local meat = Meat:new(self.x , self.y, meatType) - table.insert(instances.meats, meat) - + if not self.hasMeat then + local meatType = self.meatTypes[math.random(#self.meatTypes)] + local meat = Meat:new(self.x , self.y, meatType, self) + table.insert(instances.meats, meat) + self.hasMeat = true + end end function MeatFactory:getMeatValue(meatType) diff --git a/src/upgrade_table.lua b/src/upgrade_table.lua new file mode 100644 index 0000000..e69de29