[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