Explosion now throws affected entities, fixes probability/severi… (#732)

* throwforce and probability fixes for explosions

Applies force to all affected by explosion entities with ItemComponent
Fixes probability issues with explosion related callbacks

* dependency fix, throw helper

* delete TODO

Co-authored-by: gituhabu <48828502+gituhabu@users.noreply.github.com>
This commit is contained in:
Injazz
2020-02-24 07:52:15 +05:00
committed by GitHub
parent 090dd8cee8
commit 15fa417a4f
8 changed files with 123 additions and 47 deletions

View File

@@ -1,5 +1,9 @@
using Content.Server.GameObjects.EntitySystems;
using System;
using Content.Server.GameObjects.Components;
using Content.Server.GameObjects.Components.Destructible;
using Content.Server.GameObjects.EntitySystems;
using Content.Server.Interfaces.GameObjects;
using Content.Server.Throw;
using Content.Shared.GameObjects;
using Content.Shared.GameObjects.Components.Items;
using Content.Shared.Physics;
@@ -7,12 +11,15 @@ using Robust.Server.GameObjects;
using Robust.Server.Interfaces.GameObjects;
using Robust.Shared.Containers;
using Robust.Shared.GameObjects;
using Robust.Shared.GameObjects.Components;
using Robust.Shared.Interfaces.GameObjects;
using Robust.Shared.Interfaces.Map;
using Robust.Shared.Interfaces.Physics;
using Robust.Shared.Interfaces.Random;
using Robust.Shared.Interfaces.Timing;
using Robust.Shared.IoC;
using Robust.Shared.Maths;
using Robust.Shared.Physics;
using Robust.Shared.Random;
using Robust.Shared.Serialization;
@@ -20,7 +27,7 @@ namespace Content.Server.GameObjects
{
[RegisterComponent]
[ComponentReference(typeof(StoreableComponent))]
public class ItemComponent : StoreableComponent, IAttackHand
public class ItemComponent : StoreableComponent, IAttackHand, IExAct
{
public override string Name => "Item";
public override uint? NetID => ContentNetIDs.ITEM;
@@ -28,6 +35,7 @@ namespace Content.Server.GameObjects
#pragma warning disable 649
[Dependency] private readonly IRobustRandom _robustRandom;
[Dependency] private readonly IEntitySystemManager _entitySystemManager;
[Dependency] private readonly IMapManager _mapManager;
#pragma warning restore 649
private string _equippedPrefix;
@@ -139,5 +147,29 @@ namespace Content.Server.GameObjects
return (_robustRandom.NextFloat() * size) - size / 2;
}
}
public void OnExplosion(ExplosionEventArgs eventArgs)
{
var sourceLocation = eventArgs.Source;
var targetLocation = eventArgs.Target.Transform.GridPosition;
var dirVec = (targetLocation.ToMapPos(_mapManager) - sourceLocation.ToMapPos(_mapManager)).Normalized;
var throwForce = 1.0f;
switch (eventArgs.Severity)
{
case ExplosionSeverity.Destruction:
throwForce = 3.0f;
break;
case ExplosionSeverity.Heavy:
throwForce = 2.0f;
break;
case ExplosionSeverity.Light:
throwForce = 1.0f;
break;
}
ThrowHelper.Throw(Owner, throwForce, targetLocation, sourceLocation, true);
}
}
}