optimization in whole tiles creation
This commit is contained in:
@@ -230,24 +230,6 @@ function SetTile(i,j,id)
|
||||
LevelTiles[i][j] = InstanceTile(id)
|
||||
end
|
||||
|
||||
function TileGetType(tile)
|
||||
if TileData[tile.id] ~= nil then
|
||||
return TileData[tile.id].type
|
||||
end
|
||||
end
|
||||
|
||||
function TileGetDepth(tile)
|
||||
if TileData[tile.id] ~= nil then
|
||||
return TileData[tile.id].depth
|
||||
end
|
||||
end
|
||||
|
||||
function TileGetLight(tile)
|
||||
if TileData[tile.id] ~= nil then
|
||||
return TileData[tile.id].light
|
||||
end
|
||||
end
|
||||
|
||||
function GridDisplay()
|
||||
for i = 1, #LevelTiles do
|
||||
for j = 1, #LevelTiles[i] do
|
||||
@@ -262,17 +244,75 @@ function GridDisplay()
|
||||
end
|
||||
end
|
||||
|
||||
function TileOptimizeObjects()
|
||||
print("new optimization")
|
||||
local unoptimized = 0
|
||||
local isTileOptimized = {}
|
||||
|
||||
for i = 1, #LevelTiles do
|
||||
isTileOptimized[i] = {}
|
||||
for j= 1, #LevelTiles[i] do
|
||||
isTileOptimized[i][j] = false
|
||||
end
|
||||
end
|
||||
|
||||
for i = 1, #LevelTiles do
|
||||
for j = 1, #LevelTiles[i] do
|
||||
if LevelTiles[i][j].id ~= 0 then
|
||||
local type = TileData[LevelTiles[i][j].id].type
|
||||
local light = TileData[LevelTiles[i][j].id].light
|
||||
|
||||
if type == "whole" and not isTileOptimized[i][j] then
|
||||
isTileOptimized[i][j] = true
|
||||
local n = 1
|
||||
local check = true
|
||||
while check do
|
||||
check = false
|
||||
if LevelTiles[i][j+n] ~= nil then
|
||||
if TileData[LevelTiles[i][j+n].id] ~= nil then
|
||||
local type_check = TileData[LevelTiles[i][j+n].id].type
|
||||
if type_check == "whole" and not isTileOptimized[i][j+n] then
|
||||
check = true
|
||||
isTileOptimized[i][j+n] = true
|
||||
n = n + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
print(n)
|
||||
unoptimized = unoptimized + n
|
||||
local base_x = tileProperties.scale * j * tileProperties.width + tileProperties.scale * (levelProperties.offset.x - tileProperties.height)
|
||||
local base_y = tileProperties.scale * i * tileProperties.height + tileProperties.scale * (levelProperties.offset.y - tileProperties.height)
|
||||
|
||||
local col = Collision:New(
|
||||
base_x,
|
||||
base_y,
|
||||
base_x + tileProperties.width * tileProperties.scale * n,
|
||||
base_y + tileProperties.height * tileProperties.scale
|
||||
)
|
||||
table.insert(LoadedObjects.Collisions,col)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
print("collisions optimized from " .. unoptimized .. " to " .. #LoadedObjects.Collisions)
|
||||
end
|
||||
|
||||
function TileCreateObjects()
|
||||
LoadedObjects.Collisions = {}
|
||||
LoadedObjects.Platforms = {}
|
||||
LoadedObjects.Ladders = {}
|
||||
|
||||
TileOptimizeObjects()
|
||||
|
||||
for i = 1, #LevelTiles do
|
||||
for j = 1, #LevelTiles[i] do
|
||||
if LevelTiles[i][j].id ~= 0 then
|
||||
|
||||
local type = TileGetType(LevelTiles[i][j])
|
||||
local light = TileGetLight(LevelTiles[i][j])
|
||||
local type = TileData[LevelTiles[i][j].id].type
|
||||
local light = TileData[LevelTiles[i][j].id].light
|
||||
local base_x = tileProperties.scale * j * tileProperties.width + tileProperties.scale * (levelProperties.offset.x - tileProperties.height)
|
||||
local base_y = tileProperties.scale * i * tileProperties.height + tileProperties.scale * (levelProperties.offset.y - tileProperties.height)
|
||||
|
||||
@@ -285,7 +325,8 @@ function TileCreateObjects()
|
||||
)
|
||||
end
|
||||
|
||||
if type == "whole" then
|
||||
-- wholes are handled in optimization now
|
||||
--[[if type == "whole" then
|
||||
local col = Collision:New(
|
||||
base_x,
|
||||
base_y,
|
||||
@@ -293,8 +334,7 @@ function TileCreateObjects()
|
||||
base_y + tileProperties.height * tileProperties.scale
|
||||
)
|
||||
table.insert(LoadedObjects.Collisions,col)
|
||||
|
||||
elseif type == "half_bottom" then
|
||||
else]]if type == "half_bottom" then
|
||||
|
||||
local col = Collision:New(
|
||||
base_x,
|
||||
|
||||
Reference in New Issue
Block a user