From a828872e5160bbc657c106b4b349c14b671498ba Mon Sep 17 00:00:00 2001 From: Aki Date: Sat, 21 May 2016 01:21:42 +0200 Subject: First move into portraits and HUD --- assets/portraits.png | Bin 0 -> 29772 bytes main.lua | 5 ++--- player.lua | 49 +++++++++++++++++++++++++++++++++++-------------- portraits.lua | 42 ++++++++++++++++++++++++++++++++++++++++++ world.lua | 10 ++++++++-- 5 files changed, 87 insertions(+), 19 deletions(-) create mode 100644 assets/portraits.png create mode 100644 portraits.lua diff --git a/assets/portraits.png b/assets/portraits.png new file mode 100644 index 0000000..94aa73f Binary files /dev/null and b/assets/portraits.png differ diff --git a/main.lua b/main.lua index 161c274..354b8ef 100644 --- a/main.lua +++ b/main.lua @@ -23,11 +23,10 @@ function love.load () w:createPlatform(290/2+140, 180/2+50, {-26,1, 26,1, 26,30, -26,30}, "assets/platform_small.png") w:createPlatform(290/2-140, 180/2+50, {-26,1, 26,1, 26,30, -26,30}, "assets/platform_small.png") w:createPlatform(290/2, 180/2-50, {-17,1, 17,1, 17,16, -17,16}, "assets/platform_top.png") - w:createNaut(290/2-10, 180/2 - 80, "assets/leon.png") - w:createNaut(290/2+10, 180/2 - 80, "assets/lonestar.png") + w:createNaut(290/2-10, 180/2 - 80, "leon") + w:createNaut(290/2+10, 180/2 - 80, "lonestar") -- Temporary settings for second player - w.Nauts[2].name = "Player2" w.Nauts[2].key_left = "a" w.Nauts[2].key_right = "d" w.Nauts[2].key_up = "w" diff --git a/player.lua b/player.lua index 83d0b30..bb30f21 100644 --- a/player.lua +++ b/player.lua @@ -8,7 +8,7 @@ -- nils initialized in constructor Player = { -- General and physics - name = "Player", + name = "empty", body = nil, shape = nil, fixture = nil, @@ -24,7 +24,7 @@ Player = { alive = true, punchcd = 0, punchinitial = 0.25, - punchdir = 0, + punchdir = 0, -- a really bad thing -- Animation animations = require "animations", current = nil, @@ -33,6 +33,7 @@ Player = { initial = nil, -- Movement inAir = true, + salto = false, jumpactive = false, jumpdouble = true, jumptimer = 0.14, @@ -42,11 +43,14 @@ Player = { key_right = "right", key_up = "up", key_down = "down", - key_hit = "return" + key_hit = "return", + -- HUD + portrait_sprite = nil, + portrait_sheet = require "portraits" } -- Constructor of `Player` -function Player:new (game, world, x, y, spritesheet) +function Player:new (game, world, x, y, name) -- Meta local o = {} setmetatable(o, self) @@ -60,12 +64,17 @@ function Player:new (game, world, x, y, spritesheet) o.fixture:setMask(2) o.body:setFixedRotation(true) -- Misc - o.sprite = love.graphics.newImage(spritesheet) + o.name = name or "empty" + o.sprite = love.graphics.newImage("assets/"..o.name..".png") o.world = game -- Animation o.initial = o.delay o.current = o.animations.idle o:createEffect("respawn") + -- Portrait load for first object created + if self.portrait_sprite == nil then + self.portrait_sprite = love.graphics.newImage("assets/portraits.png") + end return o end @@ -80,7 +89,7 @@ function Player:update (dt) end -- Salto - if not self.jumpdouble and self.inAir and (self.current == self.animations.walk or self.current == self.animations.idle) then + if self.salto and (self.current == self.animations.walk or self.current == self.animations.idle) then self.rotate = (self.rotate + 17 * dt * self.facing) % 360 elseif self.rotate ~= 0 then self.rotate = 0 @@ -157,16 +166,15 @@ function Player:update (dt) -- # PUNCH -- Cooldown - if self.punchcd > 0 then - self.punchcd = self.punchcd - dt - end + self.punchcd = self.punchcd - dt -- Stop vertical - if self.punchcd > 0.1 then + local c,a = self.current, self.animations + if (c == a.attack_up or c == a.attack_down or c == a.attack) and self.frame < c.frames then if self.punchdir == 0 then self.body:setLinearVelocity(0,0) else - self.body:setLinearVelocity(28*self.facing,0) + self.body:setLinearVelocity(32*self.facing,0) end end @@ -191,6 +199,7 @@ function Player:keypressed (key) self:createEffect("doublejump") self.jumpactive = true self.jumpdouble = false + self.salto = true end end @@ -202,17 +211,24 @@ function Player:keypressed (key) -- Punching if key == self.key_hit and self.punchcd <= 0 then local f = self.facing + self.salto = false if love.keyboard.isDown(self.key_up) then -- Punch up - self:changeAnimation("attack_up") + if self.current ~= self.animations.damage then + self:changeAnimation("attack_up") + end self:hit(2*f,-10,3*f,7, 0, -1) elseif love.keyboard.isDown(self.key_down) and self.inAir then -- Punch down - self:changeAnimation("attack_down") + if self.current ~= self.animations.damage then + self:changeAnimation("attack_down") + end self:hit(-4,-2,4,7, 0, 1) else -- Punch horizontal - self:changeAnimation("attack") + if self.current ~= self.animations.damage then + self:changeAnimation("attack") + end self:hit(2*f,-4,8*f,4, f, 0) self.punchdir = 1 end @@ -254,6 +270,11 @@ function Player:draw (offset_x, offset_y, scale, debug) end end +-- Draw HUD of `Player` +function Player:drawHUD (x,y,scale) + love.graphics.draw(self.portrait_sprite, self.portrait_sheet[self.name].normal, x*scale, y*scale, 0, scale, scale) +end + -- Change animation of `Player` -- idle, walk, attack, attack_up, attack_down, damage function Player:changeAnimation(animation) diff --git a/portraits.lua b/portraits.lua new file mode 100644 index 0000000..80ffe8a --- /dev/null +++ b/portraits.lua @@ -0,0 +1,42 @@ +-- Spritesheet for character portraits +-- Original size: 331x199 (say what?) +-- Single size: 32x32 1px border merged between +local w, h = 331, 199 +return { + empty = { + normal = love.graphics.newQuad(298,133,32,32,w,h), + active = love.graphics.newQuad(298,166,32,32,w,h) + }, + frog = { + normal = love.graphics.newQuad( 1, 1,32,32,w,h), + active = love.graphics.newQuad( 1, 34,32,32,w,h) + }, + lonestar = { + normal = love.graphics.newQuad( 34, 1,32,32,w,h), + active = love.graphics.newQuad( 34, 34,32,32,w,h) + }, + leon = { + normal = love.graphics.newQuad( 67, 1,32,32,w,h), + active = love.graphics.newQuad( 67, 34,32,32,w,h) + }, + coco = { + normal = love.graphics.newQuad( 1, 67,32,32,w,h), + active = love.graphics.newQuad( 1,100,32,32,w,h) + }, + derpl = { + normal = love.graphics.newQuad(100, 67,32,32,w,h), + active = love.graphics.newQuad(100,100,32,32,w,h) + }, + voltar = { + normal = love.graphics.newQuad(265, 1,32,32,w,h), + active = love.graphics.newQuad(265, 34,32,32,w,h) + }, + yuri = { + normal = love.graphics.newQuad( 67, 67,32,32,w,h), + active = love.graphics.newQuad( 67,100,32,32,w,h) + }, + clunk = { + normal = love.graphics.newQuad(232, 1,32,32,w,h), + active = love.graphics.newQuad(232, 34,32,32,w,h) + } +} \ No newline at end of file diff --git a/world.lua b/world.lua index da89755..6a7d132 100644 --- a/world.lua +++ b/world.lua @@ -56,8 +56,8 @@ function World:createPlatform(x, y, polygon, sprite) end -- Add new naut to the world -function World:createNaut(x, y, sprite) - table.insert(self.Nauts, Player:new(self, self.world, x, y, sprite)) +function World:createNaut(x, y, name) + table.insert(self.Nauts, Player:new(self, self.world, x, y, name)) end -- Add new cloud to the world @@ -168,6 +168,11 @@ function World:draw() for _,platform in pairs(self.Platforms) do platform:draw(offset_x, offset_y, scale, debug) end + + -- Draw HUDs + for _,naut in pairs(self.Nauts) do + naut:drawHUD(1, 1+(_-1)*33, scale) + end end -- beginContact @@ -178,6 +183,7 @@ function World.beginContact(a, b, coll) print(b:getUserData().name .. " is not in air") b:getUserData().inAir = false b:getUserData().jumpdouble = true + b:getUserData().salto = false b:getUserData():createEffect("land") end end -- cgit v1.1