diff --git a/Assets/01_Scenes/MyProject/GameScene.unity b/Assets/01_Scenes/MyProject/GameScene.unity index 804cb171..fcc394ea 100644 --- a/Assets/01_Scenes/MyProject/GameScene.unity +++ b/Assets/01_Scenes/MyProject/GameScene.unity @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f04c70a4eb329fdc016ef5242b222f9c8fa7ef298eb96e0468ff06db579a1c07 -size 13288644 +oid sha256:a6a2e7478871730095bdc0699982727fee651e80c113b5e5cd59b16e0c6e01a3 +size 13289533 diff --git a/Assets/02_Scripts/Shopping/CheckoutMachine.cs b/Assets/02_Scripts/Shopping/CheckoutMachine.cs index 8549799e..1f7eb305 100644 --- a/Assets/02_Scripts/Shopping/CheckoutMachine.cs +++ b/Assets/02_Scripts/Shopping/CheckoutMachine.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using TMPro; using UnityEngine; using VRShopping.Items; using VRShopping.UI; @@ -12,24 +13,51 @@ public class CheckoutMachine : MonoBehaviour [SerializeField] private Transform _rowContainer; [SerializeField] private CheckoutProductionRow _rowPrefab; - private readonly Dictionary _rowByItem = new(); + private readonly Dictionary _rowByItemId = new(); + + [SerializeField] private TMP_Text _checkoutSumField; + + public void UpdateSumUI() + { + _checkoutSumField.text = CheckoutSum.ToString("N0"); + } public void AddCheckoutProduction(ItemData itemData) { if (itemData == null) return; - if (_rowByItem.TryGetValue(itemData, out CheckoutProductionRow row)) + if (_rowByItemId.TryGetValue(itemData.ItemId, out CheckoutProductionRow row)) { row.Bind(itemData, row.Quantity + 1); } else { row = Instantiate(_rowPrefab, _rowContainer); + row.OnAddClicked += AddCheckoutProduction; + row.OnRemoveClicked += RemoveCheckoutProduction; row.Bind(itemData, 1); - _rowByItem[itemData] = row; + _rowByItemId[itemData.ItemId] = row; } CheckoutSum += itemData.FinalPrice; } + + public void RemoveCheckoutProduction(ItemData itemData) + { + if (itemData == null) return; + if (!_rowByItemId.TryGetValue(itemData.ItemId, out CheckoutProductionRow row)) return; + + CheckoutSum -= itemData.FinalPrice; + + if (row.Quantity <= 1) + { + _rowByItemId.Remove(itemData.ItemId); + Destroy(row.gameObject); + } + else + { + row.Bind(itemData, row.Quantity - 1); + } + } } } diff --git a/Assets/02_Scripts/UI/CheckoutProductionRow.cs b/Assets/02_Scripts/UI/CheckoutProductionRow.cs index 2b2eb4e8..d6aaf154 100644 --- a/Assets/02_Scripts/UI/CheckoutProductionRow.cs +++ b/Assets/02_Scripts/UI/CheckoutProductionRow.cs @@ -1,5 +1,7 @@ +using System; using TMPro; using UnityEngine; +using UnityEngine.UI; using VRShopping.Items; namespace VRShopping.UI @@ -9,9 +11,21 @@ public class CheckoutProductionRow : MonoBehaviour [SerializeField] private TMP_Text _nameText; [SerializeField] private TMP_Text _quantityText; [SerializeField] private TMP_Text _priceText; + [SerializeField] private Button _addButton; + [SerializeField] private Button _removeButton; + public ItemData Item { get; private set; } public int Quantity { get; private set; } + public event Action OnAddClicked; + public event Action OnRemoveClicked; + + private void Awake() + { + if (_addButton != null) _addButton.onClick.AddListener(() => OnAddClicked?.Invoke(Item)); + if (_removeButton != null) _removeButton.onClick.AddListener(() => OnRemoveClicked?.Invoke(Item)); + } + public void Bind(ItemData item, int quantity) { if (item == null) @@ -20,11 +34,12 @@ public void Bind(ItemData item, int quantity) return; } + Item = item; Quantity = quantity; if (_nameText != null) _nameText.text = item.DisplayName; if (_quantityText != null) _quantityText.text = $"x{quantity}"; - if (_priceText != null) _priceText.text = (item.FinalPrice * quantity).ToString(); + if (_priceText != null) _priceText.text = (item.FinalPrice * quantity).ToString("N0"); } } } diff --git a/Assets/07_UI/Shopping/Prefabs/CheckoutItemRow.prefab b/Assets/07_UI/Shopping/Prefabs/CheckoutItemRow.prefab index b8f9b22a..8637bf19 100644 --- a/Assets/07_UI/Shopping/Prefabs/CheckoutItemRow.prefab +++ b/Assets/07_UI/Shopping/Prefabs/CheckoutItemRow.prefab @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e469efe96d72e17d1d74d238707504b5fe5a95f21d2e8cdc1b6520320d80bddd -size 13814 +oid sha256:ab038135f2b0f3448dbc6b6e2d0c9804125b693528849ea634033e8dd7e5cfea +size 21294 diff --git a/Assets/Supermarket Store/Prefabs/ShelfCheckouts.prefab b/Assets/Supermarket Store/Prefabs/ShelfCheckouts.prefab index a19e631e..a0c90c0e 100644 --- a/Assets/Supermarket Store/Prefabs/ShelfCheckouts.prefab +++ b/Assets/Supermarket Store/Prefabs/ShelfCheckouts.prefab @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:071de2b625fd03708eb994c76b0362c9c56e4df78916afe8a99b1a5fb29f359b -size 46072 +oid sha256:695570d799e46425fc16571dbdef1287b0d05b9a929c9838282275f50b37c5b9 +size 75647