MayHeCome/Assets/三问c#/持久化/TechItem.cs

111 lines
2.8 KiB
C#
Raw Normal View History

2024-12-18 09:55:34 +00:00
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]
public enum ResourceKind
{
Stone,
faith,
wood,
}
[CreateAssetMenu(fileName = "科技节点", menuName = "科技树/科技节点")]
[System.Serializable]
public class TechItem : ScriptableObject
{
[System.Serializable]
public struct NeedReource
{
public ResourceKind kind;
public int Count;
}
[Header("父节点")]
public List<TechItem> parent; // 每个节点有一个父节点
[Header("子节点列表")]
public List<TechItem> children = new List<TechItem>(); // 子节点列表
[Header("已经解锁")]
public bool LockOver;
[Header("主干")]
public bool MainTech;
[Header("科技节点名称")]
public string itemName;
[Header("描述")]
[TextArea(3, 5)]
public string Describe;
[TextArea(1, 3)]
public string FunDescription;
[Header("解锁所需资源列表")]
public List<NeedReource> needReources;
[Header("降神次数")]
public GodComingTimes GodTimes;
/// <summary>
/// 科技解锁
/// </summary>
public void LockTech()
{
LockOver = true;
for (int i = 0; i < needReources.Count; i++)
{
CutResource(needReources[i]);
}
}
public bool ResourceEnough()
{
bool Enough = true;
for (int i = 0; i < needReources.Count; i++)
{
NeedReource needReource = needReources[i];
switch (needReource.kind)
{
case ResourceKind.Stone:
Enough = GameProcedureManager.Instance.StoneCount >= needReource.Count;
break;
case ResourceKind.faith:
Enough= GameProcedureManager.Instance.FaithCount >= needReource.Count;
break;
case ResourceKind.wood:
Enough=GameProcedureManager.Instance.WoodCount >= needReource.Count;
break;
default:
break;
}
if (Enough==false)
{
return Enough;
}
}
return Enough;
}
/// <summary>
/// 消耗对应资源
/// </summary>
public void CutResource(NeedReource needReource)
{
switch (needReource.kind)
{
case ResourceKind.Stone:
GameProcedureManager.Instance.StoneCount -= needReource.Count;
break;
case ResourceKind.faith:
GameProcedureManager.Instance.FaithCount -= needReource.Count;
break;
case ResourceKind.wood:
GameProcedureManager.Instance.WoodCount -= needReource.Count;
break;
default:
break;
}
}
}