Allow host clients to change game options
This commit is contained in:
parent
5a04e82a11
commit
0a1fdce192
@ -539,29 +539,57 @@ impl Game {
|
||||
unregister_commands(&mut cli);
|
||||
}
|
||||
|
||||
pub fn change_option(&mut self, opt: GameOption, value: GameOptionValue) {
|
||||
pub fn change_option(&mut self, opt: GameOption, value: GameOptionValue, send: bool) {
|
||||
godot_print!("Option changed");
|
||||
self.opts.values.insert(opt, value);
|
||||
self.run_deferred(move |s| {
|
||||
s.signals().options_changed().emit();
|
||||
if let Some(peer) = &mut NetworkManager::singleton().bind_mut().peer {
|
||||
if let PeerKind::Server(peer, _) = peer {
|
||||
if let Some(peer) = &mut NetworkManager::singleton().bind_mut().peer
|
||||
&& send
|
||||
{
|
||||
match peer {
|
||||
PeerKind::Client(peer, socket_addr) => {
|
||||
if s.has_host_privileges() {
|
||||
peer.send_reliable(socket_addr, Package::GameOptionChanged(opt, value));
|
||||
}
|
||||
}
|
||||
PeerKind::Server(peer, _) => {
|
||||
peer.broadcast_reliable(Package::GameOptionChanged(opt, value));
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
pub fn change_team_option(&mut self, team: u8, opt: GameOption, value: GameOptionValue) {
|
||||
pub fn change_team_option(
|
||||
&mut self,
|
||||
team: u8,
|
||||
opt: GameOption,
|
||||
value: GameOptionValue,
|
||||
send: bool,
|
||||
) {
|
||||
if let Some(team) = self.opts.teams.get_mut(team as usize) {
|
||||
team.values.insert(opt, value);
|
||||
}
|
||||
self.run_deferred(move |s| {
|
||||
s.signals().team_options_changed().emit(team);
|
||||
if let Some(peer) = &mut NetworkManager::singleton().bind_mut().peer {
|
||||
if let PeerKind::Server(peer, _) = peer {
|
||||
if let Some(peer) = &mut NetworkManager::singleton().bind_mut().peer
|
||||
&& send
|
||||
{
|
||||
match peer {
|
||||
PeerKind::Client(peer, socket_addr) => {
|
||||
if s.has_host_privileges() {
|
||||
peer.send_reliable(
|
||||
socket_addr,
|
||||
Package::TeamGameOptionChanged(team, opt, value),
|
||||
);
|
||||
}
|
||||
}
|
||||
PeerKind::Server(peer, _) => {
|
||||
peer.broadcast_reliable(Package::TeamGameOptionChanged(team, opt, value));
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@ -243,12 +243,12 @@ impl NetworkManager {
|
||||
}
|
||||
Package::GameOptionChanged(opt, value) => {
|
||||
if let Some(game) = &mut Game::singleton() {
|
||||
game.bind_mut().change_option(opt, value);
|
||||
game.bind_mut().change_option(opt, value, false);
|
||||
}
|
||||
}
|
||||
Package::TeamGameOptionChanged(team, opt, value) => {
|
||||
if let Some(game) = &mut Game::singleton() {
|
||||
game.bind_mut().change_team_option(team, opt, value);
|
||||
game.bind_mut().change_team_option(team, opt, value, false);
|
||||
}
|
||||
}
|
||||
Package::Goal(scorer, teams) => {
|
||||
@ -568,6 +568,28 @@ impl NetworkManager {
|
||||
}
|
||||
}
|
||||
}
|
||||
Package::GameOptionChanged(key, value) => {
|
||||
if let Some(game) = &mut Game::singleton() {
|
||||
let player =
|
||||
game.bind().find_player_by_addr(&conn.address).cloned();
|
||||
if let Some(player) = player
|
||||
&& player.has_host_privileges
|
||||
{
|
||||
game.bind_mut().change_option(key, value, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
Package::TeamGameOptionChanged(team, key, value) => {
|
||||
if let Some(game) = &mut Game::singleton() {
|
||||
let player =
|
||||
game.bind().find_player_by_addr(&conn.address).cloned();
|
||||
if let Some(player) = player
|
||||
&& player.has_host_privileges
|
||||
{
|
||||
game.bind_mut().change_team_option(team, key, value, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
},
|
||||
},
|
||||
|
||||
@ -270,13 +270,13 @@ impl LobbyPanel {
|
||||
|
||||
fn option_changed(&mut self, key: GameOption, value: GameOptionValue) {
|
||||
if let Some(game) = &mut Game::singleton() {
|
||||
game.bind_mut().change_option(key, value);
|
||||
game.bind_mut().change_option(key, value, true);
|
||||
}
|
||||
}
|
||||
|
||||
fn team_option_changed(&mut self, team: u8, key: GameOption, value: GameOptionValue) {
|
||||
if let Some(game) = &mut Game::singleton() {
|
||||
game.bind_mut().change_team_option(team, key, value);
|
||||
game.bind_mut().change_team_option(team, key, value, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user