#include "precomp.h" #include #include #include #include const wchar_t animLayerXuiObjectStr[] = L"AnimatedLayer"; // This is the xml tag char animLayerXuiSvcName[] = "Animated Layer xui object"; // this is the name of the xuiservice AnimLayerScriptController _animlayerController; AnimLayerScriptController *animlayerController = &_animlayerController; // -- Functions table ------------------------------------- function_descriptor_struct AnimLayerScriptController::exportedFunction[] = { {L"setSpeed", 1, (void*)AnimatedLayer::script_vcpu_setSpeed }, {L"gotoFrame", 1, (void*)AnimatedLayer::script_vcpu_gotoFrame }, {L"setStartFrame", 1, (void*)AnimatedLayer::script_vcpu_setStartFrame }, {L"setEndFrame", 1, (void*)AnimatedLayer::script_vcpu_setEndFrame }, {L"setAutoReplay", 1, (void*)AnimatedLayer::script_vcpu_setAutoReplay }, {L"play", 0, (void*)AnimatedLayer::script_vcpu_play }, {L"togglePause", 0, (void*)AnimatedLayer::script_vcpu_pause }, {L"stop", 0, (void*)AnimatedLayer::script_vcpu_stop }, {L"pause", 0, (void*)AnimatedLayer::script_vcpu_pause }, {L"isPlaying", 0, (void*)AnimatedLayer::script_vcpu_isPlaying }, {L"isPaused", 0, (void*)AnimatedLayer::script_vcpu_isPaused }, {L"isStopped", 0, (void*)AnimatedLayer::script_vcpu_isStopped }, {L"getStartFrame", 0, (void*)AnimatedLayer::script_vcpu_getStartFrame }, {L"getEndFrame", 0, (void*)AnimatedLayer::script_vcpu_getEndFrame }, {L"getLength", 0, (void*)AnimatedLayer::script_vcpu_getLength }, {L"getDirection", 0, (void*)AnimatedLayer::script_vcpu_getDirection }, {L"getAutoReplay", 0, (void*)AnimatedLayer::script_vcpu_getAutoReplay }, {L"getCurFrame", 0, (void*)AnimatedLayer::script_vcpu_getCurFrame }, {L"onPlay", 0, (void*)AnimatedLayer::script_vcpu_onPlay }, {L"onPause", 0, (void*)AnimatedLayer::script_vcpu_onPause }, {L"onResume", 0, (void*)AnimatedLayer::script_vcpu_onResume }, {L"onStop", 0, (void*)AnimatedLayer::script_vcpu_onStop }, {L"onFrame", 1, (void*)AnimatedLayer::script_vcpu_onFrame }, {L"setRealtime", 1, (void*)AnimatedLayer::script_vcpu_setRealtime }, }; // -------------------------------------------------------- const wchar_t *AnimLayerScriptController::getClassName() { return L"AnimatedLayer"; } const wchar_t *AnimLayerScriptController::getAncestorClassName() { return L"Layer"; } ScriptObject *AnimLayerScriptController::instantiate() { AnimatedLayer *a = new AnimatedLayer; ASSERT(a != NULL); return a->getScriptObject(); } void AnimLayerScriptController::destroy(ScriptObject *o) { AnimatedLayer *a = static_cast(o->vcpu_getInterface(animLayerGuid)); ASSERT(a != NULL); delete a; } void *AnimLayerScriptController::encapsulate(ScriptObject *o) { return NULL; // no encapsulation for animatedlayer yet } void AnimLayerScriptController::deencapsulate(void *o) {} int AnimLayerScriptController::getNumFunctions() { return sizeof(exportedFunction) / sizeof(function_descriptor_struct); } const function_descriptor_struct *AnimLayerScriptController::getExportedFunctions() { return exportedFunction; } GUID AnimLayerScriptController::getClassGuid() { return animLayerGuid; } XMLParamPair AnimatedLayer::params[] = { {ANIMLAYER_AUTOPLAY, L"AUTOPLAY"}, {ANIMLAYER_AUTOREPLAY, L"AUTOREPLAY"}, {ANIMLAYER_DEBUG, L"DEBUG"}, {ANIMLAYER_ELEMENTFRAMES, L"ELEMENTFRAMES"}, {ANIMLAYER_END, L"END"}, {ANIMLAYER_FRAMEHEIGHT, L"FRAMEHEIGHT"}, {ANIMLAYER_FRAMEWIDTH, L"FRAMEWIDTH"}, {ANIMLAYER_REALTIME, L"REALTIME"}, {ANIMLAYER_SPEED, L"SPEED"}, {ANIMLAYER_START, L"START"}, }; AnimatedLayer::AnimatedLayer() { getScriptObject()->vcpu_setInterface(animLayerGuid, (void *)static_cast(this)); getScriptObject()->vcpu_setClassName(L"AnimatedLayer"); getScriptObject()->vcpu_setController(animlayerController); autoplay = 0; startframe = -1; endframe = -1; curframe = 0; autoreplay = 1; speed = 200; timerset = 0; status = ANIM_STOPPED; realtime = 0; debug = 0; style = ANIM_UNKNOWN; oldstyle = ANIM_UNKNOWN; frameHeight = AUTOWH; frameWidth = AUTOWH; multiple_elements_frames = 0; xuihandle = newXuiHandle(); CreateXMLParameters(xuihandle); } void AnimatedLayer::CreateXMLParameters(int master_handle) { //ANIMLAYER_PARENT::CreateXMLParameters(master_handle); int numParams = sizeof(params) / sizeof(params[0]); hintNumberOfParams(xuihandle, numParams); for (int i = 0;i < numParams;i++) addParam(xuihandle, params[i], XUI_ATTRIBUTE_IMPLIED); } AnimatedLayer::~AnimatedLayer() { bitmap_elements.deleteAll(); regionlist.deleteAll(); } int AnimatedLayer::onInit() { ANIMLAYER_PARENT::onInit(); int w, h; getGuiObject()->guiobject_getGuiPosition(NULL, NULL, &w, &h, NULL, NULL, NULL, NULL); if (frameWidth == AUTOWH && w != AUTOWH) setWidth(w, 1); if (frameHeight == AUTOWH && h != AUTOWH) setHeight(h, 1); if (style == 0) { SkinBitmap *bm = getBitmap(); if (bm) { if (bm->getWidth() != w) style = ANIM_HORZ; else if (bm->getHeight() != h) style = ANIM_VERT; } } if (getRegionOp()) makeRegion(); reloadMultipleElements(); if (autoplay) { if (startframe == -1) setStartFrame(0); if (endframe == -1) setEndFrame(getLength() - 1); play(); } return 1; } int AnimatedLayer::setXuiParam(int _xuihandle, int xmlattributeid, const wchar_t *xmlattributename, const wchar_t *strvalue) { if (xuihandle == _xuihandle) { switch (xmlattributeid) { case ANIMLAYER_AUTOREPLAY: setAutoReplay(WTOI(strvalue)); return 1; case ANIMLAYER_AUTOPLAY: setAutoPlay(WTOI(strvalue)); return 1; case ANIMLAYER_SPEED: setSpeed(WTOI(strvalue)); return 1; case ANIMLAYER_FRAMEHEIGHT: setHeight(WTOI(strvalue)); return 1; case ANIMLAYER_FRAMEWIDTH: setWidth(WTOI(strvalue)); return 1; case ANIMLAYER_REALTIME: setRealtime(WTOI(strvalue)); return 1; case ANIMLAYER_ELEMENTFRAMES: setElementFrames(WTOI(strvalue)); return 1; case ANIMLAYER_START: setStartFrame(WTOI(strvalue)); return 1; case ANIMLAYER_END: setEndFrame(WTOI(strvalue)); return 1; case ANIMLAYER_DEBUG: debug = WTOI(strvalue); return 1; } } return ANIMLAYER_PARENT::setXuiParam(_xuihandle, xmlattributeid, xmlattributename, strvalue); } void AnimatedLayer::_invalidate() { if (realtime) { if (isVisible() && !isMinimized()) cascadeRepaint(); } else invalidate(); } void AnimatedLayer::setElementFrames(int n) { if (multiple_elements_frames == n) return ; multiple_elements_frames = n; if (n > 0) { if (style != ANIM_MULTI) oldstyle = style; style = ANIM_MULTI; } else { style = oldstyle; oldstyle = ANIM_UNKNOWN; } invalidateRegionCache(); } void AnimatedLayer::setHeight(int h, int selfset) { ASSERTPR(selfset || style == ANIM_UNKNOWN, "can't set frameHeight if frameWidth has already been set"); frameHeight = h; if (!selfset) style = ANIM_VERT; } int AnimatedLayer::getHeight() { if (style == ANIM_MULTI) { SkinBitmap *bm0 = getElementBitmap(0); if (bm0 == NULL) return AUTOWH; return bm0->getHeight(); } if (style == ANIM_HORZ) return ANIMLAYER_PARENT::getHeight(); return frameHeight; } void AnimatedLayer::setWidth(int w, int selfset) { ASSERTPR(selfset || style == ANIM_UNKNOWN, "can't set frameWidth if frameHeight has already been set"); frameWidth = w; if (!selfset) style = ANIM_HORZ; } int AnimatedLayer::getWidth() { if (style == ANIM_MULTI) { SkinBitmap *bm0 = getElementBitmap(0); if (bm0 == NULL) return AUTOWH; return bm0->getWidth(); } if (style == ANIM_VERT) return ANIMLAYER_PARENT::getWidth(); return frameWidth; } void AnimatedLayer::setRealtime(int r) { realtime = r; } int AnimatedLayer::getLength() { if (style == ANIM_VERT && frameHeight < 0) return 0; if (style == ANIM_HORZ && frameWidth < 0) return 0; ASSERT(getBitmap() != NULL); if (style == ANIM_VERT) return ANIMLAYER_PARENT::getHeight() / frameHeight; else if (style == ANIM_HORZ) return ANIMLAYER_PARENT::getWidth() / frameWidth; else if (style == ANIM_MULTI) return multiple_elements_frames; return 0; } void AnimatedLayer::timerCallback(int id) { switch (id) { case TIMER_ANIM: { int oldframe = curframe; for (int i = 0;i < timerclient_getSkipped() + 1;i++) { if (curframe == getEndFrame()) { if (!autoreplay) { stop(); break; } else curframe = getStartFrame(); } else { curframe += getDirection(); if (curframe != oldframe) script_onFrame(curframe); } } if (curframe != oldframe) _invalidate(); break; } default: ANIMLAYER_PARENT::timerCallback(id); break; } } int AnimatedLayer::getSourceOffsetY() { if (style == ANIM_MULTI) return 0; if (style == ANIM_HORZ) return 0; if (curframe > getLength() - 1) return 0; return curframe * getHeight(); } int AnimatedLayer::getSourceOffsetX() { if (style == ANIM_MULTI) return 0; if (style == ANIM_VERT) return 0; if (curframe > getLength() - 1) return 0; return curframe * getWidth(); } void AnimatedLayer::setSpeed(int s) { speed = s; if (status == ANIM_PLAYING) { stopTimer(); startTimer(); } } void AnimatedLayer::stopTimer() { if (timerset) { killTimer(TIMER_ANIM); timerset = 0; } } void AnimatedLayer::startTimer() { if (!timerset) { setTimer(TIMER_ANIM, speed); timerset = 1; } } void AnimatedLayer::play() { gotoFrame(startframe); startTimer(); status = ANIM_PLAYING; script_onPlay(); } void AnimatedLayer::stop() { stopTimer(); status = ANIM_STOPPED; script_onStop(); } void AnimatedLayer::pause() { if (status == ANIM_PAUSED) { startTimer(); status = ANIM_PLAYING; script_onResume(); } else if (status == ANIM_PLAYING) { stopTimer(); status = ANIM_PAUSED; script_onPause(); } } int AnimatedLayer::getCurFrame() { return curframe; } void AnimatedLayer::setStartFrame(int s) { if (s < 0) return ; startframe = s; } void AnimatedLayer::setEndFrame(int e) { if (e < 0) return ; endframe = e; } void AnimatedLayer::setAutoReplay(int r) { autoreplay = r; } void AnimatedLayer::setAutoPlay(int r) { autoplay = r; // no need to trigger an event here, we can't be in a script if we // need to autoplay at xml loading } int AnimatedLayer::getStartFrame() { return startframe == -1 ? 0 : startframe; } int AnimatedLayer::getEndFrame() { return endframe == -1 ? getLength() - 1 : endframe; } int AnimatedLayer::getSpeed() { return speed; } int AnimatedLayer::isPlaying() { return status == ANIM_PLAYING; } int AnimatedLayer::isStopped() { return status == ANIM_STOPPED; } int AnimatedLayer::isPaused() { return status == ANIM_PAUSED; } int AnimatedLayer::getAutoReplay() { return autoreplay; } int AnimatedLayer::getDirection() { return getStartFrame() < getEndFrame() ? 1 : -1; } void AnimatedLayer::gotoFrame(int n) { if (n != curframe) { curframe = n; _invalidate(); script_onFrame(n); } } api_region *AnimatedLayer::getBitmapRegion() { if (curframe > getLength() - 1) return NULL; return regionlist.enumItem(getCurFrame()); } void AnimatedLayer::makeRegion() { if (!isInited()) return ; regionlist.deleteAll(); for (int i = 0;i < getLength();i++) { RegionI *rg; if (style == ANIM_VERT) { RECT g = {0, i * getHeight(), getWidth(), i * getHeight() + getHeight()}; rg = new RegionI(getBitmap(), &g, 0, -i * getHeight(), FALSE); } else if (style == ANIM_HORZ) { RECT g = {i * getWidth(), 0, i * getWidth() + getWidth(), getHeight()}; rg = new RegionI(getBitmap(), &g, -i * getWidth(), 0, FALSE); } else if (style == ANIM_MULTI) { RECT g = {0, 0, getWidth(), getHeight()}; rg = new RegionI(getElementBitmap(i), &g, 0, 0, FALSE); } else return; regionlist.addItem(rg); } } void AnimatedLayer::deleteRegion() { regionlist.deleteAll(); } SkinBitmap *AnimatedLayer::getBitmap() { if (style != ANIM_MULTI) return layer_getBitmap(); return getElementBitmap(getCurFrame()); } SkinBitmap *AnimatedLayer::getElementBitmap(int n) { return bitmap_elements.enumItem(n); } void AnimatedLayer::reloadMultipleElements() { bitmap_elements.deleteAll(); if (style != ANIM_MULTI) return ; // basically blah$$$$.png becomes blah0000.png, blah0001.png etc for (int i = 0;i < multiple_elements_frames;i++) { StringW elementname(layer_getBitmapName()); elementname.replaceNumericField(i); bitmap_elements.addItem(new SkinBitmap(elementname)); } } void AnimatedLayer::setBitmap(const wchar_t *name) { ANIMLAYER_PARENT::setBitmap(name); reloadMultipleElements(); } // Script virtuals int AnimatedLayer::script_getStartFrame() { return getStartFrame(); } int AnimatedLayer::script_getEndFrame() { return getEndFrame(); } int AnimatedLayer::script_getSpeed() { return getSpeed(); } int AnimatedLayer::script_getCurFrame() { return getCurFrame(); } int AnimatedLayer::script_getDirection() { return getDirection(); } int AnimatedLayer::script_getAutoReplay() { return getAutoReplay(); } int AnimatedLayer::script_getLength() { return getLength(); } int AnimatedLayer::script_isPlaying() { return isPlaying(); } int AnimatedLayer::script_isStopped() { return isStopped(); } int AnimatedLayer::script_isPaused() { return isPaused(); } void AnimatedLayer::script_play() { play(); } void AnimatedLayer::script_pause() { pause(); } void AnimatedLayer::script_stop() { stop(); } void AnimatedLayer::script_setStartFrame(int s) { setStartFrame(s); } void AnimatedLayer::script_setEndFrame(int e) { setEndFrame(e); } void AnimatedLayer::script_setRealtime(int r) { setRealtime(r); } void AnimatedLayer::script_setAutoReplay(int r) { setAutoReplay(r); } /* void AnimatedLayer::script_gotoFrame(int n) { gotoFrame(n); }*/ void AnimatedLayer::script_setSpeed(int n) { setSpeed(n); } void AnimatedLayer::script_onPause() { script_vcpu_onPause(SCRIPT_CALL, getScriptObject()); } void AnimatedLayer::script_onResume() { script_vcpu_onResume(SCRIPT_CALL, getScriptObject()); } void AnimatedLayer::script_onStop() { script_vcpu_onStop(SCRIPT_CALL, getScriptObject()); } void AnimatedLayer::script_onPlay() { script_vcpu_onPlay(SCRIPT_CALL, getScriptObject()); } void AnimatedLayer::script_onFrame(int n) { if (getRegionOp()) { invalidateRegionCache(); getParent()->invalidateWindowRegion(); } scriptVar _n = SOM::makeVar(SCRIPT_INT); SOM::assign(&_n, n); script_vcpu_onFrame(SCRIPT_CALL, getScriptObject(), _n); } // end virtuals // VCPU scriptVar AnimatedLayer::script_vcpu_gotoFrame(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar f) { SCRIPT_FUNCTION_INIT; ASSERT(SOM::isNumeric(&f)); AnimatedLayer *a = static_cast(o->vcpu_getInterface(animLayerGuid)); if (a) a-> /*script_*/gotoFrame(SOM::makeInt(&f)); RETURN_SCRIPT_VOID; } scriptVar AnimatedLayer::script_vcpu_getLength(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT; AnimatedLayer *a = static_cast(o->vcpu_getInterface(animLayerGuid)); if (a) return MAKE_SCRIPT_INT(a->script_getLength()); RETURN_SCRIPT_ZERO; } scriptVar AnimatedLayer::script_vcpu_setStartFrame(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar s) { SCRIPT_FUNCTION_INIT; ASSERT(SOM::isNumeric(&s)); AnimatedLayer *a = static_cast(o->vcpu_getInterface(animLayerGuid)); if (a) a->script_setStartFrame(SOM::makeInt(&s)); RETURN_SCRIPT_VOID; } scriptVar AnimatedLayer::script_vcpu_setEndFrame(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar e) { SCRIPT_FUNCTION_INIT; ASSERT(SOM::isNumeric(&e)); AnimatedLayer *a = static_cast(o->vcpu_getInterface(animLayerGuid)); if (a) a->script_setEndFrame(SOM::makeInt(&e)); RETURN_SCRIPT_VOID; } scriptVar AnimatedLayer::script_vcpu_setAutoReplay(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar rp) { SCRIPT_FUNCTION_INIT; ASSERT(SOM::isNumeric(&rp)); AnimatedLayer *a = static_cast(o->vcpu_getInterface(animLayerGuid)); if (a) a->script_setAutoReplay(SOM::makeBoolean(&rp)); RETURN_SCRIPT_VOID; } scriptVar AnimatedLayer::script_vcpu_play(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT; AnimatedLayer *a = static_cast(o->vcpu_getInterface(animLayerGuid)); if (a) a->script_play(); RETURN_SCRIPT_VOID; } scriptVar AnimatedLayer::script_vcpu_pause(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT; AnimatedLayer *a = static_cast(o->vcpu_getInterface(animLayerGuid)); if (a) a->script_pause(); RETURN_SCRIPT_VOID; } scriptVar AnimatedLayer::script_vcpu_stop(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT; AnimatedLayer *a = static_cast(o->vcpu_getInterface(animLayerGuid)); if (a) a->script_stop(); RETURN_SCRIPT_VOID; } scriptVar AnimatedLayer::script_vcpu_onPlay(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT; PROCESS_HOOKS0(o, animlayerController); SCRIPT_FUNCTION_CHECKABORTEVENT; SCRIPT_EXEC_EVENT0(o); } scriptVar AnimatedLayer::script_vcpu_onStop(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT; PROCESS_HOOKS0(o, animlayerController); SCRIPT_FUNCTION_CHECKABORTEVENT; SCRIPT_EXEC_EVENT0(o); } scriptVar AnimatedLayer::script_vcpu_onPause(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT; PROCESS_HOOKS0(o, animlayerController); SCRIPT_FUNCTION_CHECKABORTEVENT; SCRIPT_EXEC_EVENT0(o); } scriptVar AnimatedLayer::script_vcpu_onResume(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT; PROCESS_HOOKS0(o, animlayerController); SCRIPT_FUNCTION_CHECKABORTEVENT; SCRIPT_EXEC_EVENT0(o); } scriptVar AnimatedLayer::script_vcpu_onFrame(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar f) { SCRIPT_FUNCTION_INIT; PROCESS_HOOKS1(o, animlayerController, f); SCRIPT_FUNCTION_CHECKABORTEVENT; SCRIPT_EXEC_EVENT1(o, f); } scriptVar AnimatedLayer::script_vcpu_getAutoReplay(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT; AnimatedLayer *a = static_cast(o->vcpu_getInterface(animLayerGuid)); if (a) return MAKE_SCRIPT_INT(a->script_getAutoReplay()); RETURN_SCRIPT_ZERO; } scriptVar AnimatedLayer::script_vcpu_getDirection(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT; AnimatedLayer *a = static_cast(o->vcpu_getInterface(animLayerGuid)); if (a) return MAKE_SCRIPT_INT(a->script_getDirection()); RETURN_SCRIPT_ZERO; } scriptVar AnimatedLayer::script_vcpu_getStartFrame(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT; AnimatedLayer *a = static_cast(o->vcpu_getInterface(animLayerGuid)); if (a) return MAKE_SCRIPT_INT(a->script_getStartFrame()); RETURN_SCRIPT_ZERO; } scriptVar AnimatedLayer::script_vcpu_getEndFrame(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT; AnimatedLayer *a = static_cast(o->vcpu_getInterface(animLayerGuid)); if (a) return MAKE_SCRIPT_INT(a->script_getEndFrame()); RETURN_SCRIPT_ZERO; } scriptVar AnimatedLayer::script_vcpu_isPlaying(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT; AnimatedLayer *a = static_cast(o->vcpu_getInterface(animLayerGuid)); if (a) return MAKE_SCRIPT_BOOLEAN(a->script_isPlaying()); RETURN_SCRIPT_ZERO; } scriptVar AnimatedLayer::script_vcpu_isPaused(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT; AnimatedLayer *a = static_cast(o->vcpu_getInterface(animLayerGuid)); if (a) return MAKE_SCRIPT_BOOLEAN(a->script_isPaused()); RETURN_SCRIPT_ZERO; } scriptVar AnimatedLayer::script_vcpu_isStopped(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT; AnimatedLayer *a = static_cast(o->vcpu_getInterface(animLayerGuid)); if (a) return MAKE_SCRIPT_BOOLEAN(a->script_isStopped()); RETURN_SCRIPT_ZERO; } scriptVar AnimatedLayer::script_vcpu_getSpeed(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT; AnimatedLayer *a = static_cast(o->vcpu_getInterface(animLayerGuid)); if (a) return MAKE_SCRIPT_INT(a->script_getSpeed()); RETURN_SCRIPT_ZERO; } scriptVar AnimatedLayer::script_vcpu_getCurFrame(SCRIPT_FUNCTION_PARAMS, ScriptObject *o) { SCRIPT_FUNCTION_INIT; AnimatedLayer *a = static_cast(o->vcpu_getInterface(animLayerGuid)); if (a) return MAKE_SCRIPT_INT(a->script_getCurFrame()); RETURN_SCRIPT_ZERO; } scriptVar AnimatedLayer::script_vcpu_setSpeed(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar s) { SCRIPT_FUNCTION_INIT; ASSERT(SOM::isNumeric(&s)); AnimatedLayer *a = static_cast(o->vcpu_getInterface(animLayerGuid)); if (a) a->script_setSpeed(SOM::makeInt(&s)); RETURN_SCRIPT_VOID; } scriptVar AnimatedLayer::script_vcpu_setRealtime(SCRIPT_FUNCTION_PARAMS, ScriptObject *o, scriptVar r) { SCRIPT_FUNCTION_INIT; AnimatedLayer *a = static_cast(o->vcpu_getInterface(animLayerGuid)); if (a) a->script_setRealtime(SOM::makeInt(&r)); RETURN_SCRIPT_VOID; } int AnimatedLayer::onPaint(Canvas *canvas) { int r = ANIMLAYER_PARENT::onPaint(canvas); if (debug && canvas != NULL) { Wasabi::FontInfo fontInfo; fontInfo.pointSize = 14; canvas->textOut(0, 0, StringPrintfW(L"%d", curframe), &fontInfo); } return r; }