点击的装备和玩家身上装备的属性赋值没有写
public class WeaponSelect
{
//玩家身上的装备的属性
public List<WeaponAttributeInfo> oldWeaponAttInfo;
}
public class NewWeaponAtt
{
//点击的装备的属性
public List<WeaponAttributeInfo> newWeaponAttInfo;
}
public class WeaponAttributeInfo
{
public string AttName;//属性名
public float AttNum;//属性值
}
//保存变化的值
public class AttributeChanged
{
public float oldNum;//玩家换装之前的值
public float newNum;//玩家换装之后的值
public float resultNum;//换装之后增减多少
}
//比较两个List是否完全相同
private bool CompareList(List<WeaponAttributeInfo> oldAtt, List<WeaponAttributeInfo> newAtt)
{
bool b1 = false;
if (oldAtt.Count == newAtt.Count)
{
for (int i = 0; i < oldAtt.Count; i++)
{
if (oldAtt[i].AttName == newAtt[i].AttName && oldAtt[i].AttNum == newAtt[i].AttNum)
b1 = true;
else
b1 = false;
}
}
return b1;
}
private void AttChanged(List<WeaponAttributeInfo> oldAtt, List<WeaponAttributeInfo> newAtt)
{
Dictionary<string, AttributeChanged> attri = new Dictionary<string, AttributeChanged>();
//当玩家身上没有装备得时候
if (oldAtt == null)
{
for (int i = 0; i < newAtt.Count; i++)
{
AttributeChanged ac = new AttributeChanged
{
oldNum = 0,
newNum = newAtt[i].AttNum,
resultNum = newAtt[i].AttNum,
};
attri.Add(newAtt[i].AttName, ac);
}
//事件,抛出去当前点击的装备属性和值
NFramework.Events.EventDispatcher.Instantce.DispatchEvent(new ChangedWeaponAtt(attri));
return;
}
//当玩家身上的装备和当前点击的装备属性和属性值一样的时候
if (CompareList(oldAtt, newAtt))
{
//Debug.Log("oldAtt和newAtt的属性完全相同");
NFramework.Events.EventDispatcher.Instantce.DispatchEvent(new ChangedWeaponAtt(attri));
return;
}
if (newAtt.Count >= oldAtt.Count)
{
//把比较的结果抛出去
NFramework.Events.EventDispatcher.Instantce.DispatchEvent(new ChangedWeaponAtt(ChangedAttribute(oldAtt, newAtt, true)));
}
else
{
//把比较的结果抛出去
NFramework.Events.EventDispatcher.Instantce.DispatchEvent(new ChangedWeaponAtt(ChangedAttribute(newAtt, oldAtt, false)));
}
}
private Dictionary<string, AttributeChanged> ChangedAttribute(List<WeaponAttributeInfo> minAtt, List<WeaponAttributeInfo> maxAtt, bool b)
{
Dictionary<string, AttributeChanged> attri = new Dictionary<string, AttributeChanged>();
for (int i = 0; i < maxAtt.Count; i++)
{
var minA = minAtt.Find(e => e.AttName == maxAtt[i].AttName);
//如果名字存在
if (minA != null)
{
//如果值不同
if (minA.AttNum != maxAtt[i].AttNum)
{
for (int j = 0; j < minAtt.Count; j++)
{
if (minAtt[j].AttName == maxAtt[i].AttName)
{
AttributeChanged ac = new AttributeChanged
{
resultNum = Mathf.Max(minAtt[j].AttNum, maxAtt[i].AttNum) - Mathf.Min(minAtt[j].AttNum, maxAtt[i].AttNum),
};
if (b)
{
ac.oldNum = minAtt[j].AttNum;
ac.newNum = maxAtt[i].AttNum;
}
else
{
ac.oldNum = maxAtt[i].AttNum;
ac.newNum = minAtt[j].AttNum;
}
attri.Add(maxAtt[i].AttName, ac);
break;
}
}
}
}
else
{
AttributeChanged ac = new AttributeChanged
{
resultNum = maxAtt[i].AttNum,
};
if (b)
{
ac.oldNum = 0;
ac.newNum = maxAtt[i].AttNum; ;
}
else
{
ac.oldNum = maxAtt[i].AttNum;
ac.newNum = 0;
}
attri.Add(maxAtt[i].AttName, ac);
}
if (i < minAtt.Count)
{
var maxA = maxAtt.Find(e => e.AttName == minAtt[i].AttName);
if (maxA == null)
{
AttributeChanged ac = new AttributeChanged
{
resultNum = minAtt[i].AttNum,
};
if (b)
{
ac.oldNum = minAtt[i].AttNum;
ac.newNum = 0;
}
else
{
ac.oldNum = 0;
ac.newNum = minAtt[i].AttNum;
}
attri.Add(minAtt[i].AttName, ac);
}
}
}
return attri;
}