feat(world): make object creation more customizable by worlds
This commit is contained in:
parent
369e0ceec0
commit
e6c2af5429
3 changed files with 79 additions and 6 deletions
|
@ -31,7 +31,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
|
|
||||||
- **actor:** Rename all function related to YGravity to just \*Gravity
|
- **actor:** Rename all function related to YGravity to just \*Gravity
|
||||||
|
|
||||||
- **world** Separate "queryRect()" into two functions
|
- **world:** Separate "queryRect()" into two functions
|
||||||
|
|
||||||
|
- **world:** Make object creation more customizable by worlds
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
|
|
|
@ -268,7 +268,7 @@ function BaseWorld:loadMapCollisions()
|
||||||
if self:isCollisionIndexed(objectlayer.name) then
|
if self:isCollisionIndexed(objectlayer.name) then
|
||||||
print("DEBUG: loading actors in " .. objectlayer.name .. " collision layer")
|
print("DEBUG: loading actors in " .. objectlayer.name .. " collision layer")
|
||||||
for k, object in pairs(objectlayer.objects) do
|
for k, object in pairs(objectlayer.objects) do
|
||||||
self:newCollision(objectlayer.name, object.x, object.y, object.width, object.height)
|
self:newCollisionFromMap(objectlayer, object)
|
||||||
end
|
end
|
||||||
self.map:removeLayer(objectlayer.name)
|
self.map:removeLayer(objectlayer.name)
|
||||||
end
|
end
|
||||||
|
@ -281,9 +281,9 @@ function BaseWorld:loadMapActors()
|
||||||
print("DEBUG: loading actors in " .. objectlayer.name .. " actor layer")
|
print("DEBUG: loading actors in " .. objectlayer.name .. " actor layer")
|
||||||
for k, object in pairs(objectlayer.objects) do
|
for k, object in pairs(objectlayer.objects) do
|
||||||
if (object.properties.batchActor) then
|
if (object.properties.batchActor) then
|
||||||
self:batchActor(objectlayer.name, object)
|
self:batchActor(objectlayer, object)
|
||||||
else
|
else
|
||||||
self:newActor(objectlayer.name, object.x, object.y)
|
self:newActorFromMap(objectlayer, object)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
self.map:removeLayer(objectlayer.name)
|
self.map:removeLayer(objectlayer.name)
|
||||||
|
@ -291,7 +291,8 @@ function BaseWorld:loadMapActors()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function BaseWorld:batchActor(name, object)
|
function BaseWorld:batchActor(objectlayer, object)
|
||||||
|
local name = objectlayer.name
|
||||||
local gwidth = object.properties.gwidth or self.map.tilewidth
|
local gwidth = object.properties.gwidth or self.map.tilewidth
|
||||||
local gheight = object.properties.gheight or self.map.tileheight
|
local gheight = object.properties.gheight or self.map.tileheight
|
||||||
local x = object.x
|
local x = object.x
|
||||||
|
@ -309,6 +310,18 @@ function BaseWorld:batchActor(name, object)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function BaseWorld:newActorFromMap(objectlayer, object)
|
||||||
|
self:newActor(objectlayer.name, object.x, object.y)
|
||||||
|
end
|
||||||
|
|
||||||
|
function BaseWorld:newCollisionFromMap(objectlayer, object)
|
||||||
|
self:newCollision(objectlayer.name, object.x, object.y, object.width, object.height)
|
||||||
|
end
|
||||||
|
|
||||||
|
function BaseWorld:addPlayerFromMap(object, i)
|
||||||
|
self:addPlayer(self.obj.Player(self, object.x, object.y), i, true)
|
||||||
|
end
|
||||||
|
|
||||||
function BaseWorld:loadMapPlayers()
|
function BaseWorld:loadMapPlayers()
|
||||||
for k, objectlayer in pairs(self.map.layers) do
|
for k, objectlayer in pairs(self.map.layers) do
|
||||||
if (objectlayer.name == "player") then
|
if (objectlayer.name == "player") then
|
||||||
|
@ -317,7 +330,7 @@ function BaseWorld:loadMapPlayers()
|
||||||
for k, object in pairs(objectlayer.objects) do
|
for k, object in pairs(objectlayer.objects) do
|
||||||
if (i <= self.playerNumber) then
|
if (i <= self.playerNumber) then
|
||||||
-- TODO: don't hardcode camera handling
|
-- TODO: don't hardcode camera handling
|
||||||
self:addPlayer(self.obj.Player(self, object.x, object.y), i, true)
|
self:addPlayerFromMap(object, i)
|
||||||
end
|
end
|
||||||
i = i + 1
|
i = i + 1
|
||||||
end
|
end
|
||||||
|
|
|
@ -43,6 +43,14 @@ function World2D:initActors()
|
||||||
self.bodies = Bump.newWorld(50)
|
self.bodies = Bump.newWorld(50)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function World2D:newActor(name, x, y)
|
||||||
|
self.obj.index[name](self, x, y)
|
||||||
|
end
|
||||||
|
|
||||||
|
function World2D:newCollision(name, x, y, w, h)
|
||||||
|
self.obj.collisions[name](self, x, y, w, h)
|
||||||
|
end
|
||||||
|
|
||||||
function World2D:registerActor(actor)
|
function World2D:registerActor(actor)
|
||||||
World2D.super.registerActor(self, actor)
|
World2D.super.registerActor(self, actor)
|
||||||
end
|
end
|
||||||
|
@ -64,6 +72,56 @@ function World2D:getActorsInRect(x, y, w, h)
|
||||||
return returnquery
|
return returnquery
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- PLAYER FUNCTIONS
|
||||||
|
-- Load player stuff
|
||||||
|
|
||||||
|
function World2D:addPlayer(actor, sourceid, haveCam)
|
||||||
|
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
|
||||||
|
end
|
||||||
|
|
||||||
|
-- MAP LOADING FUNCTIONS
|
||||||
|
-- Handle loading of actors from map
|
||||||
|
|
||||||
|
function BaseWorld:batchActor(objectlayer, object)
|
||||||
|
local name = objectlayer.name
|
||||||
|
local gwidth = object.properties.gwidth or self.map.tilewidth
|
||||||
|
local gheight = object.properties.gheight or self.map.tileheight
|
||||||
|
local x = object.x
|
||||||
|
local y = object.y
|
||||||
|
local w = object.width
|
||||||
|
local h = object.height
|
||||||
|
|
||||||
|
local cellHor = math.ceil(w / gwidth)
|
||||||
|
local cellVert = math.ceil(h / gheight)
|
||||||
|
|
||||||
|
for i=1, cellHor do
|
||||||
|
for j=1, cellVert do
|
||||||
|
self:newActor(name, x + (i-1)*gwidth, y + (j-1)*gheight)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function BaseWorld:newActorFromMap(objectlayer, object)
|
||||||
|
self:newActor(objectlayer.name, object.x, object.y)
|
||||||
|
end
|
||||||
|
|
||||||
|
function BaseWorld:newCollisionFromMap(objectlayer, object)
|
||||||
|
self:newCollision(objectlayer.name, object.x, object.y, object.width, object.height)
|
||||||
|
end
|
||||||
|
|
||||||
|
function BaseWorld:addPlayerFromMap(object, i)
|
||||||
|
self:addPlayer(self.obj.Player(self, object.x, object.y), i, true)
|
||||||
|
end
|
||||||
|
|
||||||
-- BODIES MANAGEMENT FUNCTIONS
|
-- BODIES MANAGEMENT FUNCTIONS
|
||||||
-- Basic function to handle bodies. Wrappers around Bump2D functions
|
-- Basic function to handle bodies. Wrappers around Bump2D functions
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue