Пример #1
0
        public void AddValue(NpcAttrIndex Index, float Value, bool NotifyEvent = true)
        {
            var OldValue = CalcFinalValue(Index);

            Value_[(int)Index] += Value;
            TrySendAttrChangeEvent(Index, OldValue, NotifyEvent);
        }
Пример #2
0
        /// <summary>
        /// 百分比乘法叠加
        /// </summary>
        public void ApplyPercent(NpcAttrIndex Index, float Percent, bool NotifyEvent = true)
        {
            var OldValue = CalcFinalValue(Index);

            Percent_[(int)Index] *= Percent;
            TrySendAttrChangeEvent(Index, OldValue, NotifyEvent);
        }
Пример #3
0
 public NpcAttrChangedEvent(BaseNpc Master, NpcAttrIndex Index, float OldValue, float NewValue)
     : base(Master)
 {
     this.Index       = Index;
     this.OldValue    = OldValue;
     this.NewValue    = NewValue;
     this.ChangeValue = NewValue - OldValue;
 }
Пример #4
0
        public void ResetModify(NpcAttrIndex Index, bool NotifyEvent = true)
        {
            var OldValue = CalcFinalValue(Index);

            Percent_[(int)Index] = 1;
            Base_[(int)Index]    = 0;
            TrySendAttrChangeEvent(Index, OldValue, NotifyEvent);
        }
Пример #5
0
            public override float OnAddAttr(NpcAttrIndex Index, float Value)
            {
                if (Index != NpcAttrIndex.Hp || Value >= 0)
                {
                    return(Value);
                }

                var Level = Master_.Skill.GetSkillLevel(SkillID_);

                return(Mathf.Clamp(Value + 10 * Level, Value, 0));
            }
Пример #6
0
            public override float OnAddAttr(NpcAttrIndex Index, float Value)
            {
                if (Index != NpcAttrIndex.Hp || Value >= 0)
                {
                    return(Value);
                }

                var Level = Master_.Skill.GetSkillLevel(SkillID_);

                return(Value * (1 - (0.4f + 0.1f * Level)));
            }
Пример #7
0
        public float AddAttr(NpcAttrIndex Index, float Value)
        {
            var RealValue = Value;

            foreach (var Handler in HandlerList_)
            {
                RealValue = Handler.OnAddAttr(Index, RealValue);
            }

            Data.AddAttr(Index, RealValue);
            return(Value);
        }
Пример #8
0
        private void TrySendAttrChangeEvent(NpcAttrIndex Index, float OldValue, bool NotifyEvent)
        {
            if (!NotifyEvent)
            {
                return;
            }

            var NewValue = CalcFinalValue(Index);

            if (UnityEngine.Mathf.Approximately(OldValue, NewValue))
            {
                return;
            }

            EventManager.Send(new NpcAttrChangedEvent(Master_, Index, OldValue, NewValue));
        }
Пример #9
0
 public float CalcFinalAttr(NpcAttrIndex Index)
 {
     return(Data.CalcFinalAttr(Index));
 }
Пример #10
0
 public void AddAttr(NpcAttrIndex Index, float Value, bool Notify = true)
 {
     Attr.AddValue(Index, Value, Notify);
 }
Пример #11
0
 public float CalcFinalAttr(NpcAttrIndex Index)
 {
     return(Attr.CalcFinalValue(Index));
 }
Пример #12
0
 public float CalcFinalValue(NpcAttrIndex Index)
 {
     return((GetValue(Index) + GetBase(Index)) * GetPercent(Index));
 }
Пример #13
0
 public NpcAttrModifyInfo(NpcAttrIndex Index, float Percent, float Base)
 {
     this.Index   = Index;
     this.Percent = Percent;
     this.Base    = Base;
 }
Пример #14
0
 public float GetBase(NpcAttrIndex Index)
 {
     return(Base_[(int)Index]);
 }
Пример #15
0
 public float GetPercent(NpcAttrIndex Index)
 {
     return(Percent_[(int)Index]);
 }
Пример #16
0
 public float GetValue(NpcAttrIndex Index)
 {
     return(Value_[(int)Index]);
 }
Пример #17
0
 public virtual float OnAddAttr(NpcAttrIndex Index, float Value)
 {
     return(Value);
 }