* Rename SolutionContainerCaps -> Capability * Move IExamine event to Chemistry System. * ECS the ISolutionChange into SolutionChangeEvent * Unify SolutionContainer into a single shared component * Replace ISolutionInteraction with SolutionContainerComponent * Move all methods from SolutionContainer to ChemistrySystem * Refactor EntitySystem calls to Dependencies * Refactor SolutionContainer to SolutionManager * Fix yamls * Fix test fails * Fix post merge issues * Fix various issues with SolutionManager * More fixes * Fix more components * Fix events not being directed * Fixes for Hypospray * Separate removal and iteration on Metabolism * Fix creampie problems * Address some of sloth's issues * Refactors for Systems * Refactored solution location * Fix tests * Address more sloth issues * Fix dependency * Fix merge conflicts * Add xmldocs for Capabilities components * Remove HasSolution/TryGetDefaultSolution and Add/Remove Drainable/Refillable * Replace Grindable/Juiceable with Extractable * Refactor field names * Fix Drainable * Fix some issues with spillable and injector * Fix issues with Grinder * Fix Beaker having duplicate solutions * Fix foaming * Address some MGS issues * Fix Uid issues * Fix errors in solution Tranfer * Fixed some extra values constant values * Cola is drinkable now
60 lines
2.2 KiB
C#
60 lines
2.2 KiB
C#
using System;
|
|
using Content.Server.Chemistry.Components;
|
|
using Content.Server.Explosion;
|
|
using Content.Shared.Chemistry.Components;
|
|
using Content.Shared.Chemistry.Components.SolutionManager;
|
|
using Content.Shared.Chemistry.Reaction;
|
|
using Robust.Shared.GameObjects;
|
|
using Robust.Shared.Serialization.Manager.Attributes;
|
|
|
|
namespace Content.Server.Chemistry.ReactionEffects
|
|
{
|
|
[DataDefinition]
|
|
public class ExplosionReactionEffect : IReactionEffect
|
|
{
|
|
[DataField("devastationRange")] private float _devastationRange = 1;
|
|
[DataField("heavyImpactRange")] private float _heavyImpactRange = 2;
|
|
[DataField("lightImpactRange")] private float _lightImpactRange = 3;
|
|
[DataField("flashRange")] private float _flashRange;
|
|
|
|
/// <summary>
|
|
/// If true, then scale ranges by intensity. If not, the ranges are the same regardless of reactant amount.
|
|
/// </summary>
|
|
[DataField("scaled")] private bool _scaled;
|
|
|
|
/// <summary>
|
|
/// Maximum scaling on ranges. For example, if it equals 5, then it won't scaled anywhere past
|
|
/// 5 times the minimum reactant amount.
|
|
/// </summary>
|
|
[DataField("maxScale")] private float _maxScale = 1;
|
|
|
|
public void React(Solution solution, IEntity solutionEntity, double intensity)
|
|
{
|
|
var floatIntensity = (float) intensity;
|
|
|
|
if (!solutionEntity.HasComponent<SolutionContainerManagerComponent>())
|
|
return;
|
|
|
|
//Handle scaling
|
|
if (_scaled)
|
|
{
|
|
floatIntensity = MathF.Min(floatIntensity, _maxScale);
|
|
}
|
|
else
|
|
{
|
|
floatIntensity = 1;
|
|
}
|
|
|
|
//Calculate intensities
|
|
var finalDevastationRange = (int)MathF.Round(_devastationRange * floatIntensity);
|
|
var finalHeavyImpactRange = (int)MathF.Round(_heavyImpactRange * floatIntensity);
|
|
var finalLightImpactRange = (int)MathF.Round(_lightImpactRange * floatIntensity);
|
|
var finalFlashRange = (int)MathF.Round(_flashRange * floatIntensity);
|
|
solutionEntity.SpawnExplosion(finalDevastationRange,
|
|
finalHeavyImpactRange, finalLightImpactRange, finalFlashRange);
|
|
}
|
|
}
|
|
}
|
|
|
|
|