Clean up DisplayObject traits

This commit is contained in:
Mike Welsh 2019-05-07 03:34:17 -07:00
parent 7983d9eb96
commit e6e8536672
7 changed files with 19 additions and 31 deletions

View File

@ -1,4 +1,4 @@
use crate::display_object::{DisplayObject, DisplayObjectUpdate};
use crate::display_object::{DisplayObject, DisplayObjectImpl};
use crate::movie_clip::MovieClip;
use bacon_rajan_cc::Cc;
use rand::{rngs::SmallRng, Rng, SeedableRng};
@ -162,7 +162,6 @@ impl Avm1 {
&self,
context: &'a ActionContext,
) -> std::cell::Ref<'a, crate::movie_clip::MovieClip> {
use crate::display_object::DisplayObjectUpdate;
Ref::map(context.active_clip.borrow(), |c| c.as_movie_clip().unwrap())
}
@ -170,7 +169,6 @@ impl Avm1 {
&self,
context: &'a ActionContext,
) -> std::cell::RefMut<'a, crate::movie_clip::MovieClip> {
use crate::display_object::DisplayObjectUpdate;
RefMut::map(context.active_clip.borrow_mut(), |c| {
c.as_movie_clip_mut().unwrap()
})

View File

@ -1,6 +1,4 @@
use crate::display_object::{
DisplayObject, DisplayObjectBase, DisplayObjectImpl, DisplayObjectUpdate,
};
use crate::display_object::{DisplayObject, DisplayObjectBase, DisplayObjectImpl};
use crate::matrix::Matrix;
use crate::player::{RenderContext, UpdateContext};
use crate::prelude::*;
@ -84,9 +82,9 @@ impl Button {
}
}
impl_display_object!(Button, base);
impl DisplayObjectImpl for Button {
impl_display_object!(base);
impl DisplayObjectUpdate for Button {
fn run_frame(&mut self, context: &mut UpdateContext) {
if self.state == ButtonState::Down {
// let mut action_context = crate::avm1::ActionContext {

View File

@ -45,13 +45,11 @@ impl DisplayObjectImpl for DisplayObjectBase {
}
}
impl DisplayObjectUpdate for DisplayObjectBase {}
impl Trace for DisplayObjectBase {
fn trace(&mut self, _tracer: &mut Tracer) {}
}
pub trait DisplayObjectImpl: DisplayObjectUpdate {
pub trait DisplayObjectImpl: Trace {
fn transform(&self) -> &Transform;
fn get_matrix(&self) -> &Matrix;
fn set_matrix(&mut self, matrix: &Matrix);
@ -59,9 +57,7 @@ pub trait DisplayObjectImpl: DisplayObjectUpdate {
fn set_color_transform(&mut self, color_transform: &ColorTransform);
fn name(&self) -> &str;
fn set_name(&mut self, name: &str);
}
pub trait DisplayObjectUpdate: Trace {
fn preload(&self, _context: &mut UpdateContext) {}
fn run_frame(&mut self, _context: &mut UpdateContext) {}
fn run_post_frame(&mut self, _context: &mut UpdateContext) {}
@ -78,8 +74,7 @@ pub trait DisplayObjectUpdate: Trace {
}
macro_rules! impl_display_object {
($name:ident, $field:ident) => {
impl crate::display_object::DisplayObjectImpl for $name {
($field:ident) => {
fn transform(&self) -> &crate::transform::Transform {
self.$field.transform()
}
@ -101,7 +96,6 @@ macro_rules! impl_display_object {
fn set_name(&mut self, name: &str) {
self.$field.set_name(name)
}
}
};
}
@ -121,9 +115,9 @@ impl DisplayObject {
}
}
impl_display_object!(DisplayObject, inner);
impl DisplayObjectImpl for DisplayObject {
impl_display_object!(inner);
impl DisplayObjectUpdate for DisplayObject {
fn preload(&self, context: &mut UpdateContext) {
self.inner.preload(context);
}

View File

@ -1,6 +1,6 @@
use crate::backend::render::ShapeHandle;
use crate::color_transform::ColorTransform;
use crate::display_object::{DisplayObjectBase, DisplayObjectImpl, DisplayObjectUpdate};
use crate::display_object::{DisplayObjectBase, DisplayObjectImpl};
use crate::matrix::Matrix;
use crate::player::{RenderContext, UpdateContext};
use bacon_rajan_cc::{Trace, Tracer};
@ -25,9 +25,9 @@ impl Graphic {
}
}
impl_display_object!(Graphic, base);
impl DisplayObjectImpl for Graphic {
impl_display_object!(base);
impl DisplayObjectUpdate for Graphic {
fn run_frame(&mut self, _context: &mut UpdateContext) {
// Noop
}

View File

@ -1,9 +1,7 @@
use crate::audio::AudioStreamHandle;
use crate::character::Character;
use crate::color_transform::ColorTransform;
use crate::display_object::{
DisplayObject, DisplayObjectBase, DisplayObjectImpl, DisplayObjectUpdate,
};
use crate::display_object::{DisplayObject, DisplayObjectBase, DisplayObjectImpl};
use crate::font::Font;
use crate::graphic::Graphic;
use crate::matrix::Matrix;
@ -32,8 +30,6 @@ pub struct MovieClip {
children: BTreeMap<Depth, Cc<RefCell<DisplayObject>>>,
}
impl_display_object!(MovieClip, base);
impl MovieClip {
pub fn new() -> MovieClip {
MovieClip {
@ -353,7 +349,9 @@ impl MovieClip {
}
}
impl DisplayObjectUpdate for MovieClip {
impl DisplayObjectImpl for MovieClip {
impl_display_object!(base);
fn preload(&self, context: &mut UpdateContext) {
context
.tag_stream

View File

@ -1,7 +1,7 @@
use crate::audio::Audio;
use crate::avm1::Avm1;
use crate::backend::{audio::AudioBackend, render::RenderBackend};
use crate::display_object::{DisplayObject, DisplayObjectUpdate};
use crate::display_object::{DisplayObject, DisplayObjectImpl};
use crate::library::Library;
use crate::movie_clip::MovieClip;
use crate::prelude::*;

View File

@ -1,6 +1,6 @@
use crate::backend::render::ShapeHandle;
use crate::color_transform::ColorTransform;
use crate::display_object::{DisplayObjectBase, DisplayObjectImpl, DisplayObjectUpdate};
use crate::display_object::{DisplayObjectBase, DisplayObjectImpl};
use crate::matrix::Matrix;
use crate::player::{RenderContext, UpdateContext};
use bacon_rajan_cc::{Trace, Tracer};
@ -20,9 +20,9 @@ impl Text {
}
}
impl_display_object!(Text, base);
impl DisplayObjectImpl for Text {
impl_display_object!(base);
impl DisplayObjectUpdate for Text {
fn run_frame(&mut self, _context: &mut UpdateContext) {
// Noop
}