Skip to content

Commit

Permalink
NEVERHOOD: Implement Mouse435
Browse files Browse the repository at this point in the history
  • Loading branch information
johndoe123 authored and wjp committed May 8, 2013
1 parent 9f6e6c6 commit 626cea6
Show file tree
Hide file tree
Showing 3 changed files with 112 additions and 2 deletions.
2 changes: 1 addition & 1 deletion engines/neverhood/module1000.cpp
Expand Up @@ -629,7 +629,7 @@ Class152::Class152(NeverhoodEngine *vm, Module *parentModule, uint32 backgroundF
_background = addBackground(new DirtyBackground(_vm, backgroundFileHash, 0, 0));
_palette = new Palette(_vm, backgroundFileHash);
_palette->usePalette();
// TODO _mouseCursor = addSprite(new Class435(_vm, cursorFileHash, 20, 620));
_mouseCursor = addSprite(new Mouse435(_vm, cursorFileHash, 20, 620));

}

Expand Down
98 changes: 97 additions & 1 deletion engines/neverhood/mouse.cpp
Expand Up @@ -112,7 +112,103 @@ void Mouse433::updateCursor() {
_surface->getDrawRect().x = filterX(_x - _drawRect.width - _drawRect.x + 1);
} else {
_surface->getDrawRect().x = filterX(_x + _drawRect.x);
}
}

if (_doDeltaY) {
_surface->getDrawRect().y = filterY(_y - _drawRect.height - _drawRect.y + 1);
} else {
_surface->getDrawRect().y = filterY(_y + _drawRect.y);
}

if (_needRefresh) {
_needRefresh = false;
_drawRect = _mouseCursorResource.getRect();
_surface->drawMouseCursorResource(_mouseCursorResource, _frameNum / 2);
}

}

Mouse435::Mouse435(NeverhoodEngine *vm, uint32 fileHash, int16 x1, int16 x2)
: StaticSprite(vm, 2000), _mouseCursorResource(vm), _frameNum(0), _x1(x1), _x2(x2) {

debug("Mouse435::Mouse435(%08X)", fileHash);

_mouseCursorResource.load(fileHash);
_x = _vm->getMouseX();
_y = _vm->getMouseY();
if (_x <= _x1) {
_mouseCursorResource.setCursorNum(6);
} else if (_x >= _x2) {
_mouseCursorResource.setCursorNum(5);
} else {
_mouseCursorResource.setCursorNum(4);
}
createSurface(2000, 32, 32);
SetUpdateHandler(&Mouse435::update);
SetMessageHandler(&Mouse435::handleMessage);
_drawRect.x = 0;
_drawRect.y = 0;
_drawRect.width = 32;
_drawRect.height = 32;
_deltaRect.x = 0;
_deltaRect.y = 0;
_deltaRect.width = 32;
_deltaRect.height = 32;
processDelta();
_needRefresh = true;
updateCursor();
}

void Mouse435::load(uint32 fileHash) {
_mouseCursorResource.load(fileHash);
_needRefresh = true;
}

void Mouse435::update() {
debug("Mouse435::update()");
updateCursor();
_frameNum++;
if (_frameNum >= 6)
_frameNum = 0;
_needRefresh = _frameNum % 2 == 0;
}

uint32 Mouse435::handleMessage(int messageNum, const MessageParam &param, Entity *sender) {
debug("Mouse435::handleMessage(%04X)", messageNum);
uint32 messageResult = 0;
if (messageNum != 5) {
messageResult = Sprite::handleMessage(messageNum, param, sender);
switch (messageNum) {
case 0x4002:
_x = param.asPoint().x;
_y = param.asPoint().y;
if (_x <= _x1) {
_mouseCursorResource.setCursorNum(6);
} else if (_x >= _x2) {
_mouseCursorResource.setCursorNum(5);
} else {
_mouseCursorResource.setCursorNum(4);
}
processDelta();
break;
}
} else {
// TODO: Debug stuff
}
return messageResult;
}

void Mouse435::updateCursor() {
debug("Mouse435::updateCursor()");

if (!_surface)
return;

if (_doDeltaX) {
_surface->getDrawRect().x = filterX(_x - _drawRect.width - _drawRect.x + 1);
} else {
_surface->getDrawRect().x = filterX(_x + _drawRect.x);
}

if (_doDeltaY) {
_surface->getDrawRect().y = filterY(_y - _drawRect.height - _drawRect.y + 1);
Expand Down
14 changes: 14 additions & 0 deletions engines/neverhood/mouse.h
Expand Up @@ -43,6 +43,20 @@ class Mouse433 : public StaticSprite {
void updateCursor();
};

class Mouse435 : public StaticSprite {
public:
Mouse435(NeverhoodEngine *vm, uint32 fileHash, int16 x1, int16 x2);
void load(uint32 fileHash);
protected:
MouseCursorResource _mouseCursorResource;
int _frameNum;
int16 _x1;
int16 _x2;
void update();
uint32 handleMessage(int messageNum, const MessageParam &param, Entity *sender);
void updateCursor();
};

} // End of namespace Neverhood

#endif /* NEVERHOOD_MOUSE_H */

0 comments on commit 626cea6

Please sign in to comment.