avm2: Implement `new MovieClip()`.
This commit is contained in:
parent
d399811eb8
commit
896a5b37a5
|
@ -186,7 +186,11 @@ pub fn current_labels<'gc>(
|
||||||
.and_then(|o| o.as_display_object())
|
.and_then(|o| o.as_display_object())
|
||||||
.and_then(|dobj| dobj.as_movie_clip())
|
.and_then(|dobj| dobj.as_movie_clip())
|
||||||
{
|
{
|
||||||
let scene = mc.current_scene().unwrap_or_else(Default::default);
|
let scene = mc.current_scene().unwrap_or_else(|| Scene {
|
||||||
|
name: "".to_string(),
|
||||||
|
start: 0,
|
||||||
|
length: mc.total_frames(),
|
||||||
|
});
|
||||||
return Ok(labels_for_scene(activation, mc, &scene)?.2.into());
|
return Ok(labels_for_scene(activation, mc, &scene)?.2.into());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -203,7 +207,11 @@ pub fn current_scene<'gc>(
|
||||||
.and_then(|o| o.as_display_object())
|
.and_then(|o| o.as_display_object())
|
||||||
.and_then(|dobj| dobj.as_movie_clip())
|
.and_then(|dobj| dobj.as_movie_clip())
|
||||||
{
|
{
|
||||||
let scene = mc.current_scene().unwrap_or_else(Default::default);
|
let scene = mc.current_scene().unwrap_or_else(|| Scene {
|
||||||
|
name: "".to_string(),
|
||||||
|
start: 0,
|
||||||
|
length: mc.total_frames(),
|
||||||
|
});
|
||||||
let (scene_name, scene_length, scene_labels) = labels_for_scene(activation, mc, &scene)?;
|
let (scene_name, scene_length, scene_labels) = labels_for_scene(activation, mc, &scene)?;
|
||||||
let scene_proto = activation.context.avm2.prototypes().scene;
|
let scene_proto = activation.context.avm2.prototypes().scene;
|
||||||
let args = [
|
let args = [
|
||||||
|
@ -233,8 +241,17 @@ pub fn scenes<'gc>(
|
||||||
.and_then(|dobj| dobj.as_movie_clip())
|
.and_then(|dobj| dobj.as_movie_clip())
|
||||||
{
|
{
|
||||||
let mut scene_objects = Vec::new();
|
let mut scene_objects = Vec::new();
|
||||||
|
let mut mc_scenes = mc.scenes();
|
||||||
|
|
||||||
for scene in mc.scenes() {
|
if mc.scenes().is_empty() {
|
||||||
|
mc_scenes.push(Scene {
|
||||||
|
name: "".to_string(),
|
||||||
|
start: 0,
|
||||||
|
length: mc.total_frames(),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
for scene in mc_scenes {
|
||||||
let (scene_name, scene_length, scene_labels) =
|
let (scene_name, scene_length, scene_labels) =
|
||||||
labels_for_scene(activation, mc, &scene)?;
|
labels_for_scene(activation, mc, &scene)?;
|
||||||
let scene_proto = activation.context.avm2.prototypes().scene;
|
let scene_proto = activation.context.avm2.prototypes().scene;
|
||||||
|
|
|
@ -400,6 +400,7 @@ swf_tests! {
|
||||||
(as3_movieclip_currentscene, "avm2/movieclip_currentscene", 5),
|
(as3_movieclip_currentscene, "avm2/movieclip_currentscene", 5),
|
||||||
(as3_movieclip_scenes, "avm2/movieclip_scenes", 5),
|
(as3_movieclip_scenes, "avm2/movieclip_scenes", 5),
|
||||||
(as3_movieclip_play, "avm2/movieclip_play", 5),
|
(as3_movieclip_play, "avm2/movieclip_play", 5),
|
||||||
|
(as3_movieclip_constr, "avm2/movieclip_constr", 1),
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: These tests have some inaccuracies currently, so we use approx_eq to test that numeric values are close enough.
|
// TODO: These tests have some inaccuracies currently, so we use approx_eq to test that numeric values are close enough.
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
//var that = new MovieClip()
|
||||||
|
//currentFrame
|
||||||
|
0
|
||||||
|
//currentFrameLabel
|
||||||
|
null
|
||||||
|
//currentLabel
|
||||||
|
null
|
||||||
|
//currentLabels
|
||||||
|
|
||||||
|
//(contents of currentScene)
|
||||||
|
|
||||||
|
1
|
||||||
|
//framesLoaded
|
||||||
|
1
|
||||||
|
//isPlaying
|
||||||
|
false
|
||||||
|
//(contents of scenes)
|
||||||
|
|
||||||
|
1
|
||||||
|
//totalFrames
|
||||||
|
1
|
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue