create base item SO for container. still need to set container type for different item types (sellable or not)

This commit is contained in:
Vladimir Koshevarov
2023-03-05 19:06:31 +02:00
parent 1b5e1b9359
commit 471fc5df93
9 changed files with 90 additions and 42 deletions
+2 -2
View File
@@ -4273,7 +4273,7 @@ Transform:
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 963194225} m_GameObject: {fileID: 963194225}
m_LocalRotation: {x: 0.54491353, y: -0.00000002885484, z: 0.000000018751987, w: 0.8384923} m_LocalRotation: {x: 0.54491353, y: 0.00000002885483, z: -0.00000001875198, w: 0.8384923}
m_LocalPosition: {x: 0.49909282, y: 3.5104675, z: -2.911191} m_LocalPosition: {x: 0.49909282, y: 3.5104675, z: -2.911191}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0 m_ConstrainProportionsScale: 0
@@ -12835,7 +12835,7 @@ Transform:
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2110938951} m_GameObject: {fileID: 2110938951}
m_LocalRotation: {x: 0.54491353, y: -0.00000002885484, z: 0.000000018751987, w: 0.8384923} m_LocalRotation: {x: 0.54491353, y: 0.00000002885483, z: -0.00000001875198, w: 0.8384923}
m_LocalPosition: {x: 0.49909282, y: 3.5104675, z: -2.911191} m_LocalPosition: {x: 0.49909282, y: 3.5104675, z: -2.911191}
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0 m_ConstrainProportionsScale: 0
@@ -1,4 +1,3 @@
using System.Linq;
using UnityEngine; using UnityEngine;
public class CashierDesk : BaseInteractableObject public class CashierDesk : BaseInteractableObject
@@ -6,17 +5,18 @@ public class CashierDesk : BaseInteractableObject
[SerializeField] [SerializeField]
private ContainerSO _containerSO; private ContainerSO _containerSO;
public override void Interact(Player player) public override void Interact(Player player)
{ {
if (player.IsHoldContainerItem()) if (player.IsHoldContainerItem())
{ {
var playerContainer = player.GetContainerItem(); var playerContainer = player.GetContainerItem();
var playerItemsList = playerContainer.GetItems(); if (playerContainer.IsSalebleItems())
player.ClearContainerItem();
if (playerItemsList.Any())
{ {
var playerItemsList = playerContainer.GetItems();
player.ClearContainerItem();
float finalPrice = 0; float finalPrice = 0;
foreach (var item in playerItemsList) foreach (SellableItemSO item in playerItemsList)
{ {
finalPrice += item.Price; finalPrice += item.Price;
} }
@@ -29,7 +29,14 @@ public class CashierDesk : BaseInteractableObject
return; return;
} }
player.Pay(finalPrice); player.Pay(finalPrice);
containerItem.AddItems(playerItemsList); foreach (var item in playerContainer.GetItems())
{
var foodItemSO = ScriptableObject.CreateInstance<FoodItemSO>();
foodItemSO.ItemName = item.ItemName;
foodItemSO.Energy = 0;
containerItem.AddItem(foodItemSO);
}
player.SetContainerItem(containerItem); player.SetContainerItem(containerItem);
} }
} }
+19 -13
View File
@@ -9,23 +9,29 @@ public class Fridge : BaseInteractableObject
[SerializeField] [SerializeField]
private ItemActionsUI _actionsMenu; private ItemActionsUI _actionsMenu;
private List<FoodItem> _foodObjects = new List<FoodItem>(); private List<FoodItemSO> _foodObjects = new List<FoodItemSO>();
public override void Interact(Player player) public override void Interact(Player player)
{ {
if (player.IsHoldContainerItem())
{
var playerContainer = player.GetContainerItem();
if (!playerContainer.IsSalebleItems())
{
if (_foodObjects.Count + playerContainer.GetItems().Count <= _containerSO.MaxCapacity)
{
foreach (FoodItemSO item in playerContainer.GetItems())
{
_foodObjects.Add(item);
}
//_actionsMenu.Show(_containerSO.Name, $"Max items:{_containerSO.MaxCapacity} current items: {_containerSO.CurrentItemsCount}"); player.ClearContainerItem();
//if (player.IsHoldContainer()) Debug.Log($"Fridge have {_foodObjects.Count} pices of food");
//{ }
// if (_foodObjects.Count < _containerSO.MaxCapacity) else
// { Debug.Log($"Fridge is full");
// _foodObjects.Add(player.GetFoodObject()); }
// player.ClearFoodObject(); }
// Debug.Log($"Fridge have {_foodObjects.Count} pices of food");
// }
// else
// Debug.Log($"Fridge is full");
//}
//else //else
//{ //{
// //Eat menu // //Eat menu
@@ -1,4 +1,5 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using UnityEngine; using UnityEngine;
public class ContainerItem : MonoBehaviour public class ContainerItem : MonoBehaviour
@@ -7,19 +8,14 @@ public class ContainerItem : MonoBehaviour
private ContainerSO _containerSO; private ContainerSO _containerSO;
private List<SellableItemSO> _items; private List<BaseItemSO> _items = new List<BaseItemSO>();
private void Start()
{
_items = new List<SellableItemSO>();
}
public ContainerSO GetContainerObjectSO() public ContainerSO GetContainerObjectSO()
{ {
return _containerSO; return _containerSO;
} }
public void AddItem(SellableItemSO item) public void AddItem(BaseItemSO item)
{ {
if (_items.Count < _containerSO.MaxCapacity) if (_items.Count < _containerSO.MaxCapacity)
{ {
@@ -32,8 +28,22 @@ public class ContainerItem : MonoBehaviour
} }
} }
public List<SellableItemSO> GetItems() public List<BaseItemSO> GetItems()
{ {
return _items; return _items;
} }
public bool IsSalebleItems()
{
return _items.Any(x => x is SellableItemSO);
}
public void AddItems(List<BaseItemSO> playerItemsList)
{
foreach (var item in playerItemsList)
{
AddItem(item);
}
}
} }
@@ -1,5 +1,4 @@
public class FoodItem public class FoodItemSO : BaseItemSO
{ {
public string Name { get; set; }
public int Energy { get; set; } public int Energy { get; set; }
} }
@@ -0,0 +1,7 @@
using UnityEngine;
public class BaseItemSO : ScriptableObject
{
public string ItemName;
public Sprite Icon;
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 76f6b12a84fd9e142b92cb523db68c4c
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -1,10 +1,8 @@
using UnityEngine; using UnityEngine;
[CreateAssetMenu()] [CreateAssetMenu()]
public class SellableItemSO : ScriptableObject public class SellableItemSO : BaseItemSO
{ {
public Transform Prefab; public Transform Prefab;
public string ItemName;
public float Price; public float Price;
public Sprite Icon;
} }
+18 -8
View File
@@ -1,4 +1,3 @@
using System.Linq;
using UnityEngine; using UnityEngine;
public class ContainerItemsUI : MonoBehaviour public class ContainerItemsUI : MonoBehaviour
@@ -23,26 +22,37 @@ public class ContainerItemsUI : MonoBehaviour
var playerContainer = Player.Instance.GetContainerItem(); var playerContainer = Player.Instance.GetContainerItem();
_container.gameObject.SetActive(true); _container.gameObject.SetActive(true);
if (playerContainer.GetItems().Any()) if (playerContainer.IsSalebleItems())
{ {
foreach (Transform child in _itemsList) ClearObject();
{
if (child == _itemUITemplate) continue;
Destroy(child.gameObject);
}
var playerItemsList = playerContainer.GetItems(); var playerItemsList = playerContainer.GetItems();
for (int count = 0; count < playerItemsList.Count; count++) for (int count = 0; count < playerItemsList.Count; count++)
{ {
var itemUI = Instantiate(_itemUITemplate, _itemsList); var itemUI = Instantiate(_itemUITemplate, _itemsList);
itemUI.gameObject.SetActive(true); itemUI.gameObject.SetActive(true);
itemUI.GetComponent<ItemDescriptionUI>().SetItem(playerItemsList[count]); itemUI.GetComponent<ItemDescriptionUI>().SetItem((SellableItemSO)playerItemsList[count]);
} }
} }
else
{
ClearObject();
_container.gameObject.SetActive(false);
}
} }
else else
{ {
ClearObject();
_container.gameObject.SetActive(false); _container.gameObject.SetActive(false);
} }
} }
private void ClearObject()
{
foreach (Transform child in _itemsList)
{
if (child == _itemUITemplate) continue;
Destroy(child.gameObject);
}
}
} }