pub struct Remote<T: Model> { /* private fields */ }Implementations§
Source§impl<T: Model> Remote<T>
impl<T: Model> Remote<T>
Sourcepub fn update(&self) -> Vec<T::Event>
pub fn update(&self) -> Vec<T::Event>
Examples found in repository?
examples/multiplayer.rs (line 105)
104 fn update(&mut self, delta_time: f64) {
105 self.model.update();
106 self.traffic_watcher.update(&self.model.traffic());
107 let delta_time = delta_time as f32;
108
109 self.current_time += delta_time;
110
111 const SPEED: f32 = 10.0;
112 if self.geng.window().is_key_pressed(geng::Key::ArrowLeft)
113 || self.geng.window().is_key_pressed(geng::Key::A)
114 {
115 self.player.position.x -= SPEED * delta_time;
116 }
117 if self.geng.window().is_key_pressed(geng::Key::ArrowRight)
118 || self.geng.window().is_key_pressed(geng::Key::D)
119 {
120 self.player.position.x += SPEED * delta_time;
121 }
122 if self.geng.window().is_key_pressed(geng::Key::ArrowUp)
123 || self.geng.window().is_key_pressed(geng::Key::W)
124 {
125 self.player.position.y += SPEED * delta_time;
126 }
127 if self.geng.window().is_key_pressed(geng::Key::ArrowDown)
128 || self.geng.window().is_key_pressed(geng::Key::S)
129 {
130 self.player.position.y -= SPEED * delta_time;
131 }
132
133 self.next_update -= delta_time;
134 if self.next_update < 0.0 {
135 while self.next_update < 0.0 {
136 self.next_update += 1.0 / <Model as simple_net::Model>::TICKS_PER_SECOND;
137 }
138 self.model
139 .send(Message::UpdatePosition(self.player.position));
140 }
141 }Sourcepub fn get(&self) -> Ref<'_, T>
pub fn get(&self) -> Ref<'_, T>
Examples found in repository?
examples/multiplayer.rs (line 90)
89 fn new(geng: &Geng, player_id: PlayerId, model: simple_net::Remote<Model>) -> Self {
90 let current_time = model.get().current_time;
91 let player = model.get().players.get(&player_id).unwrap().clone();
92 Self {
93 geng: geng.clone(),
94 traffic_watcher: geng::net::TrafficWatcher::new(),
95 next_update: 0.0,
96 model,
97 player,
98 current_time,
99 }
100 }
101}
102
103impl geng::State for Game {
104 fn update(&mut self, delta_time: f64) {
105 self.model.update();
106 self.traffic_watcher.update(&self.model.traffic());
107 let delta_time = delta_time as f32;
108
109 self.current_time += delta_time;
110
111 const SPEED: f32 = 10.0;
112 if self.geng.window().is_key_pressed(geng::Key::ArrowLeft)
113 || self.geng.window().is_key_pressed(geng::Key::A)
114 {
115 self.player.position.x -= SPEED * delta_time;
116 }
117 if self.geng.window().is_key_pressed(geng::Key::ArrowRight)
118 || self.geng.window().is_key_pressed(geng::Key::D)
119 {
120 self.player.position.x += SPEED * delta_time;
121 }
122 if self.geng.window().is_key_pressed(geng::Key::ArrowUp)
123 || self.geng.window().is_key_pressed(geng::Key::W)
124 {
125 self.player.position.y += SPEED * delta_time;
126 }
127 if self.geng.window().is_key_pressed(geng::Key::ArrowDown)
128 || self.geng.window().is_key_pressed(geng::Key::S)
129 {
130 self.player.position.y -= SPEED * delta_time;
131 }
132
133 self.next_update -= delta_time;
134 if self.next_update < 0.0 {
135 while self.next_update < 0.0 {
136 self.next_update += 1.0 / <Model as simple_net::Model>::TICKS_PER_SECOND;
137 }
138 self.model
139 .send(Message::UpdatePosition(self.player.position));
140 }
141 }
142 fn draw(&mut self, framebuffer: &mut ugli::Framebuffer) {
143 ugli::clear(framebuffer, Some(Rgba::BLACK), None, None);
144 let camera = geng::Camera2d {
145 center: vec2(0.0, 0.0),
146 rotation: Angle::ZERO,
147 fov: 100.0,
148 };
149 let model = self.model.get();
150 for player in &model.players {
151 self.geng
152 .draw2d()
153 .circle(framebuffer, &camera, player.position, 1.0, Rgba::GRAY);
154 }
155 self.geng
156 .draw2d()
157 .circle(framebuffer, &camera, self.player.position, 1.0, Rgba::WHITE);
158 self.geng.default_font().draw(
159 framebuffer,
160 &geng::PixelPerfectCamera,
161 &format!("Server time: {:.1}", model.current_time),
162 vec2::splat(TextAlign::LEFT),
163 mat3::translate(vec2(0.0, 0.0)) * mat3::scale_uniform(32.0),
164 Rgba::WHITE,
165 );
166 self.geng.default_font().draw(
167 framebuffer,
168 &geng::PixelPerfectCamera,
169 &format!("Client time: {:.1}", self.current_time),
170 vec2::splat(TextAlign::LEFT),
171 mat3::translate(vec2(0.0, 32.0)) * mat3::scale_uniform(32.0),
172 Rgba::WHITE,
173 );
174 self.geng.default_font().draw(
175 framebuffer,
176 &geng::PixelPerfectCamera,
177 &format!("traffic: {}", self.traffic_watcher),
178 vec2::splat(TextAlign::LEFT),
179 mat3::translate(vec2(0.0, 32.0 * 2.0)) * mat3::scale_uniform(32.0),
180 Rgba::WHITE,
181 );
182 }Sourcepub fn send(&self, message: T::Message)
pub fn send(&self, message: T::Message)
Examples found in repository?
examples/multiplayer.rs (line 139)
104 fn update(&mut self, delta_time: f64) {
105 self.model.update();
106 self.traffic_watcher.update(&self.model.traffic());
107 let delta_time = delta_time as f32;
108
109 self.current_time += delta_time;
110
111 const SPEED: f32 = 10.0;
112 if self.geng.window().is_key_pressed(geng::Key::ArrowLeft)
113 || self.geng.window().is_key_pressed(geng::Key::A)
114 {
115 self.player.position.x -= SPEED * delta_time;
116 }
117 if self.geng.window().is_key_pressed(geng::Key::ArrowRight)
118 || self.geng.window().is_key_pressed(geng::Key::D)
119 {
120 self.player.position.x += SPEED * delta_time;
121 }
122 if self.geng.window().is_key_pressed(geng::Key::ArrowUp)
123 || self.geng.window().is_key_pressed(geng::Key::W)
124 {
125 self.player.position.y += SPEED * delta_time;
126 }
127 if self.geng.window().is_key_pressed(geng::Key::ArrowDown)
128 || self.geng.window().is_key_pressed(geng::Key::S)
129 {
130 self.player.position.y -= SPEED * delta_time;
131 }
132
133 self.next_update -= delta_time;
134 if self.next_update < 0.0 {
135 while self.next_update < 0.0 {
136 self.next_update += 1.0 / <Model as simple_net::Model>::TICKS_PER_SECOND;
137 }
138 self.model
139 .send(Message::UpdatePosition(self.player.position));
140 }
141 }Sourcepub fn traffic(&self) -> Traffic
pub fn traffic(&self) -> Traffic
Examples found in repository?
examples/multiplayer.rs (line 106)
104 fn update(&mut self, delta_time: f64) {
105 self.model.update();
106 self.traffic_watcher.update(&self.model.traffic());
107 let delta_time = delta_time as f32;
108
109 self.current_time += delta_time;
110
111 const SPEED: f32 = 10.0;
112 if self.geng.window().is_key_pressed(geng::Key::ArrowLeft)
113 || self.geng.window().is_key_pressed(geng::Key::A)
114 {
115 self.player.position.x -= SPEED * delta_time;
116 }
117 if self.geng.window().is_key_pressed(geng::Key::ArrowRight)
118 || self.geng.window().is_key_pressed(geng::Key::D)
119 {
120 self.player.position.x += SPEED * delta_time;
121 }
122 if self.geng.window().is_key_pressed(geng::Key::ArrowUp)
123 || self.geng.window().is_key_pressed(geng::Key::W)
124 {
125 self.player.position.y += SPEED * delta_time;
126 }
127 if self.geng.window().is_key_pressed(geng::Key::ArrowDown)
128 || self.geng.window().is_key_pressed(geng::Key::S)
129 {
130 self.player.position.y -= SPEED * delta_time;
131 }
132
133 self.next_update -= delta_time;
134 if self.next_update < 0.0 {
135 while self.next_update < 0.0 {
136 self.next_update += 1.0 / <Model as simple_net::Model>::TICKS_PER_SECOND;
137 }
138 self.model
139 .send(Message::UpdatePosition(self.player.position));
140 }
141 }Auto Trait Implementations§
impl<T> !Freeze for Remote<T>
impl<T> !RefUnwindSafe for Remote<T>
impl<T> !Send for Remote<T>
impl<T> !Sync for Remote<T>
impl<T> Unpin for Remote<T>
impl<T> !UnwindSafe for Remote<T>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more