project-witchy/imperium-porcorum.love/scenes/levels/players.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