138 lines
3.4 KiB
Lua
138 lines
3.4 KiB
Lua
local PlayerManager = Object:extend()
|
|
local Obj = require "scenes.levels.entities"
|
|
|
|
function PlayerManager:new(scene)
|
|
self.scene = scene
|
|
self.players = {}
|
|
self.deathTimer = -100
|
|
self.activePlayer = -1
|
|
self.startx, self.starty = self.scene.world:getStartPosition()
|
|
|
|
self.itemList = {}
|
|
self.score = 0
|
|
self.gold = 0
|
|
local mediumfont, smallfont
|
|
mediumfont = self.scene.assets.fonts["medium"]
|
|
smallfont = self.scene.assets.fonts["small"]
|
|
self.hpbar = game.gui.newProgressBar("greenbar", mediumfont, smallfont, "HP", 96)
|
|
self.mpbar = game.gui.newProgressBar("bluebar", mediumfont, smallfont, "MP", 96)
|
|
|
|
self.itembox = game.gui.newTextBox("assets/sprites/gui/textbox/yellowbox.png", 24,24)
|
|
end
|
|
|
|
-- PLAYER FUNCTIONS
|
|
-- Handle virtual players
|
|
|
|
-- TODO: Gérer la manière dont le joueur va avoir une équipe de cochons
|
|
|
|
function PlayerManager:addPlayer(pigID)
|
|
-- Enregistrer le joueur n'est pas le rajouter à une liste des objets qui existe,
|
|
-- mais juste insérer ses informations les plus importantes afin d'aider le jeu
|
|
-- à pouvoir le reconstruire.
|
|
local play = {}
|
|
play.pigID = pigID
|
|
play.isDead = 0
|
|
|
|
table.insert(self.players, play)
|
|
end
|
|
|
|
function PlayerManager:spawnPlayer(playerID)
|
|
local play = self.players[playerID]
|
|
Obj.Player(self.scene, self.startx, self.starty, playerID)
|
|
self.activePlayer = playerID
|
|
end
|
|
|
|
function PlayerManager:getPlayers()
|
|
local itemList = self.scene.world:getActors()
|
|
local playerList = {}
|
|
|
|
for i,v in ipairs(itemList) do
|
|
if (v.playerID > 0) then
|
|
table.insert(playerList, v)
|
|
end
|
|
end
|
|
|
|
return playerList
|
|
end
|
|
|
|
function PlayerManager:getPlayerByID(id)
|
|
local itemList = self.scene.world:getActors()
|
|
local player
|
|
|
|
if (id == nil) then
|
|
error("You must have an ID to search")
|
|
end
|
|
|
|
for i,v in ipairs(itemList) do
|
|
if (v.playerID == id) then
|
|
player = v
|
|
end
|
|
end
|
|
|
|
return player
|
|
end
|
|
|
|
function PlayerManager:playerExist(id)
|
|
return (self.players[id] ~= nil)
|
|
end
|
|
|
|
function PlayerManager:setDeathTimer(timer)
|
|
self.deathTimer = timer
|
|
end
|
|
|
|
function PlayerManager:playerHaveObject(id)
|
|
player = self:getPlayerByID(id)
|
|
|
|
if (player == nil) then
|
|
return false
|
|
else
|
|
return true
|
|
end
|
|
end
|
|
|
|
-- UPDATE FUNCTIONS
|
|
-- Update the death timer and respawn the player when it's done
|
|
|
|
function PlayerManager:update(dt)
|
|
if (self.deathTimer > 0) then
|
|
self.deathTimer = self.deathTimer - dt
|
|
elseif (self.deathTimer > -100) then
|
|
self:spawnPlayer(self.activePlayer)
|
|
self.deathTimer = -100
|
|
end
|
|
end
|
|
|
|
-- DRAW FUNCTIONS
|
|
-- Functions made to draw the HUD
|
|
|
|
function PlayerManager:drawHUD(dt)
|
|
utils.graphics.resetColor()
|
|
local hp = 0
|
|
local mp = 0
|
|
local weapon = 0
|
|
love.graphics.draw(self.itembox, 16, 16)
|
|
|
|
if self:playerHaveObject(1) then
|
|
local player = self:getPlayerByID(1)
|
|
hp = player.hp / player.stats.maxHP
|
|
mp = player.mp / player.stats.maxMP
|
|
weapon = player.weapon
|
|
end
|
|
|
|
if (weapon ~= 0) and (weapon ~= nil) then
|
|
self.scene.assets.tileset["weapon"]:drawTile(weapon,28,28,0,1,1,8,8)
|
|
end
|
|
self.hpbar:draw(68, 14, hp)
|
|
self.mpbar:draw(68, 30, mp)
|
|
|
|
self.scene.assets.fonts["medium"]:set()
|
|
|
|
love.graphics.printf( utils.math.numberToString(self.score, 6), 373, 10, 96, "right")
|
|
love.graphics.printf( utils.math.numberToString(self.gold, 4), 373, 25, 96-18, "right")
|
|
love.graphics.setColor(1, 1, 85/256)
|
|
love.graphics.printf( "G", 373, 25, 96, "right")
|
|
utils.graphics.resetColor()
|
|
end
|
|
|
|
return PlayerManager
|