Brick.cs 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. namespace Day22;
  2. public class Brick
  3. {
  4. private static int _count = 0;
  5. public Vec Start { get; private set; }
  6. public Vec End { get; private set; }
  7. public Vec Axis { get; }
  8. public long Size { get; }
  9. public char Label { get; }
  10. public long MinZ { get; private set; }
  11. public Brick(Vec start, Vec end)
  12. {
  13. Start = start;
  14. End = end;
  15. Label = (char)('A' + _count % 26);
  16. _count++;
  17. Axis = End.Subtract(Start);
  18. Size = Axis.Magnitude();
  19. MinZ = Math.Min(Start.Z, End.Z);
  20. }
  21. public IEnumerable<Vec> Points()
  22. {
  23. var p = Start;
  24. var v = Axis.Normalize();
  25. for (var i = 0; i <= Size; i++)
  26. {
  27. yield return p;
  28. p = p.Add(v);
  29. }
  30. }
  31. public void MoveDown(long count)
  32. {
  33. Start = Start.Add(Vec.Down.Multiply(count));
  34. End = End.Add(Vec.Down.Multiply(count));
  35. MinZ = Math.Min(Start.Z, End.Z);
  36. }
  37. }