avm2: Implement `new MovieClip()`.

This commit is contained in:
David Wendt 2020-09-22 23:02:31 -04:00 committed by Mike Welsh
parent d399811eb8
commit 896a5b37a5
5 changed files with 42 additions and 3 deletions

View File

@ -186,7 +186,11 @@ pub fn current_labels<'gc>(
.and_then(|o| o.as_display_object())
.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());
}
@ -203,7 +207,11 @@ pub fn current_scene<'gc>(
.and_then(|o| o.as_display_object())
.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_proto = activation.context.avm2.prototypes().scene;
let args = [
@ -233,8 +241,17 @@ pub fn scenes<'gc>(
.and_then(|dobj| dobj.as_movie_clip())
{
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) =
labels_for_scene(activation, mc, &scene)?;
let scene_proto = activation.context.avm2.prototypes().scene;

View File

@ -400,6 +400,7 @@ swf_tests! {
(as3_movieclip_currentscene, "avm2/movieclip_currentscene", 5),
(as3_movieclip_scenes, "avm2/movieclip_scenes", 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.

View File

@ -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.