107 lines
2.3 KiB
Lua
107 lines
2.3 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()
|
|
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.world, 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)
|
|
|
|
if self:playerHaveObject(1) then
|
|
local player = self:getPlayerByID(1)
|
|
player:drawHUD()
|
|
end
|
|
|
|
end
|
|
|
|
return PlayerManager
|