* Added Game::loop()

* Added WalkingMap::isWalkable()
* Renamed remaining _priority identifiers to _z which were left by mistake in the previous commit

svn-id: r42546
This commit is contained in:
Denis Kasak 2009-07-17 00:20:57 +00:00
parent c420a4fba1
commit e419110569
4 changed files with 31 additions and 2 deletions

View File

@ -155,6 +155,7 @@ int DraciEngine::go() {
_mouse->handleEvent(event);
}
}
_game->loop();
_anims->drawScene(_screen->getSurface());
_screen->copyToScreen();
_system->delayMillis(20);

View File

@ -146,6 +146,17 @@ void Game::init() {
_vm->_mouse->setCursorType(kNormalCursor);
}
void Game::loop() {
if (_currentRoom._mouseOn) {
int x = _vm->_mouse->getPosX();
int y = _vm->_mouse->getPosY();
if (_vm->_mouse->lButtonPressed() && _currentRoom._walkingMap.isWalkable(x, y)) {
debugC(4, kDraciLogicDebugLevel, "Walk to x: %d y: %d", x, y);
}
}
}
void Game::loadRoom(int roomNum) {
BAFile *f;
@ -427,4 +438,17 @@ GameObject::~GameObject() {
delete[] _program._bytecode;
}
bool WalkingMap::isWalkable(int x, int y) {
// Convert to map pixels
x = x / _deltaX;
y = y / _deltaY;
int pixelIndex = _mapWidth * y + x;
int byteIndex = pixelIndex / 8;
int mapByte = _data[byteIndex];
return mapByte & (1 << pixelIndex % 8);
}
}

View File

@ -60,6 +60,8 @@ public:
_realWidth = mapReader.readUint16LE();
_realHeight = mapReader.readUint16LE();
_deltaX = mapReader.readUint16LE();
_deltaY = mapReader.readUint16LE();
_mapWidth = mapReader.readUint16LE();
_mapHeight = mapReader.readUint16LE();
_byteWidth = mapReader.readUint16LE();
@ -68,6 +70,7 @@ public:
_data = data + mapReader.pos();
}
bool isWalkable(int x, int y);
private:
int _realWidth, _realHeight;
@ -137,6 +140,7 @@ public:
~Game();
void init();
void loop();
void changeRoom(uint roomNum);
@ -186,7 +190,7 @@ private:
uint16 *_dialogOffsets;
byte *_iconStatus;
GameObject *_objects;
Room _currentRoom;
Room _currentRoom;
};
} // End of namespace Draci

View File

@ -270,7 +270,7 @@ void Script::load(Common::Queue<int> &params) {
GameObject *obj = _vm->_game->getObject(objID);
_vm->_game->loadAnimation(animID, obj->_priority);
_vm->_game->loadAnimation(animID, obj->_z);
obj->_anims.push_back(animID);
}