Пример #1
0
        public void Handle(ImpactEvent arg)
        {
            if (arg.Hit <= 0)
            {
                return;
            }
            var component    = arg.Source.Find <HealImpact>();
            var sourceEntity = component.GetEntity();
            var stats        = sourceEntity.Get <StatsContainer>();

            if (component == null || stats == null)
            {
                return;
            }
            var target    = component.HealSelf ? arg.Origin : arg.Target;
            var power     = RulesSystem.CalculateTotal(stats, Stats.Power, component.NormalizedPercent);
            var logSystem = World.Get <GameLogSystem>();

            logSystem.StartNewMessage(out var logMsg, out var hoverMsg);
            logMsg.Append(arg.Origin.GetName());
            logMsg.Append(" healed ");
            logMsg.Append(target.GetName());
            logMsg.Append(" for ");
            logMsg.Append(power.ToString("F0"));
            hoverMsg.Append(RulesSystem.LastQueryString);
            logSystem.PostCurrentStrings(GameLogSystem.DamageColor);
            target.Post(new HealingEvent(power, arg.Origin, target, component.TargetVital));
        }
Пример #2
0
        public void Handle(ImpactEvent arg)
        {
            if (arg.Hit <= 0)
            {
                return;
            }
            var addMod       = arg.Source.Find <AddModImpact>();
            var sourceEntity = addMod.GetEntity();
            var stats        = sourceEntity.Get <StatsContainer>();

            if (addMod == null || stats == null)
            {
                return;
            }
            var stat = stats.Get(addMod.TargetStat);

            if (stat == null)
            {
                return;
            }
            if (stat.HasMod(addMod.ID))
            {
                RemoveStatMod(addMod.ID);
            }
            var power = RulesSystem.CalculateTotal(stats, Stats.Power, addMod.NormalizedPercent);

            stat.AddValueMod(new BaseStat.StatValueMod(power, addMod.ID));
            _fastString.Clear();
            _fastString.Append("+");
            _fastString.Append(power);
            _fastString.Append(" ");
            _fastString.Append(stat.Label);
            var label = _fastString.ToString();

            AddStatRemovalTimer(
                new RemoveStatModifier(
                    stat, new ModEntry(
                        label, label, addMod.ID, addMod.Length,
                        arg.Origin.Entity, arg.Target.Entity, addMod.Icon)));
            arg.Target.Post(new ModifiersChanged(arg.Target.Entity));
            var logSystem = World.Get <GameLogSystem>();

            logSystem.StartNewMessage(out var logMsg, out var hoverMsg);
            logMsg.Append(arg.Origin.GetName());
            logMsg.Append(" added ");
            logMsg.Append(stat.Label);
            logMsg.Append(" modifier to ");
            logMsg.Append(arg.Target.GetName());

            hoverMsg.AppendNewLine(RulesSystem.LastQueryString.ToString());
            hoverMsg.Append(label);
            hoverMsg.Append(" for ");
            hoverMsg.Append(addMod.Length);
            hoverMsg.Append(" ");
            hoverMsg.Append(StringConst.TimeUnits);
            logSystem.PostCurrentStrings(power > 0 ? GameLogSystem.HealColor : GameLogSystem.DamageColor);
        }
Пример #3
0
        /*
         * var amt = arg.Amount;
         *  bool isCritical = false;
         *  string source = arg.Origin.Get<LabelComponent>()?.Text;
         *  if (string.IsNullOrEmpty(source)) {
         *      var msg = isCritical ? CombatMessages.DamagedCritNoActor : CombatMessages.DamagedNoActor;
         *      msg.Show(UIStyle.Damage.ToHex(), Name, amt.ToString("F0"));
         *  }
         *  else {
         *      var msg = isCritical ? CombatMessages.DamagedCritActor : CombatMessages.DamageFromActor;
         *      msg.Show(UIStyle.Damage.ToHex(), source, Name, amt.ToString("F0"));
         *  }
         */

        public void Handle(ImpactEvent arg)
        {
            if (arg.Hit <= 0)
            {
                return;
            }
            var component    = arg.Source.Find <DamageImpact>();
            var sourceEntity = component.GetEntity();
            var stats        = sourceEntity.Get <StatsContainer>();

            if (component == null || stats == null)
            {
                return;
            }
            var targetStat = arg.Target.Stats.GetVital(component.TargetVital);

            if (targetStat == null)
            {
                return;
            }
            var power     = RulesSystem.CalculateTotal(stats, Stats.Power, component.NormalizedPercent);
            var logSystem = World.Get <GameLogSystem>();

            logSystem.StartNewMessage(out var logMsg, out var hoverMsg);
            logMsg.Append(arg.Origin.GetName());
            logMsg.Append(" hit ");
            logMsg.Append(power.ToString("F0"));
            logMsg.Append(" ");
            logMsg.Append(targetStat.Label);
            logMsg.Append(" for ");
            logMsg.Append(arg.Target.GetName());
            hoverMsg.Append(RulesSystem.LastQueryString);
            logSystem.PostCurrentStrings(GameLogSystem.DamageColor);
            //CollisionExtensions.GetHitMultiplier(impact.Hit, impact.Target)
            arg.Target.Post(new TakeDamageEvent(power, arg, component.DamageType, component.TargetVital));
        }