public void Swap() { IGameValue temp_value = base_value; base_value = partner_value; partner_value = temp_value; NeedReCalculate();; }
public override float BeReferredBy(IGameValue _game_value) { if (be_referred.Add(new WeakReference <IGameValue>(_game_value))) { return(value); } else { throw new ArgumentException("The object pointed by weakRef you added has already been in hashset!"); } }
/// <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(); }
public RemoveWeakRefOfObj(IGameValue _game_value) { game_value = _game_value; }
public void NoLongerReferredBy(IGameValue _game_value) { ; }
public float BeReferredBy(IGameValue _game_value) { //无记忆不需要记录自己被引用的情况 return(value); }
public override void NoLongerReferredBy(IGameValue _game_value) { be_referred.RemoveWhere(new RemoveWeakRefOfObj(_game_value).PredicateFunc); }
public abstract void NoLongerReferredBy(IGameValue _game_value);
public abstract float BeReferredBy(IGameValue _game_value);
public override void NoLongerReferredBy(IGameValue _game_value) { throw new NotImplementedException(); }
public override float BeReferredBy(IGameValue _game_value) { be_referred.Add(new WeakReference <IGameValue>(_game_value)); return(value_cache); }