mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-08 20:07:11 +00:00
NEVERHOOD: Implement Mouse435
This commit is contained in:
parent
9f6e6c6f7f
commit
626cea6d1c
@ -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));
|
||||
|
||||
}
|
||||
|
||||
|
@ -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 ¶m, 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);
|
||||
|
@ -43,6 +43,20 @@ protected:
|
||||
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 ¶m, Entity *sender);
|
||||
void updateCursor();
|
||||
};
|
||||
|
||||
} // End of namespace Neverhood
|
||||
|
||||
#endif /* NEVERHOOD_MOUSE_H */
|
||||
|
Loading…
x
Reference in New Issue
Block a user