oxygengine_script_web/
lib.rs1extern crate oxygengine_core as core;
2#[macro_use]
3extern crate lazy_static;
4
5mod component;
6pub mod integration;
7pub mod interface;
8pub mod json_asset_protocol;
9pub mod scriptable;
10pub mod state;
11pub mod web_api;
12
13pub mod prelude {
14 pub use crate::{
15 integration::*, interface::*, json_asset_protocol::*, scriptable::*, state::*,
16 };
17}
18use crate::{
19 component::WebScriptComponent,
20 integration::core::{
21 AppLifeCycleScripted, AssetsDatabaseLoaderScripted, AssetsDatabaseScripted,
22 },
23 interface::WebScriptInterface,
24};
25use core::prelude::*;
26
27pub fn bundle_installer<'a, 'b, WSS>(builder: &mut AppBuilder<'a, 'b>, mut web_script_setup: WSS)
28where
29 WSS: FnMut(&mut WebScriptInterface),
30{
31 builder.install_component::<WebScriptComponent>();
32 WebScriptInterface::with(|interface| {
33 interface.register_component_bridge("Name", Name::default());
34 interface.register_component_bridge("Tag", Tag::default());
35 interface.register_component_bridge("NonPersistent", NonPersistent::default());
36 interface.register_resource_bridge::<AppLifeCycle, AppLifeCycleScripted>("AppLifeCycle");
37 interface.register_resource_bridge::<AssetsDatabase, AssetsDatabaseLoaderScripted>(
38 "AssetsDatabaseLoader",
39 );
40 interface
41 .register_resource_bridge::<AssetsDatabase, AssetsDatabaseScripted>("AssetsDatabase");
42 #[cfg(feature = "composite-renderer")]
43 {
44 use crate::integration::composite_renderer::*;
45 use oxygengine_composite_renderer::component::*;
46 use oxygengine_composite_renderer_backend_web::WebCompositeRenderer;
47 interface
48 .register_component_bridge("CompositeVisibility", CompositeVisibility::default());
49 interface.register_component_bridge::<_, CompositeSurfaceCacheScripted>(
50 "CompositeSurfaceCache",
51 CompositeSurfaceCache::default(),
52 );
53 interface.register_component_bridge::<_, CompositeRenderable>(
54 "CompositeRenderable",
55 CompositeRenderable::default(),
56 );
57 interface.register_component_bridge(
58 "CompositeRenderableStroke",
59 CompositeRenderableStroke::default(),
60 );
61 interface.register_component_bridge::<_, CompositeTransformScripted>(
62 "CompositeTransform",
63 CompositeTransform::default(),
64 );
65 interface
66 .register_component_bridge("CompositeRenderDepth", CompositeRenderDepth::default());
67 interface
68 .register_component_bridge("CompositeRenderAlpha", CompositeRenderAlpha::default());
69 interface.register_component_bridge(
70 "CompositeCameraAlignment",
71 CompositeCameraAlignment::default(),
72 );
73 interface.register_component_bridge("CompositeEffect", CompositeEffect::default());
74 interface.register_component_bridge("CompositeCamera", CompositeCamera::default());
75 interface.register_component_bridge::<_, CompositeSpriteScripted>(
76 "CompositeSprite",
77 CompositeSprite::default(),
78 );
79 interface.register_component_bridge::<_, CompositeSpriteAnimationScripted>(
80 "CompositeSpriteAnimation",
81 CompositeSpriteAnimation::default(),
82 );
83 interface.register_component_bridge::<_, CompositeTilemapScripted>(
84 "CompositeTilemap",
85 CompositeTilemap::default(),
86 );
87 interface.register_component_bridge::<_, CompositeTilemapAnimationScripted>(
88 "CompositeTilemapAnimation",
89 CompositeTilemapAnimation::default(),
90 );
91 interface.register_component_bridge::<_, CompositeMapChunkScripted>(
92 "CompositeMapChunk",
93 CompositeMapChunk::default(),
94 );
95 interface
96 .register_resource_bridge::<WebCompositeRenderer, WebCompositeRendererScripted>(
97 "WebCompositeRenderer",
98 );
99 }
100 #[cfg(feature = "audio")]
101 {
102 use crate::integration::audio::*;
103 use oxygengine_audio::component::*;
104 interface.register_component_bridge::<_, AudioSourceScripted>(
105 "AudioSource",
106 AudioSource::default(),
107 );
108 }
109 #[cfg(feature = "input")]
110 {
111 use crate::integration::input::*;
112 use oxygengine_input::resource::*;
113 interface.register_resource_bridge::<InputController, InputControllerMappingsScripted>(
114 "InputControllerMappings",
115 );
116 interface.register_resource_bridge::<InputController, InputControllerStateScripted>(
117 "InputControllerState",
118 );
119 }
120 web_script_setup(interface);
121 });
122}
123
124pub fn protocols_installer(database: &mut AssetsDatabase) {
125 database.register(json_asset_protocol::JsonAssetProtocol);
126}