285 lines
8.2 KiB
C#
285 lines
8.2 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
public enum RewardType
|
|
{
|
|
God,
|
|
Remains,
|
|
Resource
|
|
}
|
|
public enum GodType
|
|
{
|
|
Sun,
|
|
war,
|
|
spring
|
|
}
|
|
[System.Serializable]
|
|
public struct Rates
|
|
{
|
|
public int GodRate;
|
|
public int ResourceRate;
|
|
public int RemainsRate;
|
|
public Rates(int godrate, int resourcerate, int remainsrate)
|
|
{
|
|
GodRate = godrate;
|
|
ResourceRate = resourcerate;
|
|
RemainsRate = remainsrate;
|
|
}
|
|
// 将另一个 Rates 的值加到当前实例上
|
|
public void Add(Rates otherrate)
|
|
{
|
|
GodRate += otherrate.GodRate;
|
|
ResourceRate += otherrate.ResourceRate;
|
|
RemainsRate += otherrate.RemainsRate;
|
|
}
|
|
}
|
|
|
|
[CreateAssetMenu(fileName = "仪式Item", menuName = "仪式/仪式Item")]
|
|
public class YiShiItem : ScriptableObject
|
|
{
|
|
[Header("仪式名字")]
|
|
public string YiShiname;
|
|
[Header("仪式所需初始信仰")]
|
|
public int NeedFaith;
|
|
[Header("图片")]
|
|
public Sprite Sprite;
|
|
[Header("资源祷告词")]
|
|
[TextArea()]
|
|
public string ResourcePrayer;
|
|
[Header("遗物祷告词")]
|
|
[TextArea()]
|
|
public string RemainsPrayer;
|
|
[Header("降神祷告词")]
|
|
[TextArea()]
|
|
public string GodPrayer;
|
|
[Header("消耗的资源类型")]
|
|
public ResourceKind rsourceKind;
|
|
[Header("神")]
|
|
public GodType God;
|
|
[Header("基础概率权重")]
|
|
public Rates BaseRate;
|
|
|
|
/// <summary>
|
|
/// 减少资源
|
|
/// </summary>
|
|
/// <param name="count"></param>
|
|
/// <returns> >0(成功)<0(失败)</returns>
|
|
public int CutResource(int count = 1)
|
|
{
|
|
int totalcount = GameProcedureManager.Instance.StoneCount;
|
|
switch (rsourceKind)
|
|
{
|
|
case ResourceKind.Stone:
|
|
totalcount = GameProcedureManager.Instance.StoneCount;
|
|
totalcount -= count;
|
|
if (totalcount >= 0)
|
|
{
|
|
|
|
GameProcedureManager.Instance.StoneCount = totalcount;
|
|
}
|
|
break;
|
|
case ResourceKind.faith:
|
|
totalcount = GameProcedureManager.Instance.FaithCount;
|
|
totalcount -= count;
|
|
if (totalcount >= 0)
|
|
{
|
|
GameProcedureManager.Instance.FaithCount = totalcount;
|
|
}
|
|
break;
|
|
case ResourceKind.wood:
|
|
totalcount = GameProcedureManager.Instance.WoodCount;
|
|
totalcount -= count;
|
|
if (totalcount >= 0)
|
|
{
|
|
GameProcedureManager.Instance.WoodCount = totalcount;
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
return totalcount;
|
|
}
|
|
/// <summary>
|
|
/// 增加资源
|
|
/// </summary>
|
|
public void AddResource(int count = 1)
|
|
{
|
|
switch (rsourceKind)
|
|
{
|
|
case ResourceKind.Stone:
|
|
GameProcedureManager.Instance.StoneCount += count;
|
|
break;
|
|
case ResourceKind.faith:
|
|
GameProcedureManager.Instance.FaithCount += count;
|
|
|
|
break;
|
|
case ResourceKind.wood:
|
|
GameProcedureManager.Instance.WoodCount += count;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
public int ReResourceCount()
|
|
{
|
|
int totalcount = 0;
|
|
switch (rsourceKind)
|
|
{
|
|
case ResourceKind.Stone:
|
|
totalcount = GameProcedureManager.Instance.StoneCount;
|
|
break;
|
|
case ResourceKind.faith:
|
|
totalcount = GameProcedureManager.Instance.FaithCount;
|
|
break;
|
|
case ResourceKind.wood:
|
|
totalcount = GameProcedureManager.Instance.WoodCount;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
return totalcount;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 开始仪式,计算奖励
|
|
/// </summary>
|
|
public YiShiReward StartYishi(int count, List<RemainsItem> remainsItems = null)
|
|
{
|
|
Rates realrates = BaseRate;
|
|
if (remainsItems != null)//存在遗物
|
|
{
|
|
for (int i = 0; i < remainsItems.Count; i++)
|
|
{
|
|
realrates.Add(remainsItems[i].rates);
|
|
}
|
|
}
|
|
RewardType rewardType = GetRandomByRates(realrates);
|
|
return GetReward(count, rewardType);
|
|
|
|
}
|
|
private RewardType GetRandomByRates(Rates rates)//计算概率
|
|
{
|
|
int totalRate = rates.GodRate + rates.ResourceRate + rates.RemainsRate;
|
|
int randomValue = Random.Range(0, totalRate);
|
|
// 根据随机值判断落在哪个区间
|
|
if (randomValue < rates.GodRate)
|
|
{
|
|
return RewardType.God; // 随机值落在 GodRate 区间
|
|
}
|
|
else if (randomValue < rates.GodRate + rates.ResourceRate)
|
|
{
|
|
return RewardType.Resource; // 随机值落在 ResourceRate 区间
|
|
}
|
|
else
|
|
{
|
|
return RewardType.Remains; // 随机值落在 RemainsRate 区间
|
|
}
|
|
}
|
|
|
|
private YiShiReward GetReward(int count, RewardType rewardType) //得到奖励
|
|
{
|
|
switch (rewardType)
|
|
{
|
|
case RewardType.God:
|
|
int num = MathGodReward(count);
|
|
return new YiShiReward(rsourceKind, God, num);
|
|
case RewardType.Remains:
|
|
List<RemainsItem> remains = new List<RemainsItem>();
|
|
remains.Add(BagControl.Instance.bag.GetRemainsReward());
|
|
return new YiShiReward(rsourceKind, remains);
|
|
case RewardType.Resource:
|
|
float rangenum = Random.Range(1, 6)/2;
|
|
int totalCount = (int)(count * rangenum);//-----一系列计算
|
|
AddResource(totalCount);
|
|
return new YiShiReward(rsourceKind, totalCount);
|
|
default:
|
|
break;
|
|
}
|
|
return new YiShiReward();
|
|
}
|
|
private int MathGodReward(int count) //得到神后的计算
|
|
{
|
|
return count * 3;
|
|
}
|
|
|
|
|
|
public string GetRate(RewardType rewardType,List<RemainsItem> remainsItems=null)
|
|
{
|
|
Rates realrates = BaseRate;
|
|
if (remainsItems != null)//存在遗物
|
|
{
|
|
for (int i = 0; i < remainsItems.Count; i++)
|
|
{
|
|
realrates.Add(remainsItems[i].rates);
|
|
}
|
|
}
|
|
int totalRate = realrates.GodRate + realrates.ResourceRate + realrates.RemainsRate;
|
|
float ratenum = 0;
|
|
switch (rewardType)
|
|
{
|
|
case RewardType.God:
|
|
ratenum = (float)realrates.GodRate / totalRate;
|
|
break;
|
|
case RewardType.Remains:
|
|
ratenum = (float)realrates.RemainsRate / totalRate;
|
|
break;
|
|
case RewardType.Resource:
|
|
ratenum = (float)realrates.ResourceRate / totalRate;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
if (ratenum<0.2f)
|
|
{
|
|
return "微小";
|
|
}
|
|
else if (ratenum>=0.2f&&ratenum<0.4f)
|
|
{
|
|
return "较小";
|
|
}
|
|
else if (ratenum>=0.4f&&ratenum<0.6f)
|
|
{
|
|
return "较大";
|
|
}
|
|
else if (ratenum>=0.6f&&ratenum<0.8f)
|
|
{
|
|
return "很大";
|
|
}
|
|
else if(ratenum>=0.8f&&ratenum<=1)
|
|
{
|
|
return "大量";
|
|
}
|
|
return "";
|
|
}
|
|
}
|
|
|
|
public class YiShiReward
|
|
{
|
|
public RewardType rewardtype;
|
|
public ResourceKind resourceKind;
|
|
public GodType God;
|
|
public List<RemainsItem> remains;
|
|
public int Resourcecount;
|
|
public YiShiReward() { }
|
|
public YiShiReward(ResourceKind resourcekind, GodType godType, int count)//神
|
|
{
|
|
rewardtype = RewardType.God;
|
|
this.resourceKind = resourcekind;
|
|
God = godType;
|
|
Resourcecount = count;
|
|
}
|
|
public YiShiReward(ResourceKind resourcekind, List<RemainsItem> items)//遗物
|
|
{
|
|
rewardtype = RewardType.Remains;
|
|
this.resourceKind = resourcekind;
|
|
remains = items;
|
|
}
|
|
public YiShiReward(ResourceKind resourcekind, int count)//资源
|
|
{
|
|
rewardtype = RewardType.Resource;
|
|
this.resourceKind = resourcekind;
|
|
Resourcecount = count;
|
|
}
|
|
} |