L2Bot2.0/Client/Application/Components/Map.xaml
2023-02-09 22:45:08 +04:00

240 lines
14 KiB
XML

<ContentControl x:Class="Client.Application.Components.Map"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:services="clr-namespace:Client.Application.Services"
xmlns:components="clr-namespace:Client.Application.Components"
mc:Ignorable="d"
services:SizeObserver.Observe="True"
services:SizeObserver.ObservedWidth="{Binding ViewportWidth, Mode=OneWayToSource}"
services:SizeObserver.ObservedHeight="{Binding ViewportHeight, Mode=OneWayToSource}"
>
<Grid Background="Transparent">
<Grid.InputBindings>
<MouseBinding Gesture="LeftClick" Command="{Binding MouseLeftClickCommand}" CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=Grid}}" />
</Grid.InputBindings>
<ItemsControl ItemsSource="{Binding Path=Blocks}">
<ItemsControl.Resources>
<services:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
</ItemsControl.Resources>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas ClipToBounds="True"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Image
Source="{Binding ImageSource,Mode=OneWay}"
Width="{Binding Size,Mode=OneWay}"
Height="{Binding Size,Mode=OneWay}"
Visibility="{Binding Visible,Converter={StaticResource BooleanToVisibilityConverter}}"
>
<Image.RenderTransform>
<TranslateTransform X="{Binding DeltaX}" Y="{Binding DeltaY}"/>
</Image.RenderTransform>
</Image>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<ItemsControl ItemsSource="{Binding Path=Creatures}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas ClipToBounds="True" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Path x:Name="CreatureAggroRadius" StrokeThickness="2" Visibility="Hidden" Fill="#11ff0000" Stroke="#33ff0000">
<Path.Data>
<EllipseGeometry
RadiusX="{Binding AggroRadius,Mode=OneWay}"
RadiusY="{Binding AggroRadius,Mode=OneWay}" />
</Path.Data>
<Path.RenderTransform>
<TranslateTransform X="{Binding Position.X,Mode=OneWay}" Y="{Binding Position.Y,Mode=OneWay}"/>
</Path.RenderTransform>
</Path>
</Grid>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding IsAggressive,Mode=OneWay}" Value="True">
<Setter TargetName="CreatureAggroRadius" Property="Visibility" Value="Visible" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<ItemsControl ItemsSource="{Binding Path=Creatures}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas ClipToBounds="True" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid x:Name="CreatureMain">
<Grid.InputBindings>
<MouseBinding Gesture="LeftClick" Command="{Binding MouseLeftClickCommand}" />
<MouseBinding Gesture="LeftDoubleClick" Command="{Binding MouseLeftDoubleClickCommand}" />
<MouseBinding Gesture="RightClick" Command="{Binding MouseRightClickCommand}" />
</Grid.InputBindings>
<Path x:Name="CreatureBody" StrokeThickness="2" Fill="Transparent">
<Path.Data>
<EllipseGeometry
RadiusX="{Binding Radius,Mode=OneWay}"
RadiusY="{Binding Radius,Mode=OneWay}" />
</Path.Data>
<Path.RenderTransform>
<TranslateTransform X="{Binding Position.X,Mode=OneWay}" Y="{Binding Position.Y,Mode=OneWay}"/>
</Path.RenderTransform>
</Path>
<Line x:Name="CreatureDirection" X1="0" Y1="0" X2="{Binding Direction.X,Mode=OneWay}" Y2="{Binding Direction.Y,Mode=OneWay}" StrokeThickness="2">
<Line.RenderTransform>
<TranslateTransform X="{Binding Position.X,Mode=OneWay}" Y="{Binding Position.Y,Mode=OneWay}"/>
</Line.RenderTransform>
</Line>
</Grid>
<Grid x:Name="CreatureName" Visibility="Hidden" VerticalAlignment="Top" HorizontalAlignment="Left">
<Grid.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleX="-2" ScaleY="-1" />
<TranslateTransform
X="{Binding Path=ActualWidth,RelativeSource={RelativeSource AncestorType=Grid}}"
Y="{Binding Path=ActualHeight,RelativeSource={RelativeSource AncestorType=Grid}}"
/>
<ScaleTransform ScaleX="-0.5" ScaleY="-1" />
<ScaleTransform ScaleY="-0.5" />
<TranslateTransform Y="{Binding Radius}" />
<ScaleTransform ScaleY="-2" />
<TranslateTransform X="{Binding Position.X,Mode=OneWay}" Y="{Binding Position.Y,Mode=OneWay}"/>
</TransformGroup>
</Grid.RenderTransform>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Text="{Binding Name,Mode=OneWay}" Foreground="Black">
<TextBlock.Effect>
<BlurEffect
Radius="2"
KernelType="Box"/>
</TextBlock.Effect>
</TextBlock>
<TextBlock Text="{Binding Name,Mode=OneWay}" Foreground="White" />
<components:StatsBar
Grid.Row="1"
BackgroundSource="/Assets/icons/ps_hpbar_back.png"
ForegroundSource="/Assets/icons/ps_hpbar.png"
Current="{Binding VitalStats.Hp}"
Total="{Binding VitalStats.MaxHp}"
Height="{Binding Radius}"
OnlyBar="True"
Margin="0 2 0 0"
/>
</Grid>
</Grid>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Type,Mode=OneWay}" Value="NPC">
<Setter TargetName="CreatureBody" Property="Stroke" Value="LimeGreen" />
<Setter TargetName="CreatureDirection" Property="Stroke" Value="LimeGreen" />
</DataTrigger>
<DataTrigger Binding="{Binding Type,Mode=OneWay}" Value="Player">
<Setter TargetName="CreatureBody" Property="Stroke" Value="Blue" />
<Setter TargetName="CreatureDirection" Property="Stroke" Value="Blue" />
</DataTrigger>
<DataTrigger Binding="{Binding Type,Mode=OneWay}" Value="Hero">
<Setter TargetName="CreatureBody" Property="Stroke" Value="Black" />
<Setter TargetName="CreatureDirection" Property="Stroke" Value="Black" />
</DataTrigger>
<DataTrigger Binding="{Binding IsTarget,Mode=OneWay}" Value="True">
<Setter TargetName="CreatureName" Property="Visibility" Value="Visible" />
</DataTrigger>
<Trigger SourceName="CreatureMain" Property="IsMouseOver" Value="True">
<Setter TargetName="CreatureName" Property="Visibility" Value="Visible"></Setter>
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<ItemsControl ItemsSource="{Binding Path=Drops}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas ClipToBounds="True" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid x:Name="DropMain">
<Grid.InputBindings>
<MouseBinding Gesture="LeftClick" Command="{Binding MouseLeftClickCommand}" />
<MouseBinding Gesture="RightClick" Command="{Binding MouseRightClickCommand}" />
</Grid.InputBindings>
<Path StrokeThickness="2" Stroke="Gold" Fill="Transparent">
<Path.Data>
<EllipseGeometry
RadiusX="{Binding Radius,Mode=OneWay}"
RadiusY="{Binding Radius,Mode=OneWay}" />
</Path.Data>
<Path.RenderTransform>
<TranslateTransform X="{Binding Position.X,Mode=OneWay}" Y="{Binding Position.Y,Mode=OneWay}"/>
</Path.RenderTransform>
</Path>
</Grid>
<Grid x:Name="DropName" Visibility="Hidden" VerticalAlignment="Top" HorizontalAlignment="Left">
<Grid.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleX="-2" ScaleY="-1" />
<TranslateTransform
X="{Binding Path=ActualWidth,RelativeSource={RelativeSource AncestorType=Grid}}"
Y="{Binding Path=ActualHeight,RelativeSource={RelativeSource AncestorType=Grid}}"
/>
<ScaleTransform ScaleX="-0.5" ScaleY="-1" />
<ScaleTransform ScaleY="-0.5" />
<TranslateTransform Y="{Binding Radius}" />
<ScaleTransform ScaleY="-2" />
<TranslateTransform X="{Binding Position.X,Mode=OneWay}" Y="{Binding Position.Y,Mode=OneWay}"/>
</TransformGroup>
</Grid.RenderTransform>
<TextBlock Text="{Binding Name,Mode=OneWay}" Foreground="Black" FontSize="11">
<TextBlock.Effect>
<BlurEffect
Radius="2"
KernelType="Box"/>
</TextBlock.Effect>
</TextBlock>
<TextBlock Text="{Binding Name,Mode=OneWay}" Foreground="White" FontSize="11"/>
</Grid>
</Grid>
<DataTemplate.Triggers>
<Trigger SourceName="DropMain" Property="IsMouseOver" Value="True">
<Setter TargetName="DropName" Property="Visibility" Value="Visible"></Setter>
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<Grid VerticalAlignment="Bottom" HorizontalAlignment="Right" Width="200" Height="20" Margin="0 0 5 5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="30"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Border Background="White" CornerRadius="3" Margin="0 0 5 0">
<TextBlock Text="{Binding Scale, Mode=OneWay}" FontSize="14" FontWeight="Bold" VerticalAlignment="Center" HorizontalAlignment="Center" />
</Border>
<Slider
TickFrequency="1"
IsSnapToTickEnabled="True"
Value="{Binding Scale}"
Maximum="32"
Minimum="1"
Grid.Column="1"
VerticalAlignment="Center"
/>
</Grid>
</Grid>
</ContentControl>