Skip to content

Commit

Permalink
WIP track position display
Browse files Browse the repository at this point in the history
  • Loading branch information
ColonelChocomel committed Apr 12, 2022
1 parent 08cbab3 commit 57accbd
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 32 deletions.
72 changes: 40 additions & 32 deletions ACCBroadcaster/Views/Broadcasting/CarListView.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -29,39 +29,47 @@
<MenuFlyoutSubItem x:Name="OnboardContextFlyout" Text="Onboards"/>
<MenuFlyoutSubItem x:Name="DrivableContextFlyout" Text="Drivable"/>
</MenuFlyout>
<ControlTemplate x:Name="CarPositionTemplate" TargetType="Button">
<Button Grid.Row="0" Grid.Column="0" CornerRadius="20" VerticalAlignment="Top" Width="50" Background="White" Foreground="Black">
<ContentPresenter Content="{TemplateBinding Content}"/>
</Button>
</ControlTemplate>
</Page.Resources>

<ScrollViewer VerticalScrollBarVisibility="Auto">
<StackPanel Orientation="Vertical">
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource TextStyle}" Width="90">Interval</TextBlock>
<TextBlock Style="{StaticResource TextStyle}" Width="40">Pos</TextBlock>
<TextBlock Style="{StaticResource TextStyle}" Width="40">#</TextBlock>
<TextBlock Style="{StaticResource TextStyle}" Width="250">Driver</TextBlock>
<TextBlock Style="{StaticResource TextStyle}" Width="85">Location</TextBlock>
<TextBlock Style="{StaticResource TextStyle}" Width="93">Lap Delta</TextBlock>
<TextBlock Style="{StaticResource TextStyle}" Width="100">Current</TextBlock>
<TextBlock Style="{StaticResource TextStyle}" Width="100">Last</TextBlock>
<TextBlock Style="{StaticResource TextStyle}" Width="100">Best</TextBlock>
<SymbolIcon Symbol="Help" ToolTipService.ToolTip="Left click to change focused car. Right click to change focused car and camera, or start a replay for selected car." Width="40"></SymbolIcon>
<Grid Name="Grid">
<Border Name="TrackPositionLine" Grid.Row="0" Grid.Column="0" Height="Auto" BorderThickness="4 0 4 0" BorderBrush="Gray" HorizontalAlignment="Left" Margin="20,0,0,0"/>
<ScrollViewer Grid.Row="0" Grid.Column="1" VerticalScrollBarVisibility="Auto" Margin="50,0">
<StackPanel Orientation="Vertical">
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource TextStyle}" Width="90">Interval</TextBlock>
<TextBlock Style="{StaticResource TextStyle}" Width="40">Pos</TextBlock>
<TextBlock Style="{StaticResource TextStyle}" Width="40">#</TextBlock>
<TextBlock Style="{StaticResource TextStyle}" Width="250">Driver</TextBlock>
<TextBlock Style="{StaticResource TextStyle}" Width="85">Location</TextBlock>
<TextBlock Style="{StaticResource TextStyle}" Width="93">Lap Delta</TextBlock>
<TextBlock Style="{StaticResource TextStyle}" Width="100">Current</TextBlock>
<TextBlock Style="{StaticResource TextStyle}" Width="100">Last</TextBlock>
<TextBlock Style="{StaticResource TextStyle}" Width="100">Best</TextBlock>
<SymbolIcon Symbol="Help" ToolTipService.ToolTip="Left click to change focused car. Right click to change focused car and camera, or start a replay for selected car." Width="40"></SymbolIcon>
</StackPanel>
<ItemsControl Name="CarLV" ItemsSource="{Binding Cars}" IsTapEnabled="True" Tapped="OnCarClicked">
<ItemsControl.ItemTemplate>
<DataTemplate x:DataType="classes:Car">
<StackPanel Orientation="Horizontal" Background="{Binding BackgroundBrush, Mode=OneWay}" ContextFlyout="{StaticResource CarContextFlyout}">
<TextBlock Text="{Binding Interval, Mode=OneWay}" Style="{StaticResource DeltaTextStyle}" Width="90"/>
<TextBlock Text="{Binding Position, Mode=OneWay}" Style="{StaticResource TextStyle}" Width="40"/>
<TextBlock Text="{Binding RaceNumber}" Style="{StaticResource TextStyle}" Width="40"/>
<TextBlock Text="{Binding DriverName, Mode=OneWay}" Style="{StaticResource TextStyle}" Width="250"/>
<TextBlock Text="{Binding Location, Mode=OneWay}" Style="{StaticResource TextStyle}" Width="85"/>
<TextBlock Text="{Binding LapDelta, Mode=OneWay}" Style="{StaticResource TextStyle}" Foreground="{Binding DeltaBrush, Mode=OneWay}" Width="93"/>
<TextBlock Text="{Binding CurrentLap, Mode=OneWay}" Style="{StaticResource TextStyle}" Width="100"/>
<TextBlock Text="{Binding LastLap, Mode=OneWay}" Style="{StaticResource TextStyle}" Width="100"/>
<TextBlock Text="{Binding BestLap, Mode=OneWay}" Style="{StaticResource TextStyle}" Width="100"/>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
<ItemsControl Name="CarLV" ItemsSource="{Binding Cars}" IsTapEnabled="True" Tapped="OnCarClicked">
<ItemsControl.ItemTemplate>
<DataTemplate x:DataType="classes:Car">
<StackPanel Orientation="Horizontal" Background="{Binding BackgroundBrush, Mode=OneWay}" ContextFlyout="{StaticResource CarContextFlyout}">
<TextBlock Text="{Binding Interval, Mode=OneWay}" Style="{StaticResource DeltaTextStyle}" Width="90"/>
<TextBlock Text="{Binding Position, Mode=OneWay}" Style="{StaticResource TextStyle}" Width="40"/>
<TextBlock Text="{Binding RaceNumber}" Style="{StaticResource TextStyle}" Width="40"/>
<TextBlock Text="{Binding DriverName, Mode=OneWay}" Style="{StaticResource TextStyle}" Width="250"/>
<TextBlock Text="{Binding Location, Mode=OneWay}" Style="{StaticResource TextStyle}" Width="85"/>
<TextBlock Text="{Binding LapDelta, Mode=OneWay}" Style="{StaticResource TextStyle}" Foreground="{Binding DeltaBrush, Mode=OneWay}" Width="93"/>
<TextBlock Text="{Binding CurrentLap, Mode=OneWay}" Style="{StaticResource TextStyle}" Width="100"/>
<TextBlock Text="{Binding LastLap, Mode=OneWay}" Style="{StaticResource TextStyle}" Width="100"/>
<TextBlock Text="{Binding BestLap, Mode=OneWay}" Style="{StaticResource TextStyle}" Width="100"/>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</ScrollViewer>
</ScrollViewer>
</Grid>
</Page>
25 changes: 25 additions & 0 deletions ACCBroadcaster/Views/Broadcasting/CarListView.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ public sealed partial class CarListView : Page
private ObservableCollection<Camera> DrivableCameras = new ObservableCollection<Camera>();
private RaceSessionType SessionType;
private float CurrentSessionTime = 0;
private List<Button> CarPositionButtons = new List<Button>();

