From 3d6d504c4bad50f64d4d54213b13439e938aa517 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sun, 26 Jun 2011 22:38:40 +0300 Subject: Bit improve speed in map getwalk. --- src/map.cpp | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) (limited to 'src/map.cpp') diff --git a/src/map.cpp b/src/map.cpp index 773e6ecdc..66c2315ee 100644 --- a/src/map.cpp +++ b/src/map.cpp @@ -676,12 +676,14 @@ void Map::drawCollision(Graphics *graphics, int scrollX, int scrollY, int width = 0; int x0 = x; - if (!getWalk(x, y, BLOCKMASK_WALL)) +// if (!getWalk(x, y, BLOCKMASK_WALL)) + if (mMetaTiles[x + y * mWidth].blockmask & BLOCKMASK_WALL) { width = 32; for (int x2 = x + 1; x < endX; x2 ++) { - if (getWalk(x2, y, BLOCKMASK_WALL)) +// if (getWalk(x2, y, BLOCKMASK_WALL)) + if (!(mMetaTiles[x2 + y * mWidth].blockmask & BLOCKMASK_WALL)) break; width += 32; x ++; @@ -698,12 +700,14 @@ void Map::drawCollision(Graphics *graphics, int scrollX, int scrollY, } } - if (x < endX && !getWalk(x, y, BLOCKMASK_AIR)) +// if (x < endX && !getWalk(x, y, BLOCKMASK_AIR)) + if (x < endX && mMetaTiles[x + y * mWidth].blockmask & BLOCKMASK_AIR) { width = 32; for (int x2 = x + 1; x < endX; x2 ++) { - if (getWalk(x2, y, BLOCKMASK_AIR)) + if (!(mMetaTiles[x2 + y * mWidth].blockmask & BLOCKMASK_AIR)) + //if (getWalk(x2, y, BLOCKMASK_AIR)) break; width += 32; x ++; @@ -720,12 +724,14 @@ void Map::drawCollision(Graphics *graphics, int scrollX, int scrollY, } } - if (x < endX && !getWalk(x, y, BLOCKMASK_WATER)) + if (x < endX && mMetaTiles[x + y * mWidth].blockmask & BLOCKMASK_WATER) +// if (x < endX && !getWalk(x, y, BLOCKMASK_WATER)) { width = 32; for (int x2 = x + 1; x < endX; x2 ++) { - if (getWalk(x2, y, BLOCKMASK_WATER)) + if (!(mMetaTiles[x2 + y * mWidth].blockmask & BLOCKMASK_WATER)) +// if (getWalk(x2, y, BLOCKMASK_WATER)) break; width += 32; x ++; @@ -856,7 +862,7 @@ void Map::blockTile(int x, int y, BlockType type) bool Map::getWalk(int x, int y, unsigned char walkmask) const { // You can't walk outside of the map - if (!contains(x, y)) + if (x < 0 || y < 0 || x >= mWidth || y >= mHeight) return false; // Check if the tile is walkable -- cgit v1.2.3-70-g09d2