WIP party mode

This commit is contained in:
2022-08-23 20:23:45 +02:00
parent d2054caf69
commit 7a71e59c15

View File

@ -2,6 +2,7 @@ use crate::components::color_picker::{ColorPicker, ColorPickerMsg};
use crate::css::C;
use common::{BulbGroup, BulbGroupShape, BulbMap, ClientMessage, ServerMessage};
use lighter_lib::{BulbId, BulbMode};
use seed::app::cmd_manager::CmdHandle;
use seed::prelude::*;
use seed::{attrs, button, div, C};
use seed_router::Page;
@ -22,6 +23,8 @@ pub struct Model {
groups_interacted: bool,
color_picker: ColorPicker,
party_mode: Option<CmdHandle>,
}
#[derive(Debug)]
@ -32,6 +35,9 @@ pub enum Msg {
DeselectGroups,
ColorPicker(ColorPickerMsg),
SetBulbPower(bool),
TogglePartyMode,
PartyModeStep { hue: f32 },
}
impl Page for Model {
@ -108,6 +114,33 @@ impl Page for Model {
orders.notify(message);
});
}
Msg::TogglePartyMode => {
if self.party_mode.take().is_none() {
self.update(Msg::PartyModeStep { hue: 0.0 }, orders)
}
}
Msg::PartyModeStep { hue } => {
self.for_selected_bulbs(|id, _| {
let message = ClientMessage::SetBulbColor {
id: id.clone(),
color: lighter_lib::BulbColor::HSB {
h: hue,
s: 1.0,
b: 1.0,
},
};
orders.notify(message);
});
let handle = orders.perform_cmd_with_handle(cmds::timeout(500, move || {
Msg::PartyModeStep {
// rotate hue
hue: (hue + 0.02).rem_euclid(1.0).clamp(0.0, 1.0),
}
}));
self.party_mode = Some(handle);
}
}
}
@ -223,6 +256,7 @@ impl Page for Model {
div![attrs! { At::Id => "lever_stem" }],
div![attrs! { At::Id => "lever_face" }],
],
button!["Party mode", ev(Ev::Click, move |_| Msg::TogglePartyMode)],
],
]
}