aframe/yew_ext.rs
1//! Support for yew. See the below example:
2//! ```rust,ignore
3//! static INIT: AtomicBool = AtomicBool::new(false);
4//!
5//! #[derive(Clone, PartialEq, Properties)]
6//! pub struct AframeProps
7//! {
8//! scene: aframe::Scene
9//! }
10//!
11//! pub struct Aframe
12//! {
13//! props: AframeProps
14//! }
15//!
16//! impl crate::utils::Component for Aframe
17//! {
18//! type Message = Msg;
19//! type Properties = AframeProps;
20//!
21//! fn create(props: Self::Properties, _: ComponentLink<Self>) -> Self
22//! {
23//! // Register aframe stuff first time only
24//! if !INIT.load(Ordering::Relaxed)
25//! {
26//! unsafe
27//! {
28//! // Code in this block registers shaders, components, and primitives with aframe
29//! shaders::register_shaders();
30//! component::register_components();
31//! primitive::register_primitives();
32//! }
33//! INIT.store(true, Ordering::Relaxed)
34//! }
35//! Self
36//! {
37//! props
38//! }
39//! }
40//!
41//! fn update(&mut self, _: Self::Message) -> ShouldRender
42//! {
43//! true
44//! }
45//!
46//! fn change(&mut self, props: Self::Properties) -> ShouldRender
47//! {
48//! if self.props != props
49//! {
50//! self.props = props;
51//! true
52//! }
53//! else
54//! {
55//! false
56//! }
57//! }
58//!
59//! fn view(&self) -> Html
60//! {
61//! (&self.props.scene).into()
62//! }
63//! }
64//! ```
65
66use yew::Html;
67use yew::html;
68use crate::Entity;
69use crate::Scene;
70
71impl From<&Scene> for Html
72{
73 fn from(scene: &Scene) -> Self
74 {
75 html!{{htmlify::yew::RawHtml::from(scene)}}
76 }
77}
78
79impl From<&Entity> for Html
80{
81 fn from(entity: &Entity) -> Self
82 {
83 html!{{htmlify::yew::RawHtml::from(entity)}}
84 }
85}