improvement(cbs): let the turn controller handle the hud

This commit is contained in:
Kazhnuz 2020-07-19 16:20:57 +02:00
parent 977d4bac16
commit 1f3d07c223
10 changed files with 137 additions and 39 deletions

View file

@ -1,12 +1,20 @@
local FighterParent = require "scenes.battlesystem.controllers.fighters.parent"
local HeroFighter = FighterParent:extend()
local StatusBar = require "scenes.battlesystem.gui.statusbar"
local POSITIONS = {3, 1, 5}
local HEROES_LINE = 3;
function HeroFighter:new(owner, character, id)
self.name = character
self.super.new(self, owner, true, id)
self.statusbar = StatusBar(self)
end
function HeroFighter:updateAssets(dt)
self.statusbar:update(dt)
end
function HeroFighter:getAbstract()
@ -26,4 +34,14 @@ function HeroFighter:endAction()
end
-- DRAW FUNCTIONS
function HeroFighter:drawIcon(x, y)
local iconID = 1
self.assets.tileset["charicons"]:drawTile(iconID, x, y)
end
function HeroFighter:drawHUD()
self.statusbar:draw()
end
return HeroFighter

View file

@ -7,6 +7,7 @@ function FighterParent:new(owner, isHero, id)
self.turnSystem = owner.turnSystem
self.world = owner.world
self.isHero = isHero
self.assets = self.turnSystem.scene.assets
-- Note : l'ID est ici relatif à chaque quand, il n'est donc pas unique,
-- ce qui est unique étant le combo id + isHero
@ -34,6 +35,10 @@ function FighterParent:update(dt)
end
end
function FighterParent:updateAssets(dt)
-- Vide pour l'instant
end
function FighterParent:setActive()
counter = 0
self.isActive = true
@ -73,4 +78,11 @@ function FighterParent:canFight()
return true
end
-- DRAW FUNCTIONS
function FighterParent:drawIcon(x, y)
love.graphics.setColor(1, 1, 1, 1)
love.graphics.rectangle("fill", x, y, 16, 16)
end
return FighterParent

View file

@ -1,14 +1,23 @@
local FighterParent = require "scenes.battlesystem.controllers.fighters.parent"
local VillainFighter = FighterParent:extend()
local SimpleHPBar = require "scenes.battlesystem.gui.simplehpbar"
local POSITIONS = {3, 1, 5}
local ENNEMY_LINE = 10;
function VillainFighter:new(owner, ennemy, id)
self.name = ennemy
self.super.new(self, owner, false, id)
self.hpbar = SimpleHPBar(self.abstract.hp)
end
function VillainFighter:updateAssets(dt)
self.hpbar:update(dt)
end
function VillainFighter:getAbstract()
return game.ennemies:getEnnemyData(self.name)
end
@ -26,4 +35,15 @@ function VillainFighter:endAction()
end
-- DRAW FUNCTIONS
function VillainFighter:drawIcon(x, y)
love.graphics.setColor(1, 0, 0, 1)
love.graphics.rectangle("fill", x, y, 16, 16)
love.graphics.setColor(1, 1, 1, 1)
end
function VillainFighter:drawHUD(x, y)
self.hpbar:draw(x, y)
end
return VillainFighter

View file

@ -3,15 +3,14 @@ local TurnController = Object:extend()
local Player = require "scenes.battlesystem.controllers.player"
local Ennemy = require "scenes.battlesystem.controllers.ennemy"
local HUD = require "scenes.battlesystem.gui.hud"
local maputils = require "scenes.battlesystem.utils"
function TurnController:new(scene)
self.scene = scene
self.world = scene.world
self.player = Player(self)
self.ennemies = Ennemy(self)
self.isActive = false
self.currentlyPlaying = ""
@ -24,13 +23,29 @@ function TurnController:new(scene)
self.actionList = {}
self.currentFighter = nil
self.hud = HUD(self)
self.player = Player(self)
self.ennemies = Ennemy(self)
end
function TurnController:startBattle()
self.isActive = true
self.hud:movePlayerHUD(true)
end
function TurnController:finishBattle()
self.isBattleActive = false
self.actionlist = {}
self.hud:movePlayerHUD(false)
self.scene:finishBattle()
end
function TurnController:update(dt)
self.player:update(dt)
self.ennemies:update(dt)
self.hud:update(dt)
if (self.isActive) then
if (self.currentFighter ~= nil) then
self.currentFighter:update(dt)
@ -47,7 +62,7 @@ function TurnController:nextAction()
self.turns.current = self.turns.current + 1
core.debug:print("cbs/turns", "switching to next action")
end
--self.scene.hud:moveBattleCursor(self.turns.current)
self.hud:moveBattleCursor(self.turns.current)
self:startAction()
end
@ -86,13 +101,15 @@ function TurnController:endAction()
self.currentlyPlaying = ""
end
function TurnController:drawTurnList(x, y)
end
function TurnController:sendSignalToCurrentBattler(signal, subSignal)
self.actionList[self.turns.current].actor:receiveSignal(signal, subSignal)
end
function TurnController:draw()
self.hud:draw()
self.player:draw()
self.ennemies:draw()
end
return TurnController

View file

@ -20,7 +20,9 @@ function FighterControllerParent:setActive(activeActor)
end
function FighterControllerParent:update(dt)
for i, fighter in ipairs(self.list) do
fighter:updateAssets(dt)
end
end
function FighterControllerParent:endAction()
@ -42,5 +44,9 @@ function FighterControllerParent:putActions(actionList)
end
end
function FighterControllerParent:draw()
--Aucun dessin par defaut, ils sont géré différements
end
return FighterControllerParent

