mirror of
https://github.com/DorkSquadRR/DorkNet.git
synced 2026-10-26 15:38:45 -07:00
0a76a4ec13
Launch RecRoom.exe directly on 2020.12 EAC builds (skip the Recroom_Release.exe EAC wrapper); fall back to whichever single binary exists. Add an opt-in "trust self-signed TLS certs" toggle that flows through ClientPatcher into the ClientMod config, off by default since Localtunnel/Tunnelto serve valid certs.
1543 lines
102 KiB
XML
1543 lines
102 KiB
XML
<Window x:Class="DorkNet.Launcher.MainWindow"
|
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
|
Title="DorkNet"
|
|
Width="1080" Height="720"
|
|
MinWidth="900" MinHeight="600"
|
|
WindowStartupLocation="CenterScreen"
|
|
Background="{StaticResource Bg}"
|
|
TextElement.Foreground="{StaticResource Ink}"
|
|
FontFamily="Segoe UI Variable, Segoe UI"
|
|
TextOptions.TextFormattingMode="Ideal"
|
|
TextOptions.TextRenderingMode="ClearType">
|
|
|
|
<Grid>
|
|
<!-- Window background: a faint vignette in the top-left from the
|
|
brand colour into the slate base. No multi-stop rainbow — a
|
|
single warm corner anchored on near-neutral. -->
|
|
<Grid.Background>
|
|
<RadialGradientBrush GradientOrigin="0,0" Center="0,0"
|
|
RadiusX="0.9" RadiusY="1.1">
|
|
<GradientStop Color="#1A1820" Offset="0" />
|
|
<GradientStop Color="#0D0F14" Offset="0.8" />
|
|
</RadialGradientBrush>
|
|
</Grid.Background>
|
|
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="Auto" />
|
|
<ColumnDefinition Width="*" />
|
|
</Grid.ColumnDefinitions>
|
|
|
|
<!-- ── Sidebar ─────────────────────────────────────────────────
|
|
Persistent in Host/Join/Settings views. Hidden via code-behind
|
|
during Welcome/Setup so those screens can hero the brand. -->
|
|
<Border x:Name="MainNav" Grid.Column="0"
|
|
Width="232" Visibility="Collapsed"
|
|
Background="{StaticResource BgDeeper}"
|
|
BorderBrush="{StaticResource BorderSoft}"
|
|
BorderThickness="0,0,1,0">
|
|
<Grid>
|
|
<Grid.RowDefinitions>
|
|
<RowDefinition Height="Auto" />
|
|
<RowDefinition Height="*" />
|
|
<RowDefinition Height="Auto" />
|
|
</Grid.RowDefinitions>
|
|
|
|
<!-- Brand mark: brand-coloured square with a small notch
|
|
cut out, plus the wordmark in caps. Distinctive geometric
|
|
mark — no rainbow gradient on the text. -->
|
|
<Border Grid.Row="0" Padding="20,22,20,18"
|
|
BorderBrush="{StaticResource BorderSoft}"
|
|
BorderThickness="0,0,0,1">
|
|
<StackPanel Orientation="Horizontal">
|
|
<Grid Width="28" Height="28" Margin="0,0,12,0">
|
|
<Border Background="{StaticResource Brand}"
|
|
CornerRadius="6" />
|
|
<Path Fill="White"
|
|
Data="M 8 8 L 14 8 L 14 14 L 20 14 L 20 20 L 8 20 Z"
|
|
Width="28" Height="28" />
|
|
</Grid>
|
|
<StackPanel VerticalAlignment="Center">
|
|
<TextBlock Text="DORKNET" FontSize="13"
|
|
FontWeight="Bold"
|
|
Foreground="{StaticResource Ink}">
|
|
<TextBlock.Resources>
|
|
<Style TargetType="TextBlock">
|
|
<Setter Property="FontFamily" Value="Segoe UI Variable, Segoe UI" />
|
|
</Style>
|
|
</TextBlock.Resources>
|
|
</TextBlock>
|
|
<TextBlock Text="PRIVATE SERVER" FontSize="9"
|
|
FontWeight="SemiBold"
|
|
Foreground="{StaticResource InkFaint}"
|
|
Margin="0,2,0,0" />
|
|
</StackPanel>
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
<!-- Nav rows — Host, Join, Settings. Each routes to the
|
|
same handlers the legacy mode-switcher uses. Visual
|
|
"active" state is set by the code-behind via IsChecked
|
|
to match whichever view is showing. -->
|
|
<StackPanel Grid.Row="1" Margin="12,16">
|
|
<TextBlock Text="MODE" Style="{StaticResource FieldLabel}"
|
|
Margin="6,0,0,8" />
|
|
<RadioButton x:Name="NavHostBtn" Style="{StaticResource NavBtn}"
|
|
AutomationProperties.AutomationId="NavHostBtn"
|
|
GroupName="MainNav" Click="OnPickHost">
|
|
<StackPanel Orientation="Horizontal">
|
|
<Path Width="18" Height="18"
|
|
Stroke="{Binding Foreground, RelativeSource={RelativeSource AncestorType=RadioButton}}"
|
|
StrokeThickness="1.5"
|
|
Fill="Transparent"
|
|
StrokeLineJoin="Round"
|
|
Data="M 2 4 L 16 4 L 16 8 L 2 8 Z M 2 10 L 16 10 L 16 14 L 2 14 Z M 4 6 L 5 6 M 4 12 L 5 12 M 13 6 L 14 6 M 13 12 L 14 12"
|
|
VerticalAlignment="Center" Margin="2,0,12,0" />
|
|
<TextBlock Text="Host a server" VerticalAlignment="Center" />
|
|
</StackPanel>
|
|
</RadioButton>
|
|
<RadioButton x:Name="NavJoinBtn" Style="{StaticResource NavBtn}"
|
|
AutomationProperties.AutomationId="NavJoinBtn"
|
|
GroupName="MainNav" Click="OnPickJoin">
|
|
<StackPanel Orientation="Horizontal">
|
|
<Path Width="18" Height="18"
|
|
Stroke="{Binding Foreground, RelativeSource={RelativeSource AncestorType=RadioButton}}"
|
|
StrokeThickness="1.5"
|
|
Fill="Transparent"
|
|
StrokeLineJoin="Round"
|
|
StrokeStartLineCap="Round"
|
|
StrokeEndLineCap="Round"
|
|
Data="M 7 11 L 11 7 M 5 9 A 3 3 0 0 1 9 5 L 11 5 M 11 13 L 9 13 A 3 3 0 0 1 5 9 M 15 9 A 3 3 0 0 1 11 13 M 11 5 A 3 3 0 0 1 15 9"
|
|
VerticalAlignment="Center" Margin="2,0,12,0" />
|
|
<TextBlock Text="Join a friend" VerticalAlignment="Center" />
|
|
</StackPanel>
|
|
</RadioButton>
|
|
|
|
<TextBlock Text="SYSTEM" Style="{StaticResource FieldLabel}"
|
|
Margin="6,20,0,8" />
|
|
<RadioButton x:Name="NavSettingsBtn" Style="{StaticResource NavBtn}"
|
|
AutomationProperties.AutomationId="NavSettingsBtn"
|
|
GroupName="MainNav" Click="OnOpenSettings">
|
|
<StackPanel Orientation="Horizontal">
|
|
<Path Width="18" Height="18"
|
|
Stroke="{Binding Foreground, RelativeSource={RelativeSource AncestorType=RadioButton}}"
|
|
StrokeThickness="1.5"
|
|
Fill="Transparent"
|
|
StrokeLineJoin="Round"
|
|
Data="M 9 2 L 10 4 L 12 3 L 12.5 5 L 14.5 5 L 14 7 L 16 8 L 14.5 9.5 L 15 11.5 L 13 11.5 L 12.5 13.5 L 10.5 13 L 9 14.5 L 7.5 13 L 5.5 13.5 L 5 11.5 L 3 11.5 L 3.5 9.5 L 2 8 L 4 7 L 3.5 5 L 5.5 5 L 6 3 L 8 4 Z M 9 6.5 A 1.5 1.5 0 1 0 9 9.5 A 1.5 1.5 0 1 0 9 6.5"
|
|
VerticalAlignment="Center" Margin="2,0,12,0" />
|
|
<TextBlock Text="Settings" VerticalAlignment="Center" />
|
|
</StackPanel>
|
|
</RadioButton>
|
|
<Button x:Name="NavRerunSetupBtn"
|
|
ToolTip="Re-run setup wizard"
|
|
Click="OnRerunSetup"
|
|
HorizontalContentAlignment="Stretch"
|
|
Background="Transparent" BorderBrush="Transparent"
|
|
BorderThickness="0" Padding="14,9"
|
|
Cursor="Hand"
|
|
Margin="0,0,0,2">
|
|
<Button.Template>
|
|
<ControlTemplate TargetType="Button">
|
|
<Border x:Name="root" Background="{TemplateBinding Background}"
|
|
CornerRadius="6" Padding="{TemplateBinding Padding}">
|
|
<ContentPresenter HorizontalAlignment="Stretch"
|
|
VerticalAlignment="Center" />
|
|
</Border>
|
|
<ControlTemplate.Triggers>
|
|
<Trigger Property="IsMouseOver" Value="True">
|
|
<Setter TargetName="root" Property="Background" Value="{StaticResource BgElev}" />
|
|
</Trigger>
|
|
</ControlTemplate.Triggers>
|
|
</ControlTemplate>
|
|
</Button.Template>
|
|
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
|
|
<Path Width="18" Height="18"
|
|
Stroke="{StaticResource InkSoft}"
|
|
StrokeThickness="1.5"
|
|
Fill="Transparent"
|
|
StrokeLineJoin="Round"
|
|
StrokeStartLineCap="Round"
|
|
StrokeEndLineCap="Round"
|
|
Data="M 4 9 A 5 5 0 1 1 6 13 M 4 5 L 4 9 L 8 9"
|
|
VerticalAlignment="Center" Margin="2,0,12,0" />
|
|
<TextBlock Text="Re-run setup" VerticalAlignment="Center"
|
|
Foreground="{StaticResource InkSoft}"
|
|
FontSize="13" FontWeight="SemiBold" />
|
|
</StackPanel>
|
|
</Button>
|
|
</StackPanel>
|
|
|
|
<!-- Footer: status indicator + version. Information
|
|
density a real tool wears. -->
|
|
<Border Grid.Row="2" Padding="20,16"
|
|
BorderBrush="{StaticResource BorderSoft}"
|
|
BorderThickness="0,1,0,0">
|
|
<StackPanel>
|
|
<StackPanel Orientation="Horizontal" Margin="0,0,0,6">
|
|
<Ellipse x:Name="SidebarStatusDot" Width="8" Height="8"
|
|
Fill="{StaticResource InkFaint}"
|
|
VerticalAlignment="Center" Margin="0,0,8,0" />
|
|
<TextBlock x:Name="SidebarStatusText"
|
|
Text="Idle" FontSize="11"
|
|
FontWeight="SemiBold"
|
|
Foreground="{StaticResource InkSoft}"
|
|
VerticalAlignment="Center" />
|
|
</StackPanel>
|
|
<TextBlock x:Name="SidebarVersionText"
|
|
Text="DORKNET LAUNCHER · v0.1"
|
|
FontSize="9" FontWeight="SemiBold"
|
|
Foreground="{StaticResource InkFaint}"
|
|
FontFamily="Cascadia Mono, Consolas" />
|
|
<!-- Update banner — only visible after the
|
|
startup check finds a newer release. Clicking
|
|
stages the download + spawns the swap script. -->
|
|
<Border x:Name="UpdateBanner" Visibility="Collapsed"
|
|
Background="{StaticResource BrandSoft}"
|
|
BorderBrush="{StaticResource Brand}"
|
|
BorderThickness="1"
|
|
CornerRadius="6"
|
|
Padding="10,8"
|
|
Margin="0,12,0,0">
|
|
<StackPanel>
|
|
<StackPanel Orientation="Horizontal" Margin="0,0,0,4">
|
|
<Path Width="11" Height="11" Margin="0,0,6,0"
|
|
Stroke="{StaticResource Brand}"
|
|
StrokeThickness="1.5"
|
|
Fill="Transparent"
|
|
StrokeLineJoin="Round"
|
|
StrokeStartLineCap="Round"
|
|
StrokeEndLineCap="Round"
|
|
Data="M 5.5 1 L 5.5 8 M 2 5 L 5.5 8 L 9 5 M 1.5 10 L 9.5 10"
|
|
VerticalAlignment="Center" />
|
|
<TextBlock x:Name="UpdateBannerTitle"
|
|
Text="Update available"
|
|
FontSize="11" FontWeight="Bold"
|
|
Foreground="{StaticResource Brand}"
|
|
VerticalAlignment="Center" />
|
|
</StackPanel>
|
|
<TextBlock x:Name="UpdateBannerVersionText"
|
|
Text=""
|
|
FontSize="10"
|
|
Foreground="{StaticResource InkSoft}"
|
|
FontFamily="Cascadia Mono, Consolas"
|
|
Margin="0,0,0,6" />
|
|
<Button x:Name="UpdateInstallBtn"
|
|
Click="OnInstallUpdate"
|
|
Content="Install & restart"
|
|
Cursor="Hand"
|
|
HorizontalContentAlignment="Center"
|
|
Background="{StaticResource Brand}"
|
|
Foreground="White"
|
|
BorderBrush="{StaticResource Brand}"
|
|
BorderThickness="1"
|
|
Padding="0,6"
|
|
FontSize="10"
|
|
FontWeight="Bold">
|
|
<Button.Template>
|
|
<ControlTemplate TargetType="Button">
|
|
<Border x:Name="root"
|
|
Background="{TemplateBinding Background}"
|
|
BorderBrush="{TemplateBinding BorderBrush}"
|
|
BorderThickness="{TemplateBinding BorderThickness}"
|
|
CornerRadius="4">
|
|
<ContentPresenter HorizontalAlignment="Center"
|
|
VerticalAlignment="Center"
|
|
Margin="{TemplateBinding Padding}"
|
|
TextElement.Foreground="{TemplateBinding Foreground}" />
|
|
</Border>
|
|
<ControlTemplate.Triggers>
|
|
<Trigger Property="IsMouseOver" Value="True">
|
|
<Setter TargetName="root" Property="Background" Value="{StaticResource BrandHover}" />
|
|
</Trigger>
|
|
</ControlTemplate.Triggers>
|
|
</ControlTemplate>
|
|
</Button.Template>
|
|
</Button>
|
|
</StackPanel>
|
|
</Border>
|
|
</StackPanel>
|
|
</Border>
|
|
</Grid>
|
|
</Border>
|
|
|
|
<!-- ── Content area ───────────────────────────────────────────── -->
|
|
<Grid Grid.Column="1">
|
|
|
|
<!-- ── Welcome screen ─────────────────────────────────────
|
|
Sidebar hidden during this view. Hero treatment with
|
|
bold geometry — no emoji marketing card. -->
|
|
<Grid x:Name="WelcomeView" Visibility="Collapsed">
|
|
<Grid.RowDefinitions>
|
|
<RowDefinition Height="*" />
|
|
<RowDefinition Height="Auto" />
|
|
</Grid.RowDefinitions>
|
|
|
|
<StackPanel Grid.Row="0"
|
|
VerticalAlignment="Center" HorizontalAlignment="Center"
|
|
MaxWidth="640" Margin="48,0">
|
|
|
|
<!-- Geometric brand mark, oversized. -->
|
|
<Grid Width="84" Height="84" HorizontalAlignment="Center"
|
|
Margin="0,0,0,28">
|
|
<Border Background="{StaticResource Brand}"
|
|
CornerRadius="16"
|
|
Effect="{StaticResource BtnShadow}" />
|
|
<Path Fill="White"
|
|
Data="M 24 24 L 42 24 L 42 42 L 60 42 L 60 60 L 24 60 Z"
|
|
Width="84" Height="84" />
|
|
</Grid>
|
|
|
|
<TextBlock Text="DORKNET"
|
|
FontSize="64" FontWeight="Bold"
|
|
Foreground="{StaticResource Ink}"
|
|
HorizontalAlignment="Center"
|
|
FontFamily="Segoe UI Variable, Segoe UI" />
|
|
<TextBlock HorizontalAlignment="Center" Margin="0,4,0,0">
|
|
<Run Text="A private server for"
|
|
Foreground="{StaticResource InkSoft}" FontSize="16" />
|
|
<Run Text=" Rec Room. "
|
|
Foreground="{StaticResource Ink}" FontSize="16" FontWeight="SemiBold" />
|
|
<Run Text="Hosted on your machine, played with your friends."
|
|
Foreground="{StaticResource InkSoft}" FontSize="16" />
|
|
</TextBlock>
|
|
|
|
<!-- Feature row — no marketing card, just three flat
|
|
items with a small left rule. Reads like docs, not
|
|
a hero card. -->
|
|
<Grid Margin="0,44,0,40" HorizontalAlignment="Center">
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="*" />
|
|
<ColumnDefinition Width="40" />
|
|
<ColumnDefinition Width="*" />
|
|
<ColumnDefinition Width="40" />
|
|
<ColumnDefinition Width="*" />
|
|
</Grid.ColumnDefinitions>
|
|
|
|
<StackPanel Grid.Column="0" MaxWidth="180">
|
|
<Border Width="3" Height="20" Background="{StaticResource Brand}"
|
|
HorizontalAlignment="Left" Margin="0,0,0,10" />
|
|
<TextBlock Text="2-MIN SETUP" FontSize="10" FontWeight="Bold"
|
|
Foreground="{StaticResource Ink}"
|
|
Margin="0,0,0,6" />
|
|
<TextBlock Text="Auto-detects your install, downloads everything else."
|
|
FontSize="12" Foreground="{StaticResource InkSoft}"
|
|
TextWrapping="Wrap" LineHeight="18" />
|
|
</StackPanel>
|
|
|
|
<StackPanel Grid.Column="2" MaxWidth="180">
|
|
<Border Width="3" Height="20" Background="{StaticResource Brand}"
|
|
HorizontalAlignment="Left" Margin="0,0,0,10" />
|
|
<TextBlock Text="ZERO COST" FontSize="10" FontWeight="Bold"
|
|
Foreground="{StaticResource Ink}"
|
|
Margin="0,0,0,6" />
|
|
<TextBlock Text="No port forwards. localtunnel gives one temporary HTTPS link."
|
|
FontSize="12" Foreground="{StaticResource InkSoft}"
|
|
TextWrapping="Wrap" LineHeight="18" />
|
|
</StackPanel>
|
|
|
|
<StackPanel Grid.Column="4" MaxWidth="180">
|
|
<Border Width="3" Height="20" Background="{StaticResource Brand}"
|
|
HorizontalAlignment="Left" Margin="0,0,0,10" />
|
|
<TextBlock Text="STOCK CLIENT" FontSize="10" FontWeight="Bold"
|
|
Foreground="{StaticResource Ink}"
|
|
Margin="0,0,0,6" />
|
|
<TextBlock Text="Patches the official Rec Room install in place. No rebuild."
|
|
FontSize="12" Foreground="{StaticResource InkSoft}"
|
|
TextWrapping="Wrap" LineHeight="18" />
|
|
</StackPanel>
|
|
</Grid>
|
|
|
|
<Button Style="{StaticResource PrimaryBtn}"
|
|
Click="OnWelcomeContinue"
|
|
HorizontalAlignment="Center"
|
|
Padding="40,14" FontSize="14" FontWeight="Bold">
|
|
<StackPanel Orientation="Horizontal">
|
|
<TextBlock Text="GET STARTED" VerticalAlignment="Center"
|
|
Foreground="White" />
|
|
<Path Width="14" Height="14" Margin="14,0,0,0"
|
|
Stroke="White" StrokeThickness="1.8"
|
|
Fill="Transparent"
|
|
StrokeLineJoin="Round"
|
|
StrokeStartLineCap="Round"
|
|
StrokeEndLineCap="Round"
|
|
Data="M 2 7 L 12 7 M 8 3 L 12 7 L 8 11"
|
|
VerticalAlignment="Center" />
|
|
</StackPanel>
|
|
</Button>
|
|
</StackPanel>
|
|
|
|
<TextBlock Grid.Row="1"
|
|
Text="Not affiliated with Rec Room Inc. or Against Gravity. · AGPL-3.0"
|
|
HorizontalAlignment="Center"
|
|
Foreground="{StaticResource InkFaint}"
|
|
FontSize="10" FontWeight="SemiBold"
|
|
Margin="0,0,0,28" />
|
|
</Grid>
|
|
|
|
<!-- ── Setup wizard ─────────────────────────────────────── -->
|
|
<Grid x:Name="SetupView" Visibility="Collapsed">
|
|
<Grid.RowDefinitions>
|
|
<RowDefinition Height="Auto" />
|
|
<RowDefinition Height="Auto" />
|
|
<RowDefinition Height="*" />
|
|
<RowDefinition Height="Auto" />
|
|
</Grid.RowDefinitions>
|
|
|
|
<!-- Header bar: wordmark + step pill. Matches the
|
|
in-product header used by Host/Join. -->
|
|
<Border Grid.Row="0" Padding="40,26,40,18"
|
|
BorderBrush="{StaticResource BorderSoft}"
|
|
BorderThickness="0,0,0,1">
|
|
<Grid>
|
|
<StackPanel Orientation="Horizontal">
|
|
<Grid Width="22" Height="22" Margin="0,0,12,0">
|
|
<Border Background="{StaticResource Brand}" CornerRadius="5" />
|
|
<Path Fill="White"
|
|
Data="M 6 6 L 11 6 L 11 11 L 16 11 L 16 16 L 6 16 Z"
|
|
Width="22" Height="22" />
|
|
</Grid>
|
|
<TextBlock Text="DORKNET" FontSize="14"
|
|
FontWeight="Bold"
|
|
Foreground="{StaticResource Ink}"
|
|
VerticalAlignment="Center" />
|
|
<Border Background="{StaticResource BorderSoft}" Width="1"
|
|
Margin="14,4,14,4" />
|
|
<TextBlock Text="FIRST-RUN SETUP" FontSize="11"
|
|
FontWeight="SemiBold"
|
|
Foreground="{StaticResource InkSoft}"
|
|
VerticalAlignment="Center" />
|
|
</StackPanel>
|
|
<Border Style="{StaticResource StatusChip}" HorizontalAlignment="Right"
|
|
VerticalAlignment="Center">
|
|
<TextBlock x:Name="SetupStepIndicator"
|
|
Text="STEP 1 OF 5" FontSize="10"
|
|
FontWeight="Bold"
|
|
Foreground="{StaticResource Brand}" />
|
|
</Border>
|
|
</Grid>
|
|
</Border>
|
|
|
|
<!-- Stepper bar showing all five steps as a progress
|
|
rail. The active dot pulses on the brand colour;
|
|
completed segments fill. -->
|
|
<Border Grid.Row="1" Padding="40,18,40,18">
|
|
<Grid x:Name="SetupStepperGrid">
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="*" />
|
|
<ColumnDefinition Width="*" />
|
|
<ColumnDefinition Width="*" />
|
|
<ColumnDefinition Width="*" />
|
|
<ColumnDefinition Width="*" />
|
|
</Grid.ColumnDefinitions>
|
|
|
|
<Border Grid.Column="0" x:Name="StepBar1"
|
|
Height="3" Margin="0,0,4,0"
|
|
Background="{StaticResource Brand}"
|
|
CornerRadius="2"
|
|
VerticalAlignment="Top" />
|
|
<Border Grid.Column="1" x:Name="StepBar2"
|
|
Height="3" Margin="4,0,4,0"
|
|
Background="{StaticResource Border}"
|
|
CornerRadius="2"
|
|
VerticalAlignment="Top" />
|
|
<Border Grid.Column="2" x:Name="StepBar3"
|
|
Height="3" Margin="4,0,4,0"
|
|
Background="{StaticResource Border}"
|
|
CornerRadius="2"
|
|
VerticalAlignment="Top" />
|
|
<Border Grid.Column="3" x:Name="StepBar4"
|
|
Height="3" Margin="4,0,4,0"
|
|
Background="{StaticResource Border}"
|
|
CornerRadius="2"
|
|
VerticalAlignment="Top" />
|
|
<Border Grid.Column="4" x:Name="StepBar5"
|
|
Height="3" Margin="4,0,0,0"
|
|
Background="{StaticResource Border}"
|
|
CornerRadius="2"
|
|
VerticalAlignment="Top" />
|
|
|
|
<StackPanel Grid.Column="0" Margin="0,12,0,0">
|
|
<TextBlock Text="01" FontSize="11" FontWeight="Bold"
|
|
Foreground="{StaticResource Brand}"
|
|
FontFamily="Cascadia Mono, Consolas" />
|
|
<TextBlock Text="Mode" FontSize="11"
|
|
Foreground="{StaticResource InkSoft}"
|
|
Margin="0,2,0,0" />
|
|
</StackPanel>
|
|
<StackPanel Grid.Column="1" Margin="0,12,0,0">
|
|
<TextBlock Text="02" FontSize="11" FontWeight="Bold"
|
|
Foreground="{StaticResource InkFaint}"
|
|
FontFamily="Cascadia Mono, Consolas" />
|
|
<TextBlock Text="Install" FontSize="11"
|
|
Foreground="{StaticResource InkFaint}"
|
|
Margin="0,2,0,0" />
|
|
</StackPanel>
|
|
<StackPanel Grid.Column="2" Margin="0,12,0,0">
|
|
<TextBlock Text="03" FontSize="11" FontWeight="Bold"
|
|
Foreground="{StaticResource InkFaint}"
|
|
FontFamily="Cascadia Mono, Consolas" />
|
|
<TextBlock Text="Server" FontSize="11"
|
|
Foreground="{StaticResource InkFaint}"
|
|
Margin="0,2,0,0" />
|
|
</StackPanel>
|
|
<StackPanel Grid.Column="3" Margin="0,12,0,0">
|
|
<TextBlock Text="04" FontSize="11" FontWeight="Bold"
|
|
Foreground="{StaticResource InkFaint}"
|
|
FontFamily="Cascadia Mono, Consolas" />
|
|
<TextBlock Text="Photon" FontSize="11"
|
|
Foreground="{StaticResource InkFaint}"
|
|
Margin="0,2,0,0" />
|
|
</StackPanel>
|
|
<StackPanel Grid.Column="4" Margin="0,12,0,0">
|
|
<TextBlock Text="05" FontSize="11" FontWeight="Bold"
|
|
Foreground="{StaticResource InkFaint}"
|
|
FontFamily="Cascadia Mono, Consolas" />
|
|
<TextBlock Text="Done" FontSize="11"
|
|
Foreground="{StaticResource InkFaint}"
|
|
Margin="0,2,0,0" />
|
|
</StackPanel>
|
|
</Grid>
|
|
</Border>
|
|
|
|
<ScrollViewer Grid.Row="2" VerticalScrollBarVisibility="Auto"
|
|
Padding="40,16,32,16">
|
|
<Grid MaxWidth="780" HorizontalAlignment="Stretch">
|
|
<!-- Setup step 1: Host or Join? -->
|
|
<StackPanel x:Name="SetupStep1" Visibility="Visible">
|
|
<TextBlock Text="What do you want to do?" FontSize="28"
|
|
FontWeight="Bold" Margin="0,12,0,8" />
|
|
<TextBlock Text="Pick a mode. You can switch later from the sidebar."
|
|
Foreground="{StaticResource InkSoft}" FontSize="13"
|
|
Margin="0,0,0,28" />
|
|
|
|
<Grid HorizontalAlignment="Stretch">
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="*" />
|
|
<ColumnDefinition Width="20" />
|
|
<ColumnDefinition Width="*" />
|
|
</Grid.ColumnDefinitions>
|
|
|
|
<Button Grid.Column="0" Style="{StaticResource ChoiceCardBtn}"
|
|
Background="{StaticResource CardBgHost}"
|
|
Click="OnSetupPickHost">
|
|
<StackPanel>
|
|
<Grid Width="44" Height="44" Margin="0,0,0,18"
|
|
HorizontalAlignment="Left">
|
|
<Border Background="{StaticResource BgInset}"
|
|
BorderBrush="{StaticResource Border}"
|
|
BorderThickness="1"
|
|
CornerRadius="10" />
|
|
<Path Width="44" Height="44"
|
|
Stroke="{StaticResource Brand}"
|
|
StrokeThickness="1.6"
|
|
Fill="Transparent"
|
|
StrokeLineJoin="Round"
|
|
Data="M 14 16 L 30 16 L 30 20 L 14 20 Z M 14 22 L 30 22 L 30 26 L 14 26 Z M 14 28 L 30 28 L 30 32 L 14 32 Z M 17 18 L 18 18 M 17 24 L 18 24 M 17 30 L 18 30" />
|
|
</Grid>
|
|
<TextBlock Text="HOST" FontSize="11"
|
|
FontWeight="Bold"
|
|
Foreground="{StaticResource Brand}"
|
|
Margin="0,0,0,6" />
|
|
<TextBlock Text="Run a server" FontSize="22"
|
|
FontWeight="Bold"
|
|
Foreground="{StaticResource Ink}"
|
|
Margin="0,0,0,10" />
|
|
<TextBlock Foreground="{StaticResource InkSoft}"
|
|
FontSize="12" TextWrapping="Wrap" LineHeight="20"
|
|
Text="The launcher runs the server, opens a tunnel, and hands you a join code your friends can paste." />
|
|
</StackPanel>
|
|
</Button>
|
|
|
|
<Button Grid.Column="2" Style="{StaticResource ChoiceCardBtn}"
|
|
Background="{StaticResource CardBgJoin}"
|
|
Click="OnSetupPickJoin">
|
|
<StackPanel>
|
|
<Grid Width="44" Height="44" Margin="0,0,0,18"
|
|
HorizontalAlignment="Left">
|
|
<Border Background="{StaticResource BgInset}"
|
|
BorderBrush="{StaticResource Border}"
|
|
BorderThickness="1"
|
|
CornerRadius="10" />
|
|
<Path Width="44" Height="44"
|
|
Stroke="{StaticResource Teal}"
|
|
StrokeThickness="1.6"
|
|
Fill="Transparent"
|
|
StrokeLineJoin="Round"
|
|
StrokeStartLineCap="Round"
|
|
StrokeEndLineCap="Round"
|
|
Data="M 18 26 L 26 18 M 14 22 A 6 6 0 0 1 22 14 L 24 14 M 24 30 L 22 30 A 6 6 0 0 1 14 22 M 32 22 A 6 6 0 0 1 24 30 M 24 14 A 6 6 0 0 1 32 22" />
|
|
</Grid>
|
|
<TextBlock Text="JOIN" FontSize="11"
|
|
FontWeight="Bold"
|
|
Foreground="{StaticResource Teal}"
|
|
Margin="0,0,0,6" />
|
|
<TextBlock Text="Use a code" FontSize="22"
|
|
FontWeight="Bold"
|
|
Foreground="{StaticResource Ink}"
|
|
Margin="0,0,0,10" />
|
|
<TextBlock Foreground="{StaticResource InkSoft}"
|
|
FontSize="12" TextWrapping="Wrap" LineHeight="20"
|
|
Text="Paste a join code from a friend. The launcher fetches the matching patcher and points your client at their server." />
|
|
</StackPanel>
|
|
</Button>
|
|
</Grid>
|
|
</StackPanel>
|
|
|
|
<!-- Setup step 2: Rec Room install -->
|
|
<StackPanel x:Name="SetupStep2" Visibility="Collapsed">
|
|
<TextBlock Text="Find your Rec Room install" FontSize="28"
|
|
FontWeight="Bold" Margin="0,12,0,8" />
|
|
<TextBlock TextWrapping="Wrap"
|
|
Foreground="{StaticResource InkSoft}" FontSize="13"
|
|
Margin="0,0,0,24"
|
|
Text="Point the launcher at the *_Data folder inside your Rec Room install (e.g. Recroom_Release_Data). Auto-detection runs first; pick manually if it misses." />
|
|
|
|
<Border x:Name="SetupDetectedBanner" Visibility="Collapsed"
|
|
Background="{StaticResource BgElev}"
|
|
BorderBrush="{StaticResource Ok}"
|
|
BorderThickness="1"
|
|
CornerRadius="8" Padding="18,14"
|
|
Margin="0,0,0,16">
|
|
<Grid>
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="Auto" />
|
|
<ColumnDefinition Width="*" />
|
|
</Grid.ColumnDefinitions>
|
|
<Grid Grid.Column="0" Width="22" Height="22"
|
|
Margin="0,0,14,0" VerticalAlignment="Top">
|
|
<Ellipse Fill="{StaticResource Ok}" />
|
|
<Path Stroke="#0D0F14" StrokeThickness="2.2"
|
|
StrokeLineJoin="Round"
|
|
StrokeStartLineCap="Round"
|
|
StrokeEndLineCap="Round"
|
|
Data="M 6 11 L 9.5 14.5 L 16 7"
|
|
Width="22" Height="22" />
|
|
</Grid>
|
|
<StackPanel Grid.Column="1">
|
|
<TextBlock Text="DETECTED INSTALL" FontSize="10"
|
|
FontWeight="Bold"
|
|
Foreground="{StaticResource Ok}"
|
|
Margin="0,0,0,4" />
|
|
<TextBlock x:Name="SetupDetectedPath"
|
|
Foreground="{StaticResource Ink}"
|
|
FontSize="12"
|
|
FontFamily="Cascadia Mono, Consolas"
|
|
TextWrapping="Wrap" />
|
|
</StackPanel>
|
|
</Grid>
|
|
</Border>
|
|
|
|
<TextBlock Style="{StaticResource FieldLabel}" Text="INSTALL FOLDER" />
|
|
<DockPanel Margin="0,0,0,12">
|
|
<Button DockPanel.Dock="Right" Style="{StaticResource Btn}"
|
|
Content="Browse…" Click="OnPickRecRoom" Margin="8,0,0,0" />
|
|
<Border Background="{StaticResource BgInset}"
|
|
BorderBrush="{StaticResource Border}" BorderThickness="1"
|
|
CornerRadius="6" Padding="12,10">
|
|
<TextBlock x:Name="SetupRecRoomPath"
|
|
Text="(not picked)"
|
|
Foreground="{StaticResource InkSoft}"
|
|
FontFamily="Cascadia Mono, Consolas"
|
|
TextTrimming="CharacterEllipsis" FontSize="12" />
|
|
</Border>
|
|
</DockPanel>
|
|
<TextBlock Foreground="{StaticResource InkFaint}" FontSize="11"
|
|
TextWrapping="Wrap" LineHeight="18"
|
|
Text="DorkNet works with any official Rec Room install. If you don't have one, grab the regular client first." />
|
|
</StackPanel>
|
|
|
|
<!-- Setup step 3 (HOST only): Server name + WHO CAN JOIN -->
|
|
<StackPanel x:Name="SetupStep3" Visibility="Collapsed">
|
|
<TextBlock Text="Set up your server" FontSize="28"
|
|
FontWeight="Bold" Margin="0,12,0,8" />
|
|
<TextBlock Text="A name your friends will see, and how they reach you."
|
|
Foreground="{StaticResource InkSoft}" FontSize="13"
|
|
Margin="0,0,0,24" />
|
|
|
|
<TextBlock Style="{StaticResource FieldLabel}" Text="SERVER NAME" />
|
|
<TextBox x:Name="SetupServerName" Margin="0,0,0,24"
|
|
LostFocus="OnSetupServerNameChanged" />
|
|
|
|
<TextBlock Style="{StaticResource FieldLabel}" Text="WHO CAN JOIN?" />
|
|
<StackPanel Margin="0,0,0,16">
|
|
<RadioButton x:Name="SetupHostInternet" GroupName="SetupHostingMode"
|
|
Content="Friends anywhere · localtunnel"
|
|
IsChecked="True"
|
|
Checked="OnSetupHostingModeChanged" />
|
|
<RadioButton x:Name="SetupHostRemote" GroupName="SetupHostingMode"
|
|
Content="Friends anywhere · Tunnelto wildcard base"
|
|
Visibility="Collapsed"
|
|
Checked="OnSetupHostingModeChanged" />
|
|
<RadioButton x:Name="SetupHostLocal" GroupName="SetupHostingMode"
|
|
Content="Same WiFi only · sslip.io"
|
|
Checked="OnSetupHostingModeChanged" />
|
|
</StackPanel>
|
|
<StackPanel x:Name="SetupRemoteWildcardSection" Visibility="Collapsed">
|
|
<TextBlock Style="{StaticResource FieldLabel}" Text="TUNNELTO BASE HOST" />
|
|
<TextBox x:Name="SetupRemoteWildcardInput" Margin="0,0,0,8"
|
|
FontFamily="Cascadia Mono, Consolas" FontSize="12"
|
|
LostFocus="OnRemoteWildcardChanged"
|
|
ToolTip="Service URLs become api.base, auth.base, etc." />
|
|
<TextBlock Foreground="{StaticResource InkFaint}" FontSize="11"
|
|
TextWrapping="Wrap" LineHeight="18"
|
|
Text="Pick a base host whose provider routes wildcard subdomains to the same tunnel. The launcher derives api.base, auth.base, photon.base from it." />
|
|
</StackPanel>
|
|
</StackPanel>
|
|
|
|
<!-- Setup step 4 (HOST only): Photon AppIds -->
|
|
<StackPanel x:Name="SetupStep4" Visibility="Collapsed">
|
|
<TextBlock Text="Connect your Photon account" FontSize="28"
|
|
FontWeight="Bold" Margin="0,12,0,8" />
|
|
<TextBlock TextWrapping="Wrap"
|
|
Foreground="{StaticResource InkSoft}" FontSize="13"
|
|
Margin="0,0,0,20"
|
|
Text="Photon Cloud handles in-room realtime sync. Free to register; DorkNet never ships one of its own. The walkthrough does the registration in 2 minutes." />
|
|
|
|
<Button Style="{StaticResource PrimaryBtn}"
|
|
Click="OnOpenPhotonWizard"
|
|
HorizontalAlignment="Left" Margin="0,0,0,24">
|
|
<StackPanel Orientation="Horizontal">
|
|
<Path Width="14" Height="14" Margin="0,0,10,0"
|
|
Stroke="White" StrokeThickness="1.6"
|
|
Fill="Transparent"
|
|
StrokeLineJoin="Round"
|
|
Data="M 4 3 L 10 3 L 10 9 M 10 3 L 5 8 M 8 8 L 8 11 L 2 11 L 2 5 L 5 5"
|
|
VerticalAlignment="Center" />
|
|
<TextBlock Text="OPEN WALKTHROUGH" FontWeight="Bold"
|
|
Foreground="White" VerticalAlignment="Center" />
|
|
</StackPanel>
|
|
</Button>
|
|
|
|
<Border Background="{StaticResource BgInset}"
|
|
BorderBrush="{StaticResource BorderSoft}"
|
|
BorderThickness="1" CornerRadius="8"
|
|
Padding="18" Margin="0,0,0,12">
|
|
<StackPanel>
|
|
<TextBlock Foreground="{StaticResource InkSoft}" FontSize="12"
|
|
Margin="0,0,0,14"
|
|
Text="Already have AppIds? Paste them directly." />
|
|
<TextBlock Style="{StaticResource FieldLabel}" Text="REALTIME APPID" />
|
|
<TextBox x:Name="SetupPhotonAppId" Margin="0,0,0,14"
|
|
FontFamily="Cascadia Mono, Consolas" FontSize="12"
|
|
LostFocus="OnSetupPhotonChanged" />
|
|
<TextBlock Style="{StaticResource FieldLabel}" Text="VOICE APPID · OPTIONAL" />
|
|
<TextBox x:Name="SetupPhotonVoiceAppId"
|
|
FontFamily="Cascadia Mono, Consolas" FontSize="12"
|
|
LostFocus="OnSetupPhotonChanged" />
|
|
</StackPanel>
|
|
</Border>
|
|
<TextBlock x:Name="SetupPhotonStatus"
|
|
Foreground="{StaticResource InkFaint}" FontSize="11"
|
|
Text="Realtime AppId required before you can host." />
|
|
</StackPanel>
|
|
|
|
<!-- Setup done -->
|
|
<StackPanel x:Name="SetupStepDone" Visibility="Collapsed">
|
|
<Grid Width="64" Height="64" Margin="0,12,0,24" HorizontalAlignment="Left">
|
|
<Ellipse Fill="{StaticResource BrandSoft}" />
|
|
<Path Stroke="{StaticResource Brand}" StrokeThickness="2.5"
|
|
StrokeLineJoin="Round"
|
|
StrokeStartLineCap="Round"
|
|
StrokeEndLineCap="Round"
|
|
Data="M 22 32 L 30 40 L 44 26"
|
|
Width="64" Height="64" />
|
|
</Grid>
|
|
<TextBlock Text="You're ready to ship." FontSize="28"
|
|
FontWeight="Bold" Margin="0,0,0,12" />
|
|
<TextBlock TextWrapping="Wrap" MaxWidth="520"
|
|
HorizontalAlignment="Left"
|
|
Foreground="{StaticResource InkSoft}" FontSize="13"
|
|
LineHeight="20"
|
|
Text="Setup is saved. Hit Finish to open the main view — your install, server name, and Photon AppIds are remembered for next launch." />
|
|
</StackPanel>
|
|
</Grid>
|
|
</ScrollViewer>
|
|
|
|
<!-- Footer nav -->
|
|
<Border Grid.Row="3" Padding="40,16,40,20"
|
|
BorderBrush="{StaticResource BorderSoft}"
|
|
BorderThickness="0,1,0,0"
|
|
Background="{StaticResource BgDeeper}">
|
|
<Grid>
|
|
<Button x:Name="SetupBackBtn" HorizontalAlignment="Left"
|
|
Style="{StaticResource Btn}"
|
|
Click="OnSetupBack" Visibility="Collapsed">
|
|
<StackPanel Orientation="Horizontal">
|
|
<Path Width="14" Height="14" Margin="0,0,8,0"
|
|
Stroke="{StaticResource Ink}" StrokeThickness="1.8"
|
|
Fill="Transparent"
|
|
StrokeLineJoin="Round"
|
|
StrokeStartLineCap="Round"
|
|
StrokeEndLineCap="Round"
|
|
Data="M 12 7 L 2 7 M 6 3 L 2 7 L 6 11"
|
|
VerticalAlignment="Center" />
|
|
<TextBlock Text="Back" VerticalAlignment="Center" />
|
|
</StackPanel>
|
|
</Button>
|
|
<Button x:Name="SetupNextBtn" HorizontalAlignment="Right"
|
|
Style="{StaticResource PrimaryBtn}"
|
|
Click="OnSetupNext" Visibility="Collapsed">
|
|
<StackPanel Orientation="Horizontal">
|
|
<TextBlock x:Name="SetupNextLabel" Text="Next"
|
|
VerticalAlignment="Center" Foreground="White"
|
|
FontWeight="Bold" />
|
|
<Path Width="14" Height="14" Margin="10,0,0,0"
|
|
Stroke="White" StrokeThickness="1.8"
|
|
Fill="Transparent"
|
|
StrokeLineJoin="Round"
|
|
StrokeStartLineCap="Round"
|
|
StrokeEndLineCap="Round"
|
|
Data="M 2 7 L 12 7 M 8 3 L 12 7 L 8 11"
|
|
VerticalAlignment="Center" />
|
|
</StackPanel>
|
|
</Button>
|
|
</Grid>
|
|
</Border>
|
|
</Grid>
|
|
|
|
<!-- ── Host view ──────────────────────────────────────────── -->
|
|
<Grid x:Name="HostView" Visibility="Collapsed">
|
|
<Grid.RowDefinitions>
|
|
<RowDefinition Height="Auto" />
|
|
<RowDefinition Height="*" />
|
|
</Grid.RowDefinitions>
|
|
|
|
<Border Grid.Row="0" Padding="32,22"
|
|
BorderBrush="{StaticResource BorderSoft}"
|
|
BorderThickness="0,0,0,1">
|
|
<Grid>
|
|
<StackPanel>
|
|
<StackPanel Orientation="Horizontal">
|
|
<TextBlock Text="HOST" FontSize="11" FontWeight="Bold"
|
|
Foreground="{StaticResource Brand}"
|
|
FontFamily="Cascadia Mono, Consolas"
|
|
VerticalAlignment="Center" />
|
|
<Border Background="{StaticResource Brand}" Width="14" Height="1"
|
|
Margin="10,0,10,0" VerticalAlignment="Center" />
|
|
<TextBlock Text="Run a private Rec Room server" FontSize="11"
|
|
Foreground="{StaticResource InkSoft}" FontWeight="SemiBold"
|
|
VerticalAlignment="Center" />
|
|
</StackPanel>
|
|
<TextBlock Text="Host a server" FontSize="22" FontWeight="Bold"
|
|
Foreground="{StaticResource Ink}" Margin="0,4,0,0" />
|
|
</StackPanel>
|
|
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right"
|
|
VerticalAlignment="Center">
|
|
<CheckBox x:Name="HostScreenModeChk" Content="Screen mode"
|
|
VerticalAlignment="Center" Margin="0,0,8,0"
|
|
ToolTip="Launch in 2D desktop mode (+forcemode:screen) instead of VR."
|
|
Checked="OnScreenModeChanged" Unchecked="OnScreenModeChanged" />
|
|
</StackPanel>
|
|
</Grid>
|
|
</Border>
|
|
|
|
<ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto"
|
|
Padding="32,24,24,24">
|
|
<StackPanel>
|
|
<!-- Server config panel -->
|
|
<Border Style="{StaticResource Panel}" Margin="0,0,0,18">
|
|
<StackPanel>
|
|
<Grid Margin="0,0,0,16">
|
|
<StackPanel Orientation="Horizontal">
|
|
<Path Width="16" Height="16"
|
|
Stroke="{StaticResource Brand}"
|
|
StrokeThickness="1.5"
|
|
Fill="Transparent"
|
|
StrokeLineJoin="Round"
|
|
Data="M 2 4 L 14 4 L 14 7 L 2 7 Z M 2 9 L 14 9 L 14 12 L 2 12 Z M 4 5.5 L 5 5.5 M 4 10.5 L 5 10.5 M 11 5.5 L 12 5.5 M 11 10.5 L 12 10.5"
|
|
VerticalAlignment="Center" Margin="0,0,10,0" />
|
|
<TextBlock Text="Server" FontSize="14" FontWeight="SemiBold"
|
|
Foreground="{StaticResource Ink}"
|
|
VerticalAlignment="Center" />
|
|
</StackPanel>
|
|
</Grid>
|
|
|
|
<TextBlock Style="{StaticResource FieldLabel}" Text="REC ROOM INSTALL" />
|
|
<DockPanel Margin="0,0,0,16">
|
|
<Button DockPanel.Dock="Right" Style="{StaticResource Btn}"
|
|
Content="Browse…" Click="OnPickRecRoom" Margin="8,0,0,0" />
|
|
<Border Background="{StaticResource BgInset}"
|
|
BorderBrush="{StaticResource Border}" BorderThickness="1"
|
|
CornerRadius="6" Padding="12,10">
|
|
<TextBlock x:Name="HostRecRoomPath"
|
|
Text="(not picked)"
|
|
Foreground="{StaticResource InkSoft}"
|
|
FontFamily="Cascadia Mono, Consolas"
|
|
TextTrimming="CharacterEllipsis" FontSize="12" />
|
|
</Border>
|
|
</DockPanel>
|
|
|
|
<TextBlock Style="{StaticResource FieldLabel}" Text="SERVER NAME · SHOWN TO JOINERS" />
|
|
<TextBox x:Name="ServerNameInput" Margin="0,0,0,16"
|
|
LostFocus="OnServerNameChanged" />
|
|
|
|
<TextBlock Style="{StaticResource FieldLabel}" Text="REC ROOM VERSION TO HOST FOR" />
|
|
<ComboBox x:Name="VersionSelect" Margin="0,0,0,18" />
|
|
|
|
<Border Background="{StaticResource BorderSoft}" Height="1"
|
|
Margin="0,4,0,16" />
|
|
|
|
<TextBlock Style="{StaticResource FieldLabel}" Text="WHO CAN JOIN?" />
|
|
<StackPanel>
|
|
<RadioButton x:Name="HostModeInternet" GroupName="HostingMode"
|
|
Content="Friends anywhere · localtunnel"
|
|
IsChecked="True" Checked="OnHostingModeChanged" />
|
|
<RadioButton x:Name="HostModeRemote" GroupName="HostingMode"
|
|
Content="Tunnelto wildcard base"
|
|
Visibility="Collapsed"
|
|
Checked="OnHostingModeChanged" />
|
|
<RadioButton x:Name="HostModeLocal" GroupName="HostingMode"
|
|
Content="Same WiFi only · sslip.io"
|
|
Checked="OnHostingModeChanged" />
|
|
</StackPanel>
|
|
<StackPanel x:Name="HostRemoteWildcardSection" Visibility="Collapsed"
|
|
Margin="0,16,0,0">
|
|
<TextBlock Style="{StaticResource FieldLabel}" Text="TUNNELTO BASE HOST" />
|
|
<TextBox x:Name="RemoteWildcardInput"
|
|
FontFamily="Cascadia Mono, Consolas" FontSize="12"
|
|
LostFocus="OnRemoteWildcardChanged"
|
|
ToolTip="Service URLs become api.base, auth.base, etc." />
|
|
</StackPanel>
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
<!-- Photon config panel -->
|
|
<Border Style="{StaticResource Panel}" Margin="0,0,0,18">
|
|
<StackPanel>
|
|
<Grid Margin="0,0,0,16">
|
|
<StackPanel Orientation="Horizontal">
|
|
<Path Width="16" Height="16"
|
|
Stroke="{StaticResource Brand}"
|
|
StrokeThickness="1.5"
|
|
Fill="Transparent"
|
|
StrokeLineJoin="Round"
|
|
StrokeStartLineCap="Round"
|
|
StrokeEndLineCap="Round"
|
|
Data="M 8 1 L 12 7 L 8 7 L 8 15 L 4 9 L 8 9 Z"
|
|
VerticalAlignment="Center" Margin="0,0,10,0" />
|
|
<TextBlock Text="Photon Cloud" FontSize="14" FontWeight="SemiBold"
|
|
Foreground="{StaticResource Ink}"
|
|
VerticalAlignment="Center" />
|
|
</StackPanel>
|
|
<Button HorizontalAlignment="Right" Style="{StaticResource Btn}"
|
|
Click="OnOpenPhotonWizard"
|
|
Padding="12,5" FontSize="11">
|
|
<StackPanel Orientation="Horizontal">
|
|
<Path Width="11" Height="11" Margin="0,0,6,0"
|
|
Stroke="{StaticResource Ink}" StrokeThickness="1.5"
|
|
Fill="Transparent"
|
|
StrokeLineJoin="Round"
|
|
Data="M 4 2 L 9 2 L 9 7 M 9 2 L 4 7"
|
|
VerticalAlignment="Center" />
|
|
<TextBlock Text="WALKTHROUGH" FontSize="11" FontWeight="SemiBold"
|
|
VerticalAlignment="Center" />
|
|
</StackPanel>
|
|
</Button>
|
|
</Grid>
|
|
<TextBlock Foreground="{StaticResource InkSoft}" FontSize="12"
|
|
Margin="0,0,0,16" TextWrapping="Wrap" LineHeight="18">
|
|
Powers in-room realtime sync. Free at
|
|
<Hyperlink NavigateUri="https://dashboard.photonengine.com"
|
|
Foreground="{StaticResource Brand}"
|
|
TextDecorations="None"
|
|
RequestNavigate="OnNavigate">dashboard.photonengine.com</Hyperlink>;
|
|
your AppIds stay local.
|
|
</TextBlock>
|
|
|
|
<TextBlock Style="{StaticResource FieldLabel}" Text="REALTIME APPID" />
|
|
<TextBox x:Name="PhotonAppIdInput" Margin="0,0,0,14"
|
|
FontFamily="Cascadia Mono, Consolas" FontSize="12"
|
|
LostFocus="OnPhotonChanged" />
|
|
|
|
<TextBlock Style="{StaticResource FieldLabel}" Text="VOICE APPID · OPTIONAL" />
|
|
<TextBox x:Name="PhotonVoiceAppIdInput" Margin="0,0,0,14"
|
|
FontFamily="Cascadia Mono, Consolas" FontSize="12"
|
|
LostFocus="OnPhotonChanged" />
|
|
|
|
<TextBlock Style="{StaticResource FieldLabel}" Text="CLOUD REGION" />
|
|
<ComboBox x:Name="PhotonRegionSelect"
|
|
SelectionChanged="OnPhotonChanged">
|
|
<ComboBoxItem Content="US" Tag="us" />
|
|
<ComboBoxItem Content="EU" Tag="eu" />
|
|
<ComboBoxItem Content="Asia" Tag="asia" />
|
|
<ComboBoxItem Content="Japan" Tag="jp" />
|
|
<ComboBoxItem Content="South America" Tag="sa" />
|
|
<ComboBoxItem Content="Korea" Tag="kr" />
|
|
<ComboBoxItem Content="India" Tag="in" />
|
|
<ComboBoxItem Content="Australia" Tag="au" />
|
|
</ComboBox>
|
|
|
|
<CheckBox x:Name="TlsTrustBypassChk"
|
|
Content="Trust self-signed TLS certs (advanced)"
|
|
Margin="0,16,0,0"
|
|
ToolTip="Skip the watch's TLS chain validation on your server's HTTPS connections. Needed only for self-signed certs (LAN-only / dev tunnels). Off for Localtunnel / Tunnelto / any real CDN cert. WARNING: leaving this on with the December 2020.12.18 build triggers a MonoMod CLR crash (0x80131506) at launch."
|
|
Checked="OnTlsTrustBypassChanged"
|
|
Unchecked="OnTlsTrustBypassChanged"
|
|
Foreground="{StaticResource Ink}" />
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
<!-- Primary action row -->
|
|
<Border Background="{StaticResource BgElev}"
|
|
BorderBrush="{StaticResource Border}"
|
|
BorderThickness="1"
|
|
CornerRadius="8" Padding="22"
|
|
Margin="0,0,0,18">
|
|
<StackPanel Orientation="Horizontal">
|
|
<Button x:Name="HostStartBtn" Style="{StaticResource PrimaryBtn}"
|
|
Click="OnHostStart">
|
|
<StackPanel Orientation="Horizontal">
|
|
<Path Width="11" Height="11" Margin="0,0,10,0"
|
|
Fill="White"
|
|
Data="M 0 0 L 11 5.5 L 0 11 Z"
|
|
VerticalAlignment="Center" />
|
|
<TextBlock Text="START HOSTING" FontWeight="Bold"
|
|
Foreground="White" VerticalAlignment="Center" />
|
|
</StackPanel>
|
|
</Button>
|
|
<Button x:Name="HostStopBtn" Style="{StaticResource Btn}"
|
|
Click="OnHostStop"
|
|
Margin="10,0,0,0" Visibility="Collapsed">
|
|
<StackPanel Orientation="Horizontal">
|
|
<Rectangle Width="10" Height="10" Margin="0,0,8,0"
|
|
Fill="{StaticResource Danger}"
|
|
VerticalAlignment="Center" />
|
|
<TextBlock Text="STOP" FontWeight="Bold"
|
|
VerticalAlignment="Center" />
|
|
</StackPanel>
|
|
</Button>
|
|
<Button x:Name="HostLaunchBtn" Style="{StaticResource PlayBtn}"
|
|
Click="OnLaunchRecRoom"
|
|
Margin="10,0,0,0" Visibility="Collapsed">
|
|
<StackPanel Orientation="Horizontal">
|
|
<Path Width="13" Height="13" Margin="0,0,12,0"
|
|
Fill="White"
|
|
Data="M 0 0 L 13 6.5 L 0 13 Z"
|
|
VerticalAlignment="Center" />
|
|
<TextBlock Text="LAUNCH REC ROOM" FontWeight="Bold"
|
|
Foreground="White" VerticalAlignment="Center" />
|
|
</StackPanel>
|
|
</Button>
|
|
<Button x:Name="HostAdminBtn" Style="{StaticResource Btn}"
|
|
Click="OnOpenAdminPanel"
|
|
ToolTip="Open the server's admin web panel in your browser. First account on a fresh server becomes the admin automatically."
|
|
Margin="10,0,0,0" Visibility="Collapsed">
|
|
<StackPanel Orientation="Horizontal">
|
|
<Path Width="13" Height="13" Margin="0,0,10,0"
|
|
Stroke="{StaticResource Ink}" StrokeThickness="1.5"
|
|
Fill="Transparent"
|
|
StrokeLineJoin="Round"
|
|
StrokeStartLineCap="Round"
|
|
StrokeEndLineCap="Round"
|
|
Data="M 4 3 L 11 3 L 11 10 M 11 3 L 5 9 M 9 9 L 9 12 L 2 12 L 2 5 L 5 5"
|
|
VerticalAlignment="Center" />
|
|
<TextBlock Text="ADMIN PANEL" FontWeight="Bold"
|
|
VerticalAlignment="Center" />
|
|
</StackPanel>
|
|
</Button>
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
<!-- Progress steps panel -->
|
|
<Border x:Name="HostStepsPanel" Style="{StaticResource Panel}"
|
|
Margin="0,0,0,18" Visibility="Collapsed">
|
|
<StackPanel>
|
|
<StackPanel Orientation="Horizontal" Margin="0,0,0,16">
|
|
<Path Width="16" Height="16"
|
|
Stroke="{StaticResource Brand}"
|
|
StrokeThickness="1.5"
|
|
Fill="Transparent"
|
|
StrokeLineJoin="Round"
|
|
StrokeStartLineCap="Round"
|
|
StrokeEndLineCap="Round"
|
|
Data="M 2 8 L 6 12 L 14 4"
|
|
VerticalAlignment="Center" Margin="0,0,10,0" />
|
|
<TextBlock Text="Progress" FontSize="14" FontWeight="SemiBold"
|
|
Foreground="{StaticResource Ink}"
|
|
VerticalAlignment="Center" />
|
|
</StackPanel>
|
|
<ItemsControl x:Name="HostStepsList"
|
|
ItemTemplate="{StaticResource StepRowTemplate}" />
|
|
<TextBlock x:Name="HostStatusText"
|
|
Foreground="{StaticResource InkSoft}"
|
|
TextWrapping="Wrap" FontSize="12"
|
|
LineHeight="18"
|
|
Margin="0,4,0,0" />
|
|
<StackPanel x:Name="HostRetryPanel" Visibility="Collapsed"
|
|
Orientation="Horizontal" Margin="0,16,0,0">
|
|
<Button x:Name="HostRetryBtn" Style="{StaticResource PrimaryBtn}"
|
|
Content="Retry" Click="OnHostRetry" />
|
|
<Button Style="{StaticResource GhostBtn}"
|
|
Content="Get help"
|
|
Click="OnOpenTroubleshooting"
|
|
Margin="10,0,0,0" />
|
|
</StackPanel>
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
<!-- Join code "ticket" — visible once host is up.
|
|
Designed as a distinct artefact: monospace
|
|
join code, QR alongside, three share actions. -->
|
|
<Border x:Name="JoinCodePanel" Visibility="Collapsed"
|
|
Background="{StaticResource BgElev}"
|
|
BorderBrush="{StaticResource Brand}"
|
|
BorderThickness="1"
|
|
CornerRadius="8" Padding="0"
|
|
Margin="0,0,0,18">
|
|
<Grid>
|
|
<Grid.RowDefinitions>
|
|
<RowDefinition Height="Auto" />
|
|
<RowDefinition Height="Auto" />
|
|
</Grid.RowDefinitions>
|
|
<Border Grid.Row="0" Background="{StaticResource Brand}"
|
|
Padding="22,12">
|
|
<Grid>
|
|
<StackPanel Orientation="Horizontal">
|
|
<Path Width="14" Height="14" Margin="0,0,10,0"
|
|
Stroke="White" StrokeThickness="1.8"
|
|
Fill="Transparent"
|
|
StrokeLineJoin="Round"
|
|
Data="M 3 4 L 11 4 L 11 12 L 3 12 Z M 1 6 L 1 14 L 9 14"
|
|
VerticalAlignment="Center" />
|
|
<TextBlock Text="SERVER LIVE · SHARE THIS WITH FRIENDS"
|
|
FontSize="11" FontWeight="Bold"
|
|
Foreground="White"
|
|
VerticalAlignment="Center" />
|
|
</StackPanel>
|
|
<Ellipse HorizontalAlignment="Right" VerticalAlignment="Center"
|
|
Width="8" Height="8" Fill="White" />
|
|
</Grid>
|
|
</Border>
|
|
<Grid Grid.Row="1" Margin="22">
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="Auto" />
|
|
<ColumnDefinition Width="*" />
|
|
</Grid.ColumnDefinitions>
|
|
|
|
<Border Grid.Column="0" Background="White"
|
|
CornerRadius="6" Padding="8"
|
|
VerticalAlignment="Top"
|
|
Margin="0,0,22,0">
|
|
<Image x:Name="JoinCodeQrImage"
|
|
Width="172" Height="172"
|
|
RenderOptions.BitmapScalingMode="NearestNeighbor"
|
|
SnapsToDevicePixels="True"
|
|
UseLayoutRounding="True" />
|
|
</Border>
|
|
|
|
<StackPanel Grid.Column="1">
|
|
<TextBlock Style="{StaticResource FieldLabel}"
|
|
Text="JOIN CODE" />
|
|
<Border Background="{StaticResource BgInset}"
|
|
BorderBrush="{StaticResource Border}" BorderThickness="1"
|
|
CornerRadius="6" Padding="12,10">
|
|
<TextBox x:Name="JoinCodeText" IsReadOnly="True"
|
|
FontFamily="Cascadia Mono, Consolas" FontSize="11"
|
|
Background="Transparent" BorderThickness="0"
|
|
TextWrapping="Wrap" />
|
|
</Border>
|
|
|
|
<WrapPanel Margin="0,14,0,0">
|
|
<Button Style="{StaticResource PrimaryBtn}"
|
|
Click="OnCopyJoinCode" Padding="16,8">
|
|
<StackPanel Orientation="Horizontal">
|
|
<Path Width="12" Height="12" Margin="0,0,8,0"
|
|
Stroke="White" StrokeThickness="1.5"
|
|
Fill="Transparent"
|
|
StrokeLineJoin="Round"
|
|
Data="M 3 2 L 9 2 L 9 8 L 3 8 Z M 1 4 L 1 10 L 7 10"
|
|
VerticalAlignment="Center" />
|
|
<TextBlock Text="COPY CODE" FontWeight="Bold"
|
|
Foreground="White" VerticalAlignment="Center" />
|
|
</StackPanel>
|
|
</Button>
|
|
<Button Style="{StaticResource Btn}"
|
|
Click="OnCopyJoinCodeMessage"
|
|
Margin="8,0,0,0" Padding="14,7">
|
|
<TextBlock Text="Copy as message" />
|
|
</Button>
|
|
<Button Style="{StaticResource Btn}"
|
|
Click="OnEmailJoinCode"
|
|
Margin="8,0,0,0" Padding="14,7">
|
|
<StackPanel Orientation="Horizontal">
|
|
<Path Width="12" Height="9" Margin="0,0,8,0"
|
|
Stroke="{StaticResource Ink}" StrokeThickness="1.5"
|
|
Fill="Transparent"
|
|
StrokeLineJoin="Round"
|
|
Data="M 1 1 L 11 1 L 11 8 L 1 8 Z M 1 1 L 6 5 L 11 1"
|
|
VerticalAlignment="Center" />
|
|
<TextBlock Text="Email" VerticalAlignment="Center" />
|
|
</StackPanel>
|
|
</Button>
|
|
</WrapPanel>
|
|
|
|
<TextBlock Foreground="{StaticResource InkFaint}" FontSize="11"
|
|
TextWrapping="Wrap" Margin="0,14,0,0" LineHeight="18"
|
|
Text="Friend opens DorkNet → Join a friend → pastes. QR encodes the same string for phone forwarding." />
|
|
</StackPanel>
|
|
</Grid>
|
|
</Grid>
|
|
</Border>
|
|
</StackPanel>
|
|
</ScrollViewer>
|
|
</Grid>
|
|
|
|
<!-- ── Join view ──────────────────────────────────────────── -->
|
|
<Grid x:Name="JoinView" Visibility="Collapsed">
|
|
<Grid.RowDefinitions>
|
|
<RowDefinition Height="Auto" />
|
|
<RowDefinition Height="*" />
|
|
</Grid.RowDefinitions>
|
|
|
|
<Border Grid.Row="0" Padding="32,22"
|
|
BorderBrush="{StaticResource BorderSoft}"
|
|
BorderThickness="0,0,0,1">
|
|
<Grid>
|
|
<StackPanel>
|
|
<StackPanel Orientation="Horizontal">
|
|
<TextBlock Text="JOIN" FontSize="11" FontWeight="Bold"
|
|
Foreground="{StaticResource Teal}"
|
|
FontFamily="Cascadia Mono, Consolas"
|
|
VerticalAlignment="Center" />
|
|
<Border Background="{StaticResource Teal}" Width="14" Height="1"
|
|
Margin="10,0,10,0" VerticalAlignment="Center" />
|
|
<TextBlock Text="Connect to a friend's private server" FontSize="11"
|
|
Foreground="{StaticResource InkSoft}" FontWeight="SemiBold"
|
|
VerticalAlignment="Center" />
|
|
</StackPanel>
|
|
<TextBlock Text="Join a friend" FontSize="22" FontWeight="Bold"
|
|
Foreground="{StaticResource Ink}" Margin="0,4,0,0" />
|
|
</StackPanel>
|
|
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right"
|
|
VerticalAlignment="Center">
|
|
<CheckBox x:Name="JoinScreenModeChk" Content="Screen mode"
|
|
VerticalAlignment="Center"
|
|
ToolTip="Launch in 2D desktop mode (+forcemode:screen) instead of VR."
|
|
Checked="OnScreenModeChanged" Unchecked="OnScreenModeChanged" />
|
|
</StackPanel>
|
|
</Grid>
|
|
</Border>
|
|
|
|
<ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto"
|
|
Padding="32,24,24,24">
|
|
<StackPanel>
|
|
<Border Style="{StaticResource Panel}" Margin="0,0,0,18">
|
|
<StackPanel>
|
|
<StackPanel Orientation="Horizontal" Margin="0,0,0,16">
|
|
<Path Width="16" Height="16"
|
|
Stroke="{StaticResource Teal}"
|
|
StrokeThickness="1.5"
|
|
Fill="Transparent"
|
|
StrokeLineJoin="Round"
|
|
StrokeStartLineCap="Round"
|
|
StrokeEndLineCap="Round"
|
|
Data="M 6 10 L 10 6 M 4 8 A 3 3 0 0 1 8 4 L 10 4 M 10 12 L 8 12 A 3 3 0 0 1 4 8 M 14 8 A 3 3 0 0 1 10 12 M 10 4 A 3 3 0 0 1 14 8"
|
|
VerticalAlignment="Center" Margin="0,0,10,0" />
|
|
<TextBlock Text="Join code" FontSize="14" FontWeight="SemiBold"
|
|
Foreground="{StaticResource Ink}"
|
|
VerticalAlignment="Center" />
|
|
</StackPanel>
|
|
|
|
<TextBlock Style="{StaticResource FieldLabel}"
|
|
Text="PASTE THE CODE YOUR HOST SHARED" />
|
|
<TextBox x:Name="JoinCodeInput"
|
|
AcceptsReturn="True" TextWrapping="Wrap"
|
|
Height="92" VerticalContentAlignment="Top"
|
|
FontFamily="Cascadia Mono, Consolas" FontSize="11"
|
|
TextChanged="OnJoinCodeInputChanged" />
|
|
<Button Style="{StaticResource Btn}"
|
|
Content="Preview" Click="OnDecodeJoinCode"
|
|
HorizontalAlignment="Left" Margin="0,12,0,0" />
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
<Border x:Name="JoinPreviewBorder" Visibility="Collapsed"
|
|
Background="{StaticResource BgElev}"
|
|
BorderBrush="{StaticResource Teal}"
|
|
BorderThickness="1"
|
|
CornerRadius="8" Padding="22"
|
|
Margin="0,0,0,18">
|
|
<StackPanel>
|
|
<StackPanel Orientation="Horizontal" Margin="0,0,0,12">
|
|
<Path Width="16" Height="16"
|
|
Stroke="{StaticResource Teal}"
|
|
StrokeThickness="1.5"
|
|
Fill="Transparent"
|
|
StrokeLineJoin="Round"
|
|
Data="M 2 8 L 6 12 L 14 4"
|
|
VerticalAlignment="Center" Margin="0,0,10,0" />
|
|
<TextBlock Text="Server preview" FontSize="14" FontWeight="SemiBold"
|
|
Foreground="{StaticResource Ink}"
|
|
VerticalAlignment="Center" />
|
|
</StackPanel>
|
|
<TextBlock x:Name="JoinPreviewText"
|
|
Foreground="{StaticResource Ink}"
|
|
TextWrapping="Wrap" FontSize="12"
|
|
FontFamily="Cascadia Mono, Consolas"
|
|
LineHeight="20" />
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
<Border Style="{StaticResource Panel}" Margin="0,0,0,18">
|
|
<StackPanel>
|
|
<StackPanel Orientation="Horizontal" Margin="0,0,0,16">
|
|
<Path Width="16" Height="16"
|
|
Stroke="{StaticResource Teal}"
|
|
StrokeThickness="1.5"
|
|
Fill="Transparent"
|
|
StrokeLineJoin="Round"
|
|
Data="M 2 5 L 6 5 L 8 7 L 14 7 L 14 13 L 2 13 Z"
|
|
VerticalAlignment="Center" Margin="0,0,10,0" />
|
|
<TextBlock Text="Rec Room install" FontSize="14" FontWeight="SemiBold"
|
|
Foreground="{StaticResource Ink}"
|
|
VerticalAlignment="Center" />
|
|
</StackPanel>
|
|
<TextBlock Style="{StaticResource FieldLabel}" Text="LOCATION" />
|
|
<DockPanel>
|
|
<Button DockPanel.Dock="Right" Style="{StaticResource Btn}"
|
|
Content="Browse…" Click="OnPickRecRoom" Margin="8,0,0,0" />
|
|
<Border Background="{StaticResource BgInset}"
|
|
BorderBrush="{StaticResource Border}" BorderThickness="1"
|
|
CornerRadius="6" Padding="12,10">
|
|
<TextBlock x:Name="JoinRecRoomPath"
|
|
Text="(not picked)"
|
|
Foreground="{StaticResource InkSoft}"
|
|
FontFamily="Cascadia Mono, Consolas"
|
|
TextTrimming="CharacterEllipsis" FontSize="12" />
|
|
</Border>
|
|
</DockPanel>
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
<Border Background="{StaticResource BgElev}"
|
|
BorderBrush="{StaticResource Border}"
|
|
BorderThickness="1"
|
|
CornerRadius="8" Padding="22"
|
|
Margin="0,0,0,18">
|
|
<StackPanel Orientation="Horizontal">
|
|
<Button x:Name="JoinApplyBtn" Style="{StaticResource PrimaryBtn}"
|
|
Click="OnJoinApply" IsEnabled="False">
|
|
<StackPanel Orientation="Horizontal">
|
|
<Path Width="12" Height="12" Margin="0,0,10,0"
|
|
Stroke="White" StrokeThickness="1.7"
|
|
Fill="Transparent"
|
|
StrokeLineJoin="Round"
|
|
StrokeStartLineCap="Round"
|
|
StrokeEndLineCap="Round"
|
|
Data="M 2 6 L 5 9 L 11 2"
|
|
VerticalAlignment="Center" />
|
|
<TextBlock Text="APPLY PATCH" FontWeight="Bold"
|
|
Foreground="White" VerticalAlignment="Center" />
|
|
</StackPanel>
|
|
</Button>
|
|
<Button x:Name="JoinLaunchBtn" Style="{StaticResource PlayBtn}"
|
|
Click="OnLaunchRecRoom"
|
|
Margin="10,0,0,0" Visibility="Collapsed">
|
|
<StackPanel Orientation="Horizontal">
|
|
<Path Width="13" Height="13" Margin="0,0,12,0"
|
|
Fill="White"
|
|
Data="M 0 0 L 13 6.5 L 0 13 Z"
|
|
VerticalAlignment="Center" />
|
|
<TextBlock Text="LAUNCH REC ROOM" FontWeight="Bold"
|
|
Foreground="White" VerticalAlignment="Center" />
|
|
</StackPanel>
|
|
</Button>
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
<Border x:Name="JoinStepsPanel" Style="{StaticResource Panel}"
|
|
Visibility="Collapsed">
|
|
<StackPanel>
|
|
<StackPanel Orientation="Horizontal" Margin="0,0,0,16">
|
|
<Path Width="16" Height="16"
|
|
Stroke="{StaticResource Teal}"
|
|
StrokeThickness="1.5"
|
|
Fill="Transparent"
|
|
StrokeLineJoin="Round"
|
|
StrokeStartLineCap="Round"
|
|
StrokeEndLineCap="Round"
|
|
Data="M 2 8 L 6 12 L 14 4"
|
|
VerticalAlignment="Center" Margin="0,0,10,0" />
|
|
<TextBlock Text="Progress" FontSize="14" FontWeight="SemiBold"
|
|
Foreground="{StaticResource Ink}"
|
|
VerticalAlignment="Center" />
|
|
</StackPanel>
|
|
<ItemsControl x:Name="JoinStepsList"
|
|
ItemTemplate="{StaticResource StepRowTemplate}" />
|
|
<TextBlock x:Name="JoinStatusText"
|
|
Foreground="{StaticResource InkSoft}"
|
|
TextWrapping="Wrap" FontSize="12"
|
|
LineHeight="18"
|
|
Margin="0,4,0,0" />
|
|
<StackPanel x:Name="JoinRetryPanel" Visibility="Collapsed"
|
|
Orientation="Horizontal" Margin="0,16,0,0">
|
|
<Button x:Name="JoinRetryBtn" Style="{StaticResource PrimaryBtn}"
|
|
Content="Retry" Click="OnJoinRetry" />
|
|
<Button Style="{StaticResource GhostBtn}"
|
|
Content="Get help"
|
|
Click="OnOpenTroubleshooting"
|
|
Margin="10,0,0,0" />
|
|
</StackPanel>
|
|
</StackPanel>
|
|
</Border>
|
|
</StackPanel>
|
|
</ScrollViewer>
|
|
</Grid>
|
|
|
|
<!-- ── Settings view ──────────────────────────────────────── -->
|
|
<Grid x:Name="SettingsView" Visibility="Collapsed">
|
|
<Grid.RowDefinitions>
|
|
<RowDefinition Height="Auto" />
|
|
<RowDefinition Height="*" />
|
|
</Grid.RowDefinitions>
|
|
|
|
<Border Grid.Row="0" Padding="32,22"
|
|
BorderBrush="{StaticResource BorderSoft}"
|
|
BorderThickness="0,0,0,1">
|
|
<Grid>
|
|
<StackPanel>
|
|
<StackPanel Orientation="Horizontal">
|
|
<TextBlock Text="SYSTEM" FontSize="11" FontWeight="Bold"
|
|
Foreground="{StaticResource Sunshine}"
|
|
FontFamily="Cascadia Mono, Consolas"
|
|
VerticalAlignment="Center" />
|
|
<Border Background="{StaticResource Sunshine}" Width="14" Height="1"
|
|
Margin="10,0,10,0" VerticalAlignment="Center" />
|
|
<TextBlock Text="Cache locations & advanced options" FontSize="11"
|
|
Foreground="{StaticResource InkSoft}" FontWeight="SemiBold"
|
|
VerticalAlignment="Center" />
|
|
</StackPanel>
|
|
<TextBlock Text="Settings" FontSize="22" FontWeight="Bold"
|
|
Foreground="{StaticResource Ink}" Margin="0,4,0,0" />
|
|
</StackPanel>
|
|
<Button HorizontalAlignment="Right" Style="{StaticResource GhostBtn}"
|
|
Click="OnBackFromSettings" VerticalAlignment="Center">
|
|
<StackPanel Orientation="Horizontal">
|
|
<Path Width="12" Height="12" Margin="0,0,8,0"
|
|
Stroke="{StaticResource InkSoft}" StrokeThickness="1.5"
|
|
Fill="Transparent"
|
|
StrokeLineJoin="Round"
|
|
StrokeStartLineCap="Round"
|
|
StrokeEndLineCap="Round"
|
|
Data="M 11 6 L 1 6 M 5 2 L 1 6 L 5 10"
|
|
VerticalAlignment="Center" />
|
|
<TextBlock Text="Back" VerticalAlignment="Center" />
|
|
</StackPanel>
|
|
</Button>
|
|
</Grid>
|
|
</Border>
|
|
|
|
<ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto"
|
|
Padding="32,24,24,24">
|
|
<StackPanel>
|
|
<Border Style="{StaticResource Panel}" Margin="0,0,0,18">
|
|
<StackPanel>
|
|
<TextBlock Style="{StaticResource SectionTitle}" Text="Cache locations" />
|
|
<Border Background="{StaticResource BgInset}"
|
|
BorderBrush="{StaticResource BorderSoft}"
|
|
BorderThickness="1" CornerRadius="6"
|
|
Padding="14,12">
|
|
<TextBlock x:Name="CachePathsText"
|
|
Foreground="{StaticResource InkSoft}"
|
|
FontSize="11" TextWrapping="Wrap"
|
|
LineHeight="18"
|
|
FontFamily="Cascadia Mono, Consolas" />
|
|
</Border>
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
<Border x:Name="LocalOverridesPanel" Visibility="Collapsed"
|
|
Background="{StaticResource BgElev}"
|
|
BorderBrush="{StaticResource Sunshine}"
|
|
BorderThickness="1"
|
|
CornerRadius="8" Padding="22"
|
|
Margin="0,0,0,18">
|
|
<StackPanel>
|
|
<StackPanel Orientation="Horizontal" Margin="0,0,0,12">
|
|
<Path Width="16" Height="16"
|
|
Stroke="{StaticResource Sunshine}"
|
|
StrokeThickness="1.5"
|
|
Fill="Transparent"
|
|
StrokeLineJoin="Round"
|
|
StrokeStartLineCap="Round"
|
|
StrokeEndLineCap="Round"
|
|
Data="M 8 1 L 15 14 L 1 14 Z M 8 6 L 8 10 M 8 12 L 8 12.5"
|
|
VerticalAlignment="Center" Margin="0,0,10,0" />
|
|
<TextBlock Text="Dev overrides active" FontSize="14" FontWeight="SemiBold"
|
|
Foreground="{StaticResource Ink}"
|
|
VerticalAlignment="Center" />
|
|
</StackPanel>
|
|
<TextBlock Foreground="{StaticResource InkSoft}" FontSize="12"
|
|
Margin="0,0,0,10" TextWrapping="Wrap" LineHeight="18"
|
|
Text="The launcher is reading from local paths instead of GitHub. Unset DORKNET_LOCAL_MANIFEST / DORKNET_LOCAL_RELEASES to return to normal mode." />
|
|
<Border Background="{StaticResource BgInset}"
|
|
BorderBrush="{StaticResource BorderSoft}"
|
|
BorderThickness="1" CornerRadius="6"
|
|
Padding="14,12">
|
|
<TextBlock x:Name="LocalOverridesText"
|
|
Foreground="{StaticResource Ink}"
|
|
FontSize="11" TextWrapping="Wrap"
|
|
LineHeight="18"
|
|
FontFamily="Cascadia Mono, Consolas" />
|
|
</Border>
|
|
</StackPanel>
|
|
</Border>
|
|
|
|
<Border Style="{StaticResource Panel}">
|
|
<StackPanel>
|
|
<TextBlock Style="{StaticResource SectionTitle}" Text="About" />
|
|
<Grid Margin="0,0,0,8">
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="Auto" />
|
|
<ColumnDefinition Width="*" />
|
|
</Grid.ColumnDefinitions>
|
|
<TextBlock Grid.Column="0" Text="VERSION"
|
|
FontSize="10" FontWeight="SemiBold"
|
|
Foreground="{StaticResource InkFaint}"
|
|
Width="100" />
|
|
<TextBlock Grid.Column="1" Text="v0.1"
|
|
FontSize="12" Foreground="{StaticResource Ink}"
|
|
FontFamily="Cascadia Mono, Consolas" />
|
|
</Grid>
|
|
<Grid Margin="0,0,0,8">
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="Auto" />
|
|
<ColumnDefinition Width="*" />
|
|
</Grid.ColumnDefinitions>
|
|
<TextBlock Grid.Column="0" Text="LICENSE"
|
|
FontSize="10" FontWeight="SemiBold"
|
|
Foreground="{StaticResource InkFaint}"
|
|
Width="100" />
|
|
<TextBlock Grid.Column="1" Text="AGPL-3.0"
|
|
FontSize="12" Foreground="{StaticResource Ink}"
|
|
FontFamily="Cascadia Mono, Consolas" />
|
|
</Grid>
|
|
<Grid Margin="0,0,0,8">
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="Auto" />
|
|
<ColumnDefinition Width="*" />
|
|
</Grid.ColumnDefinitions>
|
|
<TextBlock Grid.Column="0" Text="SOURCE"
|
|
FontSize="10" FontWeight="SemiBold"
|
|
Foreground="{StaticResource InkFaint}"
|
|
Width="100" />
|
|
<TextBlock Grid.Column="1" FontSize="12" FontFamily="Cascadia Mono, Consolas">
|
|
<Hyperlink NavigateUri="https://github.com/DorkSquadRR/DorkNet"
|
|
Foreground="{StaticResource Brand}"
|
|
TextDecorations="None"
|
|
RequestNavigate="OnNavigate">github.com/DorkSquadRR/DorkNet</Hyperlink>
|
|
</TextBlock>
|
|
</Grid>
|
|
<TextBlock Foreground="{StaticResource InkFaint}" FontSize="10"
|
|
Margin="0,12,0,0"
|
|
Text="Not affiliated with Rec Room Inc. or Against Gravity." />
|
|
</StackPanel>
|
|
</Border>
|
|
</StackPanel>
|
|
</ScrollViewer>
|
|
</Grid>
|
|
</Grid>
|
|
</Grid>
|
|
</Window>
|