1
0

DragonRuleSystem.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. using Content.Server.Antag;
  2. using Content.Server.GameTicking.Rules.Components;
  3. using Content.Server.Station.Components;
  4. using Content.Server.Station.Systems;
  5. using Content.Shared.Localizations;
  6. using Robust.Server.GameObjects;
  7. namespace Content.Server.GameTicking.Rules;
  8. public sealed class DragonRuleSystem : GameRuleSystem<DragonRuleComponent>
  9. {
  10. [Dependency] private readonly TransformSystem _transform = default!;
  11. [Dependency] private readonly AntagSelectionSystem _antag = default!;
  12. [Dependency] private readonly StationSystem _station = default!;
  13. public override void Initialize()
  14. {
  15. base.Initialize();
  16. SubscribeLocalEvent<DragonRuleComponent, AfterAntagEntitySelectedEvent>(AfterAntagEntitySelected);
  17. }
  18. private void AfterAntagEntitySelected(Entity<DragonRuleComponent> ent, ref AfterAntagEntitySelectedEvent args)
  19. {
  20. _antag.SendBriefing(args.EntityUid, MakeBriefing(args.EntityUid), null, null);
  21. }
  22. private string MakeBriefing(EntityUid dragon)
  23. {
  24. var direction = string.Empty;
  25. var dragonXform = Transform(dragon);
  26. var station = _station.GetStationInMap(dragonXform.MapID);
  27. EntityUid? stationGrid = null;
  28. if (TryComp<StationDataComponent>(station, out var stationData))
  29. stationGrid = _station.GetLargestGrid(stationData);
  30. if (stationGrid is not null)
  31. {
  32. var stationPosition = _transform.GetWorldPosition((EntityUid)stationGrid);
  33. var dragonPosition = _transform.GetWorldPosition(dragon);
  34. var vectorToStation = stationPosition - dragonPosition;
  35. direction = ContentLocalizationManager.FormatDirection(vectorToStation.GetDir());
  36. }
  37. var briefing = Loc.GetString("dragon-role-briefing", ("direction", direction));
  38. return briefing;
  39. }
  40. }