feat(world): add a batchActor function activated by a bool in tiled

This way, you can add multiple actors with just one tiled object. It 
also bring better feature parity with Imperium Porcorum.

Fixes #10
This commit is contained in:
Kazhnuz 2019-06-15 11:50:53 +02:00
parent 4c2427bfd6
commit 65b0c74a06
4 changed files with 87 additions and 153 deletions

View file

@ -25,6 +25,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- **world/camera:** Add support for Head-Up-Display - **world/camera:** Add support for Head-Up-Display
- **world:** Support batching actor loading
### Changed ### Changed
- **world:** automatize world integration in a scene - **world:** automatize world integration in a scene

View file

@ -1,7 +1,7 @@
return { return {
version = "1.2", version = "1.2",
luaversion = "5.1", luaversion = "5.1",
tiledversion = "1.2.2", tiledversion = "1.2.4",
orientation = "orthogonal", orientation = "orthogonal",
renderorder = "right-down", renderorder = "right-down",
width = 150, width = 150,
@ -9,7 +9,7 @@ return {
tilewidth = 16, tilewidth = 16,
tileheight = 16, tileheight = 16,
nextlayerid = 6, nextlayerid = 6,
nextobjectid = 24, nextobjectid = 25,
backgroundcolor = { 0, 170, 255 }, backgroundcolor = { 0, 170, 255 },
properties = {}, properties = {},
tilesets = { tilesets = {
@ -271,83 +271,20 @@ return {
draworder = "topdown", draworder = "topdown",
properties = {}, properties = {},
objects = { objects = {
{
id = 9,
name = "",
type = "",
shape = "rectangle",
x = 512,
y = 2160,
width = 16,
height = 16,
rotation = 0,
visible = true,
properties = {}
},
{ {
id = 11, id = 11,
name = "", name = "",
type = "", type = "",
shape = "rectangle", shape = "rectangle",
x = 480, x = 464,
y = 2160, y = 2160,
width = 16, width = 128,
height = 16, height = 16,
rotation = 0, rotation = 0,
visible = true, visible = true,
properties = {} properties = {
}, ["batchActor"] = true
{ }
id = 12,
name = "",
type = "",
shape = "rectangle",
x = 544,
y = 2160,
width = 16,
height = 16,
rotation = 0,
visible = true,
properties = {}
},
{
id = 13,
name = "",
type = "",
shape = "rectangle",
x = 576,
y = 2160,
width = 16,
height = 16,
rotation = 0,
visible = true,
properties = {}
},
{
id = 14,
name = "",
type = "",
shape = "rectangle",
x = 368,
y = 2208,
width = 16,
height = 16,
rotation = 0,
visible = true,
properties = {}
},
{
id = 15,
name = "",
type = "",
shape = "rectangle",
x = 400,
y = 2208,
width = 16,
height = 16,
rotation = 0,
visible = true,
properties = {}
}, },
{ {
id = 16, id = 16,
@ -356,76 +293,15 @@ return {
shape = "rectangle", shape = "rectangle",
x = 336, x = 336,
y = 2208, y = 2208,
width = 16, width = 80,
height = 16, height = 16,
rotation = 0, rotation = 0,
visible = true, visible = true,
properties = {} properties = {
}, ["batchActor"] = true,
{ ["gheight"] = 32,
id = 17, ["gwidth"] = 32
name = "", }
type = "",
shape = "rectangle",
x = 112,
y = 2224,
width = 16,
height = 16,
rotation = 0,
visible = true,
properties = {}
},
{
id = 18,
name = "",
type = "",
shape = "rectangle",
x = 144,
y = 2224,
width = 16,
height = 16,
rotation = 0,
visible = true,
properties = {}
},
{
id = 19,
name = "",
type = "",
shape = "rectangle",
x = 176,
y = 2224,
width = 16,
height = 16,
rotation = 0,
visible = true,
properties = {}
},
{
id = 20,
name = "",
type = "",
shape = "rectangle",
x = 256,
y = 2272,
width = 16,
height = 16,
rotation = 0,
visible = true,
properties = {}
},
{
id = 21,
name = "",
type = "",
shape = "rectangle",
x = 256,
y = 2240,
width = 16,
height = 16,
rotation = 0,
visible = true,
properties = {}
}, },
{ {
id = 22, id = 22,
@ -435,10 +311,31 @@ return {
x = 256, x = 256,
y = 2208, y = 2208,
width = 16, width = 16,
height = 80,
rotation = 0,
visible = true,
properties = {
["batchActor"] = true,
["gheight"] = 32,
["gwidth"] = 32
}
},
{
id = 24,
name = "",
type = "",
shape = "rectangle",
x = 112,
y = 2224,
width = 80,
height = 16, height = 16,
rotation = 0, rotation = 0,
visible = true, visible = true,
properties = {} properties = {
["batchActor"] = true,
["gheight"] = 32,
["gwidth"] = 32
}
} }
} }
}, },

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<map version="1.2" tiledversion="1.2.2" orientation="orthogonal" renderorder="right-down" width="150" height="150" tilewidth="16" tileheight="16" infinite="0" backgroundcolor="#00aaff" nextlayerid="6" nextobjectid="24"> <map version="1.2" tiledversion="1.2.4" orientation="orthogonal" renderorder="right-down" width="150" height="150" tilewidth="16" tileheight="16" infinite="0" backgroundcolor="#00aaff" nextlayerid="6" nextobjectid="25">
<tileset firstgid="1" source="monkeylad_further.tsx"/> <tileset firstgid="1" source="monkeylad_further.tsx"/>
<layer id="1" name="Calque de Tile 1" width="150" height="150"> <layer id="1" name="Calque de Tile 1" width="150" height="150">
<data encoding="csv"> <data encoding="csv">
@ -161,19 +161,32 @@
<object id="8" x="464" y="2192" width="128" height="16"/> <object id="8" x="464" y="2192" width="128" height="16"/>
</objectgroup> </objectgroup>
<objectgroup id="4" name="coin"> <objectgroup id="4" name="coin">
<object id="9" x="512" y="2160" width="16" height="16"/> <object id="11" x="464" y="2160" width="128" height="16">
<object id="11" x="480" y="2160" width="16" height="16"/> <properties>
<object id="12" x="544" y="2160" width="16" height="16"/> <property name="batchActor" type="bool" value="true"/>
<object id="13" x="576" y="2160" width="16" height="16"/> </properties>
<object id="14" x="368" y="2208" width="16" height="16"/> </object>
<object id="15" x="400" y="2208" width="16" height="16"/> <object id="16" x="336" y="2208" width="80" height="16">
<object id="16" x="336" y="2208" width="16" height="16"/> <properties>
<object id="17" x="112" y="2224" width="16" height="16"/> <property name="batchActor" type="bool" value="true"/>
<object id="18" x="144" y="2224" width="16" height="16"/> <property name="gheight" type="int" value="32"/>
<object id="19" x="176" y="2224" width="16" height="16"/> <property name="gwidth" type="int" value="32"/>
<object id="20" x="256" y="2272" width="16" height="16"/> </properties>
<object id="21" x="256" y="2240" width="16" height="16"/> </object>
<object id="22" x="256" y="2208" width="16" height="16"/> <object id="22" x="256" y="2208" width="16" height="80">
<properties>
<property name="batchActor" type="bool" value="true"/>
<property name="gheight" type="int" value="32"/>
<property name="gwidth" type="int" value="32"/>
</properties>
</object>
<object id="24" x="112" y="2224" width="80" height="16">
<properties>
<property name="batchActor" type="bool" value="true"/>
<property name="gheight" type="int" value="32"/>
<property name="gwidth" type="int" value="32"/>
</properties>
</object>
</objectgroup> </objectgroup>
<objectgroup id="5" name="player"> <objectgroup id="5" name="player">
<object id="23" x="80" y="2272" width="16" height="32"/> <object id="23" x="80" y="2272" width="16" height="32"/>

View file

@ -231,13 +231,35 @@ function BaseWorld:loadMapActors()
if self:isActorIndexed(objectlayer.name) then if self:isActorIndexed(objectlayer.name) then
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
self:newActor(objectlayer.name, object.x, object.y) if (object.properties.batchActor) then
self:batchActor(objectlayer.name, object)
else
self:newActor(objectlayer.name, object.x, object.y)
end
end end
self.map:removeLayer(objectlayer.name) self.map:removeLayer(objectlayer.name)
end end
end end
end end
function BaseWorld:batchActor(name, object)
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: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