diff options
| author | Sven Hesse | 2010-10-30 17:26:49 +0000 | 
|---|---|---|
| committer | Sven Hesse | 2010-10-30 17:26:49 +0000 | 
| commit | bfa88a05a153ec7c91d0b2e79c9f5705c9ba55ed (patch) | |
| tree | 25cfe816b1e1bf2cd5f8c7f989de829f6c36e8a5 | |
| parent | 4c23f3e1631ed904fa67b77b964e73aae4873850 (diff) | |
| download | scummvm-rg350-bfa88a05a153ec7c91d0b2e79c9f5705c9ba55ed.tar.gz scummvm-rg350-bfa88a05a153ec7c91d0b2e79c9f5705c9ba55ed.tar.bz2 scummvm-rg350-bfa88a05a153ec7c91d0b2e79c9f5705c9ba55ed.zip | |
GOB: Make Map::_wayPoints protected
Only allow const access through Map::getWayPoint()
svn-id: r53949
| -rw-r--r-- | engines/gob/goblin_v1.cpp | 30 | ||||
| -rw-r--r-- | engines/gob/goblin_v2.cpp | 30 | ||||
| -rw-r--r-- | engines/gob/goblin_v4.cpp | 24 | ||||
| -rw-r--r-- | engines/gob/map.cpp | 7 | ||||
| -rw-r--r-- | engines/gob/map.h | 22 | ||||
| -rw-r--r-- | engines/gob/map_v1.cpp | 4 | ||||
| -rw-r--r-- | engines/gob/map_v2.cpp | 2 | 
7 files changed, 80 insertions, 39 deletions
| diff --git a/engines/gob/goblin_v1.cpp b/engines/gob/goblin_v1.cpp index a11134b05c..3dc4c6611d 100644 --- a/engines/gob/goblin_v1.cpp +++ b/engines/gob/goblin_v1.cpp @@ -154,8 +154,10 @@ void Goblin_v1::initiateMove(Mult::Mult_Object *obj) {  			_vm->_map->_nearestWayPoint, _vm->_map->_nearestDest) == 0) {  			_pathExistence = 0;  		} else { -			_vm->_map->_destX = _vm->_map->_wayPoints[_vm->_map->_nearestWayPoint].x; -			_vm->_map->_destY = _vm->_map->_wayPoints[_vm->_map->_nearestWayPoint].y; +			const WayPoint &wayPoint = _vm->_map->getWayPoint(_vm->_map->_nearestWayPoint); + +			_vm->_map->_destX = wayPoint.x; +			_vm->_map->_destY = wayPoint.y;  		}  	}  } @@ -199,20 +201,20 @@ void Goblin_v1::movePathFind(Mult::Mult_Object *obj,  				if (_vm->_map->_nearestWayPoint > _vm->_map->_nearestDest) {  					_vm->_map->optimizePoints(0, 0, 0); -					_vm->_map->_destX = -					    _vm->_map->_wayPoints[_vm->_map->_nearestWayPoint].x; -					_vm->_map->_destY = -					    _vm->_map->_wayPoints[_vm->_map->_nearestWayPoint].y; +					const WayPoint &wayPoint = _vm->_map->getWayPoint(_vm->_map->_nearestWayPoint); + +					_vm->_map->_destX = wayPoint.x; +					_vm->_map->_destY = wayPoint.y;  					if (_vm->_map->_nearestWayPoint > _vm->_map->_nearestDest)  						_vm->_map->_nearestWayPoint--;  				} else if (_vm->_map->_nearestWayPoint < _vm->_map->_nearestDest) {  					_vm->_map->optimizePoints(0, 0, 0); -					_vm->_map->_destX = -					    _vm->_map->_wayPoints[_vm->_map->_nearestWayPoint].x; -					_vm->_map->_destY = -					    _vm->_map->_wayPoints[_vm->_map->_nearestWayPoint].y; +					const WayPoint &wayPoint = _vm->_map->getWayPoint(_vm->_map->_nearestWayPoint); + +					_vm->_map->_destX = wayPoint.x; +					_vm->_map->_destY = wayPoint.y;  					if (_vm->_map->_nearestWayPoint < _vm->_map->_nearestDest)  						_vm->_map->_nearestWayPoint++; @@ -220,8 +222,12 @@ void Goblin_v1::movePathFind(Mult::Mult_Object *obj,  					if ((_vm->_map->checkDirectPath(0, _vm->_map->_curGoblinX,  						_vm->_map->_curGoblinY, _gobDestX, _gobDestY) == 3) &&  							(_vm->_map->getPass(_pressedMapX, _pressedMapY) != 0)) { -						_vm->_map->_destX = _vm->_map->_wayPoints[_vm->_map->_nearestWayPoint].x; -						_vm->_map->_destY = _vm->_map->_wayPoints[_vm->_map->_nearestWayPoint].y; + +						const WayPoint &wayPoint = _vm->_map->getWayPoint(_vm->_map->_nearestWayPoint); + +						_vm->_map->_destX = wayPoint.x; +						_vm->_map->_destY = wayPoint.y; +  					} else {  						_pathExistence = 1;  						_vm->_map->_destX = _pressedMapX; diff --git a/engines/gob/goblin_v2.cpp b/engines/gob/goblin_v2.cpp index c2fc4ad166..81888f7c02 100644 --- a/engines/gob/goblin_v2.cpp +++ b/engines/gob/goblin_v2.cpp @@ -121,8 +121,10 @@ void Goblin_v2::initiateMove(Mult::Mult_Object *obj) {  	obj->pAnimData->pathExistence = _vm->_map->checkDirectPath(obj,  			obj->goblinX, obj->goblinY, obj->gobDestX, obj->gobDestY);  	if (obj->pAnimData->pathExistence == 3) { -		obj->destX = _vm->_map->_wayPoints[obj->nearestWayPoint].x; -		obj->destY = _vm->_map->_wayPoints[obj->nearestWayPoint].y; +		const WayPoint &wayPoint = _vm->_map->getWayPoint(obj->nearestWayPoint); + +		obj->destX = wayPoint.x; +		obj->destY = wayPoint.y;  	}  } @@ -162,8 +164,12 @@ void Goblin_v2::movePathFind(Mult::Mult_Object *obj, Gob_Object *gobDesc, int16  					if (obj->nearestWayPoint > obj->nearestDest) {  						_vm->_map->optimizePoints(obj, gobX, gobY); -						destX = _vm->_map->_wayPoints[obj->nearestWayPoint].x; -						destY = _vm->_map->_wayPoints[obj->nearestWayPoint].y; + +						const WayPoint &wayPoint = _vm->_map->getWayPoint(obj->nearestWayPoint); + +						destX = wayPoint.x; +						destY = wayPoint.y; +  						if (_vm->_map->checkDirectPath(obj, gobX, gobY, destX, destY) == 3) {  							WRITE_VAR(56, 1);  							animData->pathExistence = 0; @@ -172,8 +178,12 @@ void Goblin_v2::movePathFind(Mult::Mult_Object *obj, Gob_Object *gobDesc, int16  							obj->nearestWayPoint--;  					} else if (obj->nearestWayPoint < obj->nearestDest) {  						_vm->_map->optimizePoints(obj, gobX, gobY); -						destX = _vm->_map->_wayPoints[obj->nearestWayPoint].x; -						destY = _vm->_map->_wayPoints[obj->nearestWayPoint].y; + +						const WayPoint &wayPoint = _vm->_map->getWayPoint(obj->nearestWayPoint); + +						destX = wayPoint.x; +						destY = wayPoint.y; +  						if (_vm->_map->checkDirectPath(obj, gobX, gobY, destX, destY) == 3) {  							WRITE_VAR(56, 1);  							animData->pathExistence = 0; @@ -183,8 +193,12 @@ void Goblin_v2::movePathFind(Mult::Mult_Object *obj, Gob_Object *gobDesc, int16  					} else {  						if ((_vm->_map->checkDirectPath(obj, gobX, gobY, gobDestX, gobDestY) == 3) &&  								(_vm->_map->getPass(gobDestX, gobDestY) != 0)) { -							destX = _vm->_map->_wayPoints[obj->nearestWayPoint].x; -							destY = _vm->_map->_wayPoints[obj->nearestWayPoint].y; + +							const WayPoint &wayPoint = _vm->_map->getWayPoint(obj->nearestWayPoint); + +							destX = wayPoint.x; +							destY = wayPoint.y; +  							WRITE_VAR(56, 1);  						} else {  							animData->pathExistence = 1; diff --git a/engines/gob/goblin_v4.cpp b/engines/gob/goblin_v4.cpp index 7758170332..f4b0ecdd20 100644 --- a/engines/gob/goblin_v4.cpp +++ b/engines/gob/goblin_v4.cpp @@ -77,8 +77,12 @@ void Goblin_v4::movePathFind(Mult::Mult_Object *obj, Gob_Object *gobDesc, int16  				if ((gobX == destX) && (gobY == destY)) {  					if (obj->nearestWayPoint > obj->nearestDest) {  						_vm->_map->optimizePoints(obj, gobX, gobY); -						destX = _vm->_map->_wayPoints[obj->nearestWayPoint].x; -						destY = _vm->_map->_wayPoints[obj->nearestWayPoint].y; + +						const WayPoint &wayPoint = _vm->_map->getWayPoint(obj->nearestWayPoint); + +						destX = wayPoint.x; +						destY = wayPoint.y; +  						if (_vm->_map->checkDirectPath(obj, gobX, gobY, destX, destY) == 3) {  							WRITE_VAR(56, 1);  							animData->pathExistence = 0; @@ -87,8 +91,12 @@ void Goblin_v4::movePathFind(Mult::Mult_Object *obj, Gob_Object *gobDesc, int16  							obj->nearestWayPoint--;  					} else if (obj->nearestWayPoint < obj->nearestDest) {  						_vm->_map->optimizePoints(obj, gobX, gobY); -						destX = _vm->_map->_wayPoints[obj->nearestWayPoint].x; -						destY = _vm->_map->_wayPoints[obj->nearestWayPoint].y; + +						const WayPoint &wayPoint = _vm->_map->getWayPoint(obj->nearestWayPoint); + +						destX = wayPoint.x; +						destY = wayPoint.y; +  						if (_vm->_map->checkDirectPath(obj, gobX, gobY, destX, destY) == 3) {  							WRITE_VAR(56, 1);  							animData->pathExistence = 0; @@ -98,8 +106,12 @@ void Goblin_v4::movePathFind(Mult::Mult_Object *obj, Gob_Object *gobDesc, int16  					} else {  						if ((_vm->_map->checkDirectPath(obj, gobX, gobY, gobDestX, gobDestY) == 3) &&  								(_vm->_map->getPass(gobDestX, gobDestY) != 0)) { -							destX = _vm->_map->_wayPoints[obj->nearestWayPoint].x; -							destY = _vm->_map->_wayPoints[obj->nearestWayPoint].y; + +							const WayPoint &wayPoint = _vm->_map->getWayPoint(obj->nearestWayPoint); + +							destX = wayPoint.x; +							destY = wayPoint.y; +  							WRITE_VAR(56, 1);  						} else {  							animData->pathExistence = 1; diff --git a/engines/gob/map.cpp b/engines/gob/map.cpp index e20a51b0c6..1310798d2d 100644 --- a/engines/gob/map.cpp +++ b/engines/gob/map.cpp @@ -106,6 +106,13 @@ void Map::setPass(int x, int y, int8 pass, int width) {  	_passMap[y * width + x] = pass;  } +const WayPoint &Map::getWayPoint(int n) const { +	assert(_wayPoints); +	assert(n < _wayPointCount); + +	return _wayPoints[n]; +} +  void Map::placeItem(int16 x, int16 y, int16 id) {  	if ((getItem(x, y) & 0xFF00) != 0)  		setItem(x, y, (getItem(x, y) & 0xFF00) | id); diff --git a/engines/gob/map.h b/engines/gob/map.h index f1cd91d6d0..a04fe43283 100644 --- a/engines/gob/map.h +++ b/engines/gob/map.h @@ -57,18 +57,18 @@ enum Direction {  	kDirSE   = 0x5100  }; +struct WayPoint { +	int16 x; +	int16 y; +	int16 notWalkable; +}; + +  class Map {  public:  #include "common/pack-start.h"	// START STRUCT PACKING -	struct Point { -		int16 x; -		int16 y; -		int16 notWalkable; -	} PACKED_STRUCT; -  #define szMap_ItemPos 3 -  	struct ItemPos {  		int8 x;  		int8 y; @@ -91,9 +91,6 @@ public:  	bool _mapUnknownBool; -	int16 _wayPointCount; -	Point *_wayPoints; -  	int16 _nearestWayPoint;  	int16 _nearestDest; @@ -113,6 +110,8 @@ public:  	int8 getPass(int x, int y, int width = -1) const;  	void setPass(int x, int y, int8 pass, int width = -1); +	const WayPoint &getWayPoint(int n) const; +  	void findNearestWalkable(int16 &gobDestX, int16 &gobDestY,  		int16 mouseX, int16 mouseY); @@ -143,6 +142,9 @@ protected:  	int16 _passWidth;  	int8 *_passMap; // [y * _mapWidth + x], getPass(x, y); +	int16 _wayPointCount; +	WayPoint *_wayPoints; +  	int16 findNearestWayPoint(int16 x, int16 y);  private: diff --git a/engines/gob/map_v1.cpp b/engines/gob/map_v1.cpp index 92e1d3a03b..1f007dbf34 100644 --- a/engines/gob/map_v1.cpp +++ b/engines/gob/map_v1.cpp @@ -58,8 +58,8 @@ void Map_v1::init() {  	}  	_wayPointCount = 40; -	_wayPoints = new Point[40]; -	memset(_wayPoints, 0, sizeof(Point)); +	_wayPoints = new WayPoint[40]; +	memset(_wayPoints, 0, sizeof(WayPoint));  }  void Map_v1::loadMapObjects(const char *avjFile) { diff --git a/engines/gob/map_v2.cpp b/engines/gob/map_v2.cpp index 7460128ca9..968663a4b4 100644 --- a/engines/gob/map_v2.cpp +++ b/engines/gob/map_v2.cpp @@ -138,7 +138,7 @@ void Map_v2::loadMapObjects(const char *avjFile) {  		wayPointsCount = _wayPointCount == 0 ? 1 : _wayPointCount;  	delete[] _wayPoints; -	_wayPoints = new Point[wayPointsCount]; +	_wayPoints = new WayPoint[wayPointsCount];  	for (int i = 0; i < _wayPointCount; i++) {  		_wayPoints[i].x = mapData.readSByte();  		_wayPoints[i].y = mapData.readSByte(); | 
