use crate::shared::champion::*; use crate::shared::cooldown::*; use crate::shared::health::*; use crate::shared::imperative::*; use crate::shared::projectile::*; use crate::shared::*; use bevy::prelude::*; use lightyear::prelude::*; use serde::Deserialize; use serde::Serialize; #[derive(Serialize, Deserialize, Debug, PartialEq, Clone)] pub enum Inputs { Imperative(Imperative), None, } impl UserAction for Inputs {} #[derive(Message, Serialize, Deserialize, Clone, Debug, PartialEq)] pub struct SelectChampion(pub Champion); #[message_protocol(protocol = "MyProtocol")] pub enum Messages { SelectChampion(SelectChampion), } #[component_protocol(protocol = "MyProtocol")] pub enum Components { #[sync(once)] PlayerId(PlayerId), PlayerPosition(PlayerPosition), PlayerColor(PlayerColor), Projectile(Projectile), ProjectilePosition(ProjectilePosition), Cooldown(Cooldown), Health(Health), Champion(Champion), } #[derive(Channel)] pub struct Channel1; protocolize! { Self = MyProtocol, Message = Messages, Component = Components, Input = Inputs, } pub fn protocol() -> MyProtocol { let mut protocol = MyProtocol::default(); protocol.add_channel::(ChannelSettings { mode: ChannelMode::OrderedReliable(ReliableSettings::default()), ..Default::default() }); protocol }