[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