/// <summary> /// 不要频繁调用,开销较大 /// </summary> /// <param name="_base_value"></param> public void SetBaseValue(IGameValue _base_value) { if (_base_value.Equals(this)) { throw new StackOverflowException("Do not set Modifier itself as base value!"); } base_value.NoLongerReferredBy(this); base_value = _base_value; base_value.BeReferredBy(this); NeedReCalculate(); }
public void SetPartnerValue(IGameValue _partner_value) { if (_partner_value.Equals(this)) { throw new StackOverflowException("Do not set Modifier itself as partner value!"); } partner_value.NoLongerReferredBy(this); partner_value = _partner_value; partner_value.BeReferredBy(this); NeedReCalculate();; }
public Modifier(IGameValue _base_value, IGameValue _partner_value, ModOps _mod_ops) { be_referred = new HashSet <WeakReference <IGameValue> >(new WeakRefComparer <IGameValue>()); need_re_cal = false; base_value = _base_value; base_value.BeReferredBy(this); partner_value = _partner_value; partner_value.BeReferredBy(this); mod_op = _mod_ops; Calculate(); }