[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