ECS buckle (#12586)

This commit is contained in:
DrSmugleaf
2022-11-14 20:30:30 +01:00
committed by GitHub
parent 3b818e836b
commit d5ae5658a1
13 changed files with 752 additions and 776 deletions

View File

@@ -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);
});