Пример #1
0
        private void ApplyPushDamage()
        {
            var damageToApply = movementRecieved.PushDamage;
            var hit           = true;

            if (rollType == EncounterRollType.Block)
            {
                damageToApply = Math.Max(0, damageToApply - blockRoll);
            }
            else if (rollType == EncounterRollType.Dodge)
            {
                if (dodgeRoll >= movementRecieved.DodgeLevel)
                {
                    damageToApply = 0;
                    hit           = false;
                }
                currentDefender.ConsumeStamina(1 + (currentDefender.isFrozen ? 1 : 0));
            }

            currentDefender.RecieveInjuries(damageToApply);

            DestroyDices();
            confirmButton.SetActive(false);
            if (hit)
            {
                ShowNextPushAwayPush();
            }
            else
            {
                currentDefender = null;
            }
        }
Пример #2
0
        private void PositionClicked(GameObject position)
        {
            if (canMove)
            {
                var currentUnitObject = currentUnit.gameObject;
                var pathcost          = PathFinder.GetPathStaminaCost(currentPath, firstMovementFree, currentUnit.isFrozen);

                if (currentUnit.HasEnoughStaminaToMove() <= pathcost)
                {
                    return;
                }

                var moveCommand = new UnitMovement()
                {
                    MoveFrom = positions.FirstOrDefault(p => p.HasUnit(currentUnitObject)),
                    MoveTo   = positions.First(pos => pos.gameObject == position),
                    Unit     = currentUnitObject
                };

                firstMovementFree   = false;
                currentUnitHasMoved = true;
                currentUnit.ConsumeStamina(pathcost);

                EventManager.RaiseEvent(ObjectEventType.UnitMoved, moveCommand);

                if (currentSelectedAttack != null)
                {
                    ShowSelectedAttackTargets(currentSelectedAttack);
                }
            }
        }
Пример #3
0
        private void ApplyResult()
        {
            var damageToApply = damageRoll;
            var hit           = true;

            if (rollType == EncounterRollType.Block || rollType == EncounterRollType.Attack)
            {
                damageToApply = System.Math.Max(0, damageToApply - blockRoll);
            }
            else if (rollType == EncounterRollType.Dodge)
            {
                if (dodgeRoll >= attackRecieved.DodgeLevel)
                {
                    damageToApply = 0;
                    hit           = false;
                }
                defenderCurrent.ConsumeStamina(1 + (defenderCurrent.isFrozen ? 1 : 0));
            }

            defenderCurrent.RecieveInjuries(damageToApply);

            if (hit)
            {
                defenderCurrent.isBleeding  = defenderCurrent.isBleeding || attackRecieved.Bleed;
                defenderCurrent.isPoisoned  = defenderCurrent.isPoisoned || attackRecieved.Poison;
                defenderCurrent.isStaggered = defenderCurrent.isStaggered || attackRecieved.Stagger;
                defenderCurrent.isFrozen    = defenderCurrent.isFrozen || attackRecieved.Frozen;
            }

            if (hit && attackRecieved.Push)
            {
                confirmButton.SetActive(false);
                pushMover.SetupAndShow(defenderCurrent, MoveChoserType.Push, attackerRecieved);
            }
            else
            {
                ApplyResultFinalize();
            }
        }
Пример #4
0
 void Update()
 {
     if (resolvingEncounter)
     {
         if (currentStep == EncounterStep.None)
         {
             ResetShowAttacker();
             currentStep = EncounterStep.ShiftBefore;
             SetupForShift();
         }
         else if (currentStep == EncounterStep.ShiftBefore && shiftBeforeResolved == attackRecieved.ShiftBefore)
         {
             currentStep = EncounterStep.Attack;
             SetupForAttack();
             FindAllPotentialTargets();
             if (attackerRecieved.side == UnitSide.Player)
             {
                 ShowNextDefender();
             }
         }
         else if (currentStep == EncounterStep.Attack && attackResolved)
         {
             currentStep     = EncounterStep.Defense;
             defenseResolved = false;
             ClearCurrent();
         }
         else if (currentStep == EncounterStep.Defense)
         {
             if (defenseResolved) // all defenses resolved for this same attack.
             {
                 currentStep = EncounterStep.ShiftAfter;
                 SetupForShift();
             }
             else if (IsCurrentCleared()) // load next defender against same attack.
             {
                 ShowNextDefender();
             }
             else if (!currentDefenderIsSetup)
             {
                 SetupForDefender();
             }
         }
         else if (currentStep == EncounterStep.ShiftAfter && shiftAfterResolved == attackRecieved.ShiftAfter)
         {
             if (attackRepeatCounter < attackRecieved.Repeat)
             {
                 attackRepeatCounter++;
                 currentStep = EncounterStep.None;
                 CloneRecievedToCurrent();
                 SetupForAttack();
             }
             else
             {
                 currentStep = EncounterStep.Resolved;
             }
         }
         else if (currentStep == EncounterStep.Resolved)
         {
             resolvingEncounter = false;
             attackerRecieved.ConsumeStamina(attackRecieved.StaminaCost);
             EventManager.RaiseEvent(ObjectEventType.EncountersResolved);
             SetGlobalVisibility(false);
         }
     }
 }