ECS buckle (#12586)
This commit is contained in:
@@ -1,11 +1,11 @@
|
||||
using System.Threading.Tasks;
|
||||
using Content.Server.Body.Systems;
|
||||
using Content.Server.Buckle.Components;
|
||||
using Content.Server.Buckle.Systems;
|
||||
using Content.Server.Hands.Components;
|
||||
using Content.Shared.ActionBlocker;
|
||||
using Content.Shared.Body.Components;
|
||||
using Content.Shared.Body.Part;
|
||||
using Content.Shared.Buckle.Components;
|
||||
using Content.Shared.Hands.EntitySystems;
|
||||
using Content.Shared.Standing;
|
||||
using NUnit.Framework;
|
||||
@@ -57,9 +57,9 @@ namespace Content.IntegrationTests.Tests.Buckle
|
||||
var coordinates = testMap.GridCoords;
|
||||
var entityManager = server.ResolveDependency<IEntityManager>();
|
||||
var actionBlocker = entityManager.EntitySysManager.GetEntitySystem<ActionBlockerSystem>();
|
||||
var buckleSystem = entityManager.EntitySysManager.GetEntitySystem<BuckleSystem>();
|
||||
var standingState = entityManager.EntitySysManager.GetEntitySystem<StandingStateSystem>();
|
||||
|
||||
|
||||
EntityUid human = default;
|
||||
EntityUid chair = default;
|
||||
BuckleComponent buckle = null;
|
||||
@@ -87,18 +87,17 @@ namespace Content.IntegrationTests.Tests.Buckle
|
||||
Assert.Zero(strap.OccupiedSize);
|
||||
|
||||
// Side effects of buckling
|
||||
Assert.True(buckle.TryBuckle(human, chair));
|
||||
Assert.True(buckleSystem.TryBuckle(human, human, chair, buckle));
|
||||
Assert.NotNull(buckle.BuckledTo);
|
||||
Assert.True(buckle.Buckled);
|
||||
|
||||
Assert.True(((BuckleComponentState) buckle.GetComponentState()).Buckled);
|
||||
Assert.False(actionBlocker.CanMove(human));
|
||||
Assert.False(actionBlocker.CanChangeDirection(human));
|
||||
Assert.False(standingState.Down(human));
|
||||
Assert.That(
|
||||
(entityManager.GetComponent<TransformComponent>(human).WorldPosition -
|
||||
entityManager.GetComponent<TransformComponent>(chair).WorldPosition).Length,
|
||||
Is.LessThanOrEqualTo(buckle.BuckleOffset.Length));
|
||||
Is.LessThanOrEqualTo(0));
|
||||
|
||||
// Side effects of buckling for the strap
|
||||
Assert.That(strap.BuckledEntities, Does.Contain(human));
|
||||
@@ -106,11 +105,12 @@ namespace Content.IntegrationTests.Tests.Buckle
|
||||
Assert.Positive(strap.OccupiedSize);
|
||||
|
||||
// Trying to buckle while already buckled fails
|
||||
Assert.False(buckle.TryBuckle(human, chair));
|
||||
Assert.False(buckleSystem.TryBuckle(human, human, chair, buckle));
|
||||
|
||||
// Trying to unbuckle too quickly fails
|
||||
Assert.False(buckle.TryUnbuckle(human));
|
||||
Assert.False(buckle.ToggleBuckle(human, chair));
|
||||
Assert.False(buckleSystem.TryUnbuckle(human, human, buckle: buckle));
|
||||
Assert.True(buckle.Buckled);
|
||||
Assert.False(buckleSystem.ToggleBuckle(human, human, chair, buckle: buckle));
|
||||
Assert.True(buckle.Buckled);
|
||||
});
|
||||
|
||||
@@ -123,7 +123,7 @@ namespace Content.IntegrationTests.Tests.Buckle
|
||||
Assert.True(buckle.Buckled);
|
||||
|
||||
// Unbuckle
|
||||
Assert.True(buckle.TryUnbuckle(human));
|
||||
Assert.True(buckleSystem.TryUnbuckle(human, human, buckle: buckle));
|
||||
Assert.Null(buckle.BuckledTo);
|
||||
Assert.False(buckle.Buckled);
|
||||
Assert.True(actionBlocker.CanMove(human));
|
||||
@@ -135,15 +135,15 @@ namespace Content.IntegrationTests.Tests.Buckle
|
||||
Assert.Zero(strap.OccupiedSize);
|
||||
|
||||
// Re-buckling has no cooldown
|
||||
Assert.True(buckle.TryBuckle(human, chair));
|
||||
Assert.True(buckleSystem.TryBuckle(human, human, chair, buckle: buckle));
|
||||
Assert.True(buckle.Buckled);
|
||||
|
||||
// On cooldown
|
||||
Assert.False(buckle.TryUnbuckle(human));
|
||||
Assert.False(buckleSystem.TryUnbuckle(human, human, buckle: buckle));
|
||||
Assert.True(buckle.Buckled);
|
||||
Assert.False(buckle.ToggleBuckle(human, chair));
|
||||
Assert.False(buckleSystem.ToggleBuckle(human, human, chair, buckle: buckle));
|
||||
Assert.True(buckle.Buckled);
|
||||
Assert.False(buckle.ToggleBuckle(human, chair));
|
||||
Assert.False(buckleSystem.ToggleBuckle(human, human, chair, buckle: buckle));
|
||||
Assert.True(buckle.Buckled);
|
||||
});
|
||||
|
||||
@@ -156,38 +156,38 @@ namespace Content.IntegrationTests.Tests.Buckle
|
||||
Assert.True(buckle.Buckled);
|
||||
|
||||
// Unbuckle
|
||||
Assert.True(buckle.TryUnbuckle(human));
|
||||
Assert.True(buckleSystem.TryUnbuckle(human, human, buckle: buckle));
|
||||
Assert.False(buckle.Buckled);
|
||||
|
||||
// Move away from the chair
|
||||
entityManager.GetComponent<TransformComponent>(human).WorldPosition += (1000, 1000);
|
||||
|
||||
// Out of range
|
||||
Assert.False(buckle.TryBuckle(human, chair));
|
||||
Assert.False(buckle.TryUnbuckle(human));
|
||||
Assert.False(buckle.ToggleBuckle(human, chair));
|
||||
Assert.False(buckleSystem.TryBuckle(human, human, chair, buckle: buckle));
|
||||
Assert.False(buckleSystem.TryUnbuckle(human, human, buckle: buckle));
|
||||
Assert.False(buckleSystem.ToggleBuckle(human, human, chair, buckle: buckle));
|
||||
|
||||
// Move near the chair
|
||||
entityManager.GetComponent<TransformComponent>(human).WorldPosition =
|
||||
entityManager.GetComponent<TransformComponent>(chair).WorldPosition + (0.5f, 0);
|
||||
|
||||
// In range
|
||||
Assert.True(buckle.TryBuckle(human, chair));
|
||||
Assert.True(buckleSystem.TryBuckle(human, human, chair, buckle: buckle));
|
||||
Assert.True(buckle.Buckled);
|
||||
Assert.False(buckle.TryUnbuckle(human));
|
||||
Assert.False(buckleSystem.TryUnbuckle(human, human, buckle: buckle));
|
||||
Assert.True(buckle.Buckled);
|
||||
Assert.False(buckle.ToggleBuckle(human, chair));
|
||||
Assert.False(buckleSystem.ToggleBuckle(human, human, chair, buckle: buckle));
|
||||
Assert.True(buckle.Buckled);
|
||||
|
||||
// Force unbuckle
|
||||
Assert.True(buckle.TryUnbuckle(human, true));
|
||||
Assert.True(buckleSystem.TryUnbuckle(human, human, true, buckle: buckle));
|
||||
Assert.False(buckle.Buckled);
|
||||
Assert.True(actionBlocker.CanMove(human));
|
||||
Assert.True(actionBlocker.CanChangeDirection(human));
|
||||
Assert.True(standingState.Down(human));
|
||||
|
||||
// Re-buckle
|
||||
Assert.True(buckle.TryBuckle(human, chair));
|
||||
Assert.True(buckleSystem.TryBuckle(human, human, chair, buckle: buckle));
|
||||
|
||||
// Move away from the chair
|
||||
entityManager.GetComponent<TransformComponent>(human).WorldPosition += (1, 0);
|
||||
@@ -225,6 +225,7 @@ namespace Content.IntegrationTests.Tests.Buckle
|
||||
|
||||
var entityManager = server.ResolveDependency<IEntityManager>();
|
||||
var handsSys = entityManager.EntitySysManager.GetEntitySystem<SharedHandsSystem>();
|
||||
var buckleSystem = entityManager.EntitySysManager.GetEntitySystem<BuckleSystem>();
|
||||
|
||||
await server.WaitAssertion(() =>
|
||||
{
|
||||
@@ -238,7 +239,7 @@ namespace Content.IntegrationTests.Tests.Buckle
|
||||
Assert.True(entityManager.TryGetComponent(human, out body));
|
||||
|
||||
// Buckle
|
||||
Assert.True(buckle.TryBuckle(human, chair));
|
||||
Assert.True(buckleSystem.TryBuckle(human, human, chair, buckle: buckle));
|
||||
Assert.NotNull(buckle.BuckledTo);
|
||||
Assert.True(buckle.Buckled);
|
||||
|
||||
@@ -287,7 +288,7 @@ namespace Content.IntegrationTests.Tests.Buckle
|
||||
Assert.Null(hand.HeldEntity);
|
||||
}
|
||||
|
||||
buckle.TryUnbuckle(human, true);
|
||||
buckleSystem.TryUnbuckle(human, human, true, buckle: buckle);
|
||||
});
|
||||
|
||||
await pairTracker.CleanReturnAsync();
|
||||
@@ -303,6 +304,7 @@ namespace Content.IntegrationTests.Tests.Buckle
|
||||
var testMap = await PoolManager.CreateTestMap(pairTracker);
|
||||
var coordinates = testMap.GridCoords;
|
||||
var entityManager = server.ResolveDependency<IEntityManager>();
|
||||
var buckleSystem = entityManager.System<BuckleSystem>();
|
||||
|
||||
EntityUid human = default;
|
||||
EntityUid chair = default;
|
||||
@@ -318,7 +320,7 @@ namespace Content.IntegrationTests.Tests.Buckle
|
||||
Assert.True(entityManager.HasComponent<StrapComponent>(chair));
|
||||
|
||||
// Buckle
|
||||
Assert.True(buckle.TryBuckle(human, chair));
|
||||
Assert.True(buckleSystem.TryBuckle(human, human, chair, buckle: buckle));
|
||||
Assert.NotNull(buckle.BuckledTo);
|
||||
Assert.True(buckle.Buckled);
|
||||
|
||||
@@ -336,7 +338,7 @@ namespace Content.IntegrationTests.Tests.Buckle
|
||||
entityManager.GetComponent<TransformComponent>(human).WorldPosition -= (100, 0);
|
||||
|
||||
// Buckle
|
||||
Assert.True(buckle.TryBuckle(human, chair));
|
||||
Assert.True(buckleSystem.TryBuckle(human, human, chair, buckle: buckle));
|
||||
Assert.NotNull(buckle.BuckledTo);
|
||||
Assert.True(buckle.Buckled);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user