Files
Nitrox/Nitrox.Launcher/Views/ServersView.axaml
2025-07-06 00:23:46 +02:00

175 lines
10 KiB
XML

<UserControl
x:Class="Nitrox.Launcher.Views.ServersView"
x:DataType="vm:ServersViewModel"
xmlns="https://github.com/avaloniaui"
xmlns:controls="clr-namespace:Nitrox.Launcher.Models.Controls"
xmlns:converters="clr-namespace:Nitrox.Launcher.Models.Converters"
xmlns:vm="clr-namespace:Nitrox.Launcher.ViewModels"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Design.DataContext>
<vm:ServersViewModel />
</Design.DataContext>
<Panel Background="{DynamicResource BrandWhite}" Classes="viewPadding">
<Panel IsVisible="{Binding !Servers.Count}">
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<Image
Margin="0,0,0,73"
Source="/Assets/Images/world-manager/server.png"
Stretch="None" />
<TextBlock
FontSize="32"
FontWeight="600"
TextAlignment="Center">
No servers here yet
</TextBlock>
<TextBlock
FontSize="16"
Margin="0,10,0,0"
TextAlignment="Center">
Create a new server to start hosting your Subnautica Multiplayer world
</TextBlock>
<Button
Classes="primary big"
Command="{Binding CreateServerCommand}"
HorizontalAlignment="Center"
HotKey="Enter"
Margin="0,40,0,0"
Width="350">
<StackPanel>
<TextBlock Text="CREATE NEW SERVER" />
<TextBlock Text="MULTIPLAYER" />
</StackPanel>
</Button>
</StackPanel>
</Panel>
<Grid IsVisible="{Binding Servers.Count}" RowDefinitions="Auto,Auto,*,Auto">
<TextBlock
Classes="header"
Grid.Row="0"
Text="Servers" />
<controls:RichTextBlock Grid.Row="1">Welcome to your Subnautica multiplayer server. For additional information and to learn more about hosting a server refer to the [Nitrox Wiki](nitrox.rux.gg/wiki/article/run-and-host-nitrox-subnautica-server)</controls:RichTextBlock>
<ScrollViewer Grid.Row="2" Margin="0,40,0,13">
<ItemsControl ItemsSource="{Binding Servers}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel Margin="0,-13" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border Classes="serverEntry" Margin="0,13">
<DockPanel VerticalAlignment="Center">
<Border
ClipToBounds="True"
CornerRadius="12"
DockPanel.Dock="Left">
<Grid>
<Image IsVisible="{Binding ServerIcon, Converter={converters:EqualityConverter}}" Source="/Assets/Images/subnautica-icon.png" />
<Border Height="56" Width="56">
<Border.Background>
<ImageBrush Source="{Binding ServerIcon}" Stretch="UniformToFill" />
</Border.Background>
</Border>
<controls:GrayscaleControl Opacity="{Binding !IsOnline}">
<controls:GrayscaleControl.Transitions>
<Transitions>
<DoubleTransition Duration="0:0:0.10" Property="Opacity" />
</Transitions>
</controls:GrayscaleControl.Transitions>
</controls:GrayscaleControl>
</Grid>
</Border>
<StackPanel
DockPanel.Dock="Left"
Margin="16,0"
VerticalAlignment="Center">
<TextBlock
FontSize="16"
FontWeight="600"
Text="{Binding Name}" />
<StackPanel
Classes="description"
HorizontalAlignment="Left"
Orientation="Horizontal">
<Panel>
<StackPanel IsVisible="{Binding IsOnline}" Orientation="Horizontal">
<Ellipse Fill="{DynamicResource BrandOnColor}" Margin="0,0,6,0" />
<TextBlock IsVisible="{Binding IsOnline}" Text="Online" />
</StackPanel>
<StackPanel IsVisible="{Binding !IsOnline}" Orientation="Horizontal">
<Ellipse Fill="{DynamicResource BrandOffColor}" Margin="0,0,6,0" />
<TextBlock IsVisible="{Binding !IsOnline}" Text="Offline" />
</StackPanel>
</Panel>
<TextBlock Text="{Binding GameMode, Converter={converters:ToStringConverter}}" />
<TextBlock>
<Run Text="{Binding Players}" />
<Run Text="/" />
<Run Text="{Binding MaxPlayers}" />
<Run Text=" playing" />
</TextBlock>
</StackPanel>
</StackPanel>
<StackPanel
DockPanel.Dock="Right"
HorizontalAlignment="Right"
Orientation="Horizontal"
Spacing="8">
<Button Command="{Binding OpenSaveFolderCommand}" Content="Open world folder" />
<Button
Content="Manage"
Command="{Binding $parent[ItemsControl].((vm:ServersViewModel)DataContext).ManageServerCommand}"
CommandParameter="{Binding}"
IsVisible="{Binding !IsOnline}" />
<Button
Classes="primary"
Content="Console"
Command="{Binding $parent[ItemsControl].((vm:ServersViewModel)DataContext).ManageServerCommand}"
CommandParameter="{Binding}">
<Button.IsVisible>
<MultiBinding Converter="{x:Static BoolConverters.And}">
<Binding Path="IsOnline" />
<Binding Path="IsEmbedded" />
</MultiBinding>
</Button.IsVisible>
</Button>
<Button
Classes="abort"
Command="{Binding StopCommand}"
Content="Stop"
IsVisible="{Binding IsOnline}" />
<Button
Classes="primary"
Command="{Binding $parent[ItemsControl].((vm:ServersViewModel)DataContext).StartServerCommand}"
CommandParameter="{Binding}"
Content="Start"
IsVisible="{Binding !IsOnline}" />
</StackPanel>
</DockPanel>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
<Border
Background="{DynamicResource BrandPanelBackground}"
CornerRadius="12"
Grid.Row="3"
Height="96"
HorizontalAlignment="Stretch"
VerticalAlignment="Bottom">
<Button
Classes="primary big"
Command="{Binding CreateServerCommand}"
Content="CREATE NEW SERVER"
HorizontalAlignment="Center"
HotKey="Enter"
VerticalAlignment="Center"
Width="262"
x:Name="CreateServerBtn" />
</Border>
</Grid>
</Panel>
</UserControl>