diff --git a/Client/App.xaml.cs b/Client/App.xaml.cs index c4acbb2..cad17d7 100644 --- a/Client/App.xaml.cs +++ b/Client/App.xaml.cs @@ -15,6 +15,8 @@ using System.Reflection; using Client.Application.Views; using Client.Domain.ViewModels; using Client.Application.ViewModels; +using Client.Domain.Helpers; +using Client.Infrastructure.Helpers; namespace Client { @@ -57,7 +59,8 @@ namespace Client private void ConfigureServices(IServiceCollection services) { IConfiguration config = new ConfigurationBuilder() - .AddJsonFile("config.json", optional: true, reloadOnChange: false) + .AddJsonFile("config.json", optional: false, reloadOnChange: true) + .AddJsonFile("experience.json", optional: false, reloadOnChange: true) .Build(); services @@ -80,6 +83,7 @@ namespace Client config.GetValue("ConnectionPipeName") ?? "" ) ) + .AddSingleton(typeof(ExperienceHelperInterface), typeof(ConfigurationExperienceHelper)) .AddTransient(typeof(EntityFactoryInterface), typeof(EntityFactory)) .AddTransient(typeof(EntityFactoryInterface), typeof(EntityFactory)) diff --git a/Client/Application/ViewModels/HeroSummaryInfoViewModel.cs b/Client/Application/ViewModels/HeroSummaryInfoViewModel.cs index fe2dd35..9628a13 100644 --- a/Client/Application/ViewModels/HeroSummaryInfoViewModel.cs +++ b/Client/Application/ViewModels/HeroSummaryInfoViewModel.cs @@ -22,7 +22,7 @@ namespace Client.Application.ViewModels { get { - //toto race string + //todo race string return hero.Phenotype.Race.ToString(); } } @@ -34,13 +34,6 @@ namespace Client.Application.ViewModels return hero.Phenotype.Class.ToString(); } } - public string Level - { - get - { - return hero.ExperienceInfo.Level.ToString(); - } - } public Vector3 Position { get @@ -84,11 +77,7 @@ namespace Client.Application.ViewModels private void ExperienceInfo_PropertyChanged(object? sender, System.ComponentModel.PropertyChangedEventArgs e) { - if (e.PropertyName == "Level") - { - OnPropertyChanged("Level"); - } - if (e.PropertyName == "Exp" || e.PropertyName == "ExpToLevel") + if (e.PropertyName == "Exp" || e.PropertyName == "ExpToLevel" || e.PropertyName == "Level") { OnPropertyChanged("Experience"); } @@ -102,23 +91,6 @@ namespace Client.Application.ViewModels } } - private void Hero_PropertyChanged(object? sender, System.ComponentModel.PropertyChangedEventArgs e) - { - if (e.PropertyName == "Fullname") - { - OnPropertyChanged("Fullname"); - } - if (e.PropertyName == "Phenotype") - { - OnPropertyChanged("Class"); - OnPropertyChanged("Race"); - } - if (e.PropertyName == "ExperienceInfo") - { - OnPropertyChanged("Level"); - } - } - private readonly Hero hero; } } diff --git a/Client/Application/Views/MainWindow.xaml b/Client/Application/Views/MainWindow.xaml index 025530b..e7573ff 100644 --- a/Client/Application/Views/MainWindow.xaml +++ b/Client/Application/Views/MainWindow.xaml @@ -31,7 +31,7 @@ - + @@ -97,26 +97,26 @@ - + - + - Position: - Exp: - Weight: - Adena: - Inv. slots: + Position: + Exp: + Weight: + Adena: + Inv. slots: - + @@ -125,7 +125,7 @@ - + @@ -133,7 +133,7 @@ - + @@ -141,8 +141,8 @@ - - + + diff --git a/Client/Client.csproj b/Client/Client.csproj index c53f51d..f4a6362 100644 --- a/Client/Client.csproj +++ b/Client/Client.csproj @@ -12,6 +12,9 @@ Always + + Always + diff --git a/Client/Domain/Helpers/ExperienceHelperInterface.cs b/Client/Domain/Helpers/ExperienceHelperInterface.cs new file mode 100644 index 0000000..f61abed --- /dev/null +++ b/Client/Domain/Helpers/ExperienceHelperInterface.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Client.Domain.Helpers +{ + public interface ExperienceHelperInterface + { + ulong GetExperienceToLevel(uint level); + } +} diff --git a/Client/Domain/Service/EntityHandler.cs b/Client/Domain/Service/EntityHandler.cs index d6bf64e..a9c9a04 100644 --- a/Client/Domain/Service/EntityHandler.cs +++ b/Client/Domain/Service/EntityHandler.cs @@ -30,7 +30,7 @@ namespace Client.Domain.Service if (entity != null && entities.ContainsKey(entity.Id)) { factory.Update(entities[entity.Id], content); - OnUpdate(entity); + OnUpdate(entities[entity.Id]); } } else if (operation == MessageOperationEnum.Delete) diff --git a/Client/Domain/Service/HeroHandler.cs b/Client/Domain/Service/HeroHandler.cs index 2bf2cd4..97e5154 100644 --- a/Client/Domain/Service/HeroHandler.cs +++ b/Client/Domain/Service/HeroHandler.cs @@ -1,5 +1,6 @@ using Client.Domain.Entities; using Client.Domain.Factories; +using Client.Domain.Helpers; using Client.Domain.ViewModels; using System; using System.Collections.Generic; @@ -14,17 +15,29 @@ namespace Client.Domain.Service public override void OnCreate(Hero entity) { mainViewModel.CreateHero(entity); + entity.ExperienceInfo.ExpToLevel = experienceHelper.GetExperienceToLevel(entity.ExperienceInfo.Level + 1); } + + public override void OnUpdate(Hero entity) + { + if (entity.ExperienceInfo != null) + { + entity.ExperienceInfo.ExpToLevel = experienceHelper.GetExperienceToLevel(entity.ExperienceInfo.Level + 1); + } + } + public override void OnDelete(Hero entity) { mainViewModel.DeleteHero(); } - public HeroHandler(EntityFactoryInterface factory, MainViewModelInterface mainViewModel) : base(factory) + public HeroHandler(EntityFactoryInterface factory, MainViewModelInterface mainViewModel, ExperienceHelperInterface experienceHelper) : base(factory) { this.mainViewModel = mainViewModel; + this.experienceHelper = experienceHelper; } private readonly MainViewModelInterface mainViewModel; + private readonly ExperienceHelperInterface experienceHelper; } } diff --git a/Client/Domain/ValueObjects/ExperienceInfo.cs b/Client/Domain/ValueObjects/ExperienceInfo.cs index b41d250..11b88f1 100644 --- a/Client/Domain/ValueObjects/ExperienceInfo.cs +++ b/Client/Domain/ValueObjects/ExperienceInfo.cs @@ -7,16 +7,12 @@ namespace Client.Domain.ValueObjects private uint level; private uint exp; private uint sp; + private ulong expToLevel; - public uint Level { get => level; set { if (value != level) { level = value; OnPropertyChanged("Level"); OnPropertyChanged("ExpToLevel"); } } } + public uint Level { get => level; set { if (value != level) { level = value; OnPropertyChanged("Level"); } } } public uint Exp { get => exp; set { if (value != exp) { exp = value; OnPropertyChanged("Exp"); } } } public uint Sp { get => sp; set { if (value != sp) { sp = value; OnPropertyChanged("Sp"); } } } - public uint ExpToLevel { - get - { - return level * 200; - } - } + public ulong ExpToLevel { get => expToLevel; set { if (value != expToLevel) { expToLevel = value; OnPropertyChanged("ExpToLevel"); } } } public ExperienceInfo(uint level, uint exp, uint sp) { diff --git a/Client/Infrastructure/Helpers/ConfigurationExperienceHelper.cs b/Client/Infrastructure/Helpers/ConfigurationExperienceHelper.cs new file mode 100644 index 0000000..12ee47f --- /dev/null +++ b/Client/Infrastructure/Helpers/ConfigurationExperienceHelper.cs @@ -0,0 +1,54 @@ +using Client.Domain.Helpers; +using Microsoft.Extensions.Configuration; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Web; + +namespace Client.Infrastructure.Helpers +{ + public class ConfigurationExperienceHelper : ExperienceHelperInterface + { + public ulong GetExperienceToLevel(uint level) + { + if (experienceToLevel.Count == 0) + { + var items = configuration.GetSection("experience").Get>(); + if (items != null) + { + foreach (var item in items) + { + experienceToLevel[item.level] = item.toLevel; + } + } + } + if (experienceToLevel.TryGetValue(level, out ulong result)) + { + return result; + } + return 0; + } + + public ConfigurationExperienceHelper(IConfiguration configuration) + { + this.configuration = configuration; + } + + private readonly IConfiguration configuration; + private Dictionary experienceToLevel = new Dictionary(); + + public class ExpInfo + { + public uint level { get; set; } + public ulong toLevel { get; set; } + + /* public ExpInfo(uint level, ulong toLevel) + { + this.level = level; + this.toLevel = toLevel; + }*/ + } + } +} diff --git a/Client/experience.json b/Client/experience.json new file mode 100644 index 0000000..0b4f3da --- /dev/null +++ b/Client/experience.json @@ -0,0 +1,352 @@ +{ + "experience": [ + { + "level": "1", + "tolevel": "0" + }, + { + "level": "2", + "tolevel": "68" + }, + { + "level": "3", + "tolevel": "363" + }, + { + "level": "4", + "tolevel": "1168" + }, + { + "level": "5", + "tolevel": "2884" + }, + { + "level": "6", + "tolevel": "6038" + }, + { + "level": "7", + "tolevel": "11287" + }, + { + "level": "8", + "tolevel": "19423" + }, + { + "level": "9", + "tolevel": "31378" + }, + { + "level": "10", + "tolevel": "48229" + }, + { + "level": "11", + "tolevel": "71201" + }, + { + "level": "12", + "tolevel": "101676" + }, + { + "level": "13", + "tolevel": "141192" + }, + { + "level": "14", + "tolevel": "191452" + }, + { + "level": "15", + "tolevel": "254327" + }, + { + "level": "16", + "tolevel": "331864" + }, + { + "level": "17", + "tolevel": "426284" + }, + { + "level": "18", + "tolevel": "539995" + }, + { + "level": "19", + "tolevel": "675590" + }, + { + "level": "20", + "tolevel": "835854" + }, + { + "level": "21", + "tolevel": "1023775" + }, + { + "level": "22", + "tolevel": "1242536" + }, + { + "level": "23", + "tolevel": "1495531" + }, + { + "level": "24", + "tolevel": "1786365" + }, + { + "level": "25", + "tolevel": "2118860" + }, + { + "level": "26", + "tolevel": "2497059" + }, + { + "level": "27", + "tolevel": "2925229" + }, + { + "level": "28", + "tolevel": "3407873" + }, + { + "level": "29", + "tolevel": "3949727" + }, + { + "level": "30", + "tolevel": "4555766" + }, + { + "level": "31", + "tolevel": "5231213" + }, + { + "level": "32", + "tolevel": "5981539" + }, + { + "level": "33", + "tolevel": "6812472" + }, + { + "level": "34", + "tolevel": "7729999" + }, + { + "level": "35", + "tolevel": "8740372" + }, + { + "level": "36", + "tolevel": "9850111" + }, + { + "level": "37", + "tolevel": "11066012" + }, + { + "level": "38", + "tolevel": "12395149" + }, + { + "level": "39", + "tolevel": "13844879" + }, + { + "level": "40", + "tolevel": "15422851" + }, + { + "level": "41", + "tolevel": "17137002" + }, + { + "level": "42", + "tolevel": "18995573" + }, + { + "level": "43", + "tolevel": "21007103" + }, + { + "level": "44", + "tolevel": "23180442" + }, + { + "level": "45", + "tolevel": "25524751" + }, + { + "level": "46", + "tolevel": "28049509" + }, + { + "level": "47", + "tolevel": "30764519" + }, + { + "level": "48", + "tolevel": "33679907" + }, + { + "level": "49", + "tolevel": "36806133" + }, + { + "level": "50", + "tolevel": "40153995" + }, + { + "level": "51", + "tolevel": "45524865" + }, + { + "level": "52", + "tolevel": "51262204" + }, + { + "level": "53", + "tolevel": "57383682" + }, + { + "level": "54", + "tolevel": "63907585" + }, + { + "level": "55", + "tolevel": "70852742" + }, + { + "level": "56", + "tolevel": "80700339" + }, + { + "level": "57", + "tolevel": "91162131" + }, + { + "level": "58", + "tolevel": "102265326" + }, + { + "level": "59", + "tolevel": "114038008" + }, + { + "level": "60", + "tolevel": "126509030" + }, + { + "level": "61", + "tolevel": "146307211" + }, + { + "level": "62", + "tolevel": "167243291" + }, + { + "level": "63", + "tolevel": "189363788" + }, + { + "level": "64", + "tolevel": "212716741" + }, + { + "level": "65", + "tolevel": "237351413" + }, + { + "level": "66", + "tolevel": "271973532" + }, + { + "level": "67", + "tolevel": "308441375" + }, + { + "level": "68", + "tolevel": "346825235" + }, + { + "level": "69", + "tolevel": "387197529" + }, + { + "level": "70", + "tolevel": "429632402" + }, + { + "level": "71", + "tolevel": "474205751" + }, + { + "level": "72", + "tolevel": "532692055" + }, + { + "level": "73", + "tolevel": "606319094" + }, + { + "level": "74", + "tolevel": "696376867" + }, + { + "level": "75", + "tolevel": "804219972" + }, + { + "level": "76", + "tolevel": "931275828" + }, + { + "level": "77", + "tolevel": "1151275834" + }, + { + "level": "78", + "tolevel": "1511275834" + }, + { + "level": "79", + "tolevel": "2099275834" + }, + { + "level": "80", + "tolevel": "4200000000" + }, + { + "level": "81", + "tolevel": "6300000000" + }, + { + "level": "82", + "tolevel": "8820000000" + }, + { + "level": "83", + "tolevel": "11844000000" + }, + { + "level": "84", + "tolevel": "15472800000" + }, + { + "level": "85", + "tolevel": "19827360000" + }, + { + "level": "86", + "tolevel": "25314105600" + }, + { + "level": "87", + "tolevel": "32211728640" + } + ] +} \ No newline at end of file