oxygengine_script_web/
lib.rs

1extern 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}