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>, base: Base, } #[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()); } 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()); } } } } }