SharedCreamPieSystem.cs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. using Content.Shared.Nutrition.Components;
  2. using Content.Shared.Stunnable;
  3. using Content.Shared.Throwing;
  4. using JetBrains.Annotations;
  5. namespace Content.Shared.Nutrition.EntitySystems
  6. {
  7. [UsedImplicitly]
  8. public abstract class SharedCreamPieSystem : EntitySystem
  9. {
  10. [Dependency] private SharedStunSystem _stunSystem = default!;
  11. [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
  12. public override void Initialize()
  13. {
  14. base.Initialize();
  15. SubscribeLocalEvent<CreamPieComponent, ThrowDoHitEvent>(OnCreamPieHit);
  16. SubscribeLocalEvent<CreamPieComponent, LandEvent>(OnCreamPieLand);
  17. SubscribeLocalEvent<CreamPiedComponent, ThrowHitByEvent>(OnCreamPiedHitBy);
  18. }
  19. public void SplatCreamPie(EntityUid uid, CreamPieComponent creamPie)
  20. {
  21. // Already splatted! Do nothing.
  22. if (creamPie.Splatted)
  23. return;
  24. creamPie.Splatted = true;
  25. SplattedCreamPie(uid, creamPie);
  26. }
  27. protected virtual void SplattedCreamPie(EntityUid uid, CreamPieComponent creamPie) {}
  28. public void SetCreamPied(EntityUid uid, CreamPiedComponent creamPied, bool value)
  29. {
  30. if (value == creamPied.CreamPied)
  31. return;
  32. creamPied.CreamPied = value;
  33. if (EntityManager.TryGetComponent(uid, out AppearanceComponent? appearance))
  34. {
  35. _appearance.SetData(uid, CreamPiedVisuals.Creamed, value, appearance);
  36. }
  37. }
  38. private void OnCreamPieLand(EntityUid uid, CreamPieComponent component, ref LandEvent args)
  39. {
  40. SplatCreamPie(uid, component);
  41. }
  42. private void OnCreamPieHit(EntityUid uid, CreamPieComponent component, ThrowDoHitEvent args)
  43. {
  44. SplatCreamPie(uid, component);
  45. }
  46. private void OnCreamPiedHitBy(EntityUid uid, CreamPiedComponent creamPied, ThrowHitByEvent args)
  47. {
  48. if (!EntityManager.EntityExists(args.Thrown) || !EntityManager.TryGetComponent(args.Thrown, out CreamPieComponent? creamPie)) return;
  49. SetCreamPied(uid, creamPied, true);
  50. CreamedEntity(uid, creamPied, args);
  51. _stunSystem.TryParalyze(uid, TimeSpan.FromSeconds(creamPie.ParalyzeTime), true);
  52. }
  53. protected virtual void CreamedEntity(EntityUid uid, CreamPiedComponent creamPied, ThrowHitByEvent args) {}
  54. }
  55. }