Example #1
0
    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);
            }
        }
    }
Example #2
0
    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);
        }
    }
Example #3
0
    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);
        }