/// <summary> /// Подзадачи для андроида /// </summary> /// <param name="pers"></param> /// <param name="task"></param> /// <param name="ro"></param> private static void AndroSub(Pers pers, Task task, RootObject ro) { var tskInMain = pers.Tasks.FirstOrDefault(n => n.GUID == task.UUID); if (tskInMain != null) { var subNotDone = tskInMain.SubTasks.Where(n => !n.isDone).ToList(); if (subNotDone.Any()) { Qwest qww = new Qwest(); qww.NameOfQwest = "↑↑↑"; qww.Guid = task.UUID; qww.Tasks = new List <Task>(); foreach (var sub in subNotDone) { var item = GetTask(tskInMain); item.UUID = sub.Guid; item.NameOf = sub.Tittle; item.Reccurrense = "NONE"; item.Wave = task.Wave; item.isSuper = task.isSuper; item.Index = Int32.MaxValue; item.LinksOf = "↑↑↑"; qww.Tasks.Add(item); } foreach (var t in qww.Tasks) { var linkQwest = ro.Qwests.Where(n => n.Tasks.Any(q => q == task)).Select(n => n.Guid).ToList(); t.LinkedQwests = linkQwest; } var subTasks = subNotDone.Select(n => n.Guid); task.SubTasksByQwests.AddRange(subTasks); ro.Qwests.Add(qww); } } }
private void refreshElRevard() { Qwest?.RefreshRev(); Abiliti?.RefreshRev(); Characteristic?.RefreshRev(); }
public static RootObject SerializeToAndroidJSON(Pers pers, string path) { StaticMetods.Locator.MainVM.RefreshTasksPriority(false); // Задаем индекс для задач int i = 0; var ordered = pers.Tasks.OrderByDescending(n => n).ToList();//pers.Tasks.OrderBy(n => n).ToList(); foreach (var task in ordered) { task.TaskIndex = i; i++; } RootObject ro = new RootObject { PersName = pers.NameOfProperty, PersRang = pers.RangName, PersExp = pers.PersExpProperty, Is10AbLevels = pers.PersSettings.Is10AbLevels, Is5_5_50 = pers.PersSettings.Is5_5_50, IsFUDGE = pers.PersSettings.IsFUDGE, IsParetto = pers.IsParetto, DateOfLastUse = pers.DateOfLastUse.ToString("dd.MM.yyyy"), IsShowTasksByTimeAndroid = pers.PersSettings.IsShowTasksByTimeAndroid, TimeOfLastUse = string.Empty, IsSmartSort = pers.PersSettings.IsSmartTaskSort, IsSortByPrioryty = pers.IsSortByPrioryty, MaxGettedExp = pers.MaxGettedExp, HP = pers.HP, MaxHP = pers.MaxHP, BalanceIs50Levels = pers.BalanceIs50Levels, BalanceForFirstLevel = pers.BalanceForFirstLevel, BalanceForLastLevel = pers.BalanceForLastLevel, BalanceLevels = pers.BalanceLevels }; var tasks = pers.Tasks.Where(n => n.IsEnabled) .Where(n => !n.RelToQwests.Any() && !n.TaskInAbilitis.Any()) .OrderBy(n => n) .ToList(); List <Task> tsks = tasks.Select(GetTask).ToList(); ro.Tasks = new List <Task>(); ro.Qwests = new List <Qwest>(); ro.Abils = new List <AbilityAndroid>(); ro.Characts = new List <CharacteristicAndroid>(); foreach (var cha in pers.Characteristics) { CharacteristicAndroid chaA = new CharacteristicAndroid(cha.NameOfProperty, cha.CellValue, cha.RelayAbilitys.Select(n => new AbilityAndroid(n.AbilProperty.NameOfProperty, n.AbilProperty.CellValue)).ToList()); ro.Characts.Add(chaA); } // скиллы заполняем var ab = pers.Abilitis.Where(n => n.IsEnebledProperty).OrderBy(n => n).ToList(); foreach (var abilitiModel in ab) { ro.Abils.Add(new AbilityAndroid() { Guid = abilitiModel.GUID, Name = abilitiModel.NameOfProperty, Modificator = abilitiModel.Booster, Value = abilitiModel.ValueProperty, LastValue = abilitiModel.LastValue, ExpOneLevel = abilitiModel.getPriorOfAb(abilitiModel) }); Qwest qww = new Qwest(); qww.NotOneByOne = !pers.PersSettings.IsHideTasksOneByOneAndroid; qww.NameOfQwest = abilitiModel.NameOfProperty; qww.Guid = abilitiModel.GUID; var tskss = abilitiModel.NeedTasks .Where(n => n.TaskProperty.IsEnabled) .Where(n => { if (StaticMetods.PersProperty.IsParetto && n.TaskProperty.Recurrense.TypeInterval != TimeIntervals.Нет && n.TaskProperty.isSuper == false) { return(false); } return(true); }) .Select(n => n.TaskProperty) .OrderBy(n => n) .ToList(); var tsk = tskss.Select(GetTask).ToList(); //tsk.ForEach(n => n.LinksOf = abilitiModel.NameOfProperty); foreach (Task task in tsk) { task.SubTasksByQwests = GetSubTasksByQwests(abilitiModel, pers, task); } qww.Tasks = tsk; ro.Qwests.Add(qww); } // А теперь квесты заполняем var qw = pers.Aims.Where(QwestsActiveForAndroid()).OrderBy(n => n).ToList(); foreach (var qwest in qw) { Qwest qww = new Qwest(); qww.NameOfQwest = qwest.NameOfProperty; qww.Guid = qwest.GUID; var tskss = qwest.NeedsTasks.Where(n => !n.TaskProperty.IsDelProperty) .Select(n => n.TaskProperty) .OrderBy(n => n) .ToList(); qww.Tasks = tskss.Select(GetTask).ToList(); foreach (var task in qww.Tasks.Skip(1)) { var fod = qww.Tasks.FirstOrDefault(); if (fod != null) { if (getDateFromTaskAndroDateString(task.Date) < getDateFromTaskAndroDateString(fod.Date)) { task.Date = fod.Date; } } } //List<string> lnkLst = new List<string>(); //lnkLst.AddRange(qwest.AbilitiLinksOf.Select(n=>n.NameOfProperty)); string lnkOf = qwest.NameOfProperty; if (qwest.AbilitiLinksOf.Any()) { lnkOf = " ⇉ "; } // + " ⇉ " + string.Join(", ", lnkLst); qww.Tasks.ForEach(n => n.LinksOf = lnkOf); if (qwest.AbilitiLinksOf.Any()) { foreach (var task in qww.Tasks) { task.LinkedQwests = qwest.AbilitiLinksOf.Select(n => n.GUID).ToList(); } } foreach (var task in qww.Tasks) { task.SubTasksByQwests = GetSubTasksByQwests(null, pers, task); } ro.Qwests.Add(qww); } // Заполняем просто задачи, но запихиваем их в квест Qwest qw1 = new Qwest(); qw1.NameOfQwest = "Прочее"; qw1.Guid = Guid.NewGuid().ToString(); qw1.Tasks = tsks.Distinct().ToList(); qw1.NotOneByOne = true; foreach (var n in qw1.Tasks) { n.LinksOf = qw1.NameOfQwest; } ro.Qwests.Add(qw1); foreach (var task in ro.Tasks.ToList()) { AndroSub(pers, task, ro); AndroSetTask(task, path); } foreach (var qwest in ro.Qwests.ToList()) { foreach (var task in qwest.Tasks) { AndroSub(pers, task, ro); AndroSetTask(task, path); } } return(ro); }