MTROPOLIS: Add image effect modifier stub

This commit is contained in:
elasota 2022-09-23 02:00:48 -04:00
parent 3ebd9fc90a
commit d35b69d48b
5 changed files with 118 additions and 2 deletions

View File

@ -1650,6 +1650,20 @@ DataReadErrorCode GraphicModifier::load(DataReader &reader) {
return kDataReadErrorNone;
}
ImageEffectModifier::ImageEffectModifier() : flags(0), type(0), bevelWidth(0), toneAmount(0), unknown2{0, 0} {
}
DataReadErrorCode ImageEffectModifier::load(DataReader &reader) {
if (_revision != 1000)
return kDataReadErrorUnsupportedRevision;
if (!modHeader.load(reader) || !reader.readU32(flags) || !reader.readU16(type) || !applyWhen.load(reader) || !removeWhen.load(reader)
|| !reader.readU16(bevelWidth) || !reader.readU16(toneAmount) || !reader.readBytes(unknown2))
return kDataReadErrorReadFailed;
return kDataReadErrorNone;
}
CompoundVariableModifier::CompoundVariableModifier()
: modifierFlags(0), sizeIncludingTag(0), unknown1{0, 0}, guid(0), unknown4{0, 0, 0, 0, 0, 0}, unknown5(0),
editorLayoutPosition(Point::createDefault()), lengthOfName(0), numChildren(0), unknown7{0, 0, 0, 0} {
@ -2376,6 +2390,9 @@ DataReadErrorCode loadDataObject(const PlugInModifierRegistry &registry, DataRea
case DataObjectTypes::kGraphicModifier:
dataObject = new GraphicModifier();
break;
case DataObjectTypes::kImageEffectModifier:
dataObject = new ImageEffectModifier();
break;
case DataObjectTypes::kColorTableAsset:
dataObject = new ColorTableAsset();

View File

@ -95,7 +95,7 @@ enum DataObjectType {
kGraphicElement = 0x8,
kMovieElement = 0x5,
kMToonElement = 0x6, // NYI
kMToonElement = 0x6,
kImageElement = 0x7,
kSoundElement = 0xa,
kTextLabelElement = 0x15,
@ -121,7 +121,7 @@ enum DataObjectType {
kKeyboardMessengerModifier = 0x302,
kTextStyleModifier = 0x32a,
kGraphicModifier = 0x334,
kImageEffectModifier = 0x384, // NYI
kImageEffectModifier = 0x384,
kMiniscriptModifier = 0x3c0,
kCursorModifierV1 = 0x3ca, // NYI - Obsolete version
kGradientModifier = 0x4b0, // NYI
@ -1518,6 +1518,31 @@ protected:
DataReadErrorCode load(DataReader &reader) override;
};
struct ImageEffectModifier : public DataObject {
ImageEffectModifier();
enum Types {
kTypeInvert = 1,
kTypeSelectedBevels = 2,
kTypeDeselectedBevels = 3,
kTypeToneDown = 4,
kTypeToneUp = 5,
};
TypicalModifierHeader modHeader;
uint32 flags;
uint16 type;
Event applyWhen;
Event removeWhen;
uint16 bevelWidth;
uint16 toneAmount;
uint8 unknown2[2];
protected:
DataReadErrorCode load(DataReader &reader) override;
};
struct CompoundVariableModifier : public DataObject {
CompoundVariableModifier();

View File

@ -109,6 +109,8 @@ SIModifierFactory *getModifierFactoryForDataObjectType(const Data::DataObjectTyp
return ModifierFactory<TextStyleModifier, Data::TextStyleModifier>::getInstance();
case Data::DataObjectTypes::kGraphicModifier:
return ModifierFactory<GraphicModifier, Data::GraphicModifier>::getInstance();
case Data::DataObjectTypes::kImageEffectModifier:
return ModifierFactory<ImageEffectModifier, Data::ImageEffectModifier>::getInstance();
case Data::DataObjectTypes::kMessengerModifier:
return ModifierFactory<MessengerModifier, Data::MessengerModifier>::getInstance();
case Data::DataObjectTypes::kSetModifier:

View File

@ -2036,6 +2036,41 @@ const char *GraphicModifier::getDefaultName() const {
return "Graphic Modifier";
}
ImageEffectModifier::ImageEffectModifier() : _type(kTypeUnknown), _bevelWidth(0), _toneAmount(0), _includeBorders(false) {
}
bool ImageEffectModifier::load(ModifierLoaderContext &context, const Data::ImageEffectModifier &data) {
if (!loadTypicalHeader(data.modHeader) || !_applyWhen.load(data.applyWhen) || !_removeWhen.load(data.removeWhen))
return false;
_includeBorders = ((data.flags & 0x40000000) != 0);
_type = static_cast<Type>(data.type);
_bevelWidth = data.bevelWidth;
_toneAmount = data.toneAmount;
return true;
}
bool ImageEffectModifier::respondsToEvent(const Event &evt) const {
return _applyWhen.respondsTo(evt) || _removeWhen.respondsTo(evt);
}
VThreadState ImageEffectModifier::consumeMessage(Runtime *runtime, const Common::SharedPtr<MessageProperties> &msg) {
warning("Image effect modifier not implemented");
return kVThreadReturn;
}
void ImageEffectModifier::disable(Runtime *runtime) {
}
Common::SharedPtr<Modifier> ImageEffectModifier::shallowClone() const {
return Common::SharedPtr<Modifier>(new ImageEffectModifier(*this));
}
const char *ImageEffectModifier::getDefaultName() const {
return "Image Effect Modifier";
}
bool CompoundVariableModifier::load(ModifierLoaderContext &context, const Data::CompoundVariableModifier &data) {
if (data.numChildren > 0) {
ChildLoaderContext loaderContext;

View File

@ -799,6 +799,43 @@ private:
VisualElementRenderProperties _renderProps;
};
class ImageEffectModifier : public Modifier {
public:
ImageEffectModifier();
bool load(ModifierLoaderContext &context, const Data::ImageEffectModifier &data);
bool respondsToEvent(const Event &evt) const override;
VThreadState consumeMessage(Runtime *runtime, const Common::SharedPtr<MessageProperties> &msg) override;
void disable(Runtime *runtime) override;
#ifdef MTROPOLIS_DEBUG_ENABLE
const char *debugGetTypeName() const override { return "Image Effect Modifier"; }
SupportStatus debugGetSupportStatus() const override { return kSupportStatusNone; }
#endif
private:
enum Type {
kTypeUnknown = 0,
kTypeInvert = 1,
kTypeSelectedBevels,
kTypeDeselectedBevels,
kTypeToneDown,
kTypeToneUp,
};
Common::SharedPtr<Modifier> shallowClone() const override;
const char *getDefaultName() const override;
Event _applyWhen;
Event _removeWhen;
Type _type;
uint16 _bevelWidth;
uint16 _toneAmount;
bool _includeBorders;
};
// Compound variable modifiers are not true variable modifiers.
// They aren't treated as values by Miniscript and they aren't
// treated as unique objects by aliases. The only way that