这是第一个 Unity 开放项目的repo,是 Unity 和社区合作创建的一个小型开源游戏演示,第一款游戏是一款名为 Chop Chop 的动作冒险游戏。
您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 

153 行
2.9 KiB

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class InventoryManager : MonoBehaviour
{
[SerializeField]
private Inventory currentInventory;
[SerializeField]
private ItemEventChannelSo CookRecipeEvent;
[SerializeField]
private ItemEventChannelSo UseItemEvent;
[SerializeField]
private ItemEventChannelSo EquipItemEvent;
[SerializeField]
ItemEventChannelSo AddItemEvent;
[SerializeField]
ItemEventChannelSo RemoveItemEvent;
private void OnEnable()
{
//Check if the event exists to avoid errors
if (CookRecipeEvent != null)
{
CookRecipeEvent.OnEventRaised += CookRecipeEventRaised;
}
if (UseItemEvent != null)
{
UseItemEvent.OnEventRaised += UseItemEventRaised;
}
if (EquipItemEvent != null)
{
EquipItemEvent.OnEventRaised += EquipItemEventRaised;
}
if (AddItemEvent != null)
{
AddItemEvent.OnEventRaised += AddItem;
}
if (RemoveItemEvent != null)
{
RemoveItemEvent.OnEventRaised += RemoveItem;
}
}
private void OnDisable()
{
if (CookRecipeEvent != null)
{
CookRecipeEvent.OnEventRaised -= CookRecipeEventRaised;
}
if (UseItemEvent != null)
{
UseItemEvent.OnEventRaised -= UseItemEventRaised;
}
if (EquipItemEvent != null)
{
EquipItemEvent.OnEventRaised -= EquipItemEventRaised;
}
if (AddItemEvent != null)
{
AddItemEvent.OnEventRaised -= AddItem;
}
if (RemoveItemEvent != null)
{
RemoveItemEvent.OnEventRaised -= RemoveItem;
}
}
void AddItemWithUIUpdate(Item item)
{
currentInventory.Add(item);
if (currentInventory.Contains(item))
{
ItemStack itemToUpdate = currentInventory.Items.Find(o => o.Item == item);
// UIManager.Instance.UpdateInventoryScreen(itemToUpdate, false);
}
}
void RemoveItemWithUIUpdate(Item item)
{
ItemStack itemToUpdate = new ItemStack();
if (currentInventory.Contains(item))
{
itemToUpdate = currentInventory.Items.Find(o => o.Item == item);
}
currentInventory.Remove(item);
bool removeItem = currentInventory.Contains(item);
// UIManager.Instance.UpdateInventoryScreen(itemToUpdate, removeItem);
}
void AddItem(Item item)
{
currentInventory.Add(item);
}
void RemoveItem(Item item)
{
currentInventory.Remove(item);
}
void CookRecipeEventRaised(Item recipe)
{
//find recipe
if (currentInventory.Contains(recipe))
{
List<ItemStack> ingredients = recipe.IngredientsList;
//remove ingredients (when it's a consumable)
if (currentInventory.hasIngredients(ingredients))
{
for (int i = 0; i < ingredients.Count; i++)
{
if (ingredients[i].Item.ItemType.ActionType == ItemInventoryActionType.use)
currentInventory.Remove(ingredients[i].Item, ingredients[i].Amount);
}
//add dish
currentInventory.Add(recipe.ResultingDish);
}
}
}
public void UseItemEventRaised(Item item)
{
RemoveItem(item);
}
public void EquipItemEventRaised(Item item)
{
}
}