[Scummvm-git-logs] scummvm master -> c8460ec759c4d6b77e0efb1d5128802f2131515e

elasota noreply at scummvm.org
Wed Sep 4 23:51:32 UTC 2024


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:
c8460ec759 MTROPOLIS: Fix incorrect media cue source union construction


Commit: c8460ec759c4d6b77e0efb1d5128802f2131515e
    https://github.com/scummvm/scummvm/commit/c8460ec759c4d6b77e0efb1d5128802f2131515e
Author: elasota (1137273+elasota at users.noreply.github.com)
Date: 2024-09-04T19:50:18-04:00

Commit Message:
MTROPOLIS: Fix incorrect media cue source union construction

Changed paths:
    engines/mtropolis/plugin/standard.cpp
    engines/mtropolis/plugin/standard.h


diff --git a/engines/mtropolis/plugin/standard.cpp b/engines/mtropolis/plugin/standard.cpp
index 2fa5a21f8e0..760425d9b62 100644
--- a/engines/mtropolis/plugin/standard.cpp
+++ b/engines/mtropolis/plugin/standard.cpp
@@ -262,8 +262,11 @@ MediaCueMessengerModifier::MediaCueMessengerModifier(const MediaCueMessengerModi
 	}
 }
 
-
 MediaCueMessengerModifier::~MediaCueMessengerModifier() {
+	destructCueSource();
+}
+
+void MediaCueMessengerModifier::destructCueSource() {
 	switch (_cueSourceType) {
 	case kCueSourceInteger:
 		_cueSource.destruct<int32, &CueSourceUnion::asInt>();
@@ -316,30 +319,40 @@ bool MediaCueMessengerModifier::load(const PlugInModifierLoaderContext &context,
 	if (!_mediaCue.send.load(data.sendEvent, messageFlags, data.with, data.destination))
 		return false;
 
+	destructCueSource();
+
 	switch (data.executeAt.type) {
 	case Data::PlugInTypeTaggedValue::kInteger:
+		_cueSource.construct<int32, &CueSourceUnion::asInt>(data.executeAt.value.asInt);
 		_cueSourceType = kCueSourceInteger;
-		_cueSource.asInt = data.executeAt.value.asInt;
-		break;
-	case Data::PlugInTypeTaggedValue::kIntegerRange:
-		_cueSourceType = kCueSourceIntegerRange;
-		if (!_cueSource.asIntRange.load(data.executeAt.value.asIntRange))
-			return false;
 		break;
+	case Data::PlugInTypeTaggedValue::kIntegerRange: {
+			IntRange intRange;
+			if (!intRange.load(data.executeAt.value.asIntRange))
+				return false;
+
+			_cueSource.construct<IntRange, &CueSourceUnion::asIntRange>(intRange);
+			_cueSourceType = kCueSourceIntegerRange;
+		} break;
 	case Data::PlugInTypeTaggedValue::kVariableReference:
+		_cueSource.construct<uint32, &CueSourceUnion::asVarRefGUID>(data.executeAt.value.asVarRefGUID);
 		_cueSourceType = kCueSourceVariableReference;
-		_cueSource.asVarRefGUID = data.executeAt.value.asVarRefGUID;
-		break;
-	case Data::PlugInTypeTaggedValue::kLabel:
-		_cueSourceType = kCueSourceLabel;
-		if (!_cueSource.asLabel.load(data.executeAt.value.asLabel))
-			return false;
 		break;
+	case Data::PlugInTypeTaggedValue::kLabel: {
+			Label label;
+			if (!label.load(data.executeAt.value.asLabel))
+				return false;
+
+			_cueSource.construct<Label, &CueSourceUnion::asLabel>(label);
+			_cueSourceType = kCueSourceLabel;
+		} break;
 	case Data::PlugInTypeTaggedValue::kString:
+		_cueSource.construct<Common::String, &CueSourceUnion::asString>(data.executeAt.value.asString);
 		_cueSourceType = kCueSourceString;
-		_cueSource.asString = data.executeAt.value.asString;
 		break;
 	default:
+		_cueSource.construct<uint64, &CueSourceUnion::asUnset>(0);
+		_cueSourceType = kCueSourceInvalid;
 		return false;
 	}
 
diff --git a/engines/mtropolis/plugin/standard.h b/engines/mtropolis/plugin/standard.h
index 128b891d051..1cdb947fca8 100644
--- a/engines/mtropolis/plugin/standard.h
+++ b/engines/mtropolis/plugin/standard.h
@@ -149,6 +149,8 @@ private:
 
 	MediaCueMessengerModifier(const MediaCueMessengerModifier &other);
 
+	void destructCueSource();
+
 	Common::SharedPtr<Modifier> shallowClone() const override;
 	const char *getDefaultName() const override;
 




More information about the Scummvm-git-logs mailing list