View file

@ -14,4 +14,10 @@ function HeroFighterController:initHeroes()
end
end
function HeroFighterController:draw()
for i, hero in ipairs(self.list) do
hero:drawHUD()
end
end
return HeroFighterController

View file

@ -4,11 +4,11 @@ local gui = require "game.modules.gui"
local TweenManager = require "game.modules.tweenmanager"
function HUD:new(scene)
self.scene = scene
self.world = scene.world
self.assets = scene.assets
self.turns = scene.turns
function HUD:new(turns)
self.turns = turns
self.scene = turns.scene
self.world = self.scene.world
self.assets = self.scene.assets
self.frame = gui.newBorder(424, 30, 4)
self.tweens = TweenManager(self)
@ -38,14 +38,10 @@ function HUD:getPlayerHUDPosition()
end
function HUD:draw()
for i, battler in ipairs(self.world.battlers) do
battler:drawHUD()
end
for i, action in ipairs(self.turns.actionList) do
action.actor:drawIcon(4 + (i-1)*(20), 6)
action.fighter:drawIcon(4 + (i-1)*(20), 6)
end
local cursorx = self.battlerCursor * 20 - 6
local cursorx = self.battlerCursor * 20 - 8
if #self.turns.actionList > 0 then
self.assets.images["menucursor"]:draw(cursorx, 26, math.rad(-90), 1, 1, 4, 8)

View file

@ -0,0 +1,29 @@
local SimpleHPBar = Object:extend()
local TweenManager = require "game.modules.tweenmanager"
local gui = require "game.modules.gui"
function SimpleHPBar:new(hp)
self.tweens = TweenManager(self)
self.hp = hp
self.baseHP = hp
end
function SimpleHPBar:setHP(newHP)
self.tweens:newTween(0, 0.1, {hp = newHP}, 'inCubic')
end
function SimpleHPBar:update(dt)
self.tweens:update(dt)
end
function SimpleHPBar:draw(x, y)
love.graphics.setColor(0, 0, 0, 1)
gui.drawBar(x, y, 26, 4)
love.graphics.setColor(248/255, 160/255, 0, 1)
local bar = math.floor(24 * (self.hp / self.baseHP))
gui.drawBar(x, y + 1, bar, 2)
love.graphics.setColor(1, 1, 1, 1)
end
return SimpleHPBar

View file

@ -6,16 +6,17 @@ local gui = require "game.modules.gui"
local HUDBASE = 8
local HUDSEP = 152
function StatusBar:new(actor)
self.actor = actor
self.hud = self.actor.scene.hud
self.assets = self.actor.assets
function StatusBar:new(fighter)
self.fighter = fighter
self.hud = fighter.turnSystem.hud
self.assets = self.fighter.assets
self.charid = self.actor.charid
self.stats = game.characters.list[self.charid].stats
self.charid = self.fighter.name
self.stats = self.fighter:getStats()
self.abstract = self.fighter.abstract
self.hp = self.stats.hp
self.pp = self.stats.pp
self.hp = self.abstract.hp
self.pp = self.abstract.pp
self.tweens = TweenManager(self)
end
@ -41,8 +42,8 @@ function StatusBar:drawEmblem(x, y)
end
function StatusBar:draw()
local x = HUDBASE + (self.actor.charnumber-1)*HUDSEP
local y = self.actor.scene.hud:getPlayerHUDPosition()
local x = HUDBASE + (self.fighter.id-1)*HUDSEP
local y = self.hud:getPlayerHUDPosition()
self:drawEmblem(x, y)
self.assets.images["statusbar"]:draw(x+12, y-6)
@ -63,7 +64,7 @@ function StatusBar:draw()
love.graphics.print(math.floor(self.hp) .. "/" .. hpmax, x+34, y+5)
love.graphics.print(math.floor(self.pp) .. "/" .. ppmax, x+28, y+17)
local lvl = game.characters.list[self.charid].stats.level
local lvl = self.abstract.level
if lvl < 100 then
lvl = "0" .. lvl

View file

@ -6,8 +6,6 @@ local World = require "scenes.battlesystem.world"
local MenuSystem = require "scenes.battlesystem.menu"
local Turns = require "scenes.battlesystem.controllers"
local HUD = require "scenes.battlesystem.gui.hud"
local VictoryScreen = require "scenes.battlesystem.screens.victory"
function BattleSystem:new()
@ -32,17 +30,13 @@ function BattleSystem:initManagers()
self.world = World(self)
self.menu = MenuSystem(self)
self.turns = Turns(self)
self.hud = HUD(self)
end
function BattleSystem:startBattle()
self.turns:startBattle()
self.hud:movePlayerHUD(true)
end
function BattleSystem:finishBattle()
self.hud:movePlayerHUD(false)
self.assets:setMusic("assets/music/victory.mp3")
self.assets:playMusic()
self.screen = VictoryScreen(self)
@ -58,7 +52,6 @@ end
function BattleSystem:update(dt)
self.world:update(dt)
self.turns:update(dt)
self.hud:update(dt)
if (self.screen ~= nil) then
self.screen:update(dt)
end
@ -66,7 +59,7 @@ end
function BattleSystem:draw()
self.world:draw()
self.hud:draw()
self.turns:draw()
if (self.screen ~= nil) then
self.screen:draw()
end