Make goals work correctly in replay

This commit is contained in:
Sofia 2026-07-27 02:48:11 +03:00
parent ba1b1bf6f1
commit e64bcc0427
2 changed files with 29 additions and 1 deletions

View File

@ -153,6 +153,8 @@ pub struct ReplayPlayback {
pub finished: bool,
pub running_goals: HashMap<u8, u16>,
base: Base<Node>,
}
@ -187,6 +189,7 @@ impl INode for ReplayPlayback {
&& frame.time <= self.current_time
{
self.player_data = frame.player_data.clone();
self.running_goals = frame.goals.clone();
if let ReplayBall::World(ball_state) = &frame.ball_data {
if let Some(ball) = &mut self.ball {

View File

@ -5,7 +5,7 @@ use godot::{
prelude::*,
};
use crate::game_manager::Game;
use crate::{game_manager::Game, replay::StandaloneReplayManager};
#[derive(GodotClass)]
#[class(base=HBoxContainer, init)]
@ -35,6 +35,23 @@ impl IHBoxContainer for SimpleScoreView {
game.signals()
.on_goal()
.connect_other(s, |s| s.update_goals());
} else if let Some(playback) = &StandaloneReplayManager::singleton().bind().playback {
for (id, team) in playback.bind().replay.teams.iter().enumerate() {
let mut goals_label = Label::new_alloc();
goals_label.set_modulate(team.color.clone().into());
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);
}
playback
.signals()
.on_data_changed()
.connect_other(s, |s| s.update_goals());
}
s.update_goals();
});
@ -51,6 +68,14 @@ impl SimpleScoreView {
label.set_text(&goals.to_string());
}
}
} else if let Some(playback) = &StandaloneReplayManager::singleton().bind().playback {
for (id, _) in playback.bind().replay.teams.iter().enumerate() {
if let Some(goals) = playback.bind().running_goals.get(&(id as u8))
&& let Some(label) = self.team_goals.get_mut(&(id as u8))
{
label.set_text(&goals.to_string());
}
}
}
}
}