Make DisposalUnitComponent.TryInsert ECS (#4959)

This commit is contained in:
Javier Guardia Fernández
2021-10-20 21:12:23 +02:00
committed by GitHub
parent ecbcab4824
commit 3e5a856948
5 changed files with 115 additions and 73 deletions

View File

@@ -1,5 +1,3 @@
#nullable enable
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Content.Server.Disposal.Tube.Components;
@@ -7,9 +5,11 @@ using Content.Server.Disposal.Unit.Components;
using Content.Server.Disposal.Unit.EntitySystems;
using Content.Server.Power.Components;
using Content.Shared.Coordinates;
using Content.Shared.Disposal;
using NUnit.Framework;
using Robust.Shared.GameObjects;
using Robust.Shared.Map;
using Robust.Shared.Reflection;
using Robust.Shared.Timing;
namespace Content.IntegrationTests.Tests.Disposal
@@ -20,25 +20,33 @@ namespace Content.IntegrationTests.Tests.Disposal
[TestOf(typeof(DisposalUnitComponent))]
public class DisposalUnitTest : ContentIntegrationTest
{
private async Task UnitInsert(DisposalUnitComponent unit, bool result, params IEntity[] entities)
[Reflect(false)]
private class DisposalUnitTestSystem : EntitySystem
{
List<Task> insertionTasks = new();
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<DoInsertDisposalUnitEvent>(ev =>
{
var (_, toInsert, unit) = ev;
var insertTransform = EntityManager.GetComponent<ITransformComponent>(toInsert);
var unitTransform = EntityManager.GetComponent<ITransformComponent>(unit);
// Not in a tube yet
Assert.That(insertTransform.Parent, Is.EqualTo(unitTransform));
}, after: new[] {typeof(SharedDisposalUnitSystem)});
}
}
private void UnitInsert(DisposalUnitComponent unit, bool result, params IEntity[] entities)
{
var system = EntitySystem.Get<DisposalUnitSystem>();
foreach (var entity in entities)
{
Assert.That(EntitySystem.Get<DisposalUnitSystem>().CanInsert(unit, entity), Is.EqualTo(result));
var insertTask = unit.TryInsert(entity).ContinueWith(task =>
{
Assert.That(task.Result, Is.EqualTo(result));
if (result)
{
// Not in a tube yet
Assert.That(entity.Transform.Parent, Is.EqualTo(unit.Owner.Transform));
}
});
insertionTasks.Add(insertTask);
Assert.That(system.CanInsert(unit, entity), Is.EqualTo(result));
system.TryInsert(unit.Owner.Uid, entity.Uid, entity.Uid);
}
await Task.WhenAll(insertionTasks.ToArray());
}
private void UnitContains(DisposalUnitComponent unit, bool result, params IEntity[] entities)
@@ -49,9 +57,9 @@ namespace Content.IntegrationTests.Tests.Disposal
}
}
private async void UnitInsertContains(DisposalUnitComponent unit, bool result, params IEntity[] entities)
private void UnitInsertContains(DisposalUnitComponent unit, bool result, params IEntity[] entities)
{
await UnitInsert(unit, result, entities);
UnitInsert(unit, result, entities);
UnitContains(unit, result, entities);
}
@@ -75,6 +83,7 @@ namespace Content.IntegrationTests.Tests.Disposal
damageContainer: Biological
- type: Physics
bodyType: KinematicController
- type: DoAfter
- type: entity
name: WrenchDummy
@@ -86,12 +95,15 @@ namespace Content.IntegrationTests.Tests.Disposal
- Anchoring
- type: Physics
bodyType: Dynamic
- type: DoAfter
- type: entity
name: DisposalUnitDummy
id: DisposalUnitDummy
components:
- type: DisposalUnit
entryDelay: 0
draggedEntryDelay: 0
- type: Anchorable
- type: ApcPowerReceiver
- type: Physics
@@ -123,7 +135,6 @@ namespace Content.IntegrationTests.Tests.Disposal
var mapManager = server.ResolveDependency<IMapManager>();
var entityManager = server.ResolveDependency<IEntityManager>();
var pauseManager = server.ResolveDependency<IPauseManager>();
var componentFactory = server.ResolveDependency<IComponentFactory>();
var tileDefinitionManager = server.ResolveDependency<ITileDefinitionManager>();
// Build up test environment
@@ -206,7 +217,7 @@ namespace Content.IntegrationTests.Tests.Disposal
await server.WaitAssertion(() =>
{
// Remove power need
Assert.True(disposalUnit.TryGetComponent(out ApcPowerReceiverComponent? power));
Assert.True(disposalUnit.TryGetComponent(out ApcPowerReceiverComponent power));
power!.NeedsPower = false;
Assert.True(unit.Powered);