Allow host clients to change game options
This commit is contained in:
parent
5a04e82a11
commit
0a1fdce192
@ -539,27 +539,55 @@ impl Game {
|
|||||||
unregister_commands(&mut cli);
|
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.opts.values.insert(opt, value);
|
||||||
self.run_deferred(move |s| {
|
self.run_deferred(move |s| {
|
||||||
s.signals().options_changed().emit();
|
s.signals().options_changed().emit();
|
||||||
if let Some(peer) = &mut NetworkManager::singleton().bind_mut().peer {
|
if let Some(peer) = &mut NetworkManager::singleton().bind_mut().peer
|
||||||
if let PeerKind::Server(peer, _) = peer {
|
&& send
|
||||||
peer.broadcast_reliable(Package::GameOptionChanged(opt, value));
|
{
|
||||||
|
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) {
|
if let Some(team) = self.opts.teams.get_mut(team as usize) {
|
||||||
team.values.insert(opt, value);
|
team.values.insert(opt, value);
|
||||||
}
|
}
|
||||||
self.run_deferred(move |s| {
|
self.run_deferred(move |s| {
|
||||||
s.signals().team_options_changed().emit(team);
|
s.signals().team_options_changed().emit(team);
|
||||||
if let Some(peer) = &mut NetworkManager::singleton().bind_mut().peer {
|
if let Some(peer) = &mut NetworkManager::singleton().bind_mut().peer
|
||||||
if let PeerKind::Server(peer, _) = peer {
|
&& send
|
||||||
peer.broadcast_reliable(Package::TeamGameOptionChanged(team, opt, value));
|
{
|
||||||
|
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) => {
|
Package::GameOptionChanged(opt, value) => {
|
||||||
if let Some(game) = &mut Game::singleton() {
|
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) => {
|
Package::TeamGameOptionChanged(team, opt, value) => {
|
||||||
if let Some(game) = &mut Game::singleton() {
|
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) => {
|
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) {
|
fn option_changed(&mut self, key: GameOption, value: GameOptionValue) {
|
||||||
if let Some(game) = &mut Game::singleton() {
|
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) {
|
fn team_option_changed(&mut self, team: u8, key: GameOption, value: GameOptionValue) {
|
||||||
if let Some(game) = &mut Game::singleton() {
|
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