Add simple score view
This commit is contained in:
parent
bf486f01d4
commit
736dbe4c3b
@ -57,3 +57,14 @@ offset_bottom = 11.5
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="score_view" type="SimpleScoreView" parent="." unique_id=1128041371]
|
||||
anchors_preset = 5
|
||||
anchor_left = 0.5
|
||||
anchor_right = 0.5
|
||||
offset_left = -20.0
|
||||
offset_top = 18.0
|
||||
offset_right = 20.0
|
||||
offset_bottom = 58.0
|
||||
grow_horizontal = 2
|
||||
alignment = 1
|
||||
|
||||
@ -252,6 +252,8 @@ impl Game {
|
||||
pub fn on_map_changed(id: u8);
|
||||
#[signal]
|
||||
pub fn options_changed();
|
||||
#[signal]
|
||||
pub fn on_goal();
|
||||
|
||||
pub fn singleton() -> Option<Gd<Game>> {
|
||||
GameManager::singleton()
|
||||
@ -522,7 +524,8 @@ impl Game {
|
||||
self.goals
|
||||
.insert(*team, self.goals.get(&team).copied().unwrap_or(0) + 1);
|
||||
}
|
||||
self.run_deferred(move |_| {
|
||||
self.run_deferred(move |s| {
|
||||
s.signals().on_goal().emit();
|
||||
if let Some(peer) = &mut NetworkManager::singleton().bind_mut().peer {
|
||||
if let PeerKind::Server(peer, _) = peer {
|
||||
peer.broadcast_reliable(Package::Goal(teams));
|
||||
|
||||
@ -2,3 +2,4 @@ pub mod cli;
|
||||
pub mod lobby;
|
||||
pub mod net_stats;
|
||||
pub mod player_listing;
|
||||
pub mod simple_score_view;
|
||||
|
||||
55
rust/src/ui/simple_score_view.rs
Normal file
55
rust/src/ui/simple_score_view.rs
Normal file
@ -0,0 +1,55 @@
|
||||
use std::collections::HashMap;
|
||||
|
||||
use godot::{
|
||||
classes::{HBoxContainer, IHBoxContainer, Label},
|
||||
prelude::*,
|
||||
};
|
||||
|
||||
use crate::game_manager::Game;
|
||||
|
||||
#[derive(GodotClass)]
|
||||
#[class(base=HBoxContainer, init)]
|
||||
pub struct SimpleScoreView {
|
||||
team_goals: HashMap<u8, Gd<Label>>,
|
||||
base: Base<HBoxContainer>,
|
||||
}
|
||||
|
||||
#[godot_api]
|
||||
impl IHBoxContainer for SimpleScoreView {
|
||||
fn ready(&mut self) {
|
||||
self.run_deferred(|s| {
|
||||
if let Some(game) = Game::singleton() {
|
||||
for (id, team) in game.bind().get_teams().iter_shared().enumerate() {
|
||||
let mut goals_label = Label::new_alloc();
|
||||
goals_label.set_modulate(team.bind().color);
|
||||
goals_label.set_text("0");
|
||||
if !s.team_goals.is_empty() {
|
||||
let mut dash = Label::new_alloc();
|
||||
dash.set_text(" - ");
|
||||
s.base_mut().add_child(&dash);
|
||||
}
|
||||
s.base_mut().add_child(&goals_label);
|
||||
s.team_goals.insert(id as u8, goals_label);
|
||||
}
|
||||
|
||||
game.signals()
|
||||
.on_goal()
|
||||
.connect_other(s, |s| s.update_goals());
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
impl SimpleScoreView {
|
||||
pub fn update_goals(&mut self) {
|
||||
if let Some(game) = Game::singleton() {
|
||||
for (id, _) in game.bind().get_teams().iter_shared().enumerate() {
|
||||
if let Some(goals) = game.bind().goals.get(&(id as u8))
|
||||
&& let Some(label) = self.team_goals.get_mut(&(id as u8))
|
||||
{
|
||||
label.set_text(&goals.to_string());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user