From 708b221b513c5cfe95ac603c1d56dd1878986c30 Mon Sep 17 00:00:00 2001 From: edisonout Date: Fri, 12 Jun 2015 08:51:28 +0100 Subject: [PATCH] boss hud wip --- src/images/enemies/bossHud/bossChevron.png | Bin 279 -> 0 bytes .../enemies/bossHud/bossChevronSnake.png | Bin 279 -> 0 bytes src/images/enemies/bossHud/circle.png | Bin 0 -> 453 bytes src/images/enemies/bossHud/energy.png | Bin 190 -> 0 bytes src/images/enemies/bossHud/health.png | Bin 0 -> 278 bytes .../bossHud/{snakeBoss.png => tSnake.png} | Bin src/images/hud/health.png | Bin 0 -> 269 bytes src/nodes/enemies/benzalkBoss.lua | 42 ------------ src/nodes/enemies/tSnake.lua | 62 ------------------ src/nodes/enemies/turkeyBoss.lua | 43 +----------- src/nodes/enemy.lua | 48 +++++++++++++- 11 files changed, 46 insertions(+), 149 deletions(-) delete mode 100644 src/images/enemies/bossHud/bossChevron.png delete mode 100644 src/images/enemies/bossHud/bossChevronSnake.png create mode 100644 src/images/enemies/bossHud/circle.png delete mode 100644 src/images/enemies/bossHud/energy.png create mode 100644 src/images/enemies/bossHud/health.png rename src/images/enemies/bossHud/{snakeBoss.png => tSnake.png} (100%) create mode 100644 src/images/hud/health.png diff --git a/src/images/enemies/bossHud/bossChevron.png b/src/images/enemies/bossHud/bossChevron.png deleted file mode 100644 index 96f093200d71b94a7e896d5ec366ffcfedc3126e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 279 zcmeAS@N?(olHy`uVBq!ia0vp^6+mpm!VDzio0De)DgFST5LY05`0!y}U4xGJragQ1 z7<=(N2MRHj1o;IsFfva0yAH_P>gnPbQgQ3;w2Pca6a-kAuOGO&!Azk~cE-Q#UHy-n zQWV|fh4|*&H`wFbvwL^wp6y4I`0l7yeP`wQUGnhB9&-%`BW^pXZ(m+%&R boL<9FxM@M&tEXNd?=X0}`njxgN@xNA@f>oz diff --git a/src/images/enemies/bossHud/bossChevronSnake.png b/src/images/enemies/bossHud/bossChevronSnake.png deleted file mode 100644 index 96f093200d71b94a7e896d5ec366ffcfedc3126e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 279 zcmeAS@N?(olHy`uVBq!ia0vp^6+mpm!VDzio0De)DgFST5LY05`0!y}U4xGJragQ1 z7<=(N2MRHj1o;IsFfva0yAH_P>gnPbQgQ3;w2Pca6a-kAuOGO&!Azk~cE-Q#UHy-n zQWV|fh4|*&H`wFbvwL^wp6y4I`0l7yeP`wQUGnhB9&-%`BW^pXZ(m+%&R boL<9FxM@M&tEXNd?=X0}`njxgN@xNA@f>oz diff --git a/src/images/enemies/bossHud/circle.png b/src/images/enemies/bossHud/circle.png new file mode 100644 index 0000000000000000000000000000000000000000..252d27ee6d701ed0cd968c8408b9f16fa21e10b5 GIT binary patch literal 453 zcmeAS@N?(olHy`uVBq!ia0vp^S|H591|*LjJ{b+97>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`0h7I;J!GcfQS24TkI`72U@f)XXJ5hcO-X(i=}MX3x0iJ5sNdU>fO3MP66 zdZwwZMyWtU%{*NkLn7SYPIb&XY#_k=SCRQ|;J-`3^>-a~yL-%g61}x8SzQwJHcp!p zJ#F*PUA1-T3wGHRHtVi1GtbM2wfB2y6>@)G#2c2Zj=i&1d+QW8>mI2)JI`CE&{^_` z>{)qk{@61tG#QV$d}AsBzYmXE6riM<}Aj$%QD!&0&jEwyS@CP9C=9o z?nRL5{~lXffEqnsDD8FsaZ$FvMeow>HvX7{94{1f}cc(nJ;f1*8J+& o5zaRYH)lUS!u9LUjMSaX|K#V~xvXop85qh8p00i_>zopr00#fOApigX literal 0 HcmV?d00001 diff --git a/src/images/enemies/bossHud/energy.png b/src/images/enemies/bossHud/energy.png deleted file mode 100644 index 32634d0d39bae4e185bb8a87005e0efddfc07899..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^6+mpm!2%@Nmuyo8QmvjYjv*Dd-d^3vcSu2iE#dzE zz>>0-KsD>1b|$VRJ9j4C>MFmIE2}d1 zmS^sR=(#rUk`s#Nd^poMKY7!o1M3wvU(f#_cJ*L*VENy9p=|ep?dHb^?^^f%x0QaO iH^0}NOaBf-%zJ*%T6*TOKRfO3MP66 zdZwwZMyWtG?Vc`#fBnkrpXP7Q{D^Xv`dNHVQQB8?X3L(BY46j#HJ3%q%3V8C z@%f+kY1wO|Z}CONUk|T5d1XyYSNMDVGrz(&Z{4$uKkcdMwqpgo)e{mV84d_@N^ZA3 Ua&qThppzIpUHx3vIVCg!0Ndba>;M1& literal 0 HcmV?d00001 diff --git a/src/images/enemies/bossHud/snakeBoss.png b/src/images/enemies/bossHud/tSnake.png similarity index 100% rename from src/images/enemies/bossHud/snakeBoss.png rename to src/images/enemies/bossHud/tSnake.png diff --git a/src/images/hud/health.png b/src/images/hud/health.png new file mode 100644 index 0000000000000000000000000000000000000000..ecdc8a0c18a900e97f65c8cabb8475249727fc23 GIT binary patch literal 269 zcmeAS@N?(olHy`uVBq!ia0vp^)a)(C{f}XQ4*Y=R#Ki=l*&+$n3-3imzP?iV4`QBXPVk-lnPYS?djqe z;^BRFiX#_;B8ThV|AAR|H%;5RD)f7%hJnn=C5d5d{I6yo+Ah#zc-C^c)PdBsvQ6Lj zwF<OyeOP1ev00LCj1L%hPTp?&u4v|TptBe} MUHx3vIVCg!03C&5@Bjb+ literal 0 HcmV?d00001 diff --git a/src/nodes/enemies/benzalkBoss.lua b/src/nodes/enemies/benzalkBoss.lua index c1909e22b..e43c687fe 100644 --- a/src/nodes/enemies/benzalkBoss.lua +++ b/src/nodes/enemies/benzalkBoss.lua @@ -94,48 +94,6 @@ return { enemy.db:set("bosstriggers.benzalk", true) end, - draw = function( enemy ) - fonts.set( 'small' ) - - love.graphics.setStencil( ) - - local energy = love.graphics.newImage('images/enemies/bossHud/energy.png') - local bossChevron = love.graphics.newImage('images/enemies/bossHud/bossChevron.png') - local bossPic = love.graphics.newImage('images/enemies/bossHud/benzalkBoss.png') - - energy:setFilter('nearest', 'nearest') - bossChevron:setFilter('nearest', 'nearest') - bossPic:setFilter('nearest', 'nearest') - - x, y = camera.x + window.width - 130 , camera.y + 10 - - love.graphics.setColor( 255, 255, 255, 255 ) - love.graphics.draw( bossChevron, x , y ) - love.graphics.draw( bossPic, x + 69, y + 10 ) - - love.graphics.setColor( 0, 0, 0, 255 ) - love.graphics.printf( "Benzalk", x + 15, y + 15, 52, 'center' ) - love.graphics.printf( "GUARD", x + 15, y + 41, 52, 'center' ) - - energy_stencil = function( x, y ) - love.graphics.rectangle( 'fill', x + 11, y + 27, 59, 9 ) - end - love.graphics.setStencil(energy_stencil, x, y) - local max_hp = 100 - local rate = 55/max_hp - love.graphics.setColor( - math.min(utils.map(enemy.hp, max_hp, max_hp / 2 + 1, 0, 255 ), 255), -- green to yellow - math.min(utils.map(enemy.hp, max_hp / 2, 0, 255, 0), 255), -- yellow to red - 0, - 255 - ) - love.graphics.draw(energy, x + ( max_hp - enemy.hp ) * rate, y) - - love.graphics.setStencil( ) - love.graphics.setColor( 255, 255, 255, 255 ) - fonts.revert() - end, - recoil = function( enemy ) enemy.props.recoiling = true local direction = enemy.direction == "left" and -1 or 1 diff --git a/src/nodes/enemies/tSnake.lua b/src/nodes/enemies/tSnake.lua index 71c67fecf..6ec2fb55a 100644 --- a/src/nodes/enemies/tSnake.lua +++ b/src/nodes/enemies/tSnake.lua @@ -78,68 +78,6 @@ return { end end, - die = function( enemy, player ) - local Player = require 'player' - local player = Player.factory() - local NodeClass = require('nodes/key') - local node = { - type = 'key', - name = 'ferry', - x = 1490, - y = 463,--742, - width = 24, - height = 24, - properties = {}, - } - local spawnedNode = NodeClass.new(node, enemy.collider) - local level = gamestate.currentState() - level:addNode(spawnedNode) - end, - - draw = function( enemy ) - fonts.set( 'small' ) - - love.graphics.setStencil( ) - - local energy = love.graphics.newImage('images/enemies/bossHud/energy.png') - local bossChevron = love.graphics.newImage('images/enemies/bossHud/bossChevron.png') - local bossPic = love.graphics.newImage('images/enemies/bossHud/snakeBoss.png') - - - energy:setFilter('nearest', 'nearest') - bossChevron:setFilter('nearest', 'nearest') - bossPic:setFilter('nearest', 'nearest') - - x, y = camera.x + window.width - 130 , camera.y + 10 - - love.graphics.setColor( 255, 255, 255, 255 ) - love.graphics.draw( bossChevron, x , y ) - love.graphics.draw( bossPic, x + 69, y + 10 ) - - love.graphics.setColor( 0, 0, 0, 255 ) - love.graphics.printf( "Trouser Snake", x + 10, y + 15, 100, 'left' , 0, .8, .8) - love.graphics.printf( "BOSS", x + 15, y + 41, 52, 'center' ) - - - energy_stencil = function( x, y ) - love.graphics.rectangle( 'fill', x + 11, y + 27, 59, 9 ) - end - love.graphics.setStencil(energy_stencil, x, y) - local max_hp = 70 - local rate = 60/max_hp - love.graphics.setColor( - math.min(utils.map(enemy.hp, max_hp, max_hp / 2 + 1, 0, 255 ), 255), -- green to yellow - math.min(utils.map(enemy.hp, max_hp / 2, 0, 255, 0), 255), -- yellow to red - 0, - 255 - ) - love.graphics.draw(energy, x + ( max_hp - enemy.hp ) * rate, y) - - love.graphics.setStencil( ) - love.graphics.setColor( 255, 255, 255, 255 ) - fonts.revert() - end, - attackRainbow = function(enemy) enemy.state = 'attack' enemy.last_attack = 0 diff --git a/src/nodes/enemies/turkeyBoss.lua b/src/nodes/enemies/turkeyBoss.lua index fd3221cda..cd19a60cb 100644 --- a/src/nodes/enemies/turkeyBoss.lua +++ b/src/nodes/enemies/turkeyBoss.lua @@ -11,6 +11,7 @@ local fonts = require 'fonts' return { name = 'turkeyBoss', + isBoss = true, attackDelay = 1, height = 115, width = 215, @@ -94,48 +95,6 @@ return { level:addNode(spawnedNode) end, - draw = function( enemy ) - fonts.set( 'small' ) - - love.graphics.setStencil( ) - - local energy = love.graphics.newImage('images/enemies/bossHud/energy.png') - local bossChevron = love.graphics.newImage('images/enemies/bossHud/bossChevron.png') - local bossPic = love.graphics.newImage('images/enemies/bossHud/turkeyBoss.png') - - energy:setFilter('nearest', 'nearest') - bossChevron:setFilter('nearest', 'nearest') - bossPic:setFilter('nearest', 'nearest') - - x, y = camera.x + window.width - 130 , camera.y + 10 - - love.graphics.setColor( 255, 255, 255, 255 ) - love.graphics.draw( bossChevron, x , y ) - love.graphics.draw( bossPic, x + 69, y + 10 ) - - love.graphics.setColor( 0, 0, 0, 255 ) - love.graphics.printf( "TURKEY", x + 15, y + 15, 52, 'center' ) - love.graphics.printf( "BOSS", x + 15, y + 41, 52, 'center' ) - - energy_stencil = function( x, y ) - love.graphics.rectangle( 'fill', x + 11, y + 27, 59, 9 ) - end - love.graphics.setStencil(energy_stencil, x, y) - local max_hp = 100 - local rate = 55/max_hp - love.graphics.setColor( - math.min(utils.map(enemy.hp, max_hp, max_hp / 2 + 1, 0, 255 ), 255), -- green to yellow - math.min(utils.map(enemy.hp, max_hp / 2, 0, 255, 0), 255), -- yellow to red - 0, - 255 - ) - love.graphics.draw(energy, x + ( max_hp - enemy.hp ) * rate, y) - - love.graphics.setStencil( ) - love.graphics.setColor( 255, 255, 255, 255 ) - fonts.revert() - end, - attackBasketball = function( enemy ) local node = { type = 'projectile', diff --git a/src/nodes/enemy.lua b/src/nodes/enemy.lua index cdcf6ce06..60e5eeb67 100644 --- a/src/nodes/enemy.lua +++ b/src/nodes/enemy.lua @@ -22,7 +22,7 @@ local utils = require 'utils' local window = require 'window' local camera = require 'camera' local app = require 'app' - +local fonts = require 'fonts' local Enemy = {} Enemy.__index = Enemy @@ -50,7 +50,9 @@ function Enemy.new(node, collider, enemytype) enemy.sprite = love.graphics.newImage( sprite_sheet ) enemy.sprite:setFilter('nearest', 'nearest') - enemy.grid = anim8.newGrid( enemy.props.width, enemy.props.height, enemy.sprite:getWidth(), enemy.sprite:getHeight() ) + enemy.grid = anim8.newGrid( enemy.props.width, enemy.props.height, enemy.sprite:getDimensions()) + + enemy.isBoss = enemy.props.isBoss or false enemy.node_properties = node.properties enemy.node = node @@ -66,6 +68,16 @@ function Enemy.new(node, collider, enemytype) assert( tonumber(enemy.props.hp),"Hp must be a number" ) enemy.hp = tonumber(enemy.props.hp) + if enemy.isBoss then + enemy.maxHealth = enemy.hp + enemy.hudSheet = love.graphics.newImage('images/enemies/bossHud/' .. type .. '.png') + enemy.circle = love.graphics.newImage('images/enemies/bossHud/circle.png') + enemy.health = love.graphics.newImage('images/enemies/bossHud/health.png') + enemy.hudSheet:setFilter('nearest', 'nearest') + enemy.circle:setFilter('nearest', 'nearest') + enemy.health:setFilter('nearest', 'nearest') + end + enemy.height = enemy.props.height enemy.width = enemy.props.width enemy.bb_width = enemy.props.bb_width or enemy.width @@ -449,6 +461,10 @@ end function Enemy:draw() local r, g, b, a = love.graphics.getColor() + + if self.isBoss then + self:drawBossHud() + end if self.flash then love.graphics.setColor(255, 0, 0, 255) @@ -468,6 +484,32 @@ function Enemy:draw() end +function Enemy:drawBossHud() + local x = camera.x + window.width - 70 + local y = camera.y + 30 + love.graphics.draw(self.circle, x + 20, y - 20) + love.graphics.draw(self.hudSheet, x + 20, y - 20) + + fonts.set('small') + + -- draws boss name + + -- draws health + local health = self.hp > 0 and self.hp or 0 + -- draws black outline around text + love.graphics.setColor( 0, 0, 0, 255 ) + love.graphics.printf(self.hp, x, y, 16, 'left', 0, 1, 1, 0.5, 0.5) + love.graphics.printf(self.hp, x, y, 16, 'left', 0, 1, 1, 0.5, -0.5) + love.graphics.printf(self.hp, x, y, 16, 'left', 0, 1, 1, -0.5, 0.5) + love.graphics.printf(self.hp, x, y, 16, 'left', 0, 1, 1, -0.5, -0.5) + + love.graphics.print("King Trouser Snake", x - 100, y - 10) + + love.graphics.setColor( 255, 255, 255, 255 ) + love.graphics.print(self.hp, x, y) +end + + function Enemy:ceiling_pushback() if self.props.ceiling_pushback then self.props.ceiling_pushback(self) @@ -565,4 +607,4 @@ function Enemy:onScreen() return false end -return Enemy +return Enemy \ No newline at end of file