SlippingTest.cs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #nullable enable
  2. using System.Collections.Generic;
  3. using Content.IntegrationTests.Tests.Interaction;
  4. using Content.Shared.Movement.Components;
  5. using Content.Shared.Slippery;
  6. using Content.Shared.Stunnable;
  7. using Robust.Shared.GameObjects;
  8. using Robust.Shared.Input;
  9. using Robust.Shared.Maths;
  10. namespace Content.IntegrationTests.Tests.Movement;
  11. public sealed class SlippingTest : MovementTest
  12. {
  13. public sealed class SlipTestSystem : EntitySystem
  14. {
  15. public HashSet<EntityUid> Slipped = new();
  16. public override void Initialize()
  17. {
  18. SubscribeLocalEvent<SlipperyComponent, SlipEvent>(OnSlip);
  19. }
  20. private void OnSlip(EntityUid uid, SlipperyComponent component, ref SlipEvent args)
  21. {
  22. Slipped.Add(args.Slipped);
  23. }
  24. }
  25. [Test]
  26. public async Task BananaSlipTest()
  27. {
  28. var sys = SEntMan.System<SlipTestSystem>();
  29. await SpawnTarget("TrashBananaPeel");
  30. var modifier = Comp<MovementSpeedModifierComponent>(Player).SprintSpeedModifier;
  31. Assert.That(modifier, Is.EqualTo(1), "Player is not moving at full speed.");
  32. // Player is to the left of the banana peel and has not slipped.
  33. Assert.That(Delta(), Is.GreaterThan(0.5f));
  34. Assert.That(sys.Slipped, Does.Not.Contain(SEntMan.GetEntity(Player)));
  35. // Walking over the banana slowly does not trigger a slip.
  36. await SetKey(EngineKeyFunctions.Walk, BoundKeyState.Down);
  37. await Move(DirectionFlag.East, 1f);
  38. Assert.That(Delta(), Is.LessThan(0.5f));
  39. Assert.That(sys.Slipped, Does.Not.Contain(SEntMan.GetEntity(Player)));
  40. AssertComp<KnockedDownComponent>(false, Player);
  41. // Moving at normal speeds does trigger a slip.
  42. await SetKey(EngineKeyFunctions.Walk, BoundKeyState.Up);
  43. await Move(DirectionFlag.West, 1f);
  44. Assert.That(sys.Slipped, Does.Contain(SEntMan.GetEntity(Player)));
  45. AssertComp<KnockedDownComponent>(true, Player);
  46. }
  47. }