mirror of
https://github.com/amyinspace/MagicSetEditor2.git
synced 2026-06-10 04:57:00 -04:00
Added 'or else' construct to script language.
git-svn-id: svn://svn.code.sf.net/p/magicseteditor/code/trunk@423 0fc631ac-6414-0410-93d0-97cfa31319b6
This commit is contained in:
+27
-5
@@ -12,18 +12,31 @@
|
||||
#include <util/dynamic_arg.hpp>
|
||||
#include <util/io/package.hpp>
|
||||
#include <gfx/generated_image.hpp>
|
||||
#include <data/field/image.hpp>
|
||||
|
||||
// ----------------------------------------------------------------------------- : Utility
|
||||
|
||||
// convert any script value to a GeneratedImageP
|
||||
GeneratedImageP image_from_script(const ScriptValueP& value) {
|
||||
if (value->type() == SCRIPT_STRING) {
|
||||
return new_intrusive1<PackagedImage>(value->toString());
|
||||
} else {
|
||||
ScriptType t = value->type();
|
||||
if (t == SCRIPT_IMAGE) {
|
||||
GeneratedImageP img = dynamic_pointer_cast<GeneratedImage>(value);
|
||||
if (!img) throw ScriptError(_ERROR_2_("can't convert", value->typeName(), _TYPE_("image")));
|
||||
return img;
|
||||
if (img) return img;
|
||||
} else if (t == SCRIPT_STRING) {
|
||||
return new_intrusive1<PackagedImage>(value->toString());
|
||||
} else if (t == SCRIPT_NIL) {
|
||||
return new_intrusive<BlankImage>();
|
||||
} else if (t == SCRIPT_OBJECT) {
|
||||
// maybe it's an image value?
|
||||
intrusive_ptr<ScriptObject<ValueP> > v = dynamic_pointer_cast<ScriptObject<ValueP> >(value);
|
||||
if (v) {
|
||||
ImageValueP iv = dynamic_pointer_cast<ImageValue>(v->getValue());
|
||||
if (iv) {
|
||||
return new_intrusive2<ImageValueToImage>(iv->filename, iv->last_update);
|
||||
}
|
||||
}
|
||||
}
|
||||
throw ScriptError(_ERROR_2_("can't convert", value->typeName(), _TYPE_("image")));
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------- : ScriptableImage
|
||||
@@ -100,6 +113,15 @@ bool ScriptableImage::update(Context& ctx) {
|
||||
}
|
||||
}
|
||||
|
||||
ScriptP ScriptableImage::getScriptP() {
|
||||
if (script) return script.getScriptP();
|
||||
// return value or a blank image
|
||||
ScriptP s(new Script);
|
||||
s->addInstruction(I_PUSH_CONST, value ? static_pointer_cast<ScriptValue>(value) : script_nil);
|
||||
s->addInstruction(I_RET);
|
||||
return s;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------- : Reflection
|
||||
|
||||
// we need some custom io, because the behaviour is different for each of Reader/Writer/GetMember
|
||||
|
||||
Reference in New Issue
Block a user