[Scummvm-git-logs] scummvm master -> 1d5060c9d18f45065ccbcac4b95f8cffddf822ce
whiterandrek
whiterandrek at gmail.com
Mon May 25 22:35:20 UTC 2020
This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
03aaeb3c56 PETKA: implemented QMessageObject::processReaction
3d3e0a745d PETKA: moved handling cursor opcode to cursor object
80c1f80168 PETKA: named constant in cursor object
1d5060c9d1 PETKA: implemented QObjectCursor::setAction
Commit: 03aaeb3c5683a3e0a64cb818fbb309cb485726a7
https://github.com/scummvm/scummvm/commit/03aaeb3c5683a3e0a64cb818fbb309cb485726a7
Author: Andrei Prykhodko (whiterandrek at gmail.com)
Date: 2020-05-26T01:33:15+03:00
Commit Message:
PETKA: implemented QMessageObject::processReaction
Changed paths:
engines/petka/interfaces/dialog_interface.cpp
engines/petka/objects/heroes.cpp
engines/petka/objects/object.cpp
engines/petka/objects/object.h
diff --git a/engines/petka/interfaces/dialog_interface.cpp b/engines/petka/interfaces/dialog_interface.cpp
index 69a55db425..3e57b6c38c 100644
--- a/engines/petka/interfaces/dialog_interface.cpp
+++ b/engines/petka/interfaces/dialog_interface.cpp
@@ -143,7 +143,7 @@ void DialogInterface::onEndOpcode() {
if (_reaction) {
QReaction *reaction = _reaction;
_reaction = nullptr;
- processSavedReaction(reaction, _sender);
+ _sender->processReaction(reaction);
}
_sender = nullptr;
}
diff --git a/engines/petka/objects/heroes.cpp b/engines/petka/objects/heroes.cpp
index 2d52c0d11b..49b5f124ec 100644
--- a/engines/petka/objects/heroes.cpp
+++ b/engines/petka/objects/heroes.cpp
@@ -66,7 +66,7 @@ void QObjectPetka::processMessage(const QMessage &arg) {
if (msg.opcode == kWalked && _heroReaction) {
QReaction *reaction = _heroReaction;
_heroReaction = nullptr;
- processSavedReaction(reaction, _sender);
+ _sender->processReaction(reaction);
}
QMessageObject::processMessage(msg);
if (msg.opcode == kSet || msg.opcode == kPlay) {
diff --git a/engines/petka/objects/object.cpp b/engines/petka/objects/object.cpp
index b3b50f1b50..0e3b96913c 100644
--- a/engines/petka/objects/object.cpp
+++ b/engines/petka/objects/object.cpp
@@ -70,41 +70,6 @@ QMessageObject::QMessageObject() {
_reaction = nullptr;
}
-void processSavedReaction(QReaction *reaction, QMessageObject *sender) {
- for (uint i = 0; i < reaction->messages.size(); ++i) {
- QMessage &msg = reaction->messages[i];
- if (msg.opcode == kCheck && g_vm->getQSystem()->findObject(msg.objId)->_status != msg.arg1) {
- break;
- }
- g_vm->getQSystem()->addMessage(msg.objId, msg.opcode, msg.arg1, msg.arg2, msg.arg3, 0, sender);
- bool processed = true;
- switch (msg.opcode) {
- case kDialog: {
- g_vm->getQSystem()->_mainInterface->_dialog.setReaction(createReaction(reaction->messages.data() + i + 1, reaction->messages.end()));
- break;
- }
- case kPlay: {
- QMessageObject *obj = g_vm->getQSystem()->findObject(msg.objId);
- obj->setReaction(msg.arg1, createReaction(reaction->messages.data() + i + 1, reaction->messages.end()));
- break;
- }
- case kWalk:
- case kWalkTo:
- g_vm->getQSystem()->_petka->setReactionAfterWalk(i, reaction, sender, true);
- return;
- case kWalkVich:
- g_vm->getQSystem()->_chapayev->setReactionAfterWalk(i, reaction, sender, true);
- return;
- default:
- processed = false;
- break;
- }
- if (processed)
- break;
- }
- delete reaction;
-}
-
void QMessageObject::processMessage(const QMessage &msg) {
bool reacted = false;
for (uint i = 0; i < _reactions.size(); ++i) {
@@ -119,47 +84,7 @@ void QMessageObject::processMessage(const QMessage &msg) {
g_vm->getBigDialogue()->setHandler(_id, msg.opcode);
g_vm->getQSystem()->_mainInterface->_dialog.setSender(this);
}
- for (uint j = 0; j < r->messages.size(); ++j) {
- QMessage &rMsg = r->messages[j];
- if (rMsg.opcode == kCheck && g_vm->getQSystem()->findObject(rMsg.objId)->_status != rMsg.arg1) {
- break;
- }
- if (rMsg.opcode == kIf &&
- ((rMsg.arg1 != 0xffff && rMsg.arg1 != msg.arg1) ||
- (rMsg.arg2 != -1 && rMsg.arg2 != msg.arg2) ||
- (rMsg.arg3 != -1 && rMsg.arg3 != msg.arg3))) {
- break;
- }
- if (rMsg.opcode == kRandom && rMsg.arg2 != -1) {
- rMsg.arg1 = (int16) g_vm->getRnd().getRandomNumber((uint) (rMsg.arg2 - 1));
- }
- g_vm->getQSystem()->addMessage(rMsg.objId, rMsg.opcode, rMsg.arg1, rMsg.arg2, rMsg.arg3, rMsg.unk,
- rMsg.sender);
- bool processed = true;
- switch (rMsg.opcode) {
- case kDialog: {
- g_vm->getQSystem()->_mainInterface->_dialog.setReaction(createReaction(r->messages.data() + j + 1, r->messages.end()));
- break;
- }
- case kPlay: {
- QMessageObject *obj = g_vm->getQSystem()->findObject(rMsg.objId);
- obj->setReaction(rMsg.arg1, createReaction(r->messages.data() + j + 1, r->messages.end()));
- break;
- }
- case kWalk:
- case kWalkTo:
- g_vm->getQSystem()->_petka->setReactionAfterWalk(j, r, this, false);
- break;
- case kWalkVich:
- g_vm->getQSystem()->_chapayev->setReactionAfterWalk(j, r, this, false);
- break;
- default:
- processed = false;
- break;
- }
- if (processed)
- break;
- }
+ processReaction(r, &msg);
reacted = true;
}
@@ -247,7 +172,7 @@ void QMessageObject::processMessage(const QMessage &msg) {
if (_reaction && _reactionId == msg.arg1) {
QReaction *reaction = _reaction;
_reaction = nullptr;
- processSavedReaction(reaction, this);
+ processReaction(reaction);
}
break;
case kStatus:
@@ -387,6 +312,53 @@ void QMessageObject::setReaction(int16 id, QReaction *reaction) {
_reactionId = id;
}
+void QMessageObject::processReaction(QReaction *r, const QMessage *msg) {
+ bool deleteReaction = (msg == nullptr);
+ for (uint j = 0; j < r->messages.size(); ++j) {
+ QMessage &rMsg = r->messages[j];
+ if (rMsg.opcode == kCheck && g_vm->getQSystem()->findObject(rMsg.objId)->_status != rMsg.arg1) {
+ break;
+ }
+ if (msg && rMsg.opcode == kIf &&
+ ((rMsg.arg1 != 0xffff && rMsg.arg1 != msg->arg1) ||
+ (rMsg.arg2 != -1 && rMsg.arg2 != msg->arg2) ||
+ (rMsg.arg3 != -1 && rMsg.arg3 != msg->arg3))) {
+ break;
+ }
+ if (msg && rMsg.opcode == kRandom && rMsg.arg2 != -1) {
+ rMsg.arg1 = (int16) g_vm->getRnd().getRandomNumber((uint) (rMsg.arg2 - 1));
+ }
+ g_vm->getQSystem()->addMessage(rMsg.objId, rMsg.opcode, rMsg.arg1, rMsg.arg2, rMsg.arg3, rMsg.unk,
+ rMsg.sender);
+ bool processed = true;
+ switch (rMsg.opcode) {
+ case kDialog: {
+ g_vm->getQSystem()->_mainInterface->_dialog.setReaction(createReaction(r->messages.data() + j + 1, r->messages.end()));
+ break;
+ }
+ case kPlay: {
+ QMessageObject *obj = g_vm->getQSystem()->findObject(rMsg.objId);
+ obj->setReaction(rMsg.arg1, createReaction(r->messages.data() + j + 1, r->messages.end()));
+ break;
+ }
+ case kWalk:
+ case kWalkTo:
+ g_vm->getQSystem()->_petka->setReactionAfterWalk(j, r, this, deleteReaction);
+ return;
+ case kWalkVich:
+ g_vm->getQSystem()->_chapayev->setReactionAfterWalk(j, r, this, deleteReaction);
+ return;
+ default:
+ processed = false;
+ break;
+ }
+ if (processed)
+ break;
+ }
+ if (deleteReaction)
+ delete r;
+}
+
QObject::QObject() {
_animate = true;
_updateZ = true;
diff --git a/engines/petka/objects/object.h b/engines/petka/objects/object.h
index 1b5bdcb098..ea439dc654 100644
--- a/engines/petka/objects/object.h
+++ b/engines/petka/objects/object.h
@@ -27,8 +27,6 @@
namespace Petka {
-extern void processSavedReaction(QReaction *reaction, QMessageObject *sender);
-
class QVisibleObject {
public:
QVisibleObject();
@@ -57,6 +55,7 @@ public:
void show(bool v) override;
void setReaction(int16 id, QReaction *reaction);
virtual void processMessage(const QMessage &msg);
+ void processReaction(QReaction *reaction, const QMessage *msg = nullptr);
public:
int32 _x;
Commit: 3d3e0a745d75306551660764009ac846eb101db6
https://github.com/scummvm/scummvm/commit/3d3e0a745d75306551660764009ac846eb101db6
Author: Andrei Prykhodko (whiterandrek at gmail.com)
Date: 2020-05-26T01:33:15+03:00
Commit Message:
PETKA: moved handling cursor opcode to cursor object
Changed paths:
engines/petka/objects/object.cpp
engines/petka/objects/object_cursor.cpp
engines/petka/objects/object_cursor.h
diff --git a/engines/petka/objects/object.cpp b/engines/petka/objects/object.cpp
index 0e3b96913c..d5770fbb1d 100644
--- a/engines/petka/objects/object.cpp
+++ b/engines/petka/objects/object.cpp
@@ -108,19 +108,7 @@ void QMessageObject::processMessage(const QMessage &msg) {
g_vm->getQSystem()->_mainInterface->_dialog.endUserMsg();
break;
case kCursor:
- if (msg.arg1 == 0xffff) {
- g_vm->getQSystem()->_cursor->returnInvItem();
- g_vm->getQSystem()->_cursor->_resourceId = 5002;
- g_vm->getQSystem()->_cursor->_actionType = 0;
- g_vm->getQSystem()->_cursor->_invObj = nullptr;
- } else {
- g_vm->getQSystem()->_cursor->returnInvItem();
- g_vm->getQSystem()->_cursor->_resourceId = msg.arg1;
- g_vm->getQSystem()->_cursor->_actionType = kActionObjUse;
- g_vm->getQSystem()->_cursor->_invObj = this;
- _isShown = 0;
- _isActive = 0;
- }
+ g_vm->getQSystem()->_cursor->setInvItem(this, msg.arg1);
g_vm->videoSystem()->makeAllDirty();
break;
case kDialog:
diff --git a/engines/petka/objects/object_cursor.cpp b/engines/petka/objects/object_cursor.cpp
index 5ddf0f2847..a64bb079e1 100644
--- a/engines/petka/objects/object_cursor.cpp
+++ b/engines/petka/objects/object_cursor.cpp
@@ -116,4 +116,19 @@ void QObjectCursor::returnInvItem() {
}
}
+void QObjectCursor::setInvItem(QMessageObject *item, uint16 resourceId) {
+ returnInvItem();
+ if (resourceId != 0xffff) {
+ _resourceId = resourceId;
+ _actionType = kActionObjUse;
+ _invObj = item;
+ item->_isShown = false;
+ item->_isActive = false;
+ } else {
+ _resourceId = 5002;
+ _actionType = 0;
+ _invObj = nullptr;
+ }
+}
+
}
diff --git a/engines/petka/objects/object_cursor.h b/engines/petka/objects/object_cursor.h
index b007564859..297ff4bc20 100644
--- a/engines/petka/objects/object_cursor.h
+++ b/engines/petka/objects/object_cursor.h
@@ -46,6 +46,7 @@ public:
void draw() override;
void show(bool v) override;
bool isInPoint(int x, int y) override { return 0; }
+ void setInvItem(QMessageObject *item, uint16 resourceId);
void returnInvItem();
public:
Commit: 80c1f80168257f8866fdd64f042d6a0d4c70b265
https://github.com/scummvm/scummvm/commit/80c1f80168257f8866fdd64f042d6a0d4c70b265
Author: Andrei Prykhodko (whiterandrek at gmail.com)
Date: 2020-05-26T01:33:15+03:00
Commit Message:
PETKA: named constant in cursor object
Changed paths:
engines/petka/objects/object_cursor.cpp
diff --git a/engines/petka/objects/object_cursor.cpp b/engines/petka/objects/object_cursor.cpp
index a64bb079e1..4c9ddca301 100644
--- a/engines/petka/objects/object_cursor.cpp
+++ b/engines/petka/objects/object_cursor.cpp
@@ -37,15 +37,17 @@
namespace Petka {
+const int kResourceIdLook = 5002;
+
QObjectCursor::QObjectCursor() {
_id = 4097;
_z = 1000;
- _resourceId = 5002;
+ _resourceId = kResourceIdLook;
Common::Point pos = g_vm->getEventManager()->getMousePos();
_x = pos.x;
_y = pos.y;
- g_vm->resMgr()->loadFlic(5002);
- _actionType = kLook;
+ g_vm->resMgr()->loadFlic(kResourceIdLook);
+ _actionType = kActionLook;
_invObj = nullptr;
_name = "Cursor";
}
@@ -125,8 +127,8 @@ void QObjectCursor::setInvItem(QMessageObject *item, uint16 resourceId) {
item->_isShown = false;
item->_isActive = false;
} else {
- _resourceId = 5002;
- _actionType = 0;
+ _resourceId = kResourceIdLook;
+ _actionType = kActionLook;
_invObj = nullptr;
}
}
Commit: 1d5060c9d18f45065ccbcac4b95f8cffddf822ce
https://github.com/scummvm/scummvm/commit/1d5060c9d18f45065ccbcac4b95f8cffddf822ce
Author: Andrei Prykhodko (whiterandrek at gmail.com)
Date: 2020-05-26T01:33:15+03:00
Commit Message:
PETKA: implemented QObjectCursor::setAction
Changed paths:
engines/petka/interfaces/main.cpp
engines/petka/objects/object_cursor.cpp
engines/petka/objects/object_cursor.h
engines/petka/objects/object_star.cpp
diff --git a/engines/petka/interfaces/main.cpp b/engines/petka/interfaces/main.cpp
index 69cf150927..a02431a3aa 100644
--- a/engines/petka/interfaces/main.cpp
+++ b/engines/petka/interfaces/main.cpp
@@ -214,14 +214,8 @@ void InterfaceMain::onRightButtonDown(const Common::Point p) {
QObjectCursor *cursor = g_vm->getQSystem()->_cursor.get();
if (!star->_isActive)
return;
- if (g_vm->getQSystem()->_case.get()->_isShown && cursor->_actionType == 6) {
- cursor->show(0);
- cursor->_resourceId = 5005;
- cursor->returnInvItem();
- cursor->_actionType = 3;
- cursor->_invObj = nullptr;
- cursor->setCursorPos(p.x, p.y, 1);
- cursor->show(1);
+ if (g_vm->getQSystem()->_case.get()->_isShown && cursor->_actionType == kActionObjUse) {
+ cursor->setAction(kActionTake);
} else {
if (!star->_isShown) {
FlicDecoder *flc = g_vm->resMgr()->loadFlic(star->_resourceId);
diff --git a/engines/petka/objects/object_cursor.cpp b/engines/petka/objects/object_cursor.cpp
index 4c9ddca301..4e0f823be6 100644
--- a/engines/petka/objects/object_cursor.cpp
+++ b/engines/petka/objects/object_cursor.cpp
@@ -37,16 +37,16 @@
namespace Petka {
-const int kResourceIdLook = 5002;
+const int kCursorLook = 5002;
QObjectCursor::QObjectCursor() {
_id = 4097;
_z = 1000;
- _resourceId = kResourceIdLook;
+ _resourceId = kCursorLook;
Common::Point pos = g_vm->getEventManager()->getMousePos();
_x = pos.x;
_y = pos.y;
- g_vm->resMgr()->loadFlic(kResourceIdLook);
+ g_vm->resMgr()->loadFlic(kCursorLook);
_actionType = kActionLook;
_invObj = nullptr;
_name = "Cursor";
@@ -127,10 +127,19 @@ void QObjectCursor::setInvItem(QMessageObject *item, uint16 resourceId) {
item->_isShown = false;
item->_isActive = false;
} else {
- _resourceId = kResourceIdLook;
+ _resourceId = kCursorLook;
_actionType = kActionLook;
_invObj = nullptr;
}
}
+void QObjectCursor::setAction(int actionType) {
+ show(false);
+ returnInvItem();
+ _resourceId = kCursorLook + actionType;
+ _actionType = actionType;
+ _invObj = nullptr;
+ show(true);
+}
+
}
diff --git a/engines/petka/objects/object_cursor.h b/engines/petka/objects/object_cursor.h
index 297ff4bc20..842c27d17c 100644
--- a/engines/petka/objects/object_cursor.h
+++ b/engines/petka/objects/object_cursor.h
@@ -46,6 +46,7 @@ public:
void draw() override;
void show(bool v) override;
bool isInPoint(int x, int y) override { return 0; }
+ void setAction(int actionType);
void setInvItem(QMessageObject *item, uint16 resourceId);
void returnInvItem();
diff --git a/engines/petka/objects/object_star.cpp b/engines/petka/objects/object_star.cpp
index 23069dc915..53e9b99c61 100644
--- a/engines/petka/objects/object_star.cpp
+++ b/engines/petka/objects/object_star.cpp
@@ -75,11 +75,7 @@ void QObjectStar::onClick(int x, int y) {
g_vm->getQSystem()->_case->show(1);
} else {
QObjectCursor *cursor = g_vm->getQSystem()->_cursor.get();
- cursor->show(0);
- cursor->returnInvItem();
- cursor->_resourceId = button + kFirstCursorId;
- cursor->_actionType = button - 1;
- cursor->show(1);
+ cursor->setAction(button - 1);
}
show(0);
}
More information about the Scummvm-git-logs
mailing list