avatar info complete 1

This commit is contained in:
DismissedLight
2022-10-04 16:44:53 +08:00
parent 43e3df9cba
commit d802d1af15
10 changed files with 303 additions and 75 deletions

View File

@@ -121,19 +121,27 @@ public abstract class CompositionImage : Microsoft.UI.Xaml.Controls.Control
{
await HideAsync(token);
LoadedImageSurface? imageSurface = null;
Compositor compositor = ElementCompositionPreview.GetElementVisual(this).Compositor;
if (uri != null)
{
StorageFile storageFile = await imageCache.GetFileFromCacheAsync(uri);
Compositor compositor = ElementCompositionPreview.GetElementVisual(this).Compositor;
LoadedImageSurface? imageSurface = null;
try
if (uri.Scheme == "ms-appx")
{
imageSurface = await LoadImageSurfaceAsync(storageFile, token);
imageSurface = LoadedImageSurface.StartLoadFromUri(uri);
}
catch (COMException)
else
{
await imageCache.RemoveAsync(uri.Enumerate());
StorageFile storageFile = await imageCache.GetFileFromCacheAsync(uri);
try
{
imageSurface = await LoadImageSurfaceAsync(storageFile, token);
}
catch (COMException)
{
await imageCache.RemoveAsync(uri.Enumerate());
}
}
if (imageSurface != null)

View File

@@ -0,0 +1,32 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Microsoft.UI.Xaml.Controls;
using Microsoft.UI.Xaml.Markup;
namespace Snap.Hutao.Control.Markup;
/// <summary>
/// Uri扩展
/// </summary>
[MarkupExtensionReturnType(ReturnType = typeof(Uri))]
public sealed class UriExtension : MarkupExtension
{
/// <summary>
/// 构造一个新的Uri扩展
/// </summary>
public UriExtension()
{
}
/// <summary>
/// 地址
/// </summary>
public string? Value { get; set; }
/// <inheritdoc/>
protected override object ProvideValue()
{
return new Uri(Value ?? string.Empty);
}
}

View File

@@ -102,7 +102,7 @@ public class DescriptionTextBlock : ContentControl
if (i == description.Length - 1)
{
AppendText(text, description[last..i]);
AppendText(text, description[last..(i + 1)]);
}
}
}

View File

@@ -16,7 +16,7 @@ public class Weapon : EquipBase
/// <summary>
/// 精炼属性
/// </summary>
public int AffixLevel { get; set; }
public string AffixLevel { get; set; } = default!;
/// <summary>
/// 精炼名称

View File

@@ -28,7 +28,7 @@ internal sealed class DescParamDescriptor : ValueConverterBase<DescParam, IList<
LevelParam<int, double> param = from.Parameters.Single(param => param.Level == level);
return new LevelParam<string, ParameterInfo>(param.Level.ToString(), GetParameterInfos(formats, param.Parameters));
return new LevelParam<string, ParameterInfo>($"Lv.{param.Level}", GetParameterInfos(formats, param.Parameters));
}
/// <inheritdoc/>

View File

