1
0
Fork 0
mirror of https://github.com/Nioux/AideDeJeu.git synced 2025-10-30 23:16:09 +00:00

Mode dual

This commit is contained in:
Yan Maniez 2018-06-12 22:35:55 +02:00
parent 06b6a7cdc3
commit ab4758555b
7 changed files with 113 additions and 83 deletions

View file

@ -23,8 +23,10 @@ namespace AideDeJeu.Tools
if (string.IsNullOrEmpty(x)) return 1;
if (string.IsNullOrEmpty(y)) return -1;
var regex = new Regex(@"\((?<xp>\d*?) (PX|XP)\)");
int xpx = int.Parse(regex.Match(x).Groups["xp"].Value);
int xpy = int.Parse(regex.Match(y).Groups["xp"].Value);
int xpx;
int.TryParse(regex.Match(x).Groups["xp"].Value, out xpx);
int xpy;
int.TryParse(regex.Match(y).Groups["xp"].Value, out xpy);
return xpx - xpy;
}
}

View file

@ -2,9 +2,11 @@
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Net.Http;
using System.Reflection;
using System.Runtime.Serialization.Json;
using System.Text;
using System.Threading.Tasks;
namespace AideDeJeu.Tools
{
@ -20,6 +22,14 @@ namespace AideDeJeu.Tools
}
}
public static async Task<string> GetStringFromUrl(string url)
{
using (var client = new HttpClient())
{
return await client.GetStringAsync(url);
}
}
public static string RemoveDiacritics(string text)
{
if (string.IsNullOrWhiteSpace(text))

View file

@ -12,9 +12,21 @@ namespace AideDeJeu.Tools
{
public static class MarkdownExtensions
{
public static IEnumerable<Spell> MarkdownToSpells(string md)
{
var document = Markdig.Parsers.MarkdownParser.Parse(md);
return document.ToSpells();
}
public static IEnumerable<Monster> MarkdownToMonsters(string md)
{
var document = Markdig.Parsers.MarkdownParser.Parse(md);
return document.ToMonsters();
}
public static IEnumerable<Spell> ToSpells(this Markdig.Syntax.MarkdownDocument document)
{
//var spells = new List<Spell>();
var spells = new List<Spell>();
Spell spell = null;
foreach (var block in document)
{
@ -27,11 +39,11 @@ namespace AideDeJeu.Tools
{
if (spell != null)
{
//spells.Add(spell);
yield return spell;
spells.Add(spell);
//yield return spell;
}
spell = new Spell();
spell.Name = spell.NamePHB = headingBlock.Inline.ToContainerString();
spell.Id = spell.IdVF = spell.IdVO = spell.Name = spell.NamePHB = headingBlock.Inline.ToContainerString();
//Console.WriteLine(spell.Name);
}
}
@ -130,15 +142,15 @@ namespace AideDeJeu.Tools
}
if (spell != null)
{
yield return spell;
//spells.Add(spell);
//yield return spell;
spells.Add(spell);
}
//return spells;
return spells;
}
public static IEnumerable<Monster> ToMonsters(this Markdig.Syntax.MarkdownDocument document)
{
//var monsters = new List<Monster>();
var monsters = new List<Monster>();
Monster monster = null;
List<string> actions = new List<string>();
foreach (var block in document)
@ -152,8 +164,8 @@ namespace AideDeJeu.Tools
{
if (monster != null)
{
//monsters.Add(monster);
yield return monster;
monsters.Add(monster);
//yield return monster;
}
monster = new Monster();
monster.Name = monster.NamePHB = headingBlock.Inline.ToContainerString();
@ -278,10 +290,10 @@ namespace AideDeJeu.Tools
}
if (monster != null)
{
//monsters.Add(monster);
yield return monster;
monsters.Add(monster);
//yield return monster;
}
//return monsters;
return monsters;
}
public static string ToString(this Markdig.Syntax.SourceSpan span, string md)
@ -293,7 +305,7 @@ namespace AideDeJeu.Tools
var str = string.Empty;
foreach (var inline in inlines)
{
Debug.WriteLine(inline.GetType());
//Debug.WriteLine(inline.GetType());
string add = string.Empty;
if (inline is Markdig.Syntax.Inlines.LineBreakInline)
{
@ -323,7 +335,7 @@ namespace AideDeJeu.Tools
{
add = inline.ToString();
}
Debug.WriteLine(add);
//Debug.WriteLine(add);
str += add;
}
return str;
@ -425,7 +437,7 @@ namespace AideDeJeu.Tools
}
public static void Dump(this Markdig.Syntax.ListBlock block)
{
Debug.WriteLine(block.BulletType);
//Debug.WriteLine(block.BulletType);
foreach (var inblock in block)
{
inblock.Dump();
@ -440,8 +452,8 @@ namespace AideDeJeu.Tools
}
public static void Dump(this Markdig.Syntax.HeadingBlock block)
{
Debug.WriteLine(block.HeaderChar);
Debug.WriteLine(block.Level);
//Debug.WriteLine(block.HeaderChar);
//Debug.WriteLine(block.Level);
//foreach(var line in block.Lines.Lines)
//{
// DumpStringLine(line);
@ -453,14 +465,14 @@ namespace AideDeJeu.Tools
}
public static void Dump(this Markdig.Syntax.Block block)
{
Debug.WriteLine(block.Column);
Debug.WriteLine(block.IsBreakable);
Debug.WriteLine(block.IsOpen);
Debug.WriteLine(block.Line);
Debug.WriteLine(block.RemoveAfterProcessInlines);
Debug.WriteLine(block.Span.ToString());
//Debug.WriteLine(block.Column);
//Debug.WriteLine(block.IsBreakable);
//Debug.WriteLine(block.IsOpen);
//Debug.WriteLine(block.Line);
//Debug.WriteLine(block.RemoveAfterProcessInlines);
//Debug.WriteLine(block.Span.ToString());
//Debug.WriteLine(block.Span.ToString(MD));
Debug.WriteLine(block.ToString());
//Debug.WriteLine(block.ToString());
if (block is Markdig.Syntax.ParagraphBlock)
{
(block as Markdig.Syntax.ParagraphBlock).Dump();
@ -482,7 +494,7 @@ namespace AideDeJeu.Tools
{
foreach (var block in document)
{
Debug.WriteLine(block.GetType());
//Debug.WriteLine(block.GetType());
//block.Dump();
}
}

View file

@ -127,12 +127,12 @@ namespace AideDeJeu.ViewModels
return items.Where(item =>
{
var spell = item as Spell;
return (int.Parse(spell.Level) >= int.Parse(niveauMin)) &&
(int.Parse(spell.Level) <= int.Parse(niveauMax)) &&
spell.Type.ToLower().Contains(ecole.ToLower()) &&
return //(int.Parse(spell.Level) >= int.Parse(niveauMin)) &&
//(int.Parse(spell.Level) <= int.Parse(niveauMax)) &&
//spell.Type.ToLower().Contains(ecole.ToLower()) &&
spell.Source.Contains(source) &&
spell.Source.Contains(classe) &&
spell.Type.Contains(rituel) &&
//spell.Type.Contains(rituel) &&
Helpers.RemoveDiacritics(spell.NamePHB).ToLower().Contains(Helpers.RemoveDiacritics(SearchText).ToLower());
}).OrderBy(spell => spell.NamePHB)
.AsEnumerable();
@ -373,8 +373,9 @@ namespace AideDeJeu.ViewModels
return items.Where(item =>
{
var monster = item as Monster;
return monster.Type.Contains(type) &&
(string.IsNullOrEmpty(size) || monster.Size.Equals(size)) &&
return
//monster.Type.Contains(type) &&
//(string.IsNullOrEmpty(size) || monster.Size.Equals(size)) &&
monster.Source.Contains(source) &&
powerComparer.Compare(monster.Challenge, minPower) >= 0 &&
powerComparer.Compare(monster.Challenge, maxPower) <= 0 &&

View file

@ -9,6 +9,7 @@ using System.Threading.Tasks;
using System.Windows.Input;
using Xamarin.Forms;
using System.Threading;
using System.Linq;
namespace AideDeJeu.ViewModels
{
@ -28,45 +29,46 @@ namespace AideDeJeu.ViewModels
private IEnumerable<Item> _AllItems = null;
public IEnumerable<Item> AllItems
public async Task<IEnumerable<Item>> GetAllItemsAsync()
{
get
if (_AllItems == null)
{
if (_AllItems == null)
string resourceName = null;
switch (ItemSourceType)
{
string resourceName = null;
switch (ItemSourceType)
{
case ItemSourceType.MonsterVF:
resourceName = "AideDeJeu.Data.monsters_vf.json";
break;
case ItemSourceType.MonsterVO:
resourceName = "AideDeJeu.Data.monsters_vo.json";
break;
case ItemSourceType.MonsterHD:
resourceName = "AideDeJeu.Data.monsters_hd.json";
break;
case ItemSourceType.SpellVF:
resourceName = "AideDeJeu.Data.spells_vf.json";
break;
case ItemSourceType.SpellVO:
resourceName = "AideDeJeu.Data.spells_vo.json";
break;
case ItemSourceType.SpellHD:
resourceName = "AideDeJeu.Data.spells_hd.json";
break;
}
if (ItemSourceType.HasFlag(ItemSourceType.Spell))
{
_AllItems = Tools.Helpers.GetResourceObject<IEnumerable<Spell>>(resourceName);
}
else if (ItemSourceType.HasFlag(ItemSourceType.Monster))
{
case ItemSourceType.MonsterVF:
resourceName = "AideDeJeu.Data.monsters_vf.json";
_AllItems = Tools.Helpers.GetResourceObject<IEnumerable<Monster>>(resourceName);
}
break;
case ItemSourceType.MonsterVO:
resourceName = "AideDeJeu.Data.monsters_vo.json";
_AllItems = Tools.Helpers.GetResourceObject<IEnumerable<Monster>>(resourceName);
break;
case ItemSourceType.MonsterHD:
resourceName = "AideDeJeu.Data.monsters_hd.json";
var mdm = await Tools.Helpers.GetStringFromUrl("https://raw.githubusercontent.com/Nioux/AideDeJeu/master/Data/monsters_hd.md");
_AllItems = Tools.MarkdownExtensions.MarkdownToMonsters(mdm);
//_AllItems = Tools.Helpers.GetResourceObject<IEnumerable<Monster>>(resourceName);
break;
case ItemSourceType.SpellVF:
resourceName = "AideDeJeu.Data.spells_vf.json";
_AllItems = Tools.Helpers.GetResourceObject<IEnumerable<Spell>>(resourceName);
//var md2 = await Tools.Helpers.GetStringFromUrl("https://raw.githubusercontent.com/Nioux/AideDeJeu/master/Data/spells_hd.md");
//_AllItems = Tools.MarkdownExtensions.MarkdownToSpells(md2).ToList();
break;
case ItemSourceType.SpellVO:
resourceName = "AideDeJeu.Data.spells_vo.json";
_AllItems = Tools.Helpers.GetResourceObject<IEnumerable<Spell>>(resourceName);
break;
case ItemSourceType.SpellHD:
resourceName = "AideDeJeu.Data.spells_hd.json";
var mds = await Tools.Helpers.GetStringFromUrl("https://raw.githubusercontent.com/Nioux/AideDeJeu/master/Data/spells_hd.md");
_AllItems = Tools.MarkdownExtensions.MarkdownToSpells(mds);
//_AllItems = Tools.Helpers.GetResourceObject<IEnumerable<Spell>>(resourceName);
break;
}
return _AllItems;
}
return _AllItems;
}
async Task LoadItemsAsync(CancellationToken token = default)
@ -77,19 +79,19 @@ namespace AideDeJeu.ViewModels
{
// Yan : c'est pas plutôt cette partie qui devrait être dans une autre Task ?
var filterViewModel = Main.GetFilterViewModel(ItemSourceType);
var items = await filterViewModel.FilterItems(AllItems, token);
await Task.Run(async () => {
// Yan : plus besoin de boucle si on change toute la liste d'un coup ;)
// Yan : indispensable de repasser sur l'ui thread pour la version uwp
Device.BeginInvokeOnMainThread(() => Main.Items = items);
//Main.Items.Clear();
//foreach (var item in items)
//{
// token.ThrowIfCancellationRequested();
// Main.Items.Add(item);
//}
}, cancellationToken: token); // Yan : c'est ici qu'il faudrait coller le token non ?
var items = await filterViewModel.FilterItems(await GetAllItemsAsync(), token);
Main.Items = items;
//await Task.Run(async () => {
// Yan : plus besoin de boucle si on change toute la liste d'un coup ;)
// Yan : indispensable de repasser sur l'ui thread pour la version uwp
//Device.BeginInvokeOnMainThread(() => Main.Items = items);
//Main.Items.Clear();
//foreach (var item in items)
//{
// token.ThrowIfCancellationRequested();
// Main.Items.Add(item);
//}
//}, cancellationToken: token); // Yan : c'est ici qu'il faudrait coller le token non ?
//On arrete le loading ici car on annule toujours avant de lancer une nouvelle opération
// Yan : ?? du coup le IsLoading repasse pas à false en cas de cancel ou d'autre exception ?

View file

@ -139,7 +139,10 @@ namespace AideDeJeu.ViewModels
{
await GetItemsViewModel(ItemSourceType).ExecuteLoadItemsCommandAsync();
});
GotoItemCommand = new Command<Item>(async (item) => await GetItemsViewModel(ItemSourceType).ExecuteGotoItemCommandAsync(item));
GotoItemCommand = new Command<Item>(async (item) =>
{
await GetItemsViewModel(ItemSourceType).ExecuteGotoItemCommandAsync(item);
});
SwitchToSpells = new Command(() => ItemSourceType = (ItemSourceType & ~ItemSourceType.Monster) | ItemSourceType.Spell);
SwitchToMonsters = new Command(() => ItemSourceType = (ItemSourceType & ~ItemSourceType.Spell) | ItemSourceType.Monster);
SwitchToVF = new Command(() => ItemSourceType = (ItemSourceType & ~ItemSourceType.VO & ~ItemSourceType.HD) | ItemSourceType.VF);

View file

@ -63,8 +63,8 @@ namespace AideDeJeu.ViewModels
{
var fd = FormatedTextHelpers.FontData.FromResource("contentital");
var fs = new FormattedString();
var capType = Item.Type.First().ToString().ToUpper() + Item.Type.Substring(1);
fs.Spans.Add(new Span() { Text = string.Format("{0} de niveau {1}", capType, Item.Level), FontFamily = fd.FontFamily, FontAttributes = fd.FontAttributes, FontSize = fd.FontSize, ForegroundColor = fd.TextColor});
var capType = Item?.Type?.First().ToString()?.ToUpper() + Item?.Type?.Substring(1);
fs.Spans.Add(new Span() { Text = string.Format("{0} de niveau {1}", capType, Item?.Level), FontFamily = fd.FontFamily, FontAttributes = fd.FontAttributes, FontSize = fd.FontSize, ForegroundColor = fd.TextColor});
return fs;
}
}