100 lines
2.7 KiB
C#
100 lines
2.7 KiB
C#
|
/********************************************************************************
|
|||
|
* 文件名: ThreadList.cs
|
|||
|
* 全路径: \Script\Player\AI\ThreadList.cs
|
|||
|
* 创建人: 李嘉
|
|||
|
* 创建时间:2013-11-19
|
|||
|
*
|
|||
|
* 功能说明: Obj仇恨列表
|
|||
|
*
|
|||
|
* 修改记录:
|
|||
|
*********************************************************************************/
|
|||
|
|
|||
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using Games.LogicObj;
|
|||
|
|
|||
|
namespace Games.AI_Logic
|
|||
|
{
|
|||
|
public class ThreatInfo
|
|||
|
{
|
|||
|
public ThreatInfo(Obj_Character obj, int nValue)
|
|||
|
{
|
|||
|
ThreatObj = obj;
|
|||
|
ThreatValue = nValue;
|
|||
|
}
|
|||
|
|
|||
|
// 威胁来源
|
|||
|
public Obj_Character ThreatObj { get; set; }
|
|||
|
|
|||
|
// 威胁值
|
|||
|
public int ThreatValue { get; set; }
|
|||
|
}
|
|||
|
|
|||
|
public class Threat
|
|||
|
{
|
|||
|
private readonly List<ThreatInfo> m_ThreatList;
|
|||
|
|
|||
|
public Threat()
|
|||
|
{
|
|||
|
if (null == m_ThreatList) m_ThreatList = new List<ThreatInfo>();
|
|||
|
}
|
|||
|
|
|||
|
public int GetThreatValue(Obj_Character obj)
|
|||
|
{
|
|||
|
var threatInfo = FindThreadInfo(obj);
|
|||
|
return threatInfo == null ? 0 : threatInfo.ThreatValue;
|
|||
|
}
|
|||
|
|
|||
|
public ThreatInfo FindThreadInfo(Obj_Character obj)
|
|||
|
{
|
|||
|
ThreatInfo result = null;
|
|||
|
if (obj != null)
|
|||
|
result = m_ThreatList.Find(a => a.ThreatObj == obj);
|
|||
|
return result;
|
|||
|
}
|
|||
|
|
|||
|
public Obj_Character FindMaxThreatObj()
|
|||
|
{
|
|||
|
ThreatInfo maxThreat = null;
|
|||
|
for (var i = 0; i < m_ThreatList.Count; ++i)
|
|||
|
if (null == maxThreat || maxThreat.ThreatValue < m_ThreatList[i].ThreatValue)
|
|||
|
maxThreat = m_ThreatList[i];
|
|||
|
return maxThreat == null ? null : maxThreat.ThreatObj;
|
|||
|
}
|
|||
|
|
|||
|
public void AddThreat(Obj_Character obj, int value)
|
|||
|
{
|
|||
|
if (null == obj)
|
|||
|
return;
|
|||
|
var info = FindThreadInfo(obj);
|
|||
|
if (null == info)
|
|||
|
{
|
|||
|
// 负数威胁值不保存,因此不创建
|
|||
|
if (value > 0)
|
|||
|
{
|
|||
|
info = new ThreatInfo(obj, value);
|
|||
|
m_ThreatList.Add(info);
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
info.ThreatValue = Math.Max(0, info.ThreatValue + value);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public void ResetAllThreat()
|
|||
|
{
|
|||
|
m_ThreatList.Clear();
|
|||
|
}
|
|||
|
|
|||
|
public void ResetThreat(Obj_Character obj)
|
|||
|
{
|
|||
|
if (obj != null)
|
|||
|
{
|
|||
|
var index = m_ThreatList.FindIndex(a => a.ThreatObj == obj);
|
|||
|
if (index >= 0)
|
|||
|
m_ThreatList.RemoveAt(index);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|