[Scummvm-git-logs] scummvm master -> 6695eb679bd87b0817636ca99e26025dab4cc479
whiterandrek
whiterandrek at gmail.com
Mon Oct 12 19:52:08 UTC 2020
This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
852d597588 PETKA: fix detecting object under mouse in some cases
6ff94e6d47 PETKA: refactor VideoSystem
6695eb679b PETKA: fix typo in debug channel
Commit: 852d597588e67133b05184e5dcf21d0d5bc03106
https://github.com/scummvm/scummvm/commit/852d597588e67133b05184e5dcf21d0d5bc03106
Author: Andrei Prykhodko (whiterandrek at gmail.com)
Date: 2020-10-12T22:47:18+03:00
Commit Message:
PETKA: fix detecting object under mouse in some cases
Changed paths:
engines/petka/objects/object.cpp
diff --git a/engines/petka/objects/object.cpp b/engines/petka/objects/object.cpp
index 89934c2140..8577b4fa48 100644
--- a/engines/petka/objects/object.cpp
+++ b/engines/petka/objects/object.cpp
@@ -424,21 +424,18 @@ QObject::QObject() {
bool QObject::isInPoint(Common::Point p) {
if (!_isActive)
return false;
+
FlicDecoder *flc = g_vm->resMgr()->loadFlic(_resourceId);
- if (flc) {
- if (!flc->getBounds().contains(p.x - _x, p.y - _y))
- return false;
- const Graphics::Surface *s = flc->getCurrentFrame();
- if (s->format.bytesPerPixel == 1) {
- byte index = *(const byte *) flc->getCurrentFrame()->getBasePtr(p.x - _x,
- p.y - _y);
- const byte *pal = flc->getPalette();
- return (pal[0] != pal[index * 3] || pal[1] != pal[index * 3 + 1] || pal[2] != pal[index * 3 + 2]);
- }
- if (s->format.bytesPerPixel == 2)
- return *(const uint16*)flc->getCurrentFrame()->getBasePtr(p.x - _x, p.y - _y) != flc->getTransColor(s->format);
- }
- return false;
+ if (!flc || !flc->getBounds().contains(p.x - _x, p.y - _y))
+ return false;
+
+ const Graphics::Surface *s = flc->getCurrentFrame();
+ auto format = g_system->getScreenFormat();
+
+ byte index = *(const byte *)s->getBasePtr(p.x - _x, p.y - _y);
+ const byte *pal = flc->getPalette();
+
+ return format.RGBToColor(pal[0], pal[1], pal[2]) != format.RGBToColor(pal[index * 3], pal[index * 3 + 1], pal[index * 3 + 2]);
}
void QObject::draw() {
Commit: 6ff94e6d4734d668f2efad150effd6cbcf6b35d2
https://github.com/scummvm/scummvm/commit/6ff94e6d4734d668f2efad150effd6cbcf6b35d2
Author: Andrei Prykhodko (whiterandrek at gmail.com)
Date: 2020-10-12T22:49:57+03:00
Commit Message:
PETKA: refactor VideoSystem
Changed paths:
engines/petka/interfaces/interface.cpp
engines/petka/interfaces/interface.h
engines/petka/interfaces/main.cpp
engines/petka/interfaces/main.h
engines/petka/video.cpp
engines/petka/video.h
diff --git a/engines/petka/interfaces/interface.cpp b/engines/petka/interfaces/interface.cpp
index 1df8801be3..f923201939 100644
--- a/engines/petka/interfaces/interface.cpp
+++ b/engines/petka/interfaces/interface.cpp
@@ -82,6 +82,38 @@ void Interface::removeTexts() {
}
}
+void Interface::update(uint time) {
+ for (uint i = _startIndex; i < _objs.size(); ++i) {
+ _objs[i]->update(time);
+ }
+
+ for (uint i = 0; i < _objs.size(); ++i) {
+ _objs[i]->updateZ();
+ }
+ sort();
+}
+
+void Interface::draw() {
+ for (uint i = 0; i < _objs.size(); ++i) {
+ _objs[i]->draw();
+ }
+}
+
+void Interface::sort() {
+ for (uint i = 0; i < _objs.size() - 1; ++i) {
+ uint minIndex = i;
+ for (uint j = i + 1; j < _objs.size(); ++j) {
+ if (_objs[j]->_z < _objs[minIndex]->_z) {
+ minIndex = j;
+ }
+ }
+
+ if (i != minIndex) {
+ SWAP(_objs[i], _objs[minIndex]);
+ }
+ }
+}
+
void SubInterface::start(int id) {
QSystem *sys = g_vm->getQSystem();
QObjectCursor *cursor = sys->getCursor();
diff --git a/engines/petka/interfaces/interface.h b/engines/petka/interfaces/interface.h
index 7f62a6e8ad..05b5e9aadf 100644
--- a/engines/petka/interfaces/interface.h
+++ b/engines/petka/interfaces/interface.h
@@ -40,6 +40,9 @@ public:
virtual void start(int id) {};
virtual void stop();
+ virtual void update(uint time);
+ void draw();
+
virtual void onLeftButtonDown(Common::Point p) {};
virtual void onRightButtonDown(Common::Point p) {};
virtual void onMouseMove(Common::Point p) {};
@@ -53,6 +56,9 @@ public:
void initCursor(int id, bool show, bool animate);
+private:
+ void sort();
+
public:
Common::Array<QVisibleObject *> _objs;
QVisibleObject *_objUnderCursor;
diff --git a/engines/petka/interfaces/main.cpp b/engines/petka/interfaces/main.cpp
index 081c683591..13810c77bf 100644
--- a/engines/petka/interfaces/main.cpp
+++ b/engines/petka/interfaces/main.cpp
@@ -276,4 +276,22 @@ void InterfaceMain::removeTextDescription() {
removeTexts();
}
+void InterfaceMain::update(uint time) {
+ QSystem *sys = g_vm->getQSystem();
+ int xOff = sys->_xOffset;
+ int reqOffset = sys->_reqOffset;
+ if (xOff != reqOffset && ((xOff != sys->_sceneWidth - 640 && xOff < reqOffset) || (xOff > 0 && xOff > reqOffset))) {
+ if (xOff <= reqOffset) {
+ xOff += 8;
+ xOff = MIN<int>(xOff, reqOffset);
+ } else {
+ xOff -= 8;
+ xOff = MAX<int>(xOff, reqOffset);
+ }
+ sys->_xOffset = CLIP(xOff, 0, sys->_sceneWidth - 640);
+ g_vm->videoSystem()->makeAllDirty();
+ }
+ Interface::update(time);
+}
+
} // End of namespace Petka
diff --git a/engines/petka/interfaces/main.h b/engines/petka/interfaces/main.h
index 0d3f3fc61b..a185aa33b6 100644
--- a/engines/petka/interfaces/main.h
+++ b/engines/petka/interfaces/main.h
@@ -43,6 +43,8 @@ public:
void start(int id) override;
+ virtual void update(uint time);
+
void loadRoom(int id, bool fromSave);
const BGInfo *findBGInfo(int id) const;
diff --git a/engines/petka/video.cpp b/engines/petka/video.cpp
index 8ade8f7cb2..a5db110b6e 100644
--- a/engines/petka/video.cpp
+++ b/engines/petka/video.cpp
@@ -22,78 +22,49 @@
#include "common/system.h"
-#include "petka/sound.h"
#include "petka/flc.h"
#include "petka/petka.h"
#include "petka/q_system.h"
-#include "petka/interfaces/main.h"
-#include "petka/interfaces/dialog_interface.h"
-#include "petka/objects/object.h"
+#include "petka/interfaces/interface.h"
#include "petka/video.h"
namespace Petka {
-// COMPLETED
-
const uint kShakeTime = 30;
const int kShakeOffset = 3;
-VideoSystem::VideoSystem(PetkaEngine &vm) :
- _vm(vm), _shake(false), _shift(false), _shakeTime(0), _time(0) {
- makeAllDirty();
+VideoSystem::VideoSystem(PetkaEngine &vm)
+ : _vm(vm) {
+ _shakeTime = 0;
_time = g_system->getMillis();
- _allowAddingRects = true;
+ _shake = false;
+ _shift = false;
+ _allowAddingRects = false;
}
void VideoSystem::update() {
QSystem *sys = _vm.getQSystem();
Interface *interface = sys->_currInterface;
uint32 time = g_system->getMillis();
- if (interface) {
- if (sys->_currInterface == sys->_mainInterface.get()) {
- int xOff = sys->_xOffset;
- int reqOffset = sys->_reqOffset;
- if (xOff != reqOffset && ((xOff != sys->_sceneWidth - 640 && xOff < reqOffset) || (xOff > 0 && xOff > reqOffset))) {
- if (xOff <= reqOffset) {
- xOff += 8;
- xOff = MIN<int>(xOff, reqOffset);
- } else {
- xOff -= 8;
- xOff = MAX<int>(xOff, reqOffset);
- }
- sys->_xOffset = CLIP(xOff, 0, sys->_sceneWidth - 640);
- makeAllDirty();
- }
- }
+ assert(sys);
+ assert(interface);
- for (uint i = interface->_startIndex; i < interface->_objs.size(); ++i) {
- interface->_objs[i]->update(time - _time);
- }
+ interface->update(time - _time);
- for (uint i = 0; i < interface->_objs.size(); ++i) {
- interface->_objs[i]->updateZ();
- }
+ mergeDirtyRects();
- sort();
- mergeDirtyRects();
-
- _allowAddingRects = false;
- for (uint i = 0; i < interface->_objs.size(); ++i) {
- interface->_objs[i]->draw();
- }
- _allowAddingRects = true;
-
- for (Common::List<Common::Rect>::iterator i = _dirtyRects.begin(); i != _dirtyRects.end(); ++i) {
- const Common::Rect &r = *i;
- const byte *srcP = (const byte *)getBasePtr(r.left, r.top);
- g_system->copyRectToScreen(srcP, pitch, r.left, r.top,
- r.width(), r.height());
- }
+ _allowAddingRects = false;
+ interface->draw();
+ _allowAddingRects = true;
- _dirtyRects.clear();
+ for (Common::Rect &r : _dirtyRects) {
+ const byte *srcP = (const byte *)getBasePtr(r.left, r.top);
+ g_system->copyRectToScreen(srcP, pitch, r.left, r.top, r.width(), r.height());
}
+ _dirtyRects.clear();
+
_time = time;
if (_shake) {
@@ -119,14 +90,13 @@ void VideoSystem::addDirtyRect(Common::Point pos, Common::Rect rect) {
}
void VideoSystem::addDirtyRect(Common::Point pos, FlicDecoder &flc) {
- pos.x = pos.x - g_vm->getQSystem()->_xOffset;
+ pos.x = pos.x - _vm.getQSystem()->_xOffset;
addDirtyRect(pos, flc.getBounds());
}
void VideoSystem::addDirtyMskRects(Common::Point pos, FlicDecoder &flc) {
- const Common::Array<Common::Rect> &rects = flc.getMskRects();
- for (uint i = 0; i < rects.size(); ++i) {
- addDirtyRect(pos, rects[i]);
+ for (auto rect : flc.getMskRects()) {
+ addDirtyRect(pos, rect);
}
}
@@ -147,22 +117,4 @@ void VideoSystem::setShake(bool shake) {
g_system->setShakePos(0, 0);
}
-void VideoSystem::sort() {
- Common::Array<QVisibleObject *> &objs = _vm.getQSystem()->_currInterface->_objs;
- for (uint i = 0; i < objs.size() - 1; ++i) {
- uint minIndex = i;
- for (uint j = i + 1; j < objs.size(); ++j) {
- if (objs[j]->_z < objs[minIndex]->_z) {
- minIndex = j;
- }
- }
-
- if (i != minIndex) {
- QVisibleObject *tmp = objs[i];
- objs[i] = objs[minIndex];
- objs[minIndex] = tmp;
- }
- }
-}
-
-}
+} // End of namespace Petka
diff --git a/engines/petka/video.h b/engines/petka/video.h
index b12f7aa6a2..52328ef96b 100644
--- a/engines/petka/video.h
+++ b/engines/petka/video.h
@@ -33,7 +33,7 @@ class PetkaEngine;
class VideoSystem : public Graphics::Screen {
public:
- VideoSystem(PetkaEngine &vm);
+ explicit VideoSystem(PetkaEngine &vm);
void updateTime();
void update() override;
@@ -49,9 +49,6 @@ public:
const Common::List<Common::Rect> &rects() const;
-private:
- void sort();
-
private:
PetkaEngine &_vm;
uint32 _shakeTime;
@@ -61,6 +58,6 @@ private:
bool _allowAddingRects;
};
-}
+} // End of namespace Petka
#endif
Commit: 6695eb679bd87b0817636ca99e26025dab4cc479
https://github.com/scummvm/scummvm/commit/6695eb679bd87b0817636ca99e26025dab4cc479
Author: Andrei Prykhodko (whiterandrek at gmail.com)
Date: 2020-10-12T22:51:47+03:00
Commit Message:
PETKA: fix typo in debug channel
Changed paths:
engines/petka/petka.cpp
diff --git a/engines/petka/petka.cpp b/engines/petka/petka.cpp
index 109e013491..7c25be93da 100644
--- a/engines/petka/petka.cpp
+++ b/engines/petka/petka.cpp
@@ -54,7 +54,7 @@ PetkaEngine::PetkaEngine(OSystem *system, const ADGameDescription *desc)
_qsystem(nullptr), _vsys(nullptr), _desc(desc), _videoDec(nullptr), _rnd("petka") {
DebugMan.addDebugChannel(kPetkaDebugGeneral, "general", "General issues");
- DebugMan.addDebugChannel(kPetkaDebugMessagingSystem, "resources", "Resources");
+ DebugMan.addDebugChannel(kPetkaDebugResources, "resources", "Resources");
DebugMan.addDebugChannel(kPetkaDebugMessagingSystem, "message_system", "Engine message system");
DebugMan.addDebugChannel(kPetkaDebugDialogs, "dialogs", "Dialogs");
More information about the Scummvm-git-logs
mailing list