WIP party mode
This commit is contained in:
@ -2,6 +2,7 @@ use crate::components::color_picker::{ColorPicker, ColorPickerMsg};
|
|||||||
use crate::css::C;
|
use crate::css::C;
|
||||||
use common::{BulbGroup, BulbGroupShape, BulbMap, ClientMessage, ServerMessage};
|
use common::{BulbGroup, BulbGroupShape, BulbMap, ClientMessage, ServerMessage};
|
||||||
use lighter_lib::{BulbId, BulbMode};
|
use lighter_lib::{BulbId, BulbMode};
|
||||||
|
use seed::app::cmd_manager::CmdHandle;
|
||||||
use seed::prelude::*;
|
use seed::prelude::*;
|
||||||
use seed::{attrs, button, div, C};
|
use seed::{attrs, button, div, C};
|
||||||
use seed_router::Page;
|
use seed_router::Page;
|
||||||
@ -22,6 +23,8 @@ pub struct Model {
|
|||||||
groups_interacted: bool,
|
groups_interacted: bool,
|
||||||
|
|
||||||
color_picker: ColorPicker,
|
color_picker: ColorPicker,
|
||||||
|
|
||||||
|
party_mode: Option<CmdHandle>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
@ -32,6 +35,9 @@ pub enum Msg {
|
|||||||
DeselectGroups,
|
DeselectGroups,
|
||||||
ColorPicker(ColorPickerMsg),
|
ColorPicker(ColorPickerMsg),
|
||||||
SetBulbPower(bool),
|
SetBulbPower(bool),
|
||||||
|
|
||||||
|
TogglePartyMode,
|
||||||
|
PartyModeStep { hue: f32 },
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Page for Model {
|
impl Page for Model {
|
||||||
@ -108,6 +114,33 @@ impl Page for Model {
|
|||||||
orders.notify(message);
|
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_stem" }],
|
||||||
div![attrs! { At::Id => "lever_face" }],
|
div![attrs! { At::Id => "lever_face" }],
|
||||||
],
|
],
|
||||||
|
button!["Party mode", ev(Ev::Click, move |_| Msg::TogglePartyMode)],
|
||||||
],
|
],
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user