1
0

SmokingSystem.Cigar.cs 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. using Content.Server.Nutrition.Components;
  2. using Content.Shared.Interaction;
  3. using Content.Shared.Nutrition.Components;
  4. using Content.Shared.Smoking;
  5. using Content.Shared.Temperature;
  6. namespace Content.Server.Nutrition.EntitySystems
  7. {
  8. public sealed partial class SmokingSystem
  9. {
  10. private void InitializeCigars()
  11. {
  12. SubscribeLocalEvent<CigarComponent, ActivateInWorldEvent>(OnCigarActivatedEvent);
  13. SubscribeLocalEvent<CigarComponent, InteractUsingEvent>(OnCigarInteractUsingEvent);
  14. SubscribeLocalEvent<CigarComponent, SmokableSolutionEmptyEvent>(OnCigarSolutionEmptyEvent);
  15. SubscribeLocalEvent<CigarComponent, AfterInteractEvent>(OnCigarAfterInteract);
  16. }
  17. private void OnCigarActivatedEvent(Entity<CigarComponent> entity, ref ActivateInWorldEvent args)
  18. {
  19. if (args.Handled || !args.Complex)
  20. return;
  21. if (!EntityManager.TryGetComponent(entity, out SmokableComponent? smokable))
  22. return;
  23. if (smokable.State != SmokableState.Lit)
  24. return;
  25. SetSmokableState(entity, SmokableState.Burnt, smokable);
  26. args.Handled = true;
  27. }
  28. private void OnCigarInteractUsingEvent(Entity<CigarComponent> entity, ref InteractUsingEvent args)
  29. {
  30. if (args.Handled)
  31. return;
  32. if (!EntityManager.TryGetComponent(entity, out SmokableComponent? smokable))
  33. return;
  34. if (smokable.State != SmokableState.Unlit)
  35. return;
  36. var isHotEvent = new IsHotEvent();
  37. RaiseLocalEvent(args.Used, isHotEvent, false);
  38. if (!isHotEvent.IsHot)
  39. return;
  40. SetSmokableState(entity, SmokableState.Lit, smokable);
  41. args.Handled = true;
  42. }
  43. public void OnCigarAfterInteract(Entity<CigarComponent> entity, ref AfterInteractEvent args)
  44. {
  45. var targetEntity = args.Target;
  46. if (targetEntity == null ||
  47. !args.CanReach ||
  48. !EntityManager.TryGetComponent(entity, out SmokableComponent? smokable) ||
  49. smokable.State == SmokableState.Lit)
  50. return;
  51. var isHotEvent = new IsHotEvent();
  52. RaiseLocalEvent(targetEntity.Value, isHotEvent, true);
  53. if (!isHotEvent.IsHot)
  54. return;
  55. SetSmokableState(entity, SmokableState.Lit, smokable);
  56. args.Handled = true;
  57. }
  58. private void OnCigarSolutionEmptyEvent(Entity<CigarComponent> entity, ref SmokableSolutionEmptyEvent args)
  59. {
  60. SetSmokableState(entity, SmokableState.Burnt);
  61. }
  62. }
  63. }