feat: add experience info helper

This commit is contained in:
k0t9i 2023-01-29 21:46:46 +04:00
parent 8b27c84a9e
commit f8b0b4b894
10 changed files with 460 additions and 53 deletions

View File

@ -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<string>("ConnectionPipeName") ?? ""
)
)
.AddSingleton(typeof(ExperienceHelperInterface), typeof(ConfigurationExperienceHelper))
.AddTransient(typeof(EntityFactoryInterface<Hero>), typeof(EntityFactory<Hero>))
.AddTransient(typeof(EntityFactoryInterface<Drop>), typeof(EntityFactory<Drop>))

View File

@ -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;
}
}

View File

@ -31,7 +31,7 @@
<ListBox Grid.Row="1" Grid.Column="0" ItemsSource="{Binding ChatMessages, Mode=OneWay}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock FontSize="12" Text="{Binding Path=Text, Mode=OneWay}" Foreground="{Binding Path=Color, Mode=OneWay}" />
<TextBlock Text="{Binding Path=Text, Mode=OneWay}" Foreground="{Binding Path=Color, Mode=OneWay}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
@ -97,26 +97,26 @@
<StackPanel Grid.Row="1" Grid.Column="1" DataContext="{Binding Hero, Mode=OneWay}" Margin="4">
<TextBlock FontSize="16" Text="{Binding Path=Fullname, Mode=OneWay}"></TextBlock>
<StackPanel Orientation="Horizontal">
<TextBlock FontSize="12">
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0}, {1} {2}lvl">
<Binding Path="Race"/>
<Binding Path="Class"/>
<Binding Path="Level"/>
<Binding Path="Experience.Level"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</StackPanel>
<DockPanel>
<StackPanel DockPanel.Dock="Left" Margin="0 0 5 0">
<TextBlock FontSize="12" Padding="0 0 0 3">Position:</TextBlock>
<TextBlock FontSize="12" Padding="0 0 0 3">Exp:</TextBlock>
<TextBlock FontSize="12" Padding="0 0 0 3">Weight:</TextBlock>
<TextBlock FontSize="12" Padding="0 0 0 3">Adena:</TextBlock>
<TextBlock FontSize="12" Padding="0 0 0 3">Inv. slots:</TextBlock>
<TextBlock Padding="0 0 0 3">Position:</TextBlock>
<TextBlock Padding="0 0 0 3">Exp:</TextBlock>
<TextBlock Padding="0 0 0 3">Weight:</TextBlock>
<TextBlock Padding="0 0 0 3">Adena:</TextBlock>
<TextBlock Padding="0 0 0 3">Inv. slots:</TextBlock>
</StackPanel>
<StackPanel>
<TextBlock FontSize="12" Padding="0 0 0 3">
<TextBlock Padding="0 0 0 3">
<TextBlock.Text>
<MultiBinding StringFormat="{}{0:F0}, {1:F0}, {2:F0}">
<Binding Path="Position.X"/>
@ -125,7 +125,7 @@
</MultiBinding>
</TextBlock.Text>
</TextBlock>
<TextBlock FontSize="12" Padding="0 0 0 3">
<TextBlock Padding="0 0 0 3">
<TextBlock.Text>
<MultiBinding StringFormat="{}{0}/{1}">
<Binding Path="Experience.Exp"/>
@ -133,7 +133,7 @@
</MultiBinding>
</TextBlock.Text>
</TextBlock>
<TextBlock FontSize="12" Padding="0 0 0 3">
<TextBlock Padding="0 0 0 3">
<TextBlock.Text>
<MultiBinding StringFormat="{}{0}/{1}">
<Binding Path="Weight.Current"/>
@ -141,8 +141,8 @@
</MultiBinding>
</TextBlock.Text>
</TextBlock>
<TextBlock FontSize="12" Text="{Binding Path=Money}" Padding="0 0 0 3"></TextBlock>
<TextBlock FontSize="12" Padding="0 0 0 3">
<TextBlock Text="{Binding Path=Money}" Padding="0 0 0 3"></TextBlock>
<TextBlock Padding="0 0 0 3">
<TextBlock.Text>
<MultiBinding StringFormat="{}{0}/{1}">
<Binding Path="Slots.Current"/>

View File

@ -12,6 +12,9 @@
<Content Include="config.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="experience.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup>

View File

@ -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);
}
}

View File

@ -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)

View File

@ -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<Hero> factory, MainViewModelInterface mainViewModel) : base(factory)
public HeroHandler(EntityFactoryInterface<Hero> factory, MainViewModelInterface mainViewModel, ExperienceHelperInterface experienceHelper) : base(factory)
{
this.mainViewModel = mainViewModel;
this.experienceHelper = experienceHelper;
}
private readonly MainViewModelInterface mainViewModel;
private readonly ExperienceHelperInterface experienceHelper;
}
}

View File

@ -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)
{

View File

@ -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<List<ExpInfo>>();
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<uint, ulong> experienceToLevel = new Dictionary<uint, ulong>();
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;
}*/
}
}
}

352
Client/experience.json Normal file
View File

@ -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"
}
]
}