示例#1
0
        public virtual void TakeDamage(IActor attacker, int damage, bool strike = false)
        {
            AttackResultType result = AttributeTools.CalcAttackResult(attacker.Attrbute, this.Attrbute);

            if (result == AttackResultType.Parry)
            {
                ShowFlyword(FlyWordType.Parry, 0);
                return;
            }
            else if (result == AttackResultType.Miss)
            {
                ShowFlyword(FlyWordType.Miss, 0);
                return;
            }

            ShowFlyword(strike ? FlyWordType.CritHurt : FlyWordType.NormalHurt, damage);

            int curHp = Attrbute.GetValue(AttributeType.Hp);

            if (curHp > damage)
            {
                Attrbute.UpdateValue(AttributeType.Hp, curHp - damage);
            }
            else
            {
                Attrbute.UpdateValue(AttributeType.Hp, 0);
            }
            UpdateHealth();
            if (curHp <= 0)
            {
                ExecuteCommand(new DeadCommand(ActorDeadType.Normal));
            }
        }
        public ShipTypes        SunkShip; //Filled in if ResultType is Sunk

        public AttackResult(int playerIndex, Position position, AttackResultType attackResultType = AttackResultType.Miss, ShipTypes sunkShip = ShipTypes.None)
        {
            PlayerIndex = playerIndex;
            Position    = position;
            ResultType  = attackResultType;
            SunkShip    = sunkShip;
        }