1
0
Fork 0
mirror of https://github.com/Nioux/AideDeJeu.git synced 2025-12-23 02:23:22 +00:00

Attributes

This commit is contained in:
Yan Maniez 2019-04-14 20:42:13 +02:00
parent c7d5783b0b
commit 38fd06e8ca
3356 changed files with 661831 additions and 11695 deletions

View file

@ -3,8 +3,10 @@ using AideDeJeu.ViewModels;
using SQLite;
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Runtime.Serialization;
using System.Text.RegularExpressions;
@ -343,19 +345,35 @@ namespace AideDeJeuLib
return $"{Name} ({NewId})";
}
public class Attribute
{
public Attribute(string key, string value)
{
Key = key;
Value = value;
}
public string Key { get; set; }
public string Value { get; set; }
}
[NotMapped]
[IgnoreDataMember]
public Dictionary<string, string> Attributes { get; set; } = new Dictionary<string, string>();
public OrderedDictionary Attributes { get; set; } = new OrderedDictionary();
public Dictionary<string, KeyValuePair<string, string>> AttributesKeyValue
public OrderedDictionary AttributesKeyValue
{
get
{
var keys = Attributes.Keys.Where(a => a.EndsWith("Key") && Attributes.Keys.Contains(a.Substring(0, a.Length - 3) + "Value")).Select(a => a.Substring(0, a.Length - 3)).ToList();
var dico = new Dictionary<string, KeyValuePair<string, string>>();
foreach (var key in keys)
var dico = new OrderedDictionary();
foreach (string akey in Attributes.Keys)
{
dico[key] = new KeyValuePair<string, string>(Attributes[key + "Key"], Attributes[key + "Value"]);
if (akey.EndsWith("Key"))
{
var key = akey.Substring(0, akey.Length - 3);
if (Attributes.Contains(key + "Value"))
{
dico[key] = new Attribute(Attributes[key + "Key"] as string, Attributes[key + "Value"] as string);
}
}
}
return dico;
}
@ -378,20 +396,35 @@ namespace AideDeJeuLib
var deserializer = builder
.WithNamingConvention(new PascalCaseNamingConvention())
.Build();
Attributes = deserializer.Deserialize<Dictionary<string, string>>(value);
Attributes = deserializer.Deserialize<OrderedDictionary>(value);
}
}
public void ResetAttribute(string name)
{
if (name != null)
{
var prop = this.GetType().GetProperty(name, BindingFlags.Public | BindingFlags.Instance);
if (null != prop && prop.CanWrite)
{
prop.SetValue(this, null, null);
}
if (this.Attributes.Contains(name))
{
this.Attributes.Remove(name);
}
}
}
public void SetAttribute(string name, string value)
{
var prop = this.GetType().GetProperty(name, BindingFlags.Public | BindingFlags.Instance);
if (null != prop && prop.CanWrite)
if (name != null && value != null)
{
prop.SetValue(this, prop.GetValue(this) + value, null);
}
else
{
if (this.Attributes.ContainsKey(name))
var prop = this.GetType().GetProperty(name, BindingFlags.Public | BindingFlags.Instance);
if (null != prop && prop.CanWrite)
{
prop.SetValue(this, prop.GetValue(this) + value, null);
}
if (this.Attributes.Contains(name))
{
this.Attributes[name] += value;
}
@ -401,6 +434,15 @@ namespace AideDeJeuLib
}
}
}
public string GetAttribute(string name)
{
if (this.Attributes.Contains(name))
{
return this.Attributes[name].ToString();
}
return null;
}
[DataMember]
public string Description { get; set; }

View file

@ -25,6 +25,8 @@ namespace AideDeJeuLib
[DataMember]
public string AnyAbilityBonus { get; set; }
[DataMember]
public string AbilityScoreIncrease { get; set; }
[DataMember]
public string Age { get; set; }
[DataMember]
@ -37,17 +39,6 @@ namespace AideDeJeuLib
public string Darkvision { get; set; }
[DataMember]
public string Languages { get; set; }
[DataMember]
public string AbilityScoreIncrease { get; set; }
[DataMember]
public string CelestialResistance { get; set; }
[DataMember]
public string DraconicAncestry { get; set; }
[DataMember]
public string BreathWeapon { get; set; }
[DataMember]
public string DamageResistance { get; set; }
}
}

View file

@ -24,20 +24,40 @@
<StackLayout>
<views:ItemPickerView BindingContext="{Binding}" Title="Race" ItemsSource="{Binding Races.Result}" SelectedItem="{Binding SelectedRace, Mode=TwoWay}" />
<!--<Picker Title="Race" HorizontalOptions="FillAndExpand" IsEnabled="{Binding Races.IsSuccessfullyCompleted}" ItemsSource="{Binding Races.Result}" ItemDisplayBinding="{Binding Name}" SelectedIndex="{Binding RaceSelectedIndex, Mode=TwoWay}" />-->
<mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="#### Augmentation de caractéristiques" IsVisible="{Binding SelectedRace.AbilityScoreIncrease, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" />
<mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="{Binding SelectedRace.AbilityScoreIncrease}" IsVisible="{Binding SelectedRace.AbilityScoreIncrease, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" />
<mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="#### Âge" IsVisible="{Binding SelectedRace.Age, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" />
<mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="{Binding SelectedRace.Age}" IsVisible="{Binding SelectedRace.Age, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" />
<mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="#### Alignement" IsVisible="{Binding SelectedRace.Alignment, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" />
<mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="{Binding SelectedRace.Alignment}" IsVisible="{Binding SelectedRace.Alignment, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" />
<mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="#### Taille" IsVisible="{Binding SelectedRace.Size, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" />
<mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="{Binding SelectedRace.Size}" IsVisible="{Binding SelectedRace.Size, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" />
<mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="#### Vitesse" IsVisible="{Binding SelectedRace.Speed, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" />
<mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="{Binding SelectedRace.Speed}" IsVisible="{Binding SelectedRace.Speed, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" />
<mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="#### Vision dans le noir" IsVisible="{Binding SelectedRace.Darkvision, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" />
<mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="{Binding SelectedRace.Darkvision}" IsVisible="{Binding SelectedRace.Darkvision, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" />
<StackLayout BindableLayout.ItemsSource="{Binding SelectedRace.AttributesKeyValue}">
<BindableLayout.ItemTemplate>
<DataTemplate>
<StackLayout Orientation="Horizontal">
<Label Text="{Binding Key}" />
<Label Text="{Binding Value.Key}" />
<Label Text="{Binding Value.Value}" />
<StackLayout>
<mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="{Binding Value.Key, StringFormat='#### {0}'}" />
<mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="{Binding Value.Value}" />
</StackLayout>
</DataTemplate>
</BindableLayout.ItemTemplate>
</StackLayout>
<mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="{Binding SelectedRace.Markdown}" />
<mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="#### Langues" IsVisible="{Binding SelectedRace.Languages, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" />
<mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="{Binding SelectedRace.Languages}" IsVisible="{Binding SelectedRace.Languages, Converter={StaticResource NullToFalseConverter}, FallbackValue=False}" />
<!--<mdview:MarkdownView Theme="{StaticResource MonsterMarkdownTheme}" Markdown="{Binding SelectedRace.Markdown}" />-->
</StackLayout>
</ScrollView>
</ContentPage>