WIP party mode
This commit is contained in:
@ -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)],
|
||||
],
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user