scenes/levels: split playermanager

This commit is contained in:
Kazhnuz 2019-03-03 14:54:24 +01:00
parent 7908480ec0
commit ff02216890
4 changed files with 35 additions and 28 deletions

View File

@ -13,17 +13,16 @@ end
function Level:floorCameraCoord()
self.camera.x, self.camera.y = utils.math.floorCoord(self.camera.x, self.camera.y)
print(self.camera.x .. ";" .. self.camera.y)
end
function Level:updateCamera(dt)
self:cameraFollowPlayer(self.activePlayer)
self:cameraFollowPlayer(self.playermanager.activePlayer)
self:limitCamera()
self:floorCameraCoord()
end
function Level:cameraFollowPlayer(id)
local player = self:getPlayerByID(id)
local player = self.playermanager:getPlayerByID(id)
if (player ~= nil) then
local playx, playy = utils.math.floorCoord(player.center.x,

View File

@ -2,8 +2,8 @@ Level = Object:extend() -- On créer la classe des entitées, c'est la classe de
require "scenes.levels.controller.world"
require "scenes.levels.controller.camera"
require "scenes.levels.controller.players"
require "scenes.levels.controller.debug"
PlayerManager = require "scenes.levels.controller.players"
function Level:new()
self:reset()
@ -54,15 +54,15 @@ function Level:loadMission(levelID, missionID)
end
function Level:launchMission()
self:resetPlayers()
self.playermanager = PlayerManager(self)
--self:resetSpawnAndEntities()
assets:silence()
assets:playMusic()
self:initCamera(0, 0)
self.playermanager:addPlayer(1)
self.playermanager:spawnPlayer(1)
self:addPlayer(1)
self:spawnPlayer(1)
self:initCamera(self.playermanager.startx, self.playermanager.starty)
self.score = 0
self.gold = 0
@ -73,7 +73,7 @@ end
function Level:update(dt)
self.keys = core.input.keys
if (self.pause == false) then
self:updatePlayerSystem(dt)
self.playermanager:update(dt)
self:updateWorld(dt)
assets:update(dt)
self:updateCamera(dt)
@ -104,8 +104,8 @@ function Level:drawHUD(dt)
local weapon = 0
assets.textbox["yellowbox"]:draw(16,16,24,24)
if self:playerHaveObject(1) then
local player = self:getPlayerByID(1)
if self.playermanager:playerHaveObject(1) then
local player = self.playermanager:getPlayerByID(1)
hp = player.hp / player.stats.maxHP
mp = player.mp / player.stats.maxMP
weapon = player.weapon

View File

@ -1,13 +1,15 @@
local PlayerManager = Object:extend()
local Obj = require "scenes.levels.entities"
function Level:resetPlayers(player)
self.players = {}
self.deathTimer = -100
function PlayerManager:new(scene)
self.scene = scene
self.players = {}
self.deathTimer = -100
self.activePlayer = -1
self.startx, self.starty = self:getStartPosition()
self.startx, self.starty = self.scene:getStartPosition()
end
function Level:addPlayer(pigID)
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.
@ -18,14 +20,14 @@ function Level:addPlayer(pigID)
table.insert(self.players, play)
end
function Level:spawnPlayer(playerID)
function PlayerManager:spawnPlayer(playerID)
local play = self.players[playerID]
Obj.Player(self, self.startx, self.starty, playerID)
Obj.Player(self.scene, self.startx, self.starty, playerID)
self.activePlayer = playerID
end
function Level:getPlayers()
local itemList = self:getEntities()
function PlayerManager:getPlayers()
local itemList = self.scene:getEntities()
local playerList = {}
for i,v in ipairs(itemList) do
@ -37,10 +39,14 @@ function Level:getPlayers()
return playerList
end
function Level:getPlayerByID(id)
local itemList = self:getEntities()
function PlayerManager:getPlayerByID(id)
local itemList = self.scene:getEntities()
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
@ -50,15 +56,15 @@ function Level:getPlayerByID(id)
return player
end
function Level:playerExist(id)
function PlayerManager:playerExist(id)
return (self.players[id] ~= nil)
end
function Level:setDeathTimer(timer)
function PlayerManager:setDeathTimer(timer)
self.deathTimer = timer
end
function Level:playerHaveObject(id)
function PlayerManager:playerHaveObject(id)
player = self:getPlayerByID(id)
if (player == nil) then
@ -68,8 +74,7 @@ function Level:playerHaveObject(id)
end
end
function Level:updatePlayerSystem(dt)
function PlayerManager:update(dt)
if (self.deathTimer > 0) then
self.deathTimer = self.deathTimer - dt
elseif (self.deathTimer > -100) then
@ -77,3 +82,5 @@ function Level:updatePlayerSystem(dt)
self.deathTimer = -100
end
end
return PlayerManager

View File

@ -14,6 +14,7 @@ function Player:new(level, x, y, playerID)
self:initAnimations()
Player.super.new(self, level, "player", x - (w / 2), y - (h / 2), w, h)
self.manager = level.playermanager
self.center = {
x = self.x,
@ -33,7 +34,7 @@ function Player:new(level, x, y, playerID)
end
function Player:getStats(playerID)
self.pigID = self.level.players[playerID].pigID
self.pigID = self.manager.players[playerID].pigID
self.stats = game.pigmanager:getPig(1)
self.playerID = playerID
end