private void BeforeDamageOnTrigger(EntityUid uid, MousetrapComponent component, BeforeDamageOnTriggerEvent args)
    {
        foreach (var slot in component.IgnoreDamageIfSlotFilled)
        {
            if (!_inventorySystem.TryGetSlotContainer(args.Tripper, slot, out var container, out _))
            {
                continue;
            }

            // This also means that wearing slippers won't
            // hurt the entity.
            if (container.ContainedEntity != null)
            {
                args.Damage *= 0;
                return;
            }
        }

        if (TryComp(args.Tripper, out PhysicsComponent? physics) && physics.Mass != 0)
        {
            // The idea here is inverse,
            // Small - big damage,
            // Large - small damage
            // yes i punched numbers into a calculator until the graph looked right
            var scaledDamage = -50 * Math.Atan(physics.Mass - component.MassBalance) + (25 * Math.PI);
            args.Damage *= scaledDamage;
        }
    }
Exemple #2
0
    private void OnDamageTrigger(EntityUid source, EntityUid target, DamageOnTriggerComponent?component = null)
    {
        if (!Resolve(source, ref component))
        {
            return;
        }

        var damage = new DamageSpecifier(component.Damage);
        var ev     = new BeforeDamageOnTriggerEvent(damage, target);

        RaiseLocalEvent(source, ev, true);

        _damageableSystem.TryChangeDamage(target, ev.Damage, component.IgnoreResistances);
    }