比较两个装备的属性值

点击的装备和玩家身上装备的属性赋值没有写

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;
}

猜你喜欢

转载自blog.csdn.net/L_yijun/article/details/82151227