core: Add initial ExternalInterface structs
This commit is contained in:
parent
8d74b031e4
commit
8f11141426
|
@ -0,0 +1,20 @@
|
|||
pub trait ExternalInterfaceProvider {}
|
||||
|
||||
#[derive(Default)]
|
||||
pub struct ExternalInterface {
|
||||
providers: Vec<Box<dyn ExternalInterfaceProvider>>,
|
||||
}
|
||||
|
||||
impl ExternalInterface {
|
||||
pub fn new() -> Self {
|
||||
Self::default()
|
||||
}
|
||||
|
||||
pub fn add_provider(&mut self, provider: Box<dyn ExternalInterfaceProvider>) {
|
||||
self.providers.push(provider);
|
||||
}
|
||||
|
||||
pub fn available(&self) -> bool {
|
||||
!self.providers.is_empty()
|
||||
}
|
||||
}
|
|
@ -38,6 +38,7 @@ mod transform;
|
|||
mod xml;
|
||||
|
||||
pub mod backend;
|
||||
pub mod external;
|
||||
|
||||
pub use chrono;
|
||||
pub use events::PlayerEvent;
|
||||
|
|
|
@ -12,6 +12,7 @@ use crate::backend::{audio::AudioBackend, render::Letterbox, render::RenderBacke
|
|||
use crate::context::{ActionQueue, ActionType, RenderContext, UpdateContext};
|
||||
use crate::display_object::{EditText, MorphShape, MovieClip};
|
||||
use crate::events::{ButtonKeyCode, ClipEvent, ClipEventResult, KeyCode, PlayerEvent};
|
||||
use crate::external::{ExternalInterface, ExternalInterfaceProvider};
|
||||
use crate::library::Library;
|
||||
use crate::loader::LoadManager;
|
||||
use crate::prelude::*;
|
||||
|
@ -180,6 +181,9 @@ pub struct Player {
|
|||
/// contexts to other parts of the player. It can be used to ensure the
|
||||
/// player lives across `await` calls in async code.
|
||||
self_reference: Option<Weak<Mutex<Self>>>,
|
||||
|
||||
/// External interface for (for example) Javascript <-> Actionscript interaction
|
||||
external_interface: ExternalInterface,
|
||||
}
|
||||
|
||||
impl Player {
|
||||
|
@ -262,6 +266,7 @@ impl Player {
|
|||
instance_counter: 0,
|
||||
time_til_next_timer: None,
|
||||
storage,
|
||||
external_interface: ExternalInterface::new(),
|
||||
};
|
||||
|
||||
player.mutate_with_update_context(|context| Avm2::load_player_globals(context))?;
|
||||
|
@ -1153,6 +1158,14 @@ impl Player {
|
|||
pub fn should_prevent_scrolling(&mut self) -> bool {
|
||||
self.mutate_with_update_context(|context| context.avm1.has_mouse_listener())
|
||||
}
|
||||
|
||||
pub fn external_interface(&self) -> &ExternalInterface {
|
||||
&self.external_interface
|
||||
}
|
||||
|
||||
pub fn add_external_interface(&mut self, provider: Box<dyn ExternalInterfaceProvider>) {
|
||||
self.external_interface.add_provider(provider);
|
||||
}
|
||||
}
|
||||
|
||||
pub struct DragObject<'gc> {
|
||||
|
|
Loading…
Reference in New Issue