@@ -0,0 +1,28 @@
// Copyright (c) DGP Studio. All rights reserved.
// Licensed under the MIT license.
using Snap.Hutao.Control;
using Snap.Hutao.Model.Intrinsic;
using Windows.UI;
namespace Snap.Hutao.Model.Metadata.Converter;
/// <summary>
/// 品质颜色转换器
/// </summary>
internal class QualityColorConverter : ValueConverterBase<ItemQuality, Color>
{
/// <inheritdoc/>
public override Color Convert(ItemQuality from)
{
return from switch
{
ItemQuality.QUALITY_WHITE => Color.FromArgb(0xFF, 0x72, 0x77, 0x8B),
ItemQuality.QUALITY_GREEN => Color.FromArgb(0xFF, 0x2A, 0x8F, 0x72),
ItemQuality.QUALITY_BLUE => Color.FromArgb(0xFF, 0x51, 0x80, 0xCB),
ItemQuality.QUALITY_PURPLE => Color.FromArgb(0xFF, 0xA1, 0x56, 0xE0),
ItemQuality.QUALITY_ORANGE or ItemQuality.QUALITY_ORANGE_SP => Color.FromArgb(0xFF, 0xBC, 0x69, 0x32),
_ => Color.FromArgb(0x00, 0x00, 0x00, 0x00),
};
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@@ -5,7 +5,6 @@ using Snap.Hutao.Extension;
using Snap.Hutao.Model;
using Snap.Hutao.Model.Binding.AvatarProperty;
using Snap.Hutao.Model.Intrinsic;
using Snap.Hutao.Model.Metadata.Annotation;
using Snap.Hutao.Model.Metadata.Converter;
using Snap.Hutao.Model.Metadata.Reliquary;
using Snap.Hutao.Service.Metadata;
@@ -144,7 +143,7 @@ internal class SummaryFactory : ISummaryFactory
Description = reliquary.Description,
// EquipBase
Level = $"+ {equip.Reliquary!.Level - 1}",
Level = $"+{equip.Reliquary!.Level - 1}",
Quality = reliquary.RankLevel,
MainProperty = CreateReliquaryMainProperty(equip.Reliquary.MainPropId, reliquary.RankLevel, equip.Reliquary.Level),
@@ -182,13 +181,13 @@ internal class SummaryFactory : ISummaryFactory
Description = weapon.Description,
// EquipBase
Level = $"{equip.Weapon!.Level}",
Level = $"Lv.{equip.Weapon!.Level}",
Quality = weapon.Quality,
MainProperty = new(string.Empty, string.Empty), // TODO
// Weapon
SubProperty = new(string.Empty, string.Empty), // TODO
AffixLevel = level + 1,
AffixLevel = $"精炼{level + 1}",
AffixName = weapon.Affix?.Name ?? string.Empty,
AffixDescription = weapon.Affix?.Descriptions.Single(a => a.Level == level).Description ?? string.Empty,
};

View File

@@ -39,6 +39,7 @@
<None Remove="Resource\Icon\UI_BtnIcon_Gacha.png" />
<None Remove="Resource\Icon\UI_Icon_Achievement.png" />
<None Remove="Resource\Icon\UI_Icon_BoostUp.png" />
<None Remove="Resource\Icon\UI_Icon_Locked.png" />
<None Remove="Resource\Icon\UI_Icon_None.png" />
<None Remove="Resource\Icon\UI_ItemIcon_201.png" />
<None Remove="Resource\Segoe Fluent Icons.ttf" />
@@ -87,6 +88,7 @@
<Content Include="Resource\Icon\UI_BtnIcon_Gacha.png" />
<Content Include="Resource\Icon\UI_Icon_Achievement.png" />
<Content Include="Resource\Icon\UI_Icon_BoostUp.png" />
<Content Include="Resource\Icon\UI_Icon_Locked.png" />
<Content Include="Resource\Icon\UI_Icon_None.png" />
<Content Include="Resource\Icon\UI_ItemIcon_201.png" />
</ItemGroup>

View File

@@ -12,8 +12,12 @@
xmlns:shcb="using:Snap.Hutao.Control.Behavior"
xmlns:shci="using:Snap.Hutao.Control.Image"
xmlns:shcm="using:Snap.Hutao.Control.Markup"
xmlns:shvc="using:Snap.Hutao.View.Control"
xmlns:shct="using:Snap.Hutao.Control.Text"
xmlns:shmmc="using:Snap.Hutao.Model.Metadata.Converter"
xmlns:shvconv="using:Snap.Hutao.View.Converter"
xmlns:shv="using:Snap.Hutao.ViewModel"
xmlns:sc="using:SettingsUI.Controls"
xmlns:shvcont="using:Snap.Hutao.View.Control"
mc:Ignorable="d"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
d:DataContext="{d:DesignInstance shv:AvatarPropertyViewModel}">
@@ -28,9 +32,11 @@
<x:Double>1</x:Double>
</cwuconv:BoolToObjectConverter.TrueValue>
<cwuconv:BoolToObjectConverter.FalseValue>
<x:Double>0.3</x:Double>
<x:Double>0.5</x:Double>
</cwuconv:BoolToObjectConverter.FalseValue>
</cwuconv:BoolToObjectConverter>
<shvconv:BoolToVisibilityRevertConverter x:Key="BoolToVisibilityRevertConverter"/>
<shmmc:QualityColorConverter x:Key="QualityColorConverter"/>
</Page.Resources>
<Grid>
@@ -140,15 +146,6 @@
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<StackPanel>
<!--<Border
Margin="12,12,12,0"
CornerRadius="{StaticResource CompatCornerRadius}"
Background="{StaticResource CardBackgroundFillColorSecondary}">
<TextBlock
Margin="12,6"
Style="{StaticResource SubtitleTextBlockStyle}"
Text="{Binding SelectedAvatar.Name}"/>
</Border>-->
<Border
Margin="12,12,12,0"
CornerRadius="{StaticResource CompatCornerRadius}"
@@ -167,11 +164,42 @@
Background="Transparent"
BorderBrush="{x:Null}"
Margin="2,2,0,2">
<shci:CachedImage
Width="32"
Height="32"
Source="{Binding Icon}"
Opacity="{Binding IsActiviated,Converter={StaticResource BoolToOpacityConverter}}"/>
<Button.Content>
<Grid>
<!--#FFDAB79B-->
<Ellipse
Fill="#FFDAB79B"
Stroke="#FFB29880"/>
<shci:CachedImage
Width="32"
Height="32"
Source="{Binding Icon}"
Opacity="{Binding IsActiviated,Converter={StaticResource BoolToOpacityConverter}}"/>
<Image
Width="16"
Height="16"
Source="ms-appx:///Resource/Icon/UI_Icon_Locked.png"
Visibility="{Binding IsActiviated,Converter={StaticResource BoolToVisibilityRevertConverter}}">
</Image>
</Grid>
</Button.Content>
<Button.Flyout>
<Flyout Placement="Bottom">
<shct:DescriptionTextBlock
MaxWidth="320"
Description="{Binding Description}">
<shct:DescriptionTextBlock.Resources>
<Style
TargetType="TextBlock"
BasedOn="{StaticResource BodyTextBlockStyle}">
<Setter Property="TextWrapping" Value="Wrap"/>
</Style>
</shct:DescriptionTextBlock.Resources>
</shct:DescriptionTextBlock>
</Flyout>
</Button.Flyout>
</Button>
</DataTemplate>
</ItemsControl.ItemTemplate>
@@ -196,25 +224,126 @@
Background="Transparent"
BorderBrush="{x:Null}"
Margin="2,2,0,2">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<shci:CachedImage
Width="32"
Height="32"
Source="{Binding Icon}"/>
<TextBlock
VerticalAlignment="Bottom"
HorizontalAlignment="Right"
Text="{Binding Info.Level}"/>
</Grid>
<Button.Content>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="44"/>
</Grid.ColumnDefinitions>
<Ellipse
Grid.Column="0"
Fill="#FFDAB79B"
Stroke="#FFB29880"/>
<shci:CachedImage
Grid.Column="0"
Width="32"
Height="32"
Source="{Binding Icon}"/>
<Border
CornerRadius="{StaticResource CompatCornerRadius}"
Background="#FFB29880"
Padding="4,0"
Width="40"
Grid.Column="1"
Margin="6,0,0,0"
VerticalAlignment="Center"
HorizontalAlignment="Center">
<TextBlock
Margin="0,0,0,2"
HorizontalAlignment="Center"
Style="{StaticResource BaseTextBlockStyle}"
Foreground="#FFFFFFFF"
Text="{Binding Info.Level}"/>
</Border>
</Grid>
</Button.Content>
<Button.Flyout>
<Flyout Placement="Bottom">
<StackPanel MaxWidth="320">
<shct:DescriptionTextBlock
Description="{Binding Description}">
<shct:DescriptionTextBlock.Resources>
<Style
TargetType="TextBlock"
BasedOn="{StaticResource BodyTextBlockStyle}">
<Setter Property="TextWrapping" Value="Wrap"/>
</Style>
</shct:DescriptionTextBlock.Resources>
</shct:DescriptionTextBlock>
<ItemsControl Margin="0,12,0,0" ItemsSource="{Binding Info.Parameters}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<sc:Setting Margin="0,2,0,0" Header="{Binding Description}" Padding="12,0">
<sc:Setting.ActionContent>
<TextBlock Text="{Binding Parameter}"/>
</sc:Setting.ActionContent>
</sc:Setting>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</Flyout>
</Button.Flyout>
</Button>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Border>
<Border
Margin="12,12,12,0"
Padding="6"
VerticalAlignment="Top"
CornerRadius="{StaticResource CompatCornerRadius}"
Background="{StaticResource CardBackgroundFillColorSecondary}">
<Grid DataContext="{Binding SelectedAvatar.Weapon}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Button Padding="0">
<Button.Content>
<shvcont:ItemIcon
Width="48"
Height="48"
Icon="{Binding Icon}"
Quality="{Binding Quality}"/>
</Button.Content>
<Button.Flyout>
<Flyout Placement="Bottom">
<shct:DescriptionTextBlock
MaxWidth="320"
Description="{Binding AffixDescription}">
<shct:DescriptionTextBlock.Resources>
<Style
TargetType="TextBlock"
BasedOn="{StaticResource BodyTextBlockStyle}">
<Setter Property="TextWrapping" Value="Wrap"/>
</Style>
</shct:DescriptionTextBlock.Resources>
</shct:DescriptionTextBlock>
</Flyout>
</Button.Flyout>
</Button>
<TextBlock
Grid.Column="1"
VerticalAlignment="Center"
HorizontalAlignment="Center"
Text="{Binding Name}"/>
<TextBlock
Grid.Column="2"
VerticalAlignment="Center"
HorizontalAlignment="Center"
Text="{Binding Level}"/>
<TextBlock
Grid.Column="3"
VerticalAlignment="Center"
HorizontalAlignment="Center"
Text="{Binding AffixLevel}"/>
</Grid>
</Border>
<Border
Margin="12,12,12,0"
Padding="6,6,0,6"
@@ -233,7 +362,7 @@
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="68"/>
<ColumnDefinition Width="60"/>
</Grid.ColumnDefinitions>
<TextBlock
Grid.Column="0"
@@ -244,6 +373,7 @@
Margin="6,0,0,0"
Grid.Column="1"
Text="{Binding Value2}"
Foreground="LimeGreen"
Style="{StaticResource CaptionTextBlockStyle}"
HorizontalAlignment="Left"/>
</Grid>
@@ -254,61 +384,90 @@
</Border>
</StackPanel>
<ScrollViewer Grid.Column="1" Padding="0,0,12,0">
<ScrollViewer Grid.Column="1" Padding="0,0,0,0">
<cwucont:AdaptiveGridView
DesiredWidth="224"
cwua:ItemsReorderAnimation.Duration="0:0:0.1"
SelectionMode="None"
HorizontalContentAlignment="Stretch"
HorizontalAlignment="Left"
ItemsSource="{Binding SelectedAvatar.Reliquaries}"
Margin="0,12,0,0">
<cwucont:AdaptiveGridView.ItemContainerStyle>
<Style TargetType="GridViewItem" BasedOn="{StaticResource DefaultGridViewItemStyle}">
<Setter Property="Margin" Value="0,0,12,12"/>
</Style>
</cwucont:AdaptiveGridView.ItemContainerStyle>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border
Margin="0,0,0,0"
HorizontalAlignment="Stretch"
CornerRadius="{StaticResource CompatCornerRadius}"
Background="{StaticResource CardBackgroundFillColorSecondary}">
<StackPanel Margin="6" HorizontalAlignment="Stretch">
<Grid>
<Grid Margin="6">
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid Grid.Column="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition/>
<ColumnDefinition Width="6"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<shvc:ItemIcon
Grid.Column="0"
HorizontalAlignment="Left"
Width="48"
Height="48"
Icon="{Binding Icon}"
Quality="{Binding Quality}"/>
<StackPanel Grid.Column="1" Margin="6,0,0,0">
<Grid>
<TextBlock
Text="{Binding Name}"/>
<TextBlock
<Grid
Margin="2"
Grid.Column="0">
<TextBlock
Text="{Binding Name}"
FontWeight="Bold"
Style="{StaticResource CaptionTextBlockStyle}"/>
<TextBlock
Margin="12,0,0,0"
Text="{Binding Level}"
FontWeight="Bold"
Style="{StaticResource CaptionTextBlockStyle}"
HorizontalAlignment="Right"/>
</Grid>
<Grid Margin="0,10,0,0">
<TextBlock
</Grid>
<Grid Margin="2" Grid.Column="2">
<TextBlock
Text="{Binding MainProperty.Key}"
FontWeight="Bold"
Style="{StaticResource CaptionTextBlockStyle}"/>
<TextBlock
<TextBlock
Text="{Binding MainProperty.Value}"
FontWeight="Bold"
Style="{StaticResource CaptionTextBlockStyle}"
HorizontalAlignment="Right"/>
</Grid>
</StackPanel>
</Grid>
</Grid>
<MenuFlyoutSeparator Margin="-2,4,-2,0"/>
<ItemsControl ItemsSource="{Binding SubProperties}">
<Rectangle Height="1" Grid.Row="1" Margin="0,6">
<Rectangle.Fill>
<SolidColorBrush Color="{Binding Quality,Converter={StaticResource QualityColorConverter}}"/>
</Rectangle.Fill>
</Rectangle>
<shci:CachedImage
Opacity="0.3"
Grid.Row="2"
HorizontalAlignment="Right"
VerticalAlignment="Bottom"
Width="80"
Height="80"
Source="{Binding Icon}"/>
<ItemsControl Grid.Row="2" ItemsSource="{Binding SubProperties}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<cwucont:UniformGrid
Columns="2"
Rows="5"
ColumnSpacing="6"
Orientation="Vertical"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Padding="2">
<Grid Padding="2" MinWidth="128">
<TextBlock
Text="{Binding Key}"
Style="{StaticResource CaptionTextBlockStyle}"/>
@@ -320,7 +479,7 @@
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</Grid>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>