[Scummvm-git-logs] scummvm master -> 284226244ecb7a3ee3160821a7c4254e55470ccb

whiterandrek whiterandrek at gmail.com
Mon Oct 12 21:34:48 UTC 2020


This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
2de754a2a6 PETKA: fix loading panel, map and save interfaces when main room width > 640
284226244e PETKA: refactor Resource manager


Commit: 2de754a2a6b5b68901e48748f446791a982ca4a4
    https://github.com/scummvm/scummvm/commit/2de754a2a6b5b68901e48748f446791a982ca4a4
Author: Andrei Prykhodko (whiterandrek at gmail.com)
Date: 2020-10-13T00:32:39+03:00

Commit Message:
PETKA: fix loading panel, map and save interfaces when main room width > 640

Changed paths:
    engines/petka/interfaces/interface.cpp


diff --git a/engines/petka/interfaces/interface.cpp b/engines/petka/interfaces/interface.cpp
index f923201939..c9efd949e2 100644
--- a/engines/petka/interfaces/interface.cpp
+++ b/engines/petka/interfaces/interface.cpp
@@ -126,6 +126,9 @@ void SubInterface::start(int id) {
 	_savedXOffset = sys->_xOffset;
 	_savedSceneWidth = sys->_sceneWidth;
 
+	sys->_xOffset = 0;
+	sys->_sceneWidth = 640;
+
 	g_vm->getQSystem()->_currInterface = this;
 	g_vm->videoSystem()->updateTime();
 	g_vm->videoSystem()->makeAllDirty();


Commit: 284226244ecb7a3ee3160821a7c4254e55470ccb
    https://github.com/scummvm/scummvm/commit/284226244ecb7a3ee3160821a7c4254e55470ccb
Author: Andrei Prykhodko (whiterandrek at gmail.com)
Date: 2020-10-13T00:34:35+03:00

Commit Message:
PETKA: refactor Resource manager

Changed paths:
    engines/petka/interfaces/dialog_interface.cpp
    engines/petka/interfaces/main.cpp
    engines/petka/interfaces/map.cpp
    engines/petka/interfaces/panel.cpp
    engines/petka/interfaces/save_load.cpp
    engines/petka/interfaces/sequence.cpp
    engines/petka/interfaces/startup.cpp
    engines/petka/objects/heroes.cpp
    engines/petka/objects/object.cpp
    engines/petka/objects/object_bg.cpp
    engines/petka/objects/object_case.cpp
    engines/petka/objects/object_cursor.cpp
    engines/petka/objects/object_star.cpp
    engines/petka/objects/text.cpp
    engines/petka/petka.cpp
    engines/petka/q_manager.cpp
    engines/petka/q_manager.h
    engines/petka/q_system.cpp


diff --git a/engines/petka/interfaces/dialog_interface.cpp b/engines/petka/interfaces/dialog_interface.cpp
index a5ec7178d7..1ff49767da 100644
--- a/engines/petka/interfaces/dialog_interface.cpp
+++ b/engines/petka/interfaces/dialog_interface.cpp
@@ -195,7 +195,7 @@ void DialogInterface::playSound(const Common::String &name) {
 	_soundName = name;
 	Sound *s = g_vm->soundMgr()->addSound(name, Audio::Mixer::kSpeechSoundType);
 	if (s) {
-		FlicDecoder *flc = g_vm->resMgr()->loadFlic(_talker->_resourceId);
+		FlicDecoder *flc = g_vm->resMgr()->getFlic(_talker->_resourceId);
 		if (flc) {
 			Common::Rect bounds = flc->getBounds();
 			s->setBalance(bounds.left + _talker->_x + bounds.width(), _qsys->_sceneWidth);
diff --git a/engines/petka/interfaces/main.cpp b/engines/petka/interfaces/main.cpp
index 13810c77bf..e58b94525b 100644
--- a/engines/petka/interfaces/main.cpp
+++ b/engines/petka/interfaces/main.cpp
@@ -97,13 +97,17 @@ void InterfaceMain::loadRoom(int id, bool fromSave) {
 	sys->_room = room;
 	_objs.push_back(room);
 
-	resMgr->loadBitmap(room->_resourceId);
+	auto surface = resMgr->getSurface(room->_resourceId);
+	if (surface) {
+		sys->_sceneWidth = surface->w;
+		sys->_xOffset = 0;
+	}
 
 	for (uint i = 0; i < info->attachedObjIds.size(); ++i) {
 		QMessageObject *obj = sys->findObject(info->attachedObjIds[i]);
 		obj->loadSound();
 		if (obj->_isShown || obj->_isActive)
-			g_vm->resMgr()->loadFlic(obj->_resourceId);
+			g_vm->resMgr()->getFlic(obj->_resourceId);
 		_objs.push_back(obj);
 	}
 
diff --git a/engines/petka/interfaces/map.cpp b/engines/petka/interfaces/map.cpp
index ad8386def1..b00fa60039 100644
--- a/engines/petka/interfaces/map.cpp
+++ b/engines/petka/interfaces/map.cpp
@@ -48,7 +48,7 @@ void InterfaceMap::start(int id) {
 	const BGInfo *info = g_vm->getQSystem()->_mainInterface->findBGInfo(bg->_id);
 	for (uint i = 0; i < info->attachedObjIds.size(); ++i) {
 		QMessageObject *obj = sys->findObject(info->attachedObjIds[i]);
-		FlicDecoder *flc = g_vm->resMgr()->loadFlic(obj->_resourceId);
+		FlicDecoder *flc = g_vm->resMgr()->getFlic(obj->_resourceId);
 		flc->setFrame(1);
 		obj->_z = 1;
 		obj->_x = 0;
@@ -86,7 +86,7 @@ void InterfaceMap::onMouseMove(Common::Point p) {
 	for (int i = _objs.size() - 1; i > 0; --i) {
 		QMessageObject *obj = (QMessageObject *)_objs[i];
 		if (obj->_resourceId != 4901 && obj->_resourceId != _roomResID) {
-			FlicDecoder *flc = g_vm->resMgr()->loadFlic(obj->_resourceId);
+			FlicDecoder *flc = g_vm->resMgr()->getFlic(obj->_resourceId);
 			if (flc) {
 				bool show = false;
 				if (!found && obj->isInPoint(p)) {
diff --git a/engines/petka/interfaces/panel.cpp b/engines/petka/interfaces/panel.cpp
index bfc17cc2e9..c3a2fea60d 100644
--- a/engines/petka/interfaces/panel.cpp
+++ b/engines/petka/interfaces/panel.cpp
@@ -108,7 +108,7 @@ void InterfacePanel::start(int id) {
 	const BGInfo *info = sys->_mainInterface->findBGInfo(bg->_id);
 	for (uint i = 0; i < info->attachedObjIds.size(); ++i) {
 		QMessageObject *obj = sys->findObject(info->attachedObjIds[i]);
-		FlicDecoder *flc = g_vm->resMgr()->loadFlic(obj->_resourceId);
+		FlicDecoder *flc = g_vm->resMgr()->getFlic(obj->_resourceId);
 		flc->setFrame(1);
 		obj->_z = 1;
 		obj->_x = _objectPoints[i].x;
@@ -234,7 +234,7 @@ void InterfacePanel::onMouseMove(Common::Point p) {
 			pointIndex = i - 1;
 			break;
 		}
-		FlicDecoder *flc = g_vm->resMgr()->loadFlic(obj->_resourceId);
+		FlicDecoder *flc = g_vm->resMgr()->getFlic(obj->_resourceId);
 		flc->setFrame(frame);
 		g_vm->videoSystem()->addDirtyRect(_objectPoints[pointIndex], *flc);
 	}
@@ -246,30 +246,30 @@ void InterfacePanel::onMouseMove(Common::Point p) {
 void InterfacePanel::updateSliders() {
 	applySettings();
 
-	FlicDecoder *flc = g_vm->resMgr()->loadFlic(_objs[kSpeechVolumeSliderIndex]->_resourceId);
+	FlicDecoder *flc = g_vm->resMgr()->getFlic(_objs[kSpeechVolumeSliderIndex]->_resourceId);
 	flc->setFrame(_speechFrame);
 	g_vm->videoSystem()->addDirtyRect(_objectPoints[kSpeechVolumeSliderIndex - 1], *flc);
 
-	flc = g_vm->resMgr()->loadFlic(_objs[kMusicVolumeSliderIndex]->_resourceId);
+	flc = g_vm->resMgr()->getFlic(_objs[kMusicVolumeSliderIndex]->_resourceId);
 	flc->setFrame(_musicFrame);
 	g_vm->videoSystem()->addDirtyRect(_objectPoints[kMusicVolumeSliderIndex - 1], *flc);
 
-	flc = g_vm->resMgr()->loadFlic(_objs[kSfxVolumeSliderIndex]->_resourceId);
+	flc = g_vm->resMgr()->getFlic(_objs[kSfxVolumeSliderIndex]->_resourceId);
 	flc->setFrame(_sfxFrame);
 	g_vm->videoSystem()->addDirtyRect(_objectPoints[kSfxVolumeSliderIndex - 1], *flc);
 
-	flc = g_vm->resMgr()->loadFlic(_objs[kSpeedSliderIndex]->_resourceId);
+	flc = g_vm->resMgr()->getFlic(_objs[kSpeedSliderIndex]->_resourceId);
 	flc->setFrame(_speedFrame);
 	g_vm->videoSystem()->addDirtyRect(_objectPoints[kSpeedSliderIndex - 1], *flc);
 }
 
 void InterfacePanel::updateSubtitles() {
 	applySettings();
-	FlicDecoder *flc = g_vm->resMgr()->loadFlic(_objs[kSubtitleButtonIndex]->_resourceId);
+	FlicDecoder *flc = g_vm->resMgr()->getFlic(_objs[kSubtitleButtonIndex]->_resourceId);
 	flc->setFrame(_subtitles == 0 ? 1 : 7);
 	g_vm->videoSystem()->addDirtyRect(_objectPoints[kSubtitleButtonIndex - 1], *flc);
 
-	flc = g_vm->resMgr()->loadFlic(_objs[kSubtitleLabelIndex]->_resourceId);
+	flc = g_vm->resMgr()->getFlic(_objs[kSubtitleLabelIndex]->_resourceId);
 	flc->setFrame(_subtitles == 0 ? 1 : 2);
 	g_vm->videoSystem()->addDirtyRect(_objectPoints[kSubtitleLabelIndex - 1], *flc);
 }
diff --git a/engines/petka/interfaces/save_load.cpp b/engines/petka/interfaces/save_load.cpp
index 42c128b4cb..238896aba9 100644
--- a/engines/petka/interfaces/save_load.cpp
+++ b/engines/petka/interfaces/save_load.cpp
@@ -65,7 +65,7 @@ void InterfaceSaveLoad::start(int id) {
 	bg->_resourceId = kFirstSaveLoadPageId + _page + (_loadMode ? 0 : 5);
 
 	resMgr->removeResource(bg->_resourceId);
-	auto bmp = resMgr->loadBitmap(bg->_resourceId);
+	auto bmp = resMgr->getSurface(bg->_resourceId);
 
 	Graphics::ManagedSurface surf(bmp->w, bmp->h, bmp->format);
 	surf.blitFrom(*bmp);
diff --git a/engines/petka/interfaces/sequence.cpp b/engines/petka/interfaces/sequence.cpp
index 30dedb6fe8..9e6ee3746c 100644
--- a/engines/petka/interfaces/sequence.cpp
+++ b/engines/petka/interfaces/sequence.cpp
@@ -53,7 +53,7 @@ void InterfaceSequence::start(int id) {
 	if (info) {
 		for (uint i = 0; i < info->attachedObjIds.size(); ++i) {
 			QMessageObject *obj = g_vm->getQSystem()->findObject(info->attachedObjIds[i]);
-			g_vm->resMgr()->loadFlic(obj->_resourceId);
+			g_vm->resMgr()->getFlic(obj->_resourceId);
 			obj->loadSound();
 			_objs.push_back(obj);
 		}
diff --git a/engines/petka/interfaces/startup.cpp b/engines/petka/interfaces/startup.cpp
index 31164f8100..b441021558 100644
--- a/engines/petka/interfaces/startup.cpp
+++ b/engines/petka/interfaces/startup.cpp
@@ -100,7 +100,7 @@ void InterfaceStartup::onMouseMove(Common::Point p) {
 	for (int i = _objs.size() - 1; i > 0; --i) {
 		QMessageObject *obj = (QMessageObject *)_objs[i];
 		if (obj->_resourceId != kStartupCursorId && obj->_resourceId != kBackgroundId) {
-			FlicDecoder *flc = g_vm->resMgr()->loadFlic(obj->_resourceId);
+			FlicDecoder *flc = g_vm->resMgr()->getFlic(obj->_resourceId);
 			if (flc) {
 				bool show = false;
 				if (!found && obj->isInPoint(p)) {
diff --git a/engines/petka/objects/heroes.cpp b/engines/petka/objects/heroes.cpp
index 724bb4a2e7..f299c927fa 100644
--- a/engines/petka/objects/heroes.cpp
+++ b/engines/petka/objects/heroes.cpp
@@ -93,7 +93,7 @@ void QObjectPetka::processMessage(const QMessage &arg) {
 
 void QObjectPetka::initSurface() {
 	QManager *resMgr = g_vm->resMgr();
-	FlicDecoder *flc = resMgr->loadFlic(_resourceId);
+	FlicDecoder *flc = resMgr->getFlic(_resourceId);
 	_surfW = flc->getWidth() * _k;
 	_surfH = flc->getHeight() * _k;
 }
@@ -124,7 +124,7 @@ void QObjectPetka::walk(int x, int y) {
 		_animate = true;
 
 		initSurface();
-		FlicDecoder *flc = g_vm->resMgr()->loadFlic(_resourceId);
+		FlicDecoder *flc = g_vm->resMgr()->getFlic(_resourceId);
 		flc->setFrame(1);
 
 		sub_408940();
@@ -152,7 +152,7 @@ void QObjectPetka::draw() {
 		_startSound = false;
 	}
 
-	FlicDecoder *flc = g_vm->resMgr()->loadFlic(_resourceId);
+	FlicDecoder *flc = g_vm->resMgr()->getFlic(_resourceId);
 	if (!flc) {
 		return;
 	}
@@ -175,7 +175,7 @@ void QObjectPetka::setPos(Common::Point p, bool) {
 	g_vm->videoSystem()->addDirtyRect(dirty);
 
 	p.y = MIN<int16>(p.y, 480);
-	FlicDecoder *flc = g_vm->resMgr()->loadFlic(_resourceId);
+	FlicDecoder *flc = g_vm->resMgr()->getFlic(_resourceId);
 
 	_k = calcPerspective(p.y);
 
@@ -226,7 +226,7 @@ void QObjectPetka::updateWalk() {
 				if (_heroReaction->messages[i].opcode == kGoTo || _heroReaction->messages[i].opcode == kSetSeq) {
 					_resourceId = _imageId + _walk->getSpriteId() + 10;
 
-					FlicDecoder *flc = g_vm->resMgr()->loadFlic(_resourceId);
+					FlicDecoder *flc = g_vm->resMgr()->getFlic(_resourceId);
 					flc->setFrame(1);
 
 					initSurface();
@@ -253,7 +253,7 @@ void QObjectPetka::updateWalk() {
 	case 2: {
 		_resourceId = _walk->getSpriteId() + _imageId + 10;
 
-		FlicDecoder *flc = g_vm->resMgr()->loadFlic(_resourceId);
+		FlicDecoder *flc = g_vm->resMgr()->getFlic(_resourceId);
 		flc->setFrame(1);
 
 		_time = flc->getDelay();
@@ -320,7 +320,7 @@ void QObjectPetka::update(int time) {
 		_time += time * (g_vm->getQSystem()->_panelInterface->getHeroSpeed() + 50) / 50;
 	else
 		_time += time;
-	FlicDecoder *flc = g_vm->resMgr()->loadFlic(_resourceId);
+	FlicDecoder *flc = g_vm->resMgr()->getFlic(_resourceId);
 	if (flc && flc->getFrameCount() != 1) {
 		if (_sound) {
 			Common::Rect bounds = flc->getBounds();
@@ -343,7 +343,7 @@ void QObjectPetka::update(int time) {
 				_time = -10000;
 
 			updateWalk();
-			flc = g_vm->resMgr()->loadFlic(_resourceId);
+			flc = g_vm->resMgr()->getFlic(_resourceId);
 
 			_surfH = flc->getHeight() * _k;
 			_surfW = flc->getWidth() * _k;
@@ -358,7 +358,7 @@ void QObjectPetka::update(int time) {
 bool QObjectPetka::isInPoint(Common::Point p) {
 	if (!_isActive)
 		return false;
-	FlicDecoder *flc = g_vm->resMgr()->loadFlic(_resourceId);
+	FlicDecoder *flc = g_vm->resMgr()->getFlic(_resourceId);
 	const Graphics::Surface *flcSurface = flc->getCurrentFrame();
 	Common::Rect bounds(_surfW, _surfH);
 	Graphics::ManagedSurface s(_surfW, _surfH, flcSurface->format);
@@ -372,7 +372,7 @@ bool QObjectPetka::isInPoint(Common::Point p) {
 
 void QObjectPetka::updateZ() {
 	if (_animate && _isShown && _updateZ) {
-		FlicDecoder *flc = g_vm->resMgr()->loadFlic(_resourceId);
+		FlicDecoder *flc = g_vm->resMgr()->getFlic(_resourceId);
 		if (_isWalking) {
 			_z = _walk->currPos().y;
 		} else {
@@ -382,7 +382,7 @@ void QObjectPetka::updateZ() {
 }
 
 void QObjectPetka::sub_408940() {
-	FlicDecoder *flc = g_vm->resMgr()->loadFlic(_resourceId);
+	FlicDecoder *flc = g_vm->resMgr()->getFlic(_resourceId);
 	QSystem *sys = g_vm->getQSystem();
 
 	int xOff = sys->_xOffset;
diff --git a/engines/petka/objects/object.cpp b/engines/petka/objects/object.cpp
index 026c0790dd..2c7d1e7455 100644
--- a/engines/petka/objects/object.cpp
+++ b/engines/petka/objects/object.cpp
@@ -341,7 +341,7 @@ void QMessageObject::play(int id, int type) {
 		removeSound();
 	}
 
-	FlicDecoder *flc = g_vm->resMgr()->loadFlic(_resourceId);
+	FlicDecoder *flc = g_vm->resMgr()->getFlic(_resourceId);
 	if (flc) {
 		g_vm->videoSystem()->addDirtyRect(Common::Point(_x, _y), *flc);
 	}
@@ -350,7 +350,7 @@ void QMessageObject::play(int id, int type) {
 
 	loadSound();
 
-	flc = g_vm->resMgr()->loadFlic(id);
+	flc = g_vm->resMgr()->getFlic(id);
 	flc->setFrame(1);
 	_time = 0;
 	_loopedSound = (type == 5);
@@ -425,7 +425,7 @@ bool QObject::isInPoint(Common::Point p) {
 	if (!_isActive)
 		return false;
 
-	FlicDecoder *flc = g_vm->resMgr()->loadFlic(_resourceId);
+	FlicDecoder *flc = g_vm->resMgr()->getFlic(_resourceId);
 	if (!flc || !flc->getBounds().contains(p.x - _x, p.y - _y))
 		return false;
 
@@ -442,7 +442,7 @@ void QObject::draw() {
 	if (!_isShown || _resourceId == -1) {
 		return;
 	}
-	FlicDecoder *flc = g_vm->resMgr()->loadFlic(_resourceId);
+	FlicDecoder *flc = g_vm->resMgr()->getFlic(_resourceId);
 	if (!flc) {
 		return;
 	}
@@ -494,7 +494,7 @@ void QObject::draw() {
 void QObject::updateZ() {
 	if (!_animate || !_isShown || !_updateZ)
 		return;
-	FlicDecoder *flc = g_vm->resMgr()->loadFlic(_resourceId);
+	FlicDecoder *flc = g_vm->resMgr()->getFlic(_resourceId);
 	if (flc) {
 		_z = 1;
 		const Common::Array<Common::Rect> &rects = flc->getMskRects();
@@ -507,7 +507,7 @@ void QObject::updateZ() {
 }
 
 void QObject::show(bool v) {
-	FlicDecoder *flc = g_vm->resMgr()->loadFlic(_resourceId);
+	FlicDecoder *flc = g_vm->resMgr()->getFlic(_resourceId);
 	if (flc) {
 		g_vm->videoSystem()->addDirtyRect(Common::Point(_x, _y), *flc);
 	}
@@ -518,7 +518,7 @@ void QObject::update(int time) {
 	if (!_animate || !_isShown)
 		return;
 	_time += time;
-	FlicDecoder *flc = g_vm->resMgr()->loadFlic(_resourceId);
+	FlicDecoder *flc = g_vm->resMgr()->getFlic(_resourceId);
 	if (flc && flc->getFrameCount() != 1) {
 		if (_sound) {
 			Common::Rect bounds = flc->getBounds();
@@ -544,7 +544,7 @@ void QObject::update(int time) {
 }
 
 void QObject::setPos(Common::Point p, bool) {
-	FlicDecoder *flc = g_vm->resMgr()->loadFlic(_resourceId);
+	FlicDecoder *flc = g_vm->resMgr()->getFlic(_resourceId);
 	if (flc) {
 		g_vm->videoSystem()->addDirtyMskRects(Common::Point(_x, _y), *flc);
 		g_vm->videoSystem()->addDirtyMskRects(p, *flc);
diff --git a/engines/petka/objects/object_bg.cpp b/engines/petka/objects/object_bg.cpp
index 19ceff333a..f6b49de862 100644
--- a/engines/petka/objects/object_bg.cpp
+++ b/engines/petka/objects/object_bg.cpp
@@ -86,7 +86,7 @@ void QObjectBG::processMessage(const QMessage &msg) {
 }
 
 void QObjectBG::draw() {
-	Graphics::Surface *s = g_vm->resMgr()->loadBitmap(_resourceId);
+	Graphics::Surface *s = g_vm->resMgr()->getSurface(_resourceId);
 	if (!s)
 		return;
 	int xOffset = g_vm->getQSystem()->_xOffset;
diff --git a/engines/petka/objects/object_case.cpp b/engines/petka/objects/object_case.cpp
index 51e45bf01d..354b664c62 100644
--- a/engines/petka/objects/object_case.cpp
+++ b/engines/petka/objects/object_case.cpp
@@ -84,7 +84,7 @@ void QObjectCase::update(int time) {
 	if (!_isShown || _clickedObjIndex == kInvalidButton)
 		return;
 	_time += time;
-	FlicDecoder *flc = g_vm->resMgr()->loadFlic(kFirstButtonResourceId + _clickedObjIndex);
+	FlicDecoder *flc = g_vm->resMgr()->getFlic(kFirstButtonResourceId + _clickedObjIndex);
 	if (flc) {
 		while (_time >= (int32)flc->getDelay()) {
 			flc->setFrame(-1);
@@ -99,7 +99,7 @@ void QObjectCase::draw() {
 		return;
 	QObject::draw();
 	if (_clickedObjIndex != kInvalidButton) {
-		FlicDecoder *flc = g_vm->resMgr()->loadFlic(kFirstButtonResourceId + _clickedObjIndex);
+		FlicDecoder *flc = g_vm->resMgr()->getFlic(kFirstButtonResourceId + _clickedObjIndex);
 		Graphics::Surface *s = flc->getCurrentFrame()->convertTo(g_system->getScreenFormat(), flc->getPalette());
 
 		QSystem *sys = g_vm->getQSystem();
@@ -145,10 +145,10 @@ bool QObjectCase::isInPoint(Common::Point p) {
 
 void QObjectCase::onMouseMove(Common::Point p) {
 	p.x -= _x;
-	FlicDecoder *flc = g_vm->resMgr()->loadFlic(kExitCaseResourceId);
+	FlicDecoder *flc = g_vm->resMgr()->getFlic(kExitCaseResourceId);
 	if (*(const byte *)flc->getCurrentFrame()->getBasePtr(p.x, p.y) != 0) {
 		if (_clickedObjIndex != kCloseButton && _clickedObjIndex != kInvalidButton) {
-			flc = g_vm->resMgr()->loadFlic(kFirstButtonResourceId + _clickedObjIndex);
+			flc = g_vm->resMgr()->getFlic(kFirstButtonResourceId + _clickedObjIndex);
 			flc->setFrame(1);
 			g_vm->videoSystem()->addDirtyMskRects(*flc);
 		}
@@ -156,14 +156,14 @@ void QObjectCase::onMouseMove(Common::Point p) {
 	} else {
 		uint i;
 		for (i = 0; i < kButtonsCount; ++i) {
-			flc = g_vm->resMgr()->loadFlic(kFirstButtonResourceId + i);
+			flc = g_vm->resMgr()->getFlic(kFirstButtonResourceId + i);
 			if (flc->getMskRects()[0].contains(p)) {
 				break;
 			}
 		}
 
 		if (_clickedObjIndex != i && _clickedObjIndex != kInvalidButton) {
-			flc = g_vm->resMgr()->loadFlic(kFirstButtonResourceId + _clickedObjIndex);
+			flc = g_vm->resMgr()->getFlic(kFirstButtonResourceId + _clickedObjIndex);
 			flc->setFrame(1);
 			g_vm->videoSystem()->addDirtyMskRects(*flc);
 		}
@@ -172,7 +172,7 @@ void QObjectCase::onMouseMove(Common::Point p) {
 			_clickedObjIndex = kInvalidButton;
 		} else if (i != _clickedObjIndex) {
 			if ((i != kChapayevButton || g_vm->getQSystem()->getChapay()->_isShown) && (i != kMapButton || g_vm->getQSystem()->_room->_showMap)) {
-				flc = g_vm->resMgr()->loadFlic(kFirstButtonResourceId + i);
+				flc = g_vm->resMgr()->getFlic(kFirstButtonResourceId + i);
 				g_vm->videoSystem()->addDirtyMskRects(*flc);
 				_clickedObjIndex = i;
 			} else {
@@ -224,7 +224,7 @@ void QObjectCase::addItemObjects() {
 		obj->_x = sys->_xOffset + _itemsLocation[i - _itemIndex].x;
 		obj->_y = _itemsLocation[i - _itemIndex].y;
 		obj->_z = kItemZ;
-		g_vm->resMgr()->loadFlic(obj->_resourceId);
+		g_vm->resMgr()->getFlic(obj->_resourceId);
 		objs.push_back(obj);
 	}
 }
diff --git a/engines/petka/objects/object_cursor.cpp b/engines/petka/objects/object_cursor.cpp
index 55d426f927..5f3f9f62c2 100644
--- a/engines/petka/objects/object_cursor.cpp
+++ b/engines/petka/objects/object_cursor.cpp
@@ -45,7 +45,7 @@ QObjectCursor::QObjectCursor() {
 	Common::Point pos = g_vm->getEventManager()->getMousePos();
 	_x = pos.x;
 	_y = pos.y;
-	g_vm->resMgr()->loadFlic(kCursorLook);
+	g_vm->resMgr()->getFlic(kCursorLook);
 	_actionType = kActionLook;
 	_invObj = nullptr;
 	_name = "Cursor";
@@ -55,7 +55,7 @@ void QObjectCursor::draw() {
 	if (!_isShown) {
 		return;
 	}
-	FlicDecoder *flc = g_vm->resMgr()->loadFlic(_resourceId);
+	FlicDecoder *flc = g_vm->resMgr()->getFlic(_resourceId);
 	const Graphics::Surface *frame = flc->getCurrentFrame();
 	if (frame) {
 		Graphics::Surface *s = frame->convertTo(g_system->getScreenFormat(), flc->getPalette());
@@ -75,7 +75,7 @@ void QObjectCursor::draw() {
 void QObjectCursor::update(int time) {
 	if (!_isShown || !_animate)
 		return;
-	FlicDecoder *flc = g_vm->resMgr()->loadFlic(_resourceId);
+	FlicDecoder *flc = g_vm->resMgr()->getFlic(_resourceId);
 	_time += time;
 	while (flc && _time >= (int32)flc->getDelay()) {
 		flc->setFrame(-1);
@@ -85,7 +85,7 @@ void QObjectCursor::update(int time) {
 }
 
 void QObjectCursor::setPos(Common::Point p, bool center) {
-	FlicDecoder *flc = g_vm->resMgr()->loadFlic(_resourceId);
+	FlicDecoder *flc = g_vm->resMgr()->getFlic(_resourceId);
 	if (!_animate) {
 		flc->setFrame(1);
 	}
@@ -107,7 +107,7 @@ void QObjectCursor::setPos(Common::Point p, bool center) {
 }
 
 void QObjectCursor::show(bool v) {
-	FlicDecoder *flc = g_vm->resMgr()->loadFlic(_resourceId);
+	FlicDecoder *flc = g_vm->resMgr()->getFlic(_resourceId);
 	g_vm->videoSystem()->addDirtyRect(Common::Point(_x, _y), flc->getBounds());
 	QMessageObject::show(v);
 }
diff --git a/engines/petka/objects/object_star.cpp b/engines/petka/objects/object_star.cpp
index c70cc75062..186ac122cc 100644
--- a/engines/petka/objects/object_star.cpp
+++ b/engines/petka/objects/object_star.cpp
@@ -58,7 +58,7 @@ bool QObjectStar::isInPoint(Common::Point p) {
 
 void QObjectStar::onMouseMove(Common::Point p) {
 	uint frame = (findButtonIndex(p.x - _x, p.y - _y) + 1) % 7 + 1;
-	FlicDecoder *flc = g_vm->resMgr()->loadFlic(_resourceId);
+	FlicDecoder *flc = g_vm->resMgr()->getFlic(_resourceId);
 	if (flc && flc->getCurFrame() + 1 != (int32)frame) {
 		g_vm->videoSystem()->addDirtyRect(Common::Point(_x, _y), *flc);
 		flc->setFrame(frame);
@@ -89,7 +89,7 @@ void QObjectStar::setPos(Common::Point p, bool) {
 	if (!_isShown) {
 		QSystem *sys = g_vm->getQSystem();
 
-		FlicDecoder *flc = g_vm->resMgr()->loadFlic(_resourceId);
+		FlicDecoder *flc = g_vm->resMgr()->getFlic(_resourceId);
 		p.x = MAX<int16>(p.x - sys->_xOffset - flc->getWidth() / 2, 0);
 		p.y = MAX<int16>(p.y - flc->getHeight() / 2, 0);
 
diff --git a/engines/petka/objects/text.cpp b/engines/petka/objects/text.cpp
index 0601111ff6..8689a19c8d 100644
--- a/engines/petka/objects/text.cpp
+++ b/engines/petka/objects/text.cpp
@@ -46,14 +46,14 @@ QText::QText(const Common::U32String &text, uint16 textColor, uint16 outlineColo
 	rect.bottom += 10;
 
 	_rect = Common::Rect((640 - rect.width()) / 2, 479 - rect.height(), 639 - (640 - rect.width()) / 2, 479);
-	Graphics::Surface *s = g_vm->resMgr()->findOrCreateSurface(-2, _rect.width(), _rect.height());
+	Graphics::Surface *s = g_vm->resMgr()->getSurface(-2, _rect.width(), _rect.height());
 
 	drawText(*s, 0, 630, text, textColor, *font);
 	drawOutline(s, outlineColor);
 }
 
 void QText::draw() {
-	const Graphics::Surface *s = g_vm->resMgr()->loadBitmap(-2);
+	const Graphics::Surface *s = g_vm->resMgr()->getSurface(-2);
 	if (s) {
 		g_vm->videoSystem()->transBlitFrom(*s, Common::Point((640 - s->w) / 2, 479 - s->h));
 	}
@@ -135,11 +135,11 @@ QTextDescription::QTextDescription(const Common::U32String &desc, uint32 frame)
 	_resourceId = -2;
 	_rect = Common::Rect(0, 0, 640, 480);
 
-	FlicDecoder *flc = g_vm->resMgr()->loadFlic(6008);
+	FlicDecoder *flc = g_vm->resMgr()->getFlic(6008);
 	flc->setFrame(frame);
 
 	const Graphics::Surface *frameS = flc->getCurrentFrame();
-	Graphics::Surface *s = g_vm->resMgr()->findOrCreateSurface(-2, 640, 480);
+	Graphics::Surface *s = g_vm->resMgr()->getSurface(-2, 640, 480);
 
 	Graphics::Surface *convS = frameS->convertTo(s->format, flc->getPalette());
 	s->copyRectToSurface(*convS, 0, 0, _rect);
@@ -163,8 +163,8 @@ void QTextDescription::onClick(Common::Point p) {
 void QTextDescription::draw() {
 	QManager *resMgr = g_vm->resMgr();
 	VideoSystem *videoSys = g_vm->videoSystem();
-	Graphics::Surface *s = resMgr->loadBitmap(-2);
-	FlicDecoder *flc = resMgr->loadFlic(6008);
+	Graphics::Surface *s = resMgr->getSurface(-2);
+	FlicDecoder *flc = resMgr->getFlic(6008);
 
 	for (auto dirty : videoSys->rects()) {
 		videoSys->transBlitFrom(*s, dirty, dirty, flc->getTransColor(s->format));
@@ -193,7 +193,7 @@ QTextChoice::QTextChoice(const Common::Array<Common::U32String> &choices, uint16
 
 	_rect = Common::Rect((640 - w) / 2, 479 - h, 639 - (640 - w) / 2, 479);
 
-	Graphics::Surface *s = g_vm->resMgr()->findOrCreateSurface(-2, w, h);
+	Graphics::Surface *s = g_vm->resMgr()->getSurface(-2, w, h);
 
 	int y = 0;
 	for (uint i = 0; i < _choices.size(); ++i) {
@@ -215,7 +215,7 @@ void QTextChoice::onMouseMove(Common::Point p) {
 	}
 
 	if (newChoice != _activeChoice) {
-		Graphics::Surface *s = g_vm->resMgr()->loadBitmap(-2);
+		Graphics::Surface *s = g_vm->resMgr()->getSurface(-2);
 		Common::ScopedPtr<Graphics::Font> font(Graphics::loadTTFFontFromArchive("FreeSans.ttf", 20));
 
 		s->fillRect(Common::Rect(s->w, s->h), 0);
diff --git a/engines/petka/petka.cpp b/engines/petka/petka.cpp
index 7c25be93da..4ba7510887 100644
--- a/engines/petka/petka.cpp
+++ b/engines/petka/petka.cpp
@@ -92,6 +92,7 @@ Common::Error PetkaEngine::run() {
 	_fileMgr.reset(new FileMgr());
 	_soundMgr.reset(new SoundMgr(*this));
 	_vsys.reset(new VideoSystem(*this));
+	_resMgr.reset(new QManager(*this));
 
 	loadPart(0);
 
diff --git a/engines/petka/q_manager.cpp b/engines/petka/q_manager.cpp
index 7467510009..f06ea45cb0 100644
--- a/engines/petka/q_manager.cpp
+++ b/engines/petka/q_manager.cpp
@@ -31,25 +31,16 @@
 
 #include "petka/flc.h"
 #include "petka/q_manager.h"
-#include "petka/q_system.h"
 #include "petka/petka.h"
 
 namespace Petka {
 
-const uint32 kHeaderSize = 14 + 40;
-const uint32 kAdditionalDataSize = 8;
-
 QManager::QManager(PetkaEngine &vm)
 	: _vm(vm) {}
 
-QManager::~QManager() {
-	for (Common::HashMap<uint32, QResource>::iterator it = _resourceMap.begin(); it != _resourceMap.end(); ++it) {
-		destructResourceContent(it->_value);
-	}
-}
-
 bool QManager::init() {
 	clear();
+
 	Common::ScopedPtr<Common::SeekableReadStream> stream(_vm.openFile("resource.qrc", true));
 	if (!stream) {
 		return false;
@@ -70,10 +61,7 @@ bool QManager::init() {
 }
 
 Common::String QManager::findResourceName(uint32 id) const {
-	if (_nameMap.contains(id)) {
-		return _nameMap.getVal(id);
-	}
-	return "";
+	return _nameMap.contains(id) ? _nameMap.getVal(id) : "";
 }
 
 Common::String QManager::findSoundName(uint32 id) const {
@@ -88,43 +76,30 @@ Common::String QManager::findSoundName(uint32 id) const {
 
 void QManager::removeResource(uint32 id) {
 	if (_resourceMap.contains(id)) {
-		destructResourceContent(_resourceMap.getVal(id));
 		_resourceMap.erase(id);
 	}
 }
 
 void QManager::clearUnneeded() {
-	for (Common::HashMap<uint32, QResource>::iterator it = _resourceMap.begin(); it != _resourceMap.end(); ++it) {
+	for (auto it = _resourceMap.begin(); it != _resourceMap.end(); ++it) {
 		if (!_isAlwaysNeededMap.getVal(it->_key)) {
-			destructResourceContent(it->_value);
 			_resourceMap.erase(it);
 		}
 	}
 }
 
-Graphics::Surface *QManager::findOrCreateSurface(uint32 id, uint16 w, uint16 h) {
+Graphics::Surface *QManager::getSurface(uint32 id, uint16 w, uint16 h) {
 	if (_resourceMap.contains(id)) {
 		QResource &res = _resourceMap.getVal(id);
-		if (res.type != QResource::kSurface) {
-			return nullptr;
-		}
-		return res.surface;
+		return res.type == QResource::kSurface ? res.surface : nullptr;
 	}
 
 	QResource &res = _resourceMap.getVal(id);
 	res.type = QResource::kSurface;
 	res.surface = new Graphics::Surface;
 	res.surface->create(w, h, _vm._system->getScreenFormat());
-	return res.surface;
-}
 
-void QManager::destructResourceContent(QResource &res) {
-	if (res.type == QResource::kSurface) {
-		res.surface->free();
-		delete res.surface;
-	} else {
-		delete res.flcDecoder;
-	}
+	return res.surface;
 }
 
 Common::SeekableReadStream *QManager::loadFileStream(uint32 id) const {
@@ -132,13 +107,10 @@ Common::SeekableReadStream *QManager::loadFileStream(uint32 id) const {
 	return name.empty() ? nullptr : _vm.openFile(name, false);
 }
 
-Graphics::Surface *QManager::loadBitmap(uint32 id) {
+Graphics::Surface *QManager::getSurface(uint32 id) {
 	if (_resourceMap.contains(id)) {
 		QResource &res = _resourceMap.getVal(id);
-		if (res.type != QResource::kSurface) {
-			return nullptr;
-		}
-		return res.surface;
+		return res.type == QResource::kSurface ? res.surface : nullptr;
 	}
 
 	Common::ScopedPtr<Common::SeekableReadStream> stream(loadFileStream(id));
@@ -148,25 +120,19 @@ Graphics::Surface *QManager::loadBitmap(uint32 id) {
 
 	Graphics::Surface *s = loadBitmapSurface(*stream);
 	if (s) {
-		s->convertToInPlace(g_system->getScreenFormat());
-		_vm.getQSystem()->_sceneWidth = s->w;
-		_vm.getQSystem()->_xOffset = 0;
-
 		QResource &res = _resourceMap.getVal(id);
 		res.type = QResource::kSurface;
 		res.surface = s;
 		return res.surface;
 	}
+
 	return nullptr;
 }
 
-FlicDecoder *QManager::loadFlic(uint32 id) {
+FlicDecoder *QManager::getFlic(uint32 id) {
 	if (_resourceMap.contains(id)) {
 		QResource &res = _resourceMap.getVal(id);
-		if (res.type != QResource::kFlic) {
-			return nullptr;
-		}
-		return res.flcDecoder;
+		return res.type == QResource::kFlic ? res.flcDecoder : nullptr;
 	}
 
 	Common::String name = findResourceName(id);
@@ -174,28 +140,31 @@ FlicDecoder *QManager::loadFlic(uint32 id) {
 	if (!stream) {
 		return nullptr;
 	}
+
 	name.erase(name.size() - 3, 3);
 	name.toUppercase();
 	name += "MSK";
 
 	FlicDecoder *flc = new FlicDecoder;
 	flc->load(stream, _vm.openFile(name, false));
+
 	QResource &res = _resourceMap.getVal(id);
 	res.type = QResource::kFlic;
 	res.flcDecoder = flc;
+
 	return res.flcDecoder;
 }
 
 void QManager::clear() {
-	for (Common::HashMap<uint32, QResource>::iterator it = _resourceMap.begin(); it != _resourceMap.end(); ++it) {
-		destructResourceContent(it->_value);
-	}
 	_resourceMap.clear();
 	_nameMap.clear();
 	_isAlwaysNeededMap.clear();
 }
 
 Graphics::Surface *QManager::loadBitmapSurface(Common::SeekableReadStream &stream) {
+	const uint32 kHeaderSize = 14 + 40;
+	const uint32 kAdditionalDataSize = 8;
+
 	if (stream.readByte() != 'B')
 		return nullptr;
 
@@ -248,7 +217,17 @@ Graphics::Surface *QManager::loadBitmapSurface(Common::SeekableReadStream &strea
 	Image::BitmapDecoder decoder;
 	if (!decoder.loadStream(convBmpStream))
 		return nullptr;
+
 	return decoder.getSurface()->convertTo(g_system->getScreenFormat(), decoder.getPalette());
 }
 
+QManager::QResource::~QResource() {
+	if (type == QResource::kSurface && surface) {
+		surface->free();
+		delete surface;
+	} else {
+		delete flcDecoder;
+	}
+}
+
 } // End of namespace Petka
diff --git a/engines/petka/q_manager.h b/engines/petka/q_manager.h
index aad3658d89..dbb67fe109 100644
--- a/engines/petka/q_manager.h
+++ b/engines/petka/q_manager.h
@@ -39,39 +39,39 @@ class PetkaEngine;
 
 class FlicDecoder;
 
-struct QResource {
-	union {
-		Graphics::Surface *surface;
-		FlicDecoder *flcDecoder;
-	};
-	enum ResType {
-		kSurface,
-		kFlic
-	} type;
-};
-
 class QManager {
 public:
 	explicit QManager(PetkaEngine &vm);
-	~QManager();
 
 	bool init();
 
 	Common::String findResourceName(uint32 id) const;
 	Common::String findSoundName(uint32 id) const;
 
-	Graphics::Surface *findOrCreateSurface(uint32 id, uint16 w, uint16 h);
-	Graphics::Surface *loadBitmap(uint32 id);
-	FlicDecoder *loadFlic(uint32 id);
+	Graphics::Surface *getSurface(uint32 id, uint16 w, uint16 h);
+	Graphics::Surface *getSurface(uint32 id);
+	FlicDecoder *getFlic(uint32 id);
 
 	void removeResource(uint32 id);
 	void clearUnneeded();
 	void clear();
 
 private:
+	struct QResource {
+		union {
+			Graphics::Surface *surface;
+			FlicDecoder *flcDecoder;
+		};
+		enum ResType {
+			kSurface,
+			kFlic
+		} type;
+
+		~QResource();
+	};
+
 	Common::SeekableReadStream *loadFileStream(uint32 id) const;
 
-	static void destructResourceContent(QResource &resource);
 	static Graphics::Surface *loadBitmapSurface(Common::SeekableReadStream &stream);
 
 private:
diff --git a/engines/petka/q_system.cpp b/engines/petka/q_system.cpp
index 8cd5283ebf..8990ddf45c 100644
--- a/engines/petka/q_system.cpp
+++ b/engines/petka/q_system.cpp
@@ -312,8 +312,8 @@ void QSystem::save(Common::WriteStream *s) {
 	QObjectPetka *petka = getPetka();
 	QObjectChapayev *chapayev = getChapay();
 
-	FlicDecoder *petkaFlc = _vm.resMgr()->loadFlic(petka->_resourceId);
-	FlicDecoder *chapayFlc = _vm.resMgr()->loadFlic(chapayev->_resourceId);
+	FlicDecoder *petkaFlc = _vm.resMgr()->getFlic(petka->_resourceId);
+	FlicDecoder *chapayFlc = _vm.resMgr()->getFlic(chapayev->_resourceId);
 
 	s->writeSint32LE(petka->_x - petkaFlc->getCurrentFrame()->w * petka->_k * -0.5);
 	s->writeSint32LE(petka->_y + petkaFlc->getCurrentFrame()->h * petka->_k);




More information about the Scummvm-git-logs mailing list