private void CreateDamageIndication(DamageActorInteractionEvent interactionEvent) { // Индикатор урона выводим над целевым актёром. // Потому что это он получил урон. var damagedActorViewModel = SectorViewModel.ActorViewModels.SingleOrDefault(x => x.Actor == interactionEvent.TargetActor); if (damagedActorViewModel == null) { return; } // Урон выводим, только если он был больше нуля. // В ином случае считаем, что цель заблокировала урон. if (interactionEvent.DamageEfficientCalcResult.ResultEfficient > 0) { // Пока индикаторы уроне не выводим. См #678. // Сейчас индикаторы вносят больше путаницы. //CreateNumericDamageIndicator(interactionEvent, damagedActorViewModel); CreateBloodTracker(damagedActorViewModel); } else { CreateNoDamageIndicator(damagedActorViewModel, BlockIndicatorPrefab); var attackActorViewModel = SectorViewModel.ActorViewModels.SingleOrDefault(x => x.Actor == interactionEvent.Actor); if (attackActorViewModel != null) { CreateBlockSparks(damagedActorViewModel, attackActorViewModel); } } }
private string GetDamageLog(Language currentLanguage, DamageActorInteractionEvent interactionEvent) { try { string damageTemplate; MonsterPerson logPerson; if (interactionEvent.Actor == _sectorUiState.ActiveActor.Actor) { damageTemplate = StaticPhrases.GetValue("log-player-damage-template", currentLanguage); logPerson = interactionEvent.TargetActor.Person as MonsterPerson; } else { damageTemplate = StaticPhrases.GetValue("log-monster-damage-template", currentLanguage); logPerson = interactionEvent.Actor.Person as MonsterPerson; } var logActorDisplayName = LocalizationHelper.GetValueOrDefaultNoname(currentLanguage, logPerson.Scheme.Name); var damageLog = string.Format( damageTemplate, logActorDisplayName, interactionEvent.DamageEfficientCalcResult.ResultEfficient); return(damageLog); } catch (NullReferenceException) { //TODO Some error. Fix it after release return(string.Empty); } }
private void CreateNumericDamageIndicator(DamageActorInteractionEvent interactionEvent, ActorViewModel damagedActorViewModel) { var damageIndicator = Instantiate(DamageIndicatorPrefab); damageIndicator.transform.SetParent(SectorViewModel.transform); damageIndicator.Init(damagedActorViewModel, interactionEvent.DamageEfficientCalcResult.ResultEfficient); }
private void ProcessSuccessfulAttackEvent( IActor actor, IActor targetActor, DamageEfficientCalc damageEfficientCalcResult, int successToHitRoll, int factToHitRoll) { if (ActorInteractionBus == null) { return; } var damageEvent = new DamageActorInteractionEvent(actor, targetActor, damageEfficientCalcResult) { SuccessToHitRoll = successToHitRoll, FactToHitRoll = factToHitRoll }; ActorInteractionBus.PushEvent(damageEvent); }