CatStation/Content.Shared/Tabletop/TabletopBackgammonSetup.cs
riccardi48 95a5f7c7de
Table top prediction (#44348)
* TabletopSystem-move-to-shared

* final refactor

* Update TabletopHologramComponent.cs

* Update AdminVerbSystem.Smites.cs

* merge

* line

* prediction fix

* Fix the scrunkly

* Also noticed this

---------

Co-authored-by: Pok245 <113675512+Pok27@users.noreply.github.com>
Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
2026-06-27 11:17:13 +00:00

66 lines
2.1 KiB
C#

using JetBrains.Annotations;
namespace Content.Shared.Tabletop;
[UsedImplicitly]
public sealed partial class TabletopBackgammonSetup : TabletopSetup
{
[DataField]
public string WhitePiecePrototype { get; private set; } = "WhiteTabletopPiece";
[DataField]
public string BlackPiecePrototype { get; private set; } = "BlackTabletopPiece";
public override void SetupTabletop(TabletopSession session, IEntityManager entityManager)
{
var board = entityManager.SpawnEntity(BoardPrototype, session.Position);
const float borderLengthX = 7.35f; //BORDER
const float borderLengthY = 5.60f; //BORDER
const float boardDistanceX = 1.25f;
const float pieceDistanceY = 0.80f;
float GetXPosition(float distanceFromSide, bool isLeftSide)
{
var pos = borderLengthX - distanceFromSide * boardDistanceX;
return isLeftSide ? -pos : pos;
}
float GetYPosition(float positionNumber, bool isTop)
{
var pos = borderLengthY - pieceDistanceY * positionNumber;
return isTop ? pos : -pos;
}
void AddPieces(
float distanceFromSide,
int numberOfPieces,
bool isBlackPiece,
bool isTop,
bool isLeftSide)
{
for (var i = 0; i < numberOfPieces; i++)
{
session.Entities.Add(entityManager.SpawnEntity(isBlackPiece ? BlackPiecePrototype : WhitePiecePrototype, session.Position.Offset(GetXPosition(distanceFromSide, isLeftSide), GetYPosition(i, isTop))));
}
}
// top left
AddPieces(0, 5, true, true, true);
// top middle left
AddPieces(4, 3, false, true, true);
// top middle right
AddPieces(5, 5, false, true, false);
// top far right
AddPieces(0, 2, true, true, false);
// bottom left
AddPieces(0, 5, false, false, true);
// bottom middle left
AddPieces(4, 3, true, false, true);
// bottom middle right
AddPieces(5, 5, true, false, false);
// bottom far right
AddPieces(0, 2, false, false, false);
}
}