lumecs 0.0.1

Experimental GUI backed by Bevy ECS + usual suspects
use lumecs::prelude::*;

struct SubscriptionExample {
    count: usize,
}

#[derive(Debug, Clone)]
enum Message {
    Increment,
}

impl Runner<'_> for SubscriptionExample {
    type M = Message;

    fn update(&mut self, message: Message) {
        match message {
            Message::Increment => self.count = self.count.saturating_add(1),
        }
    }

    fn view(&self) -> impl Widget<'_, Self::M> {
        Root::flex_column()
            .gap(10.0)
            .align_items_center()
            .justify_content_center()
            .child(Text::new(format!("Count: {}", self.count)).font_size(24.0))
    }
}

fn main() {
    tracing_subscriber::fmt::init();

    let subscription_example = SubscriptionExample { count: 0 };

    let mut runtime = Runtime::new(subscription_example).expect("Failed to create runtime");
    let subscription = runtime.subscription();

    std::thread::spawn(move || {
        loop {
            std::thread::sleep(std::time::Duration::from_secs(1));

            subscription
                .send(Message::Increment)
                .expect("Failed to send message");
        }
    });

    runtime.run().expect("Failed to run the application");
}