SiliconLawUi.xaml.cs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. using System.Linq;
  2. using Content.Client.UserInterface.Controls;
  3. using Content.Shared.FixedPoint;
  4. using Content.Shared.Silicons.Laws;
  5. using Robust.Client.AutoGenerated;
  6. using Robust.Client.UserInterface.XAML;
  7. namespace Content.Client.Silicons.Laws.SiliconLawEditUi;
  8. [GenerateTypedNameReferences]
  9. public sealed partial class SiliconLawUi : FancyWindow
  10. {
  11. private List<SiliconLaw> _laws = new();
  12. public SiliconLawUi()
  13. {
  14. RobustXamlLoader.Load(this);
  15. NewLawButton.OnPressed += _ => AddNewLaw();
  16. }
  17. private void AddNewLaw()
  18. {
  19. var newLaw = new SiliconLaw();
  20. newLaw.Order = FixedPoint2.New(_laws.Count + 1);
  21. _laws.Add(newLaw);
  22. SetLaws(_laws);
  23. }
  24. public void SetLaws(List<SiliconLaw> sLaws)
  25. {
  26. _laws = sLaws;
  27. LawContainer.RemoveAllChildren();
  28. foreach (var law in sLaws.OrderBy(l => l.Order))
  29. {
  30. var lawControl = new SiliconLawContainer();
  31. lawControl.SetLaw(law);
  32. lawControl.MoveLawDown += MoveLawDown;
  33. lawControl.MoveLawUp += MoveLawUp;
  34. lawControl.DeleteAction += DeleteLaw;
  35. LawContainer.AddChild(lawControl);
  36. }
  37. }
  38. public void DeleteLaw(SiliconLaw law)
  39. {
  40. _laws.Remove(law);
  41. SetLaws(_laws);
  42. }
  43. public void MoveLawDown(SiliconLaw law)
  44. {
  45. if (_laws.Count == 0)
  46. {
  47. return;
  48. }
  49. var index = _laws.IndexOf(law);
  50. if (index == -1)
  51. {
  52. return;
  53. }
  54. _laws[index].Order += FixedPoint2.New(1);
  55. SetLaws(_laws);
  56. }
  57. public void MoveLawUp(SiliconLaw law)
  58. {
  59. if (_laws.Count == 0)
  60. {
  61. return;
  62. }
  63. var index = _laws.IndexOf(law);
  64. if (index == -1)
  65. {
  66. return;
  67. }
  68. _laws[index].Order += FixedPoint2.New(-1);
  69. SetLaws(_laws);
  70. }
  71. public List<SiliconLaw> GetLaws()
  72. {
  73. return _laws;
  74. }
  75. }