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; } }
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); } } }
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(); } }
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); } } }