From 392fa80986fdee0b795c948914b5c1804a210b0a Mon Sep 17 00:00:00 2001 From: Kazhnuz Date: Sat, 29 Jun 2019 11:25:40 +0200 Subject: [PATCH] feat(camera): make the camera support multiple "mode" --- gamecore/modules/world/baseworld.lua | 9 +++------ gamecore/modules/world/camera.lua | 18 +++++++++++++++++- gamecore/modules/world/world2D.lua | 7 ++----- 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/gamecore/modules/world/baseworld.lua b/gamecore/modules/world/baseworld.lua index a1f707a..d26b48e 100644 --- a/gamecore/modules/world/baseworld.lua +++ b/gamecore/modules/world/baseworld.lua @@ -225,17 +225,14 @@ function BaseWorld:setPlayerNumber(playerNumber) self.playerNumber = playerNumber or 1 end -function BaseWorld:addPlayer(actor, sourceid, haveCam) +function BaseWorld:addPlayer(actor, sourceid) local player = {} player.actor = actor player.sourceid = sourceid or 1 table.insert(self.players, player) - if (haveCam) then - local xx, yy = player.actor:getViewCenter() - self.cameras:addView(xx, yy, player.actor) - end + self.cameras:addTarget(player.actor) end function BaseWorld:sendInputToPlayers(actor) @@ -319,7 +316,7 @@ function BaseWorld:newCollisionFromMap(objectlayer, object) end function BaseWorld:addPlayerFromMap(object, i) - self:addPlayer(self.obj.Player(self, object.x, object.y), i, true) + self:addPlayer(self.obj.Player(self, object.x, object.y), i) end function BaseWorld:loadMapPlayers() diff --git a/gamecore/modules/world/camera.lua b/gamecore/modules/world/camera.lua index 0fb9329..6570364 100644 --- a/gamecore/modules/world/camera.lua +++ b/gamecore/modules/world/camera.lua @@ -37,11 +37,18 @@ function CameraSystem:new(world) self.scene = world.scene self.world = world - self.verticalSplit = SPLITSCREEN_ISVERTICAL + self.mode = "split" + self.verticalSplit = SPLITSCREEN_ISVERTICAL self:initViews() end +function CameraSystem:setMode(mode) + self.mode = mode + print("Camera system mode set to " .. mode) + return mode +end + function CameraSystem:initViews() self.views = {} @@ -143,6 +150,15 @@ end -- WRAPPER and UTILS -- Access data from the views +function CameraSystem:addTarget(target) + if (#self.views < SCREEN_LIMIT) then + if (#self.views.list == 0) or (self.mode == "split") then + local x, y = target:getViewCenter() + self:addView(x, y, target) + end + end +end + function CameraSystem:addView(x, y, target) if (#self.views.list < SCREEN_LIMIT) then local id = #self.views.list + 1 diff --git a/gamecore/modules/world/world2D.lua b/gamecore/modules/world/world2D.lua index 6200c93..23e7c8e 100644 --- a/gamecore/modules/world/world2D.lua +++ b/gamecore/modules/world/world2D.lua @@ -82,10 +82,7 @@ function World2D:addPlayer(actor, sourceid, haveCam) table.insert(self.players, player) - if (haveCam) then - local xx, yy = player.actor:getViewCenter() - self.cameras:addView(xx, yy, player.actor) - end + self.cameras:addTarget(player.actor) end -- MAP LOADING FUNCTIONS @@ -119,7 +116,7 @@ function World2D:newCollisionFromMap(objectlayer, object) end function World2D:addPlayerFromMap(object, i) - self:addPlayer(self.obj.Player(self, object.x, object.y), i, true) + self:addPlayer(self.obj.Player(self, object.x, object.y), i) end -- BODIES MANAGEMENT FUNCTIONS