305 lines
18 KiB
XML
305 lines
18 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}"
|
|
MouseWheel="ContentControl_MouseWheel"
|
|
MouseLeave="ContentControl_MouseLeave"
|
|
MouseMove="ContentControl_MouseMove"
|
|
>
|
|
<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>
|
|
<Grid DataContext="{Binding CombatZone}" ClipToBounds="True">
|
|
<Path StrokeThickness="2" Fill="#1100ff00" Stroke="#3300ff00" >
|
|
<Path.Data>
|
|
<EllipseGeometry
|
|
RadiusX="{Binding Radius,Mode=OneWay}"
|
|
RadiusY="{Binding Radius,Mode=OneWay}"/>
|
|
</Path.Data>
|
|
<Path.RenderTransform>
|
|
<TranslateTransform X="{Binding Center.X,Mode=OneWay}" Y="{Binding Center.Y,Mode=OneWay}"/>
|
|
</Path.RenderTransform>
|
|
</Path>
|
|
</Grid>
|
|
<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="DarkGreen" />
|
|
<Setter TargetName="CreatureDirection" Property="Stroke" Value="DarkGreen" />
|
|
</DataTrigger>
|
|
<DataTrigger Binding="{Binding IsHostile,Mode=OneWay}" Value="True">
|
|
<Setter TargetName="CreatureBody" Property="Stroke" Value="LimeGreen" />
|
|
<Setter TargetName="CreatureDirection" Property="Stroke" Value="LimeGreen" />
|
|
</DataTrigger>
|
|
<DataTrigger Binding="{Binding IsDead,Mode=OneWay}" Value="True">
|
|
<Setter TargetName="CreatureBody" Property="Stroke" Value="Gray" />
|
|
<Setter TargetName="CreatureDirection" Property="Stroke" Value="Gray" />
|
|
</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 IsAttacker,Mode=OneWay}" Value="True">
|
|
<Setter TargetName="CreatureBody" Property="Stroke" Value="Red" />
|
|
<Setter TargetName="CreatureDirection" Property="Stroke" Value="Red" />
|
|
</DataTrigger>
|
|
<DataTrigger Binding="{Binding IsSweepable,Mode=OneWay}" Value="True">
|
|
<Setter TargetName="CreatureBody" Property="Stroke" Value="Magenta" />
|
|
<Setter TargetName="CreatureDirection" Property="Stroke" Value="Magenta" />
|
|
</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>
|
|
<ItemsControl ItemsSource="{Binding Path=Path}">
|
|
<ItemsControl.ItemsPanel>
|
|
<ItemsPanelTemplate>
|
|
<Canvas ClipToBounds="True" />
|
|
</ItemsPanelTemplate>
|
|
</ItemsControl.ItemsPanel>
|
|
<ItemsControl.ItemTemplate>
|
|
<DataTemplate>
|
|
<Grid>
|
|
<Line
|
|
X1="{Binding From.X}"
|
|
Y1="{Binding From.Y}"
|
|
X2="{Binding To.X}"
|
|
Y2="{Binding To.Y}"
|
|
Stroke="Red"
|
|
StrokeDashArray="1 3"
|
|
StrokeThickness="1"
|
|
/>
|
|
<Path
|
|
Stroke="Red"
|
|
StrokeThickness="1"
|
|
>
|
|
<Path.Data>
|
|
<EllipseGeometry
|
|
RadiusX="{Binding Radius,Mode=OneWay}"
|
|
RadiusY="{Binding Radius,Mode=OneWay}" />
|
|
</Path.Data>
|
|
<Path.RenderTransform>
|
|
<TranslateTransform X="{Binding To.X,Mode=OneWay}" Y="{Binding To.Y,Mode=OneWay}"/>
|
|
</Path.RenderTransform>
|
|
</Path>
|
|
</Grid>
|
|
</DataTemplate>
|
|
</ItemsControl.ItemTemplate>
|
|
</ItemsControl>
|
|
<StackPanel VerticalAlignment="Bottom" HorizontalAlignment="Right" Background="#66ffffff">
|
|
<Grid Margin="10 5">
|
|
<Grid.ColumnDefinitions>
|
|
<ColumnDefinition Width="90"></ColumnDefinition>
|
|
<ColumnDefinition Width="30"></ColumnDefinition>
|
|
</Grid.ColumnDefinitions>
|
|
<TextBlock Padding="0 0 0 3">
|
|
<TextBlock.Text>
|
|
<MultiBinding StringFormat="{}{0:F0}, {1:F0}">
|
|
<Binding Path="MousePosition.X" Mode="OneWay"/>
|
|
<Binding Path="MousePosition.Y" Mode="OneWay"/>
|
|
</MultiBinding>
|
|
</TextBlock.Text>
|
|
</TextBlock>
|
|
<TextBlock Grid.Column="1" Text="{Binding Scale,Mode=OneWay,StringFormat='{}1:{0}'}" HorizontalAlignment="Right" />
|
|
</Grid>
|
|
</StackPanel>
|
|
</Grid>
|
|
</ContentControl>
|