new animations + images
BIN
assets/images/cleaver/cleaver-charged-1.png
Normal file
|
After Width: | Height: | Size: 619 B |
BIN
assets/images/cleaver/cleaver-charged-2.png
Normal file
|
After Width: | Height: | Size: 475 B |
BIN
assets/images/cleaver/cleaver-charged-3.png
Normal file
|
After Width: | Height: | Size: 657 B |
|
Before Width: | Height: | Size: 229 B |
BIN
assets/images/cleaver/cleaver-chop-2.png
Normal file
|
After Width: | Height: | Size: 486 B |
BIN
assets/images/cleaver/cleaver-chop-3.png
Normal file
|
After Width: | Height: | Size: 486 B |
|
Before Width: | Height: | Size: 281 B After Width: | Height: | Size: 777 B |
|
Before Width: | Height: | Size: 253 B After Width: | Height: | Size: 734 B |
BIN
assets/images/cleaver/cleaver-retract.png
Normal file
|
After Width: | Height: | Size: 678 B |
BIN
assets/images/cleaver/cleaver-windup-1.png
Normal file
|
After Width: | Height: | Size: 748 B |
BIN
assets/images/cleaver/cleaver-windup-2.png
Normal file
|
After Width: | Height: | Size: 942 B |
|
Before Width: | Height: | Size: 283 B |
|
Before Width: | Height: | Size: 475 B After Width: | Height: | Size: 650 B |
|
Before Width: | Height: | Size: 677 B After Width: | Height: | Size: 851 B |
BIN
assets/images/meats/meat-spawn-1.png
Normal file
|
After Width: | Height: | Size: 380 B |
BIN
assets/images/meats/meat-spawn-2.png
Normal file
|
After Width: | Height: | Size: 677 B |
BIN
assets/images/meats/meat-spawn-3.png
Normal file
|
After Width: | Height: | Size: 623 B |
BIN
assets/images/meats/meat-spawn-4.png
Normal file
|
After Width: | Height: | Size: 598 B |
BIN
assets/images/meats/meat-spawn-5.png
Normal file
|
After Width: | Height: | Size: 490 B |
BIN
assets/images/meats/meat-spawn-6.png
Normal file
|
After Width: | Height: | Size: 345 B |
|
Before Width: | Height: | Size: 489 B After Width: | Height: | Size: 627 B |
BIN
assets/images/meats/pig_.png
Normal file
|
After Width: | Height: | Size: 627 B |
5
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()
|
||||
|
|
|
|||
|
|
@ -8,32 +8,66 @@ 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
|
||||
if self.timer >= 0.1 then
|
||||
self.frame = self.frame + 1
|
||||
if self.frame > #self.images.windup then
|
||||
self.state = "charged"
|
||||
self.currentImage = self.images.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.frame = 1
|
||||
self.currentImage = self.images.idle[self.frame]
|
||||
else
|
||||
self.currentImage = self.images.chop[self.frame]
|
||||
end
|
||||
self.timer = 0
|
||||
end
|
||||
end
|
||||
|
|
@ -43,11 +77,11 @@ 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
|
||||
|
|
@ -56,13 +90,15 @@ 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.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
|
||||
|
|
@ -70,13 +106,13 @@ function Cleaver:mousereleased(button)
|
|||
end
|
||||
elseif self.state == "windup" then
|
||||
self.state = "idle"
|
||||
self.currentImage = self.images.idle
|
||||
self.frame = 1
|
||||
self.currentImage = self.images.idle[self.frame]
|
||||
self.timer = 0
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function Cleaver:getScore()
|
||||
return self.score
|
||||
end
|
||||
|
|
|
|||
38
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")
|
||||
for i = 1, 6 do
|
||||
table.insert(self.spawnImages, love.graphics.newImage("assets/images/meats/meat-spawn-" .. i .. ".png"))
|
||||
end
|
||||
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.currentImage = self.images.chicken
|
||||
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
|
||||
if self.meatType == "pig" then
|
||||
self.currentImage = self.images.pig
|
||||
self.currentImage = self.spawnImages[self.spawnFrame]
|
||||
elseif self.spawnFrame > 2 and self.spawnFrame <= #self.spawnImages then
|
||||
self.currentImage = self.spawnImages[self.spawnFrame]
|
||||
end
|
||||
if self.meatType == "cow" then
|
||||
self.currentImage = self.images.cow
|
||||
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
|
||||
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
|
||||
|
|
@ -12,6 +12,7 @@ function MeatFactory:new(spawnRate, meatTypes)
|
|||
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.hasMeat = false
|
||||
return instance
|
||||
end
|
||||
|
||||
|
|
@ -32,10 +33,12 @@ end
|
|||
|
||||
|
||||
function MeatFactory:spawnMeat()
|
||||
if not self.hasMeat then
|
||||
local meatType = self.meatTypes[math.random(#self.meatTypes)]
|
||||
local meat = Meat:new(self.x , self.y, meatType)
|
||||
local meat = Meat:new(self.x , self.y, meatType, self)
|
||||
table.insert(instances.meats, meat)
|
||||
|
||||
self.hasMeat = true
|
||||
end
|
||||
end
|
||||
|
||||
function MeatFactory:getMeatValue(meatType)
|
||||
|
|
|
|||