1
0

TabletopBackgammonSetup.cs 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. using JetBrains.Annotations;
  2. namespace Content.Server.Tabletop
  3. {
  4. [UsedImplicitly]
  5. public sealed partial class TabletopBackgammonSetup : TabletopSetup
  6. {
  7. [DataField("whitePiecePrototype")]
  8. public string WhitePiecePrototype { get; private set; } = "WhiteTabletopPiece";
  9. [DataField("blackPiecePrototype")]
  10. public string BlackPiecePrototype { get; private set; } = "BlackTabletopPiece";
  11. public override void SetupTabletop(TabletopSession session, IEntityManager entityManager)
  12. {
  13. var board = entityManager.SpawnEntity(BoardPrototype, session.Position);
  14. const float borderLengthX = 7.35f; //BORDER
  15. const float borderLengthY = 5.60f; //BORDER
  16. const float boardDistanceX = 1.25f;
  17. const float pieceDistanceY = 0.80f;
  18. float GetXPosition(float distanceFromSide, bool isLeftSide)
  19. {
  20. var pos = borderLengthX - (distanceFromSide * boardDistanceX);
  21. return isLeftSide ? -pos : pos;
  22. }
  23. float GetYPosition(float positionNumber, bool isTop)
  24. {
  25. var pos = borderLengthY - (pieceDistanceY * positionNumber);
  26. return isTop ? pos : -pos;
  27. }
  28. void AddPieces(
  29. float distanceFromSide,
  30. int numberOfPieces,
  31. bool isBlackPiece,
  32. bool isTop,
  33. bool isLeftSide)
  34. {
  35. for (int i = 0; i < numberOfPieces; i++)
  36. {
  37. session.Entities.Add(entityManager.SpawnEntity(isBlackPiece ? BlackPiecePrototype : WhitePiecePrototype, session.Position.Offset(GetXPosition(distanceFromSide, isLeftSide), GetYPosition(i, isTop))));
  38. }
  39. }
  40. // Top left
  41. AddPieces(0, 5, true, true, true);
  42. // top middle left
  43. AddPieces(4, 3, false, true, true);
  44. // top middle right
  45. AddPieces(5, 5, false, true, false);
  46. // top far right
  47. AddPieces(0, 2, true, true, false);
  48. // bottom left
  49. AddPieces(0, 5, false, false, true);
  50. // bottom middle left
  51. AddPieces(4, 3, true, false, true);
  52. // bottom middle right
  53. AddPieces(5, 5, true, false, false);
  54. // bottom far right
  55. AddPieces(0, 2, false, false, false);
  56. }
  57. }
  58. }