From fd78d083af723f47b77ee33df9b72d487939d0de Mon Sep 17 00:00:00 2001 From: Kazhnuz Date: Mon, 29 Apr 2019 16:40:44 +0200 Subject: [PATCH] modules/world: add a way to load objects from tiled --- gamecore/modules/world/baseworld.lua | 65 +++++++++++++++++++++++++++- gamecore/modules/world/world2D.lua | 4 +- 2 files changed, 65 insertions(+), 4 deletions(-) diff --git a/gamecore/modules/world/baseworld.lua b/gamecore/modules/world/baseworld.lua index df0dfcc..98cd17d 100644 --- a/gamecore/modules/world/baseworld.lua +++ b/gamecore/modules/world/baseworld.lua @@ -35,12 +35,12 @@ local CameraSystem = require(cwd .. "camera") function BaseWorld:new(scene, actorlist, mapfile) self.scene = scene - self.cameras = CameraSystem(self) + self.cameras = CameraSystem(self) + self.actors = {} self:initPlayers() self:setActorList(actorlist) self:setMap(mapfile) - self.actors = {} end function BaseWorld:setActorList(actorlist) @@ -61,6 +61,7 @@ function BaseWorld:setMap(mapfile) self.map = Sti(mapfile) self.haveBackgroundColor = true self.backcolor = self.map.backgroundcolor or {128, 128, 128} + self:loadMapObjects() end end @@ -71,6 +72,10 @@ function BaseWorld:newActor(name, x, y) self.obj.index[name](self, x, y) end +function BaseWorld:newCollision(name, x, y, w, h) + self.obj.collisions[name](self, x, y, w, h) +end + function BaseWorld:registerActor(actor) table.insert(self.actors, actor) end @@ -111,6 +116,17 @@ function BaseWorld:getActors() return self.actors end +-- INFO FUNCTIONS +-- Give infos about the world + +function BaseWorld:isActorIndexed(name) + return (self.obj.index[name] ~= nil) +end + +function BaseWorld:isCollisionIndexed(name) + return (self.obj.collisions[name] ~= nil) +end + -- PLAYER MANAGEMENT FUNCTIONS -- Basic function to handle player actors @@ -150,6 +166,51 @@ end -- MAP FUNCTIONS -- All map wrappers +function BaseWorld:loadMapObjects() + self:loadMapCollisions() + self:loadMapPlayers() + self:loadMapActors() +end + +function BaseWorld:loadMapCollisions() + for k, objectlayer in pairs(self.map.layers) do + if self:isCollisionIndexed(objectlayer.name) then + print("DEBUG: loading actors in " .. objectlayer.name .. " collision layer") + for k, object in pairs(objectlayer.objects) do + self:newCollision(objectlayer.name, object.x, object.y, object.width, object.height) + end + self.map:removeLayer(objectlayer.name) + end + end +end + +function BaseWorld:loadMapActors() + for k, objectlayer in pairs(self.map.layers) do + if self:isActorIndexed(objectlayer.name) then + print("DEBUG: loading actors in " .. objectlayer.name .. " actor layer") + for k, object in pairs(objectlayer.objects) do + self:newActor(objectlayer.name, object.x, object.y) + end + self.map:removeLayer(objectlayer.name) + end + end +end + +function BaseWorld:loadMapPlayers() + for k, objectlayer in pairs(self.map.layers) do + if (objectlayer.name == "player") then + print("DEBUG: loading actors in player layer") + local i = 1 + for k, object in pairs(objectlayer.objects) do + self:addPlayer(self.obj.Player(self, object.x, object.y), i, true) + -- TODO: don't hardcode camera handling + i = i + 1 + end + self.map:removeLayer(objectlayer.name) + end + end +end + function BaseWorld:getDimensions() if self.haveMap then return self.map.width * self.map.tilewidth, diff --git a/gamecore/modules/world/world2D.lua b/gamecore/modules/world/world2D.lua index 3526280..fd19969 100644 --- a/gamecore/modules/world/world2D.lua +++ b/gamecore/modules/world/world2D.lua @@ -33,12 +33,12 @@ local CameraSystem = require(cwd .. "camera") function World2D:new(scene, actorlist, mapfile) self.scene = scene - self.cameras = CameraSystem(self) + self.cameras = CameraSystem(self) + self.actors = Bump.newWorld(50) self:initPlayers() self:setActorList(actorlist) self:setMap(mapfile) - self.actors = Bump.newWorld(50) end -- ACTORS FUNCTIONS