ModularGrenadeTests.cs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. using Content.IntegrationTests.Tests.Interaction;
  2. using Content.Server.Explosion.Components;
  3. using Content.Shared.Explosion.Components;
  4. using Robust.Shared.Containers;
  5. using Robust.Shared.GameObjects;
  6. namespace Content.IntegrationTests.Tests.Payload;
  7. public sealed class ModularGrenadeTests : InteractionTest
  8. {
  9. public const string Trigger = "TimerTrigger";
  10. public const string Payload = "ExplosivePayload";
  11. /// <summary>
  12. /// Test that a modular grenade can be fully crafted and detonated.
  13. /// </summary>
  14. [Test]
  15. public async Task AssembleAndDetonateGrenade()
  16. {
  17. await PlaceInHands(Steel, 5);
  18. await CraftItem("ModularGrenadeRecipe");
  19. Target = SEntMan.GetNetEntity(await FindEntity("ModularGrenade"));
  20. await Drop();
  21. await InteractUsing(Cable);
  22. // Insert & remove trigger
  23. AssertComp<OnUseTimerTriggerComponent>(false);
  24. await InteractUsing(Trigger);
  25. AssertComp<OnUseTimerTriggerComponent>();
  26. await FindEntity(Trigger, LookupFlags.Uncontained, shouldSucceed: false);
  27. await InteractUsing(Pry);
  28. AssertComp<OnUseTimerTriggerComponent>(false);
  29. // Trigger was dropped to floor, not deleted.
  30. await FindEntity(Trigger, LookupFlags.Uncontained);
  31. // Re-insert
  32. await InteractUsing(Trigger);
  33. AssertComp<OnUseTimerTriggerComponent>();
  34. // Insert & remove payload.
  35. await InteractUsing(Payload);
  36. await FindEntity(Payload, LookupFlags.Uncontained, shouldSucceed: false);
  37. await InteractUsing(Pry);
  38. var ent = await FindEntity(Payload, LookupFlags.Uncontained);
  39. await Delete(ent);
  40. // successfully insert a second time
  41. await InteractUsing(Payload);
  42. ent = await FindEntity(Payload);
  43. var sys = SEntMan.System<SharedContainerSystem>();
  44. Assert.That(sys.IsEntityInContainer(ent));
  45. // Activate trigger.
  46. await Pickup();
  47. AssertComp<ActiveTimerTriggerComponent>(false);
  48. await UseInHand();
  49. // So uhhh grenades in hands don't destroy themselves when exploding. Maybe that will be fixed eventually.
  50. await Drop();
  51. // Wait until grenade explodes
  52. var timer = Comp<ActiveTimerTriggerComponent>();
  53. while (timer.TimeRemaining >= 0)
  54. {
  55. await RunTicks(10);
  56. }
  57. // Grenade has exploded.
  58. await RunTicks(30);
  59. AssertDeleted();
  60. }
  61. }