public CarListView()
{
Expand Down Expand Up @@ -61,6 +62,12 @@ private void OnEntrylistUpdate(string sender, CarInfo carUpdate)
Location = CarLocationEnum.Pitlane,
};
Cars.Add(car);
Button button = new Button();
button.Template = CarPositionTemplate;
button.CommandParameter = car.Index.ToString();
button.Content = car.RaceNumber.ToString();
Grid.Children.Add(button);
CarPositionButtons.Add(button);
}
else
{
Expand All @@ -79,6 +86,12 @@ private void OnEntrylistUpdate(string sender, CarInfo carUpdate)
Location = CarLocationEnum.Pitlane,
};
Cars.Add(car);
Button button = new Button();
button.Template = CarPositionTemplate;
button.CommandParameter = car.Index.ToString();
button.Content = car.RaceNumber.ToString();
Grid.Children.Add(button);
CarPositionButtons.Add(button);
}
}

Expand Down Expand Up @@ -146,6 +159,7 @@ private void OnRealtimeCarUpdate(string sender, RealtimeCarUpdate carUpdate)
{
car.Interval = null;
}
MoveCarButton(car);
}
}

Expand Down Expand Up @@ -264,5 +278,16 @@ private void OnCarContextReplayClicked(object sender, RoutedEventArgs e)
float requestedStartTime = CurrentSessionTime - (length * 1000);
ACCService.Client.MessageHandler.RequestInstantReplay(requestedStartTime, length * 1000.0f, car.Index);
}

private void MoveCarButton(Car car)
{
Button button = CarPositionButtons.FirstOrDefault(x => int.Parse(x.CommandParameter.ToString()) == car.Index);
if (button != null)
{
double position = car.SplinePosition * TrackPositionLine.ActualHeight * 2;
position -= TrackPositionLine.ActualHeight;
button.Margin = new Thickness(0, 0, 0, position);
}
}
}
}

0 comments on commit 57accbd

Please sign in to comment.