From d398b818f82c3d8d6e467c6e1ffbf13edc3e8d9c Mon Sep 17 00:00:00 2001 From: Joost Peters Date: Mon, 9 Jun 2003 18:15:02 +0000 Subject: added fnLookAt() svn-id: r8418 --- sky/logic.cpp | 23 ++++++++++++++++++++++- sky/mouse.cpp | 6 ++++++ sky/mouse.h | 2 ++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/sky/logic.cpp b/sky/logic.cpp index 9f8b247e69..1f32ef5dc9 100644 --- a/sky/logic.cpp +++ b/sky/logic.cpp @@ -2206,7 +2206,28 @@ bool SkyLogic::fnPrintCredit(uint32 a, uint32 b, uint32 c) { } bool SkyLogic::fnLookAt(uint32 a, uint32 b, uint32 c) { - error("Stub: fnLookAt"); + + struct lowTextManager_t textInfo = _skyText->lowTextManager(a, 240, 0, 248, true); + Compact *textCpt = SkyState::fetchCompact(textInfo.compactNum); + textCpt->xcood = 168; + textCpt->ycood = (uint16)c; + + _skyScreen->recreate(); + _skyScreen->spriteEngine(); + _skyScreen->flip(); + + fnNoHuman(0, 0, 0); + _skyMouse->lockMouse(); + + //waitRelative(0); + _skyMouse->waitMouseNotPressed(); + //waitRelative(40); + + _skyMouse->unlockMouse(); + fnAddHuman(0, 0, 0); + textCpt->status = 0; + + return true; } bool SkyLogic::fnLincTextModule(uint32 a, uint32 b, uint32 c) { diff --git a/sky/mouse.cpp b/sky/mouse.cpp index dc82773561..88dc5260e8 100644 --- a/sky/mouse.cpp +++ b/sky/mouse.cpp @@ -85,6 +85,7 @@ SkyMouse::SkyMouse(OSystem *system, SkyDisk *skyDisk) { _mouseHeight = 6; _maskWidth = 6; _maskHeight = 6; + _mouseB = 0; _miceData = _skyDisk->loadFile(MICE_FILE, NULL); fixMouseTransparency(_miceData, _skyDisk->_lastLoadedFileSize); @@ -170,6 +171,11 @@ void SkyMouse::drawNewMouse() { //drawMouse(); } +void SkyMouse::waitMouseNotPressed(void) { + while (_mouseB != 0) ; + _bMouseB = 0; +} + //original sky uses different colors for transparency than our backends do, //so we simply swap our "transparent"-white with another one. void SkyMouse::fixMouseTransparency(byte *mouseData, uint32 size) { diff --git a/sky/mouse.h b/sky/mouse.h index 22fa5bf81a..534df1c94e 100644 --- a/sky/mouse.h +++ b/sky/mouse.h @@ -47,6 +47,7 @@ public: void spriteMouse(uint16 frameNum, uint8 mouseX, uint8 mouseY); void useLogicInstance(SkyLogic *skyLogic) { _skyLogic = skyLogic; }; void buttonPressed(uint8 button) { _bMouseB = button; }; + void waitMouseNotPressed(void); uint16 giveMouseX(void) { return _aMouseX; }; uint16 giveMouseY(void) { return _aMouseY; }; @@ -56,6 +57,7 @@ protected: void buttonEngine1(void); void fixMouseTransparency(byte *mouseData, uint32 size); + uint16 _mouseB; //used to check for repeat presses uint16 _eMouseB; uint16 _bMouseB; -- cgit v1.2.3