Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
let world = Arc::clone(&self.world).lock().unwrap().as_ref().unwrap().clone();ball: Option::Some(Ball {
position: Option::Some(FloatTuple {
x: world.ball.position.x,
y: world.ball.position.y,
}),
velocity: Option::Some(FloatTuple {
x: world.ball.velocity.x,
y: world.ball.velocity.y,
}),
}),
/* #### */
let ball_position = Vec2::new(
ball_position.x,
ball_position.y,
);
let mut ball_velocity = 0f32;
if players_count >= 2 {
let num = rand::thread_rng().gen_range(0..2);
if num == 0 {
ball_velocity = -BALL_SPEED;
} else {
ball_velocity = BALL_SPEED;
}
}
let velocity = { if ... { value1 } else { if ... { ... } else { ... } } };Спасибо за советы. Расскажите пожалуйста про первый побольше. Я не совсем понимаю как можно сделать по-другому.
Arc::clone(&self.world).lock().unwrap().as_ref().unwrap().clone();
Arc::clone(&self.world).lock().unwrap().as_ref().unwrap().clone();
struct RoundState {/* Игроки, позиции обьектов, etc */}
struct RoundResult { /* Победители, очки, etc */ }
enum Round {
Lobby(/* кто в лобби и т.д*/),
Game(RoundState),
Finished(RoundResult),
}
struct Game {
round: Round
/* Тут всякие статические штуки которые не зависят от раунда
* Имя серевера, MOTD и прочее
*/
}
async fn fetch_map(&self, ...) -> ... {
...
match round {
Round::Game(RoundState{players, map, ...}) => {
/* Актуальные данные вы получили строкой выше
* осталось бех всяких проверок обработать запрос
*/
},
_ => {
/* Попытка получить карту когда игра не запущена */
}
}
}
Спасибо автору! Интересная для меня тема! Буду ждать продолжения!
Мультиплеерная игра на Rust + gRPC со спектатор модом