var examineMarkup = GetArmorExamine(armorModifiers);
+ var ev = new ArmorExamineEvent(examineMarkup);
+ RaiseLocalEvent(uid, ref ev);
+
_examine.AddDetailedExamineVerb(args, component, examineMarkup, Loc.GetString("armor-examinable-verb-text"), "/Textures/Interface/VerbIcons/dot.svg.192dpi.png", Loc.GetString("armor-examinable-verb-message"));
}
}
}
}
+
+[ByRefEvent]
+public record struct ArmorExamineEvent(FormattedMessage Msg);
public float DamageCoefficient = 1;
/// <summary>
- /// Like <see cref="GlobalResistance"/>, but specified specific to each explosion type for more customizability.
+ /// Modifiers specific to each explosion type for more customizability.
/// </summary>
[ViewVariables(VVAccess.ReadWrite)]
- [DataField("resistances", customTypeSerializer: typeof(PrototypeIdDictionarySerializer<float, ExplosionPrototype>))]
- public Dictionary<string, float> Resistances = new();
+ [DataField("modifiers", customTypeSerializer: typeof(PrototypeIdDictionarySerializer<float, ExplosionPrototype>))]
+ public Dictionary<string, float> Modifiers = new();
}
SubscribeLocalEvent<RoundRestartCleanupEvent>(OnReset);
+ SubscribeLocalEvent<ExplosionResistanceComponent, ArmorExamineEvent>(OnArmorExamine);
+
// Handled by ExplosionSystem.Processing.cs
SubscribeLocalEvent<MapChangedEvent>(OnMapChanged);
private void OnReset(RoundRestartCleanupEvent ev)
{
_explosionQueue.Clear();
- if (_activeExplosion !=null)
+ if (_activeExplosion != null)
QueueDel(_activeExplosion.VisualEnt);
_activeExplosion = null;
_nodeGroupSystem.PauseUpdating = false;
private void OnGetResistance(EntityUid uid, ExplosionResistanceComponent component, GetExplosionResistanceEvent args)
{
args.DamageCoefficient *= component.DamageCoefficient;
- if (component.Resistances.TryGetValue(args.ExplotionPrototype, out var resistance))
- args.DamageCoefficient *= resistance;
+ if (component.Modifiers.TryGetValue(args.ExplotionPrototype, out var modifier))
+ args.DamageCoefficient *= modifier;
}
/// <summary>
return MathF.Cbrt(3 * totalIntensity / (slope * MathF.PI));
}
- return r0 * (MathF.Sqrt(12 * totalIntensity/ v0 - 3) / 6 + 0.5f);
+ return r0 * (MathF.Sqrt(12 * totalIntensity / v0 - 3) / 6 + 0.5f);
}
/// <summary>
_recoilSystem.KickCamera(uid, -delta.Normalized * effect);
}
}
+
+ private void OnArmorExamine(EntityUid uid, ExplosionResistanceComponent component, ref ArmorExamineEvent args)
+ {
+ args.Msg.PushNewline();
+ args.Msg.AddMarkup(Loc.GetString("explosion-resistance-coefficient-value",
+ ("value", MathF.Round((1f - component.DamageCoefficient) * 100, 1))
+ ));
+ }
}