📄 swfdec_sprite_movie_as.c
字号:
} else { depth = swfdec_as_value_to_integer (cx, &argv[0]); other = swfdec_movie_find (movie->parent, depth); } if (other) swfdec_movie_set_depth (other, movie->depth); swfdec_movie_set_depth (movie, depth);}static voidswfdec_sprite_movie_createEmptyMovieClip (SwfdecAsContext *cx, SwfdecAsObject *obj, guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval){ SwfdecMovie *movie, *parent; int depth; const char *name; parent = SWFDEC_MOVIE (obj); name = swfdec_as_value_to_string (cx, &argv[0]); depth = swfdec_as_value_to_number (cx, &argv[1]); movie = swfdec_movie_find (parent, depth); if (movie) swfdec_movie_remove (movie); movie = swfdec_movie_new (SWFDEC_PLAYER (cx), depth, parent, NULL, name); swfdec_movie_initialize (movie); SWFDEC_AS_VALUE_SET_OBJECT (rval, SWFDEC_AS_OBJECT (movie));}static voidswfdec_sprite_movie_copy_props (SwfdecMovie *target, SwfdecMovie *src){ target->matrix = src->matrix; target->color_transform = src->color_transform; swfdec_movie_queue_update (target, SWFDEC_MOVIE_INVALID_MATRIX);}static voidswfdec_sprite_movie_init_from_object (SwfdecMovie *movie, SwfdecAsObject *obj){ swfdec_movie_initialize (movie);}static voidswfdec_sprite_movie_attachMovie (SwfdecAsContext *cx, SwfdecAsObject *obj, guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval){ SwfdecMovie *movie = SWFDEC_MOVIE (obj); SwfdecMovie *ret; const char *name, *export; int depth; SwfdecGraphic *sprite; export = swfdec_as_value_to_string (cx, &argv[0]); name = swfdec_as_value_to_string (cx, &argv[1]); if (argc > 3) { SWFDEC_FIXME ("attachMovie's initObject isn't implemented"); } sprite = swfdec_swf_instance_get_export (movie->swf, export); if (!SWFDEC_IS_SPRITE (sprite)) { if (sprite == NULL) { SWFDEC_WARNING ("no symbol with name %s exported", export); } else { SWFDEC_WARNING ("can only use attachMovie with sprites"); } return; } depth = swfdec_as_value_to_integer (cx, &argv[2]); if (swfdec_depth_classify (depth) == SWFDEC_DEPTH_CLASS_EMPTY) return; ret = swfdec_movie_find (movie, depth); if (ret) swfdec_movie_remove (ret); ret = swfdec_movie_new (SWFDEC_PLAYER (obj->context), depth, movie, sprite, name); SWFDEC_LOG ("attached %s (%u) as %s to depth %u", export, SWFDEC_CHARACTER (sprite)->id, ret->name, ret->depth); /* run init and construct */ swfdec_sprite_movie_init_from_object (ret, NULL); SWFDEC_AS_VALUE_SET_OBJECT (rval, SWFDEC_AS_OBJECT (ret));}static voidswfdec_sprite_movie_duplicateMovieClip (SwfdecAsContext *cx, SwfdecAsObject *obj, guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval){ SwfdecMovie *movie = SWFDEC_MOVIE (obj); SwfdecMovie *new; const char *name; int depth; name = swfdec_as_value_to_string (cx, &argv[0]); depth = swfdec_as_value_to_integer (cx, &argv[1]); if (swfdec_depth_classify (depth) == SWFDEC_DEPTH_CLASS_EMPTY) return; new = swfdec_movie_duplicate (movie, name, depth); if (new == NULL) return; swfdec_sprite_movie_copy_props (new, movie); if (SWFDEC_IS_SPRITE_MOVIE (new)) { g_queue_push_tail (SWFDEC_PLAYER (cx)->init_queue, new); swfdec_movie_queue_script (new, SWFDEC_EVENT_LOAD); swfdec_movie_run_construct (new); } swfdec_movie_initialize (new); SWFDEC_LOG ("duplicated %s as %s to depth %u", movie->name, new->name, new->depth); SWFDEC_AS_VALUE_SET_OBJECT (rval, SWFDEC_AS_OBJECT (new));}static voidswfdec_sprite_movie_removeMovieClip (SwfdecAsContext *cx, SwfdecAsObject *obj, guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval){ SwfdecMovie *movie = SWFDEC_MOVIE (obj); if (swfdec_depth_classify (movie->depth) == SWFDEC_DEPTH_CLASS_DYNAMIC) swfdec_movie_remove (movie);}static voidswfdec_sprite_movie_getURL (SwfdecAsContext *cx, SwfdecAsObject *obj, guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval){ SwfdecMovie *movie = SWFDEC_MOVIE (obj); const char *url; const char *target; url = swfdec_as_value_to_string (cx, &argv[0]); if (argc > 1) { target = swfdec_as_value_to_string (cx, &argv[1]); } else { SWFDEC_ERROR ("what's the default target?"); target = NULL; } if (argc > 2) { SWFDEC_ERROR ("passing variables is not implemented"); } swfdec_movie_load (movie, url, target, SWFDEC_LOADER_REQUEST_DEFAULT, NULL, 0); /* FIXME: does this function return something */}static voidswfdec_sprite_movie_getDepth (SwfdecAsContext *cx, SwfdecAsObject *obj, guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval){ SwfdecMovie *movie = SWFDEC_MOVIE (obj); SWFDEC_AS_VALUE_SET_INT (rval, movie->depth);}static voidswfdec_sprite_movie_getBounds (SwfdecAsContext *cx, SwfdecAsObject *obj, guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval){ int x0, x1, y0, y1; SwfdecAsValue val; SwfdecAsObject *object; SwfdecMovie *movie = SWFDEC_MOVIE (obj); object = swfdec_as_object_new_empty (cx); if (object == NULL) return; if (swfdec_rect_is_empty (&movie->extents)) { x0 = x1 = y0 = y1 = 0x7FFFFFF; } else { x0 = movie->extents.x0; y0 = movie->extents.y0; x1 = movie->extents.x1; y1 = movie->extents.y1; } SWFDEC_AS_VALUE_SET_NUMBER (&val, SWFDEC_TWIPS_TO_DOUBLE (x0)); swfdec_as_object_set_variable (object, SWFDEC_AS_STR_xMin, &val); SWFDEC_AS_VALUE_SET_NUMBER (&val, SWFDEC_TWIPS_TO_DOUBLE (y0)); swfdec_as_object_set_variable (object, SWFDEC_AS_STR_yMin, &val); SWFDEC_AS_VALUE_SET_NUMBER (&val, SWFDEC_TWIPS_TO_DOUBLE (x1)); swfdec_as_object_set_variable (object, SWFDEC_AS_STR_xMax, &val); SWFDEC_AS_VALUE_SET_NUMBER (&val, SWFDEC_TWIPS_TO_DOUBLE (y1)); swfdec_as_object_set_variable (object, SWFDEC_AS_STR_yMax, &val); SWFDEC_AS_VALUE_SET_OBJECT (rval, object);}voidswfdec_sprite_movie_init_context (SwfdecPlayer *player, guint version){ SwfdecAsContext *context = SWFDEC_AS_CONTEXT (player); SwfdecAsValue val; SwfdecAsObject *proto; player->MovieClip = SWFDEC_AS_OBJECT (swfdec_as_object_add_function (context->global, SWFDEC_AS_STR_MovieClip, 0, NULL, 0)); if (player->MovieClip == NULL) return; proto = swfdec_as_object_new (context); if (!proto) return; SWFDEC_AS_VALUE_SET_OBJECT (&val, proto); swfdec_as_object_set_variable_and_flags (player->MovieClip, SWFDEC_AS_STR_prototype, &val, SWFDEC_AS_VARIABLE_HIDDEN | SWFDEC_AS_VARIABLE_PERMANENT); /* now add all the functions */ swfdec_as_object_add_function (proto, SWFDEC_AS_STR_attachMovie, SWFDEC_TYPE_SPRITE_MOVIE, swfdec_sprite_movie_attachMovie, 3); if (version >= 6) { swfdec_as_object_add_function (proto, SWFDEC_AS_STR_createEmptyMovieClip, SWFDEC_TYPE_SPRITE_MOVIE, swfdec_sprite_movie_createEmptyMovieClip, 2); } swfdec_as_object_add_function (proto, SWFDEC_AS_STR_duplicateMovieClip, SWFDEC_TYPE_SPRITE_MOVIE, swfdec_sprite_movie_duplicateMovieClip, 2); swfdec_as_object_add_function (proto, SWFDEC_AS_STR_getBytesLoaded, SWFDEC_TYPE_SPRITE_MOVIE, swfdec_sprite_movie_getBytesLoaded, 0); swfdec_as_object_add_function (proto, SWFDEC_AS_STR_getBytesTotal, SWFDEC_TYPE_SPRITE_MOVIE, swfdec_sprite_movie_getBytesTotal, 0); swfdec_as_object_add_function (proto, SWFDEC_AS_STR_getDepth, SWFDEC_TYPE_SPRITE_MOVIE, swfdec_sprite_movie_getDepth, 0); swfdec_as_object_add_function (proto, SWFDEC_AS_STR_getNextHighestDepth, SWFDEC_TYPE_SPRITE_MOVIE, swfdec_sprite_movie_getNextHighestDepth, 0); swfdec_as_object_add_function (proto, SWFDEC_AS_STR_getURL, SWFDEC_TYPE_SPRITE_MOVIE, swfdec_sprite_movie_getURL, 2); swfdec_as_object_add_function (proto, SWFDEC_AS_STR_gotoAndPlay, SWFDEC_TYPE_SPRITE_MOVIE, swfdec_sprite_movie_gotoAndPlay, 1); swfdec_as_object_add_function (proto, SWFDEC_AS_STR_gotoAndStop, SWFDEC_TYPE_SPRITE_MOVIE, swfdec_sprite_movie_gotoAndStop, 1); swfdec_as_object_add_function (proto, SWFDEC_AS_STR_hitTest, SWFDEC_TYPE_SPRITE_MOVIE, swfdec_sprite_movie_hitTest, 1); swfdec_as_object_add_function (proto, SWFDEC_AS_STR_nextFrame, SWFDEC_TYPE_SPRITE_MOVIE, swfdec_sprite_movie_nextFrame, 0); swfdec_as_object_add_function (proto, SWFDEC_AS_STR_play, SWFDEC_TYPE_SPRITE_MOVIE, swfdec_sprite_movie_play, 0); swfdec_as_object_add_function (proto, SWFDEC_AS_STR_prevFrame, SWFDEC_TYPE_SPRITE_MOVIE, swfdec_sprite_movie_prevFrame, 0); swfdec_as_object_add_function (proto, SWFDEC_AS_STR_removeMovieClip, SWFDEC_TYPE_SPRITE_MOVIE, swfdec_sprite_movie_removeMovieClip, 0); swfdec_as_object_add_function (proto, SWFDEC_AS_STR_startDrag, SWFDEC_TYPE_SPRITE_MOVIE, swfdec_sprite_movie_startDrag, 0); swfdec_as_object_add_function (proto, SWFDEC_AS_STR_stop, SWFDEC_TYPE_SPRITE_MOVIE, swfdec_sprite_movie_stop, 0); swfdec_as_object_add_function (proto, SWFDEC_AS_STR_stopDrag, SWFDEC_TYPE_SPRITE_MOVIE, swfdec_sprite_movie_stopDrag, 0); swfdec_as_object_add_function (proto, SWFDEC_AS_STR_swapDepths, SWFDEC_TYPE_SPRITE_MOVIE, swfdec_sprite_movie_swapDepths, 1); swfdec_as_object_add_function (proto, SWFDEC_AS_STR_getBounds, SWFDEC_TYPE_SPRITE_MOVIE, swfdec_sprite_movie_getBounds, 0);};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -