This commit is contained in:
2022-03-02 18:36:52 +01:00
parent 4b45c8fba1
commit 347403ad4d
36 changed files with 1822 additions and 0 deletions

View File

@@ -0,0 +1,64 @@
--import media
--import spritesheets
local spritesheets = {}
--load jsons
--load player jumping
spritesheets["player_jump"] = peachy.new("assets/images/spritesheets/player.json", love.graphics.newImage("assets/images/spritesheets/player.png"), "Jump")
--load player walking left
spritesheets["player_walk_left"] = peachy.new("assets/images/spritesheets/player.json", love.graphics.newImage("assets/images/spritesheets/player.png"), "Walk_left")
--load player walking right
spritesheets["player_walk_right"] = peachy.new("assets/images/spritesheets/player.json", love.graphics.newImage("assets/images/spritesheets/player.png"), "Walk_right")
--load player idle
spritesheets["player_idle"] = peachy.new("assets/images/spritesheets/player.json", love.graphics.newImage("assets/images/spritesheets/player.png"), "Idle")
--load player dying
spritesheets["player_die"] = peachy.new("assets/images/spritesheets/player.json", love.graphics.newImage("assets/images/spritesheets/player.png"), "Die")
--load player DEFAULT
spritesheets["player_default"] = peachy.new("assets/images/spritesheets/player.json", love.graphics.newImage("assets/images/spritesheets/player.png"), "Default")
--load backgrounds
local backgrounds = {}
for i, file in ipairs(love.filesystem.getDirectoryItems("assets/images/backgrounds")) do
if file:find(".png") then
--load backgrounds
print(i)
backgrounds[i] = love.graphics.newImage("assets/images/backgrounds/"..file)
end
end
--load sound effects
local sound_effects = {}
for i, file in ipairs(love.filesystem.getDirectoryItems("assets/sounds/effects")) do
if file:find(".ogg") then
--load sound effects
local keyname = file:gsub(".ogg", "")
sound = love.audio.newSource("assets/sounds/effects/"..file, "static")
sound_effects[keyname] = {}
sound_effects[keyname].volume = 1
sound_effects[keyname].timer = love.timer.getTime()
sound_effects[keyname].first_play = true
sound_effects[keyname].sound = sound
sound_effects[keyname].duration = sound:getDuration()
sound_effects[keyname].timer_min = sound:getDuration() * 2
sound_effects[keyname].play = function(self)
if (love.timer.getTime() - self.timer) >= self.timer_min or self.first_play then
self.timer = love.timer.getTime()
self.first_play = false
self.sound:setVolume(self.volume)
self.sound:play()
end
end
end
end
--load music
local music = {}
for i, file in ipairs(love.filesystem.getDirectoryItems("assets/sounds/music")) do
if file:find(".ogg") then
--load music
music[file:sub(1, -5)] = love.audio.newSource("assets/sounds/music/"..file, "stream")
end
end
return {
spritesheets = spritesheets,
backgrounds = backgrounds,
sound_effects = sound_effects,
music = music
}

33
modules/draw_callback.lua Normal file
View File

@@ -0,0 +1,33 @@
local spritesheets = {}
local player = {}
local game = {}
function drawerinit(spritesheetst, playert, gamex)
spritesheets = spritesheetst
player = playert
game = gamex
end
local function draw()
--draw background
love.graphics.draw(backgrounds[game.level], 0, 0)
--draw player_animation
player.animation:draw(player.x, player.y)
if player.state == "idle" then
spritesheets["player_idle"]:draw(player.x, player.y)
elseif player.state == "walk_left" then
spritesheets["player_walk_left"]:draw(player.x, player.y)
elseif player.state == "walk_right" then
spritesheets["player_walk_right"]:draw(player.x, player.y)
elseif player.state == "jump" then
spritesheets["player_jump"]:draw(player.x, player.y)
elseif player.state == "die" then
spritesheets["player_die"]:draw(player.x, player.y)
else
spritesheets["player_default"]:draw(player.x, player.y)
end
end
return {
drawerinit = drawerinit,
draw = draw
}

13
modules/globals.lua Normal file
View File

@@ -0,0 +1,13 @@
local game = {}
game.debug = true
game.width = 1024
game.height = 768
game.title = "Weeeeeeeee"
game.version = "0.0.1"
game.fullscreen = false
game.level = 1
game.die_animation_elapsed = false
return {
game = game
}

80
modules/player.lua Normal file
View File

@@ -0,0 +1,80 @@
local player = {}
player.x = 0
player.y = 500
player.width = 160
player.height = 160
player.speed = 200
player.jump_height = 500
player.state = "idle"
player.direction = "right"
player.alive = true
player.init = function(self, sound_effects, spritesheets, game)
self.sound_effects = sound_effects
self.spritesheets = spritesheets
self.game = game
player.animation = spritesheets["player_idle"]
end
player.walk_right = function(self, dt)
if self.x < self.game.width - self.width and self.alive then
self.x = self.x + self.speed * dt
self.state = "walk_right"
self.direction = "right"
self.animation = self.spritesheets["player_walk_right"]
end
end
player.walk_left = function(self, dt)
if self.x > 0 and self.alive then
self.x = self.x - self.speed * dt
self.state = "walk_left"
self.direction = "left"
self.animation = self.spritesheets["player_walk_left"]
end
end
player.jump = function(self, dt)
if self.y > 0 and self.alive then
self.y = self.y - self.jump_height * dt
self.state = "jump"
self.animation = self.spritesheets["player_jump"]
self.sound_effects["jump"]:play()
end
end
player.down = function(self, dt)
if self.y < self.game.height - self.height and self.alive then
self.y = self.y + self.jump_height * dt
self.state = "jump"
self.animation = self.spritesheets["player_jump"]
self.sound_effects["jump"]:play()
end
end
player.die = function(self, dt)
if self.alive then
self.alive = false
self.state = "die"
self.animation = self.spritesheets["player_die"]
self.sound_effects["die"]:play()
die_animation_elapsed = false
end
end
player.revive = function(self, dt)
if not self.alive then
self.alive = true
self.state = "idle"
self.animation = self.spritesheets["player_default"]
self.sound_effects["revive"]:play()
die_animation_elapsed = false
end
end
player.idle = function(self, dt)
if self.alive then
self.state = "idle"
self.animation = self.spritesheets["player_idle"]
end
end
player.default = function(self, dt)
if self.alive then
self.state = "default"
self.animation = self.spritesheets["player_default"]
end
end
return player

View File

@@ -0,0 +1,54 @@
local game = {}
local function updateinit(gamex)
game = gamex
end
local function update(dt)
--update player_animation
if spritesheets["player_die"]:getFrame() ~= 16 and not game.die_animation_elapsed then
spritesheets["player_die"]:update(dt)
else
game.die_animation_elapsed = true
end
if player.alive then
spritesheets["player_jump"]:update(dt)
spritesheets["player_walk_left"]:update(dt)
spritesheets["player_walk_right"]:update(dt)
spritesheets["player_idle"]:update(dt)
spritesheets["player_default"]:update(dt)
end
--get keyboard
local key = love.keyboard.isDown
--move player
if key("d") then
player:walk_right(dt)
elseif key("a") then
player:walk_left(dt)
else
player:idle(dt)
end
--jump player
if key("w") then
player:jump(dt)
end
if game.debug then
if key("s") then
player:down(dt)
end
if key("f") then
--die
player:die(dt)
game.die_animation_elapsed = false
elseif key("g") then
--revive player
player:revive(dt)
game.die_animation_elapsed = false
end
end
end
return {
update = update,
updateinit = updateinit
}