[Scummvm-git-logs] scummvm master -> a18de70b9537db9aa92f116131a116e3b2f499f8
elasota
noreply at scummvm.org
Sun Jun 26 02:16:17 UTC 2022
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
a18de70b95 MTROPOLIS: Add autoResetCursor attribute and fix up cursor refresh logic
Commit: a18de70b9537db9aa92f116131a116e3b2f499f8
https://github.com/scummvm/scummvm/commit/a18de70b9537db9aa92f116131a116e3b2f499f8
Author: elasota (ejlasota at gmail.com)
Date: 2022-06-25T22:15:59-04:00
Commit Message:
MTROPOLIS: Add autoResetCursor attribute and fix up cursor refresh logic
Changed paths:
engines/mtropolis/runtime.cpp
engines/mtropolis/runtime.h
diff --git a/engines/mtropolis/runtime.cpp b/engines/mtropolis/runtime.cpp
index 5a4b14dc4e3..658d07158c8 100644
--- a/engines/mtropolis/runtime.cpp
+++ b/engines/mtropolis/runtime.cpp
@@ -2314,6 +2314,10 @@ MiniscriptInstructionOutcome WorldManagerInterface::writeRefAttribute(Miniscript
DynamicValueWriteFuncHelper<WorldManagerInterface, &WorldManagerInterface::setRefreshCursor>::create(this, result);
return kMiniscriptInstructionOutcomeContinue;
}
+ if (attrib == "autoresetcursor") {
+ DynamicValueWriteFuncHelper<WorldManagerInterface, &WorldManagerInterface::setAutoResetCursor>::create(this, result);
+ return kMiniscriptInstructionOutcomeContinue;
+ }
return RuntimeObject::writeRefAttribute(thread, result, attrib);
}
@@ -2354,6 +2358,15 @@ MiniscriptInstructionOutcome WorldManagerInterface::setRefreshCursor(MiniscriptT
return kMiniscriptInstructionOutcomeContinue;
}
+MiniscriptInstructionOutcome WorldManagerInterface::setAutoResetCursor(MiniscriptThread *thread, const DynamicValue &value) {
+ if (value.getType() != DynamicValueTypes::kBoolean)
+ return kMiniscriptInstructionOutcomeFailed;
+
+ thread->getRuntime()->setAutoResetCursor(value.getBool());
+
+ return kMiniscriptInstructionOutcomeContinue;
+}
+
SystemInterface::SystemInterface() : _masterVolume(kFullVolume) {
}
@@ -3541,8 +3554,8 @@ Runtime::Runtime(OSystem *system, Audio::Mixer *mixer, ISaveUIProvider *saveProv
_displayWidth(1024), _displayHeight(768), _realTimeBase(0), _playTimeBase(0), _sceneTransitionState(kSceneTransitionStateNotTransitioning),
_lastFrameCursor(nullptr), _defaultCursor(new DefaultCursorGraphic()), _platform(kProjectPlatformUnknown),
_cachedMousePosition(Common::Point(0, 0)), _realMousePosition(Common::Point(0, 0)), _trackedMouseOutside(false),
- _forceCursorRefreshOnce(true), _haveModifierOverrideCursor(false), _sceneGraphChanged(false), _isQuitting(false),
- _collisionCheckTime(0), _defaultVolumeState(true) {
+ _forceCursorRefreshOnce(true), _autoResetCursor(false), _haveModifierOverrideCursor(false), _sceneGraphChanged(false), _isQuitting(false),
+ _collisionCheckTime(0), _defaultVolumeState(true) {
_random.reset(new Common::RandomSource("mtropolis"));
_vthread.reset(new VThread());
@@ -3660,6 +3673,9 @@ bool Runtime::runFrame() {
if (_forceCursorRefreshOnce) {
_forceCursorRefreshOnce = false;
+
+ _mouseOverObject.reset();
+
UpdateMousePositionTaskData *taskData = _vthread->pushTask("Runtime::updateMousePositionTask", this, &Runtime::updateMousePositionTask);
taskData->x = _cachedMousePosition.x;
taskData->y = _cachedMousePosition.y;
@@ -3971,6 +3987,12 @@ void Runtime::executeLowLevelSceneStateTransition(const LowLevelSceneStateTransi
_pendingTeardowns.push_back(teardown);
} break;
+ case LowLevelSceneStateTransitionAction::kAutoResetCursor:
+ if (_autoResetCursor) {
+ clearModifierCursorOverride();
+ forceCursorRefreshOnce();
+ }
+ break;
default:
assert(false);
break;
@@ -4023,6 +4045,7 @@ void Runtime::executeCompleteTransitionToScene(const Common::SharedPtr<Structura
}
{
+ _pendingLowLevelTransitions.push_back(LowLevelSceneStateTransitionAction(targetSharedScene, LowLevelSceneStateTransitionAction::kAutoResetCursor));
_pendingLowLevelTransitions.push_back(LowLevelSceneStateTransitionAction(targetScene, LowLevelSceneStateTransitionAction::kLoad));
queueEventAsLowLevelSceneStateTransitionAction(Event::create(EventIDs::kParentEnabled, 0), targetScene.get(), true, true);
queueEventAsLowLevelSceneStateTransitionAction(Event::create(EventIDs::kSceneStarted, 0), targetScene.get(), true, true);
@@ -5017,7 +5040,6 @@ void Runtime::clearModifierCursorOverride() {
if (_haveModifierOverrideCursor) {
_haveModifierOverrideCursor = false;
updateMainWindowCursor();
-
}
}
@@ -5025,6 +5047,10 @@ void Runtime::forceCursorRefreshOnce() {
_forceCursorRefreshOnce = true;
}
+void Runtime::setAutoResetCursor(bool enabled) {
+ _autoResetCursor = enabled;
+}
+
bool Runtime::isAwaitingSceneTransition() const {
return _sceneTransitionState != kSceneTransitionStateNotTransitioning;
}
diff --git a/engines/mtropolis/runtime.h b/engines/mtropolis/runtime.h
index afcd87efe89..9fdafa0c3f9 100644
--- a/engines/mtropolis/runtime.h
+++ b/engines/mtropolis/runtime.h
@@ -1239,6 +1239,7 @@ struct LowLevelSceneStateTransitionAction {
kLoad,
kUnload,
kSendMessage,
+ kAutoResetCursor,
};
explicit LowLevelSceneStateTransitionAction(const Common::SharedPtr<MessageDispatch> &msg);
@@ -1526,6 +1527,7 @@ public:
void setModifierCursorOverride(uint32 cursorID);
void clearModifierCursorOverride();
void forceCursorRefreshOnce();
+ void setAutoResetCursor(bool enabled);
bool isAwaitingSceneTransition() const;
@@ -1739,6 +1741,7 @@ private:
Common::Point _mouseTrackingObjectInitialOrigin;
bool _trackedMouseOutside;
bool _forceCursorRefreshOnce;
+ bool _autoResetCursor;
uint32 _modifierOverrideCursorID;
bool _haveModifierOverrideCursor;
@@ -1852,6 +1855,7 @@ public:
private:
MiniscriptInstructionOutcome setCurrentScene(MiniscriptThread *thread, const DynamicValue &value);
MiniscriptInstructionOutcome setRefreshCursor(MiniscriptThread *thread, const DynamicValue &value);
+ MiniscriptInstructionOutcome setAutoResetCursor(MiniscriptThread *thread, const DynamicValue &value);
};
class AssetManagerInterface : public RuntimeObject {
More information about the Scummvm-git-logs
mailing list