public bool AddingConditonTable(Situation situation, WarUnit unit, IAbnormalCondition oldCond) { Contract.Requires(oldCond.GetType() == GetType()); var cond = (AttackCountChangeCondition)oldCond; var newCount = cond._changeAttackCount + _changeAttackCount; // 変化量が0ならば削除、そうでなければ値を更新 if (newCount == 0) unit.Conditions.Remove(ID, situation); else cond._changeAttackCount = _changeAttackCount; return false; }
/// <summary> /// ユニットに状態異常が追加される直前に呼び出される。 /// </summary> /// <param name="situation"></param> /// <param name="unit"></param> /// <param name="oldCond"></param> public bool AddingConditonTable(Situation situation, WarUnit unit, IAbnormalCondition oldCond) { Contract.Requires(oldCond.GetType() == GetType()); var cond = (StatusChangeCondition)oldCond; // 効果がお互いに反対であった場合は状態異常を消す if (_changeStatusValue * cond._changeStatusValue < 0) { unit.Conditions.Remove(ID, situation); } // そうでない場合は、効果が大きいほうで上書きする else if (Math.Abs(_changeStatusValue) > Math.Abs(cond._changeStatusValue)) { cond._changeStatusValue = _changeStatusValue; } return false; }