From f9bd286b232bf0451ddcbdc821f38778e3e5cae1 Mon Sep 17 00:00:00 2001 From: "arthur.valin" Date: Fri, 30 Dec 2022 22:44:51 +0100 Subject: [PATCH 1/3] Adding working shop page --- src/CraftSharp/Components/ShopOffer.razor | 9 ++ src/CraftSharp/Components/ShopOffer.razor.cs | 22 ++++ src/CraftSharp/Components/ShopOffer.razor.css | 35 +++++ src/CraftSharp/Models/AppUser.cs | 1 + src/CraftSharp/Models/CurrentUser.cs | 1 + src/CraftSharp/Models/ShopOfferModel.cs | 10 ++ src/CraftSharp/Pages/Opening.razor.cs | 4 - src/CraftSharp/Pages/Shop.razor | 32 +++++ src/CraftSharp/Pages/Shop.razor.cs | 76 +++++++++++ src/CraftSharp/Pages/Shop.razor.css | 46 +++++++ .../Resources/Pages.Shop.fr-FR.resx | 123 ++++++++++++++++++ src/CraftSharp/Resources/Pages.Shop.resx | 123 ++++++++++++++++++ .../Resources/Pages.Shop.tr-TR.resx | 123 ++++++++++++++++++ src/CraftSharp/Services/AuthService.cs | 20 +-- src/CraftSharp/Services/IAuthService.cs | 2 - src/CraftSharp/wwwroot/Images/villager.png | Bin 0 -> 53081 bytes 16 files changed, 605 insertions(+), 22 deletions(-) create mode 100644 src/CraftSharp/Components/ShopOffer.razor create mode 100644 src/CraftSharp/Components/ShopOffer.razor.cs create mode 100644 src/CraftSharp/Components/ShopOffer.razor.css create mode 100644 src/CraftSharp/Models/ShopOfferModel.cs create mode 100644 src/CraftSharp/Pages/Shop.razor create mode 100644 src/CraftSharp/Pages/Shop.razor.cs create mode 100644 src/CraftSharp/Pages/Shop.razor.css create mode 100644 src/CraftSharp/Resources/Pages.Shop.fr-FR.resx create mode 100644 src/CraftSharp/Resources/Pages.Shop.resx create mode 100644 src/CraftSharp/Resources/Pages.Shop.tr-TR.resx create mode 100644 src/CraftSharp/wwwroot/Images/villager.png diff --git a/src/CraftSharp/Components/ShopOffer.razor b/src/CraftSharp/Components/ShopOffer.razor new file mode 100644 index 0000000..9c927e5 --- /dev/null +++ b/src/CraftSharp/Components/ShopOffer.razor @@ -0,0 +1,9 @@ +
+
+ @inputAmount +
+ @centerText +
+ @outputAmount +
+
\ No newline at end of file diff --git a/src/CraftSharp/Components/ShopOffer.razor.cs b/src/CraftSharp/Components/ShopOffer.razor.cs new file mode 100644 index 0000000..60473b1 --- /dev/null +++ b/src/CraftSharp/Components/ShopOffer.razor.cs @@ -0,0 +1,22 @@ +using Microsoft.AspNetCore.Components; + +namespace CraftSharp.Components +{ + public partial class ShopOffer + { + [Parameter] + public int inputAmount { get; set; } + + [Parameter] + public int outputAmount{ get; set; } + + [Parameter] + public string centerText { get; set; } + + [Parameter] + public string inputIcon { get; set; } + + [Parameter] + public string outputIcon { get; set; } + } +} diff --git a/src/CraftSharp/Components/ShopOffer.razor.css b/src/CraftSharp/Components/ShopOffer.razor.css new file mode 100644 index 0000000..5546eaa --- /dev/null +++ b/src/CraftSharp/Components/ShopOffer.razor.css @@ -0,0 +1,35 @@ +.offer { + width: 100%; + text-decoration: none; + text-align: center; + color: white; + cursor: pointer; + background: url('Images/btn1.png') center center/contain no-repeat; + background-size: 100% 100%; + font-family: SilkscreenNormal; + line-height: 26px; + padding-top: 6px; + font-family: Minecraft; + position: relative; + padding-bottom: 17px; +} + +.offer:hover { + background: url('Images/btn2.png')center center/contain no-repeat; + background-size: 100% 100%; +} + + +.input { + position: absolute; + left: 5px; + top: 5px; +} + +.output { + position: absolute; + right: 5px; + top: 9px; + +} + diff --git a/src/CraftSharp/Models/AppUser.cs b/src/CraftSharp/Models/AppUser.cs index c73e3e3..b125722 100644 --- a/src/CraftSharp/Models/AppUser.cs +++ b/src/CraftSharp/Models/AppUser.cs @@ -4,6 +4,7 @@ { public int Id { get; set; } public int numberOfKeys { get; set; } = 10; + public int numberOfEmeralds { get; set; } = 250; public string Password { get; set; } public List Roles { get; set; } = new List() { UserRoles.User }; diff --git a/src/CraftSharp/Models/CurrentUser.cs b/src/CraftSharp/Models/CurrentUser.cs index 94c2718..73ecd03 100644 --- a/src/CraftSharp/Models/CurrentUser.cs +++ b/src/CraftSharp/Models/CurrentUser.cs @@ -6,6 +6,7 @@ public bool IsAuthenticated { get; set; } public string UserName { get; set; } public int NumberOfKeys { get; set; } = 0; + public int numberOfEmeralds { get; set; } = 250; public List Inventory { get; set; } = new List(); public List Roles { get; set; } = new List() { UserRoles.User }; diff --git a/src/CraftSharp/Models/ShopOfferModel.cs b/src/CraftSharp/Models/ShopOfferModel.cs new file mode 100644 index 0000000..e5b81bc --- /dev/null +++ b/src/CraftSharp/Models/ShopOfferModel.cs @@ -0,0 +1,10 @@ +namespace CraftSharp.Models +{ + public class ShopOfferModel + { + public string InputIconPath { get; set; } + public string OutputIconPath { get; set; } + public int InputAmount { get; set; } + public int OutputAmount { get; set; } + } +} diff --git a/src/CraftSharp/Pages/Opening.razor.cs b/src/CraftSharp/Pages/Opening.razor.cs index a9c132b..5df8f28 100644 --- a/src/CraftSharp/Pages/Opening.razor.cs +++ b/src/CraftSharp/Pages/Opening.razor.cs @@ -27,9 +27,6 @@ namespace CraftSharp.Pages [Inject] public CustomStateProvider AuthService { get; set; } - [CascadingParameter] - public Task Context { get; set; } - int NumberOfKeys { get; set; } = 0; int CostInKeys { get; set; } = 1; @@ -45,7 +42,6 @@ namespace CraftSharp.Pages items = await DataService.List(0, totalItem); - var authState = await Context; NumberOfKeys = AuthService.GetCurrentUser().NumberOfKeys; } diff --git a/src/CraftSharp/Pages/Shop.razor b/src/CraftSharp/Pages/Shop.razor new file mode 100644 index 0000000..d8cd0f7 --- /dev/null +++ b/src/CraftSharp/Pages/Shop.razor @@ -0,0 +1,32 @@ +@using CraftSharp.Components + +@page "/shop" + + + +
+ + +
+
+
+ +
+ + + +
+ @foreach(var offer in offers){ +
+ + +
+ } +
+
\ No newline at end of file diff --git a/src/CraftSharp/Pages/Shop.razor.cs b/src/CraftSharp/Pages/Shop.razor.cs new file mode 100644 index 0000000..0986aa6 --- /dev/null +++ b/src/CraftSharp/Pages/Shop.razor.cs @@ -0,0 +1,76 @@ +using CraftSharp.Models; +using CraftSharp.Services; +using Microsoft.AspNetCore.Components; +using Microsoft.Extensions.Localization; +using Microsoft.JSInterop; +using System.Reflection.Metadata; + +namespace CraftSharp.Pages +{ + public partial class Shop + { + [Inject] + public CustomStateProvider AuthService { get; set; } + + [Inject] + public IStringLocalizer Localizer { get; set; } + + [Inject] + public IJSRuntime JsRuntime { get; set; } + int NumberOfEmeralds { get; set; } = 0; + + List offers = new List() + { + new ShopOfferModel() + { + InputAmount=5, + InputIconPath="/Images/shop_icon.png", + OutputAmount=1, + OutputIconPath="/Images/opening_icon.png", + }, + new ShopOfferModel() + { + InputAmount=20, + InputIconPath="/Images/shop_icon.png", + OutputAmount=5, + OutputIconPath="/Images/opening_icon.png", + }, + new ShopOfferModel() + { + InputAmount=50, + InputIconPath="/Images/shop_icon.png", + OutputAmount=15, + OutputIconPath="/Images/opening_icon.png", + }, + }; + + Dictionary animation = new Dictionary(); + + protected override async Task OnInitializedAsync() + { + NumberOfEmeralds = AuthService.GetCurrentUser().numberOfEmeralds; + foreach(ShopOfferModel offer in offers) + { + animation[offer] = ""; + } + } + + private async void buyKeys(ShopOfferModel offer) + { + if (offer.InputAmount <= NumberOfEmeralds) + { + NumberOfEmeralds -= offer.InputAmount; + AuthService.GetCurrentUser().NumberOfKeys += offer.OutputAmount; + } + else + { + animation[offer] = "buttonShake"; + StateHasChanged(); + + await Task.Delay(500); + animation[offer] = ""; + StateHasChanged(); + } + } + } +} diff --git a/src/CraftSharp/Pages/Shop.razor.css b/src/CraftSharp/Pages/Shop.razor.css new file mode 100644 index 0000000..25988d6 --- /dev/null +++ b/src/CraftSharp/Pages/Shop.razor.css @@ -0,0 +1,46 @@ +@keyframes buttonShake { + 0%, 100% { + transform: translateX(0); + } + + 10%, 30%, 50%, 70% { + transform: translateX(-5px); + } + + 20%, 40%, 60% { + transform: translateX(5px); + } + + 80% { + transform: translateX(3px); + } + + 90% { + transform: translateX(-3px); + } +} + +.buttonShake { + animation: buttonShake 0.5s cubic-bezier(0.455, 0.030, 0.515, 0.955) both; +} + +.NumberOfEmeralds { + float: right; + margin: 5px; +} + + +.shopPanel{ + display:flex; +} + +.offers { + width: 100%; + display: flex; + flex-direction: column; + justify-content: space-evenly; +} + +.villager{ + width: 66% +} diff --git a/src/CraftSharp/Resources/Pages.Shop.fr-FR.resx b/src/CraftSharp/Resources/Pages.Shop.fr-FR.resx new file mode 100644 index 0000000..e539808 --- /dev/null +++ b/src/CraftSharp/Resources/Pages.Shop.fr-FR.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Acheter + + \ No newline at end of file diff --git a/src/CraftSharp/Resources/Pages.Shop.resx b/src/CraftSharp/Resources/Pages.Shop.resx new file mode 100644 index 0000000..dde836a --- /dev/null +++ b/src/CraftSharp/Resources/Pages.Shop.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Buy + + \ No newline at end of file diff --git a/src/CraftSharp/Resources/Pages.Shop.tr-TR.resx b/src/CraftSharp/Resources/Pages.Shop.tr-TR.resx new file mode 100644 index 0000000..a8a58fe --- /dev/null +++ b/src/CraftSharp/Resources/Pages.Shop.tr-TR.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Satın almak + + \ No newline at end of file diff --git a/src/CraftSharp/Services/AuthService.cs b/src/CraftSharp/Services/AuthService.cs index 50c2c55..5652c56 100644 --- a/src/CraftSharp/Services/AuthService.cs +++ b/src/CraftSharp/Services/AuthService.cs @@ -11,23 +11,10 @@ namespace CraftSharp.Services static AuthService() { CurrentUser = new List - { - new AppUser { UserName = "Admin", Password = "123456", Roles = new List { UserRoles.Admin }, numberOfKeys=999 } - }; - } -/* public AppUser GetCurrentUser(string userName) - { - var user = CurrentUser.FirstOrDefault(w => w.UserName == userName); - - if (user == null) { - throw new Exception("User name or password invalid !"); - } - - return user; - }*/ - - + new AppUser { UserName = "Admin", Password = "123456", Roles = new List { UserRoles.Admin }, numberOfKeys=999 } + }; + } public CurrentUser GetUser(string userName) { var user = CurrentUser.FirstOrDefault(w => w.UserName == userName); @@ -45,6 +32,7 @@ namespace CraftSharp.Services IsAuthenticated = true, UserName = user.UserName, NumberOfKeys = user.numberOfKeys, + numberOfEmeralds = user.numberOfEmeralds, Inventory = user.inventory, Roles = user.Roles, Claims = claims.ToDictionary(c => c.Type, c => c.Value) diff --git a/src/CraftSharp/Services/IAuthService.cs b/src/CraftSharp/Services/IAuthService.cs index 255eb81..605a089 100644 --- a/src/CraftSharp/Services/IAuthService.cs +++ b/src/CraftSharp/Services/IAuthService.cs @@ -5,9 +5,7 @@ namespace CraftSharp.Services public interface IAuthService { CurrentUser GetUser(string userName); - void Login(ConnexionModel loginRequest); - void Register(InscriptionModel registerRequest); } } diff --git a/src/CraftSharp/wwwroot/Images/villager.png b/src/CraftSharp/wwwroot/Images/villager.png new file mode 100644 index 0000000000000000000000000000000000000000..238a501f8ae90c5b8487ed5c6064f815a8b3e2f0 GIT binary patch literal 53081 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 Date: Fri, 30 Dec 2022 23:03:25 +0100 Subject: [PATCH 2/3] Edit visuals for shop --- src/CraftSharp/Pages/Shop.razor.css | 3 ++- src/CraftSharp/Services/CustomStateProvider.cs | 17 +++++++---------- src/CraftSharp/Shared/CultureSelector.razor.cs | 1 + src/CraftSharp/Shared/HeaderLayout.razor.css | 2 +- 4 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/CraftSharp/Pages/Shop.razor.css b/src/CraftSharp/Pages/Shop.razor.css index 25988d6..902378d 100644 --- a/src/CraftSharp/Pages/Shop.razor.css +++ b/src/CraftSharp/Pages/Shop.razor.css @@ -32,10 +32,11 @@ .shopPanel{ display:flex; + justify-content: center; } .offers { - width: 100%; + width: 50%; display: flex; flex-direction: column; justify-content: space-evenly; diff --git a/src/CraftSharp/Services/CustomStateProvider.cs b/src/CraftSharp/Services/CustomStateProvider.cs index bedf535..059cab0 100644 --- a/src/CraftSharp/Services/CustomStateProvider.cs +++ b/src/CraftSharp/Services/CustomStateProvider.cs @@ -14,8 +14,7 @@ namespace CraftSharp.Services { private readonly IAuthService _authService; - [CascadingParameter] - public CurrentUser UserObject { get; set; } + private CurrentUser _currentUser { get; set; } public CustomStateProvider(IAuthService authService) { @@ -30,7 +29,7 @@ namespace CraftSharp.Services var userInfo = GetCurrentUser(); if (userInfo.IsAuthenticated) { - var claims = new[] { new Claim(ClaimTypes.Name, UserObject.UserName) }.Concat(UserObject.Claims.Select(c => new Claim(c.Key, c.Value))); + var claims = new[] { new Claim(ClaimTypes.Name, _currentUser.UserName) }.Concat(_currentUser.Claims.Select(c => new Claim(c.Key, c.Value))); identity = new ClaimsIdentity(claims, "Server authentication"); } } @@ -48,15 +47,14 @@ namespace CraftSharp.Services // No error - Login the user CurrentUser user; user = _authService.GetUser(loginParameters.UserName); - UserObject = user; - Console.WriteLine("\t\tLOGIN: " + UserObject.UserName); + _currentUser = user; NotifyAuthenticationStateChanged(GetAuthenticationStateAsync()); } public async Task Logout() { - UserObject = new CurrentUser(); + _currentUser = new CurrentUser(); NotifyAuthenticationStateChanged(GetAuthenticationStateAsync()); } @@ -66,7 +64,7 @@ namespace CraftSharp.Services // No error - Login the user var user = _authService.GetUser(registerParameters.UserName); - UserObject = user; + _currentUser = user; NotifyAuthenticationStateChanged(GetAuthenticationStateAsync()); } @@ -74,10 +72,9 @@ namespace CraftSharp.Services { CurrentUser cacheUser; - if (UserObject != null && UserObject.IsAuthenticated) + if (_currentUser != null && _currentUser.IsAuthenticated) { - Console.WriteLine("Return user"); - return UserObject; + return _currentUser; } return new CurrentUser(); } diff --git a/src/CraftSharp/Shared/CultureSelector.razor.cs b/src/CraftSharp/Shared/CultureSelector.razor.cs index b343a6c..3437287 100644 --- a/src/CraftSharp/Shared/CultureSelector.razor.cs +++ b/src/CraftSharp/Shared/CultureSelector.razor.cs @@ -30,6 +30,7 @@ namespace CraftSharp.Shared // Redirect the user to the culture controller to set the cookie this.NavigationManager.NavigateTo("/Culture/SetCulture" + query, forceLoad: true); + } } } diff --git a/src/CraftSharp/Shared/HeaderLayout.razor.css b/src/CraftSharp/Shared/HeaderLayout.razor.css index 8b8413b..606c267 100644 --- a/src/CraftSharp/Shared/HeaderLayout.razor.css +++ b/src/CraftSharp/Shared/HeaderLayout.razor.css @@ -98,7 +98,7 @@ button:hover { .nav-item { font-size: 1.1rem; padding-bottom: 0.5rem; - font-family: SuperDario; + font-family: Minecraft; } .nav-item:first-of-type { From 11b4bb7d45a118ce35da1b4eeb27abcf0981f145 Mon Sep 17 00:00:00 2001 From: "arthur.valin" Date: Fri, 30 Dec 2022 23:11:05 +0100 Subject: [PATCH 3/3] Edit visuals --- src/CraftSharp/Components/ShopOffer.razor.css | 1 + src/CraftSharp/Pages/Opening.razor.css | 1 + src/CraftSharp/Resources/Shared.HeaderLayout.fr-FR.resx | 6 ++++++ src/CraftSharp/Resources/Shared.HeaderLayout.resx | 3 +++ src/CraftSharp/Resources/Shared.HeaderLayout.tr-TR.resx | 3 +++ src/CraftSharp/Shared/HeaderLayout.razor | 2 +- 6 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/CraftSharp/Components/ShopOffer.razor.css b/src/CraftSharp/Components/ShopOffer.razor.css index 5546eaa..8e521dc 100644 --- a/src/CraftSharp/Components/ShopOffer.razor.css +++ b/src/CraftSharp/Components/ShopOffer.razor.css @@ -12,6 +12,7 @@ font-family: Minecraft; position: relative; padding-bottom: 17px; + user-select:none; } .offer:hover { diff --git a/src/CraftSharp/Pages/Opening.razor.css b/src/CraftSharp/Pages/Opening.razor.css index 9dd2a89..dad262b 100644 --- a/src/CraftSharp/Pages/Opening.razor.css +++ b/src/CraftSharp/Pages/Opening.razor.css @@ -137,6 +137,7 @@ z-index: 10; width: 400px; padding-bottom: 7px; + user-select: none; } .item { diff --git a/src/CraftSharp/Resources/Shared.HeaderLayout.fr-FR.resx b/src/CraftSharp/Resources/Shared.HeaderLayout.fr-FR.resx index 238a0f5..18b1403 100644 --- a/src/CraftSharp/Resources/Shared.HeaderLayout.fr-FR.resx +++ b/src/CraftSharp/Resources/Shared.HeaderLayout.fr-FR.resx @@ -123,6 +123,9 @@ Se connecter + + Déconnexion + Ouverture @@ -132,6 +135,9 @@ Magasin + + + subtext_fr-FR diff --git a/src/CraftSharp/Resources/Shared.HeaderLayout.resx b/src/CraftSharp/Resources/Shared.HeaderLayout.resx index d975e18..1ed72cb 100644 --- a/src/CraftSharp/Resources/Shared.HeaderLayout.resx +++ b/src/CraftSharp/Resources/Shared.HeaderLayout.resx @@ -123,6 +123,9 @@ Login + + Logout + Opening diff --git a/src/CraftSharp/Resources/Shared.HeaderLayout.tr-TR.resx b/src/CraftSharp/Resources/Shared.HeaderLayout.tr-TR.resx index 9468275..f984165 100644 --- a/src/CraftSharp/Resources/Shared.HeaderLayout.tr-TR.resx +++ b/src/CraftSharp/Resources/Shared.HeaderLayout.tr-TR.resx @@ -123,6 +123,9 @@ Giriş yapmak + + Çıkış Yap + Açılış diff --git a/src/CraftSharp/Shared/HeaderLayout.razor b/src/CraftSharp/Shared/HeaderLayout.razor index b6bd972..478361c 100644 --- a/src/CraftSharp/Shared/HeaderLayout.razor +++ b/src/CraftSharp/Shared/HeaderLayout.razor @@ -53,7 +53,7 @@ } - +