装备对HP影响的逻辑及使用药品
装备对HP影响的逻辑
背包中有加血属性的装备穿戴在身上后,应该只影响角色最大血量,不影响当前血量
使用药品
对当前属性的变更,切变更后的属性不能超过最大值。Status更改后,同样发起事件,通知监控对象,如头像面板进行值的改变,背包物品减少。
/// <summary>
/// 使用药水
/// </summary>
/// <param name="item"></param>
public void DrinkPotion(ItemStatus item)
{
this.status.HpCur = this.status.HpCur + item.status.Hp > this.status.HpMax ? this.status.HpMax : this.status.HpCur + item.status.Hp;
this.status.MpCur = this.status.MpCur + item.status.Mp > this.status.MpMax ? this.status.MpMax : this.status.MpCur + item.status.Mp;
this.status.AtkCur = this.status.AtkCur + item.status.Atk > this.status.AtkMax ? this.status.AtkMax : this.status.AtkCur + item.status.Atk;
this.status.DefCur = this.status.DefCur + item.status.Def > this.status.DefMax ? this.status.DefMax : this.status.DefCur + item.status.Def;
this.status.SpdCur = this.status.SpdCur + item.status.Spd > this.status.SpdMax ? this.status.SpdMax : this.status.SpdCur + item.status.Spd;
this.status.CriticalRateCur = this.status.CriticalRateCur + this.status.CriticalRateMax > this.status.CriticalRateMax ? this.status.CriticalRateMax : this.status.CriticalRateCur + item.status.CriticalRate;
this.status.AtkSpdCur = this.status.AtkSpdCur + item.status.AtkSpd > this.status.AtkSpdMax ? this.status.AtkSpdMax : this.status.AtkSpdCur + item.status.AtkSpd;
this.status.AtkRangeCur = this.status.AtkRangeCur + item.status.AtkRange > this.status.AtkRangeMax ? this.status.AtkRangeMax : this.status.AtkRangeCur + item.status.AtkRange;
this.status.HitCur = this.status.HitCur + item.status.Hit > this.status.HitMax ? this.status.HitMax : this.status.HitCur + item.status.Hit;
if (this.DrinkedPotion != null)
this.DrinkedPotion(item);
}
喝+150的药
血量补满, 血瓶数量减少
PlayerInfo
发生装备更改,喝药水,都刷新属性
private void PlayerDrinkedPotion(ItemStatus obj)
{
RefreshStatus();
}
private void PlayerChangedEquip()
{
RefreshStatus();
}
private void RefreshStatus()
{
this.m_TxtLv.text = "." + this.m_PlayerStatus.Lv.ToString();
this.m_TxtHp.text = string.Format("{0}/{1}", this.m_PlayerStatus.status.HpCur, this.m_PlayerStatus.status.HpMax);
this.m_TxtMp.text = string.Format("{0}/{1}", this.m_PlayerStatus.status.MpCur, this.m_PlayerStatus.status.MpMax);
this.m_SldHp.value = this.m_PlayerStatus.status.HpCur / this.m_PlayerStatus.status.HpMax;
this.m_SldMp.value = this.m_PlayerStatus.status.MpCur / this.m_PlayerStatus.status.MpMax;
this.m_SldExp.value = (float)(this.m_PlayerStatus.Exp / this.m_PlayerStatus.ExpMax);
}
UIInventory
移除物品
移除物品逻辑是先减数量,数量为0则销毁,否则更新显示
private void PlayerDrinkedPotion(ItemStatus item)
{
RemoveItem(item);
}
public void RemoveItem(ItemStatus itemStatus)
{
itemStatus.Count -= 1;
if (itemStatus.Count == 0)
{//销毁物品
this.m_ItemList.Remove(itemStatus.ItemID);
DestroyImmediate(itemStatus.gameObject);
}
else
{//更新数量显示
itemStatus.gameObject.GetComponent<UIItem>().UpdateCount();
}
RefreshPartGrid();
}