123456789101112131415161718192021222324252627282930313233343536373839404142 |
- using XGame.Framework.Components;
- namespace FL.Battle
- {
- public interface IHpContext
- {
- IEntity Entity { get; }
- EEntityState State { get; set; }
- }
- internal class HpComponent : Component<IHpContext>
- {
- public override int Order => 0;
- protected override void OnDispose()
- {
- }
- public int CalculateHit(int hitValue)
- {
- if (Context.State == EEntityState.Dead)
- { // 已经死亡
- return 0;
- }
- var lastHp = Context.Entity.Attr.Hp;
- var nextHp = lastHp + hitValue;
- if (nextHp > Context.Entity.Attr.HpLimit)
- {
- nextHp = Context.Entity.Attr.HpLimit;
- }
- else if (nextHp < 0)
- {
- nextHp = 0;
- }
- Context.Entity.Attr.Hp = nextHp;
- if (nextHp == 0)
- {
- Context.State = EEntityState.Dead;
- }
- return (int)(nextHp - lastHp);
- }
- }
- }
|