@luceosports/play-rendering 1.19.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (293) hide show
  1. package/.babelrc +2 -1
  2. package/.eslintrc +11 -42
  3. package/dist/play-rendering.d.ts +21 -0
  4. package/dist/play-rendering.js +17 -8
  5. package/dist/play-rendering.js.map +1 -1
  6. package/dist/types/constants.d.ts +41 -0
  7. package/dist/types/helpers/common.d.ts +5 -0
  8. package/dist/types/layers/court/index.d.ts +18 -0
  9. package/dist/types/math/Bezier.d.ts +19 -0
  10. package/dist/types/math/LineDrawingMath.d.ts +8 -0
  11. package/dist/types/models/AnimationModel.d.ts +21 -0
  12. package/dist/types/models/FrameModel.d.ts +39 -0
  13. package/dist/types/models/LineModel.d.ts +22 -0
  14. package/dist/types/models/NoteModel.d.ts +17 -0
  15. package/dist/types/models/PlayModel.d.ts +40 -0
  16. package/dist/types/models/PlayerModel.d.ts +20 -0
  17. package/dist/types/models/ShapeModel.d.ts +54 -0
  18. package/dist/types/models/ShapeModels/CircleShape.d.ts +8 -0
  19. package/dist/types/models/ShapeModels/ConeShape.d.ts +8 -0
  20. package/dist/types/models/ShapeModels/FovShape.d.ts +12 -0
  21. package/dist/types/models/ShapeModels/LineShape.d.ts +11 -0
  22. package/dist/types/models/ShapeModels/SquareShape.d.ts +8 -0
  23. package/dist/types/models/ShapeModels/StraightShape.d.ts +12 -0
  24. package/dist/types/models/ShapeModels/TriangleShape.d.ts +12 -0
  25. package/dist/types/models/ShapeModels/XMarkShape.d.ts +8 -0
  26. package/dist/types/models/ShapeModels/index.d.ts +14 -0
  27. package/dist/types/models/ShapeModels/line/CutLineShape.d.ts +3 -0
  28. package/dist/types/models/ShapeModels/line/DribbleLineShape.d.ts +3 -0
  29. package/dist/types/models/ShapeModels/line/HandoffLineShape.d.ts +3 -0
  30. package/dist/types/models/ShapeModels/line/PassLineShape.d.ts +3 -0
  31. package/dist/types/models/ShapeModels/line/ScreenLineShape.d.ts +3 -0
  32. package/dist/types/types/index.d.ts +138 -0
  33. package/package.json +16 -13
  34. package/src/config.ts +1 -0
  35. package/src/constants.ts +49 -0
  36. package/src/global.d.ts +9 -0
  37. package/src/helpers/common.ts +40 -0
  38. package/src/index.ts +36 -0
  39. package/src/layers/{CourtLayer.js → CourtLayer.ts} +4 -6
  40. package/src/layers/{LineControlPointLayer.js → LineControlPointLayer.ts} +2 -4
  41. package/src/layers/{LineLayer.js → LineLayer.ts} +5 -7
  42. package/src/layers/{NoteLayer.js → NoteLayer.ts} +19 -19
  43. package/src/layers/{PlayerLayer.js → PlayerLayer.ts} +6 -7
  44. package/src/layers/{ShapeControlPointLayer.js → ShapeControlPointLayer.ts} +2 -4
  45. package/src/layers/{ShapeLayer.js → ShapeLayer.ts} +4 -6
  46. package/src/layers/base/BaseLayer.ts +15 -0
  47. package/src/layers/base/InternalBaseLayer.ts +29 -0
  48. package/src/layers/court/base/{InternalCourtLayer.js → InternalCourtLayer.ts} +3 -5
  49. package/src/layers/court/index.ts +213 -0
  50. package/src/layers/court/layers/BASEBALL/constants.ts +5 -0
  51. package/src/layers/court/layers/BASEBALL/courtTypes/BASEBALL_HIGH_SCHOOL/constants.ts +34 -0
  52. package/src/layers/court/layers/BASEBALL/courtTypes/BASEBALL_HIGH_SCHOOL/layers/{ADirtLayer.js → ADirtLayer.ts} +14 -14
  53. package/src/layers/court/layers/BASEBALL/courtTypes/BASEBALL_HIGH_SCHOOL/layers/{BaseLineLayer.js → BaseLineLayer.ts} +4 -10
  54. package/src/layers/court/layers/BASEBALL/courtTypes/BASEBALL_HIGH_SCHOOL/layers/{HomePlateLayer.js → HomePlateLayer.ts} +14 -15
  55. package/src/layers/court/layers/BASEBALL/courtTypes/BASEBALL_HIGH_SCHOOL/layers/{PitchingMoundLayer.js → PitchingMoundLayer.ts} +7 -8
  56. package/src/layers/court/layers/BASEBALL/courtTypes/BASEBALL_HIGH_SCHOOL/layers/index.ts +6 -0
  57. package/src/layers/court/layers/{BASKETBALL/layers/BorderRectLayer.js → BASEBALL/layers/BorderRectLayer.ts} +2 -4
  58. package/src/layers/court/layers/BASEBALL/layers/index.ts +3 -0
  59. package/src/layers/court/layers/BASKETBALL/common/{LaneMarkingNBATrait.js → LaneMarkingNBATrait.ts} +1 -1
  60. package/src/layers/court/layers/BASKETBALL/common/{LaneMarkingNCAATrait.js → LaneMarkingNCAATrait.ts} +1 -1
  61. package/src/layers/court/layers/BASKETBALL/constants.ts +5 -0
  62. package/src/layers/court/layers/BASKETBALL/courtTypes/BIG3/constants.ts +11 -0
  63. package/src/layers/court/layers/BASKETBALL/courtTypes/BIG3/layers/{Big3Layer.js → Big3Layer.ts} +2 -4
  64. package/src/layers/court/layers/BASKETBALL/courtTypes/BIG3/layers/LaneMarkingLayer.ts +10 -0
  65. package/src/layers/court/layers/BASKETBALL/courtTypes/BIG3/layers/index.ts +4 -0
  66. package/src/layers/court/layers/BASKETBALL/courtTypes/FIBA/constants.ts +11 -0
  67. package/src/layers/court/layers/BASKETBALL/courtTypes/FIBA/layers/{LaneMarkingLayer.js → LaneMarkingLayer.ts} +2 -4
  68. package/src/layers/court/layers/BASKETBALL/courtTypes/FIBA/layers/index.ts +3 -0
  69. package/src/layers/court/layers/BASKETBALL/courtTypes/NBA/constants.ts +11 -0
  70. package/src/layers/court/layers/BASKETBALL/courtTypes/NBA/layers/LaneMarkingLayer.ts +10 -0
  71. package/src/layers/court/layers/BASKETBALL/courtTypes/NBA/layers/index.ts +3 -0
  72. package/src/layers/court/layers/BASKETBALL/courtTypes/NCAAM/constants.ts +11 -0
  73. package/src/layers/court/layers/BASKETBALL/courtTypes/NCAAM/layers/LaneMarkingLayer.ts +10 -0
  74. package/src/layers/court/layers/BASKETBALL/courtTypes/NCAAM/layers/index.ts +3 -0
  75. package/src/layers/court/layers/BASKETBALL/courtTypes/NCAAW/constants.ts +11 -0
  76. package/src/layers/court/layers/BASKETBALL/courtTypes/NCAAW/layers/LaneMarkingLayer.ts +10 -0
  77. package/src/layers/court/layers/BASKETBALL/courtTypes/NCAAW/layers/index.ts +3 -0
  78. package/src/layers/court/layers/BASKETBALL/courtTypes/US_HIGH_SCHOOL/constants.ts +11 -0
  79. package/src/layers/court/layers/BASKETBALL/courtTypes/US_HIGH_SCHOOL/layers/LaneMarkingLayer.ts +10 -0
  80. package/src/layers/court/layers/BASKETBALL/courtTypes/US_HIGH_SCHOOL/layers/index.ts +3 -0
  81. package/src/layers/court/layers/BASKETBALL/courtTypes/US_JUNIOR_HIGH/constants.ts +11 -0
  82. package/src/layers/court/layers/BASKETBALL/courtTypes/US_JUNIOR_HIGH/layers/LaneMarkingLayer.ts +10 -0
  83. package/src/layers/court/layers/BASKETBALL/courtTypes/US_JUNIOR_HIGH/layers/index.ts +3 -0
  84. package/src/layers/court/layers/BASKETBALL/courtTypes/WNBA/constants.ts +11 -0
  85. package/src/layers/court/layers/BASKETBALL/courtTypes/WNBA/layers/LaneMarkingLayer.ts +10 -0
  86. package/src/layers/court/layers/BASKETBALL/courtTypes/WNBA/layers/index.ts +3 -0
  87. package/src/layers/court/layers/BASKETBALL/layers/{BaseLineMarkingLayer.js → BaseLineMarkingLayer.ts} +3 -4
  88. package/src/layers/court/layers/BASKETBALL/layers/{BenchAreaLayer.js → BenchAreaLayer.ts} +2 -4
  89. package/src/layers/court/layers/{LACROSSE/layers/BorderRectLayer.js → BASKETBALL/layers/BorderRectLayer.ts} +2 -4
  90. package/src/layers/court/layers/BASKETBALL/layers/{CenterCircleLayer.js → CenterCircleLayer.ts} +2 -4
  91. package/src/layers/court/layers/{FOOTBALL/layers/CenterLineLayer.js → BASKETBALL/layers/CenterLineLayer.ts} +2 -4
  92. package/src/layers/court/layers/BASKETBALL/layers/{FreeThrowLayer.js → FreeThrowLayer.ts} +2 -4
  93. package/src/layers/court/layers/BASKETBALL/layers/{HoopLayer.js → HoopLayer.ts} +2 -4
  94. package/src/layers/court/layers/BASKETBALL/layers/{InnerOuterRectLayer.js → InnerOuterRectLayer.ts} +2 -4
  95. package/src/layers/court/layers/BASKETBALL/layers/{RestrictedAreaLayer.js → RestrictedAreaLayer.ts} +3 -4
  96. package/src/layers/court/layers/BASKETBALL/layers/{ThreePointLineLayer.js → ThreePointLineLayer.ts} +2 -4
  97. package/src/layers/court/layers/BASKETBALL/layers/index.ts +23 -0
  98. package/src/layers/court/layers/FOOTBALL/constants.ts +5 -0
  99. package/src/layers/court/layers/FOOTBALL/courtTypes/FOOTBALL_HIGH_SCHOOL/constants.ts +3 -0
  100. package/src/layers/court/layers/{BASEBALL/layers/BorderRectLayer.js → FOOTBALL/layers/BorderRectLayer.ts} +2 -4
  101. package/src/layers/court/layers/{SOCCER/layers/CenterLineLayer.js → FOOTBALL/layers/CenterLineLayer.ts} +2 -4
  102. package/src/layers/court/layers/FOOTBALL/layers/{EndZoneLayer.js → EndZoneLayer.ts} +2 -4
  103. package/src/layers/court/layers/FOOTBALL/layers/{FieldNumberLayer.js → FieldNumberLayer.ts} +2 -4
  104. package/src/layers/court/layers/FOOTBALL/layers/{HashMarkLayer.js → HashMarkLayer.ts} +2 -4
  105. package/src/layers/court/layers/FOOTBALL/layers/{YardLineLayer.js → YardLineLayer.ts} +2 -4
  106. package/src/layers/court/layers/FOOTBALL/layers/index.ts +8 -0
  107. package/src/layers/court/layers/HOCKEY/constants.ts +5 -0
  108. package/src/layers/court/layers/HOCKEY/courtTypes/HOCKEY_INTERNATIONAL/constants.ts +12 -0
  109. package/src/layers/court/layers/HOCKEY/courtTypes/HOCKEY_INTERNATIONAL/layers/{GoaCreaseLayer.js → GoaCreaseLayer.ts} +2 -4
  110. package/src/layers/court/layers/HOCKEY/courtTypes/HOCKEY_INTERNATIONAL/layers/index.ts +3 -0
  111. package/src/layers/court/layers/HOCKEY/courtTypes/HOCKEY_NHL/constants.ts +12 -0
  112. package/src/layers/court/layers/HOCKEY/courtTypes/HOCKEY_NHL/layers/{GoaCreaseLayer.js → GoaCreaseLayer.ts} +2 -4
  113. package/src/layers/court/layers/HOCKEY/courtTypes/HOCKEY_NHL/layers/index.ts +3 -0
  114. package/src/layers/court/layers/HOCKEY/layers/{BorderRinkLayer.js → BorderRinkLayer.ts} +2 -4
  115. package/src/layers/court/layers/HOCKEY/layers/{CenterCircleLayer.js → CenterCircleLayer.ts} +2 -4
  116. package/src/layers/court/layers/HOCKEY/layers/{CenterLineLayer.js → CenterLineLayer.ts} +2 -4
  117. package/src/layers/court/layers/HOCKEY/layers/{CenterSpotLayer.js → CenterSpotLayer.ts} +2 -4
  118. package/src/layers/court/layers/HOCKEY/layers/{EndZoneLayer.js → EndZoneLayer.ts} +2 -4
  119. package/src/layers/court/layers/HOCKEY/layers/{GoalLineLayer.js → GoalLineLayer.ts} +2 -4
  120. package/src/layers/court/layers/HOCKEY/layers/{NeutralZoneLayer.js → NeutralZoneLayer.ts} +2 -4
  121. package/src/layers/court/layers/HOCKEY/layers/{RefereeCreaseLayer.js → RefereeCreaseLayer.ts} +2 -4
  122. package/src/layers/court/layers/HOCKEY/layers/index.ts +19 -0
  123. package/src/layers/court/layers/LACROSSE/constants.ts +5 -0
  124. package/src/layers/court/layers/LACROSSE/courtTypes/LACROSSE_US_M/constants.ts +4 -0
  125. package/src/layers/court/layers/LACROSSE/courtTypes/LACROSSE_US_M/layers/{CenterLineLayer.js → CenterLineLayer.ts} +2 -4
  126. package/src/layers/court/layers/LACROSSE/courtTypes/LACROSSE_US_M/layers/{GoalAreaLineLayer.js → GoalAreaLineLayer.ts} +2 -4
  127. package/src/layers/court/layers/LACROSSE/courtTypes/LACROSSE_US_M/layers/{WingAreaLineLayer.js → WingAreaLineLayer.ts} +2 -4
  128. package/src/layers/court/layers/LACROSSE/courtTypes/LACROSSE_US_M/layers/index.ts +5 -0
  129. package/src/layers/court/layers/LACROSSE/courtTypes/LACROSSE_US_W/constants.ts +3 -0
  130. package/src/layers/court/layers/LACROSSE/courtTypes/LACROSSE_US_W/layers/{CenterLineLayer.js → CenterLineLayer.ts} +2 -4
  131. package/src/layers/court/layers/LACROSSE/courtTypes/LACROSSE_US_W/layers/{FanLineLayer.js → FanLineLayer.ts} +2 -4
  132. package/src/layers/court/layers/LACROSSE/courtTypes/LACROSSE_US_W/layers/index.ts +4 -0
  133. package/src/layers/court/layers/{FOOTBALL/layers/BorderRectLayer.js → LACROSSE/layers/BorderRectLayer.ts} +2 -4
  134. package/src/layers/court/layers/LACROSSE/layers/{RestrainingLineLayer.js → RestrainingLineLayer.ts} +2 -4
  135. package/src/layers/court/layers/LACROSSE/layers/index.ts +4 -0
  136. package/src/layers/court/layers/SOCCER/constants.ts +5 -0
  137. package/src/layers/court/layers/SOCCER/courtTypes/SOCCER_FIFA/constants.ts +7 -0
  138. package/src/layers/court/layers/SOCCER/courtTypes/SOCCER_NCAA/constants.ts +7 -0
  139. package/src/layers/court/layers/SOCCER/courtTypes/SOCCER_NCAA/layers/{CenterSpotLayer.js → CenterSpotLayer.ts} +2 -4
  140. package/src/layers/court/layers/SOCCER/courtTypes/SOCCER_NCAA/layers/{HashMarkLayer.js → HashMarkLayer.ts} +2 -4
  141. package/src/layers/court/layers/SOCCER/courtTypes/SOCCER_NCAA/layers/{PenaltySpotLayer.js → PenaltySpotLayer.ts} +2 -4
  142. package/src/layers/court/layers/SOCCER/courtTypes/SOCCER_NCAA/layers/index.ts +5 -0
  143. package/src/layers/court/layers/SOCCER/courtTypes/SOCCER_NFHS/constants.ts +7 -0
  144. package/src/layers/court/layers/SOCCER/courtTypes/SOCCER_NFHS/layers/{HashMarkLayer.js → HashMarkLayer.ts} +2 -4
  145. package/src/layers/court/layers/SOCCER/courtTypes/SOCCER_NFHS/layers/{PenaltySpotLayer.js → PenaltySpotLayer.ts} +2 -4
  146. package/src/layers/court/layers/SOCCER/courtTypes/SOCCER_NFHS/layers/index.ts +4 -0
  147. package/src/layers/court/layers/SOCCER/courtTypes/SOCCER_U10/constants.ts +7 -0
  148. package/src/layers/court/layers/SOCCER/courtTypes/SOCCER_U10/layers/{BuildOutLineLayer.js → BuildOutLineLayer.ts} +2 -4
  149. package/src/layers/court/layers/SOCCER/courtTypes/SOCCER_U10/layers/{PenaltyArcLayer.js → PenaltyArcLayer.ts} +2 -4
  150. package/src/layers/court/layers/SOCCER/courtTypes/SOCCER_U10/layers/index.ts +4 -0
  151. package/src/layers/court/layers/SOCCER/courtTypes/SOCCER_U12/constants.ts +7 -0
  152. package/src/layers/court/layers/SOCCER/courtTypes/SOCCER_U12/layers/{PenaltyArcLayer.js → PenaltyArcLayer.ts} +2 -4
  153. package/src/layers/court/layers/SOCCER/courtTypes/SOCCER_U12/layers/index.ts +3 -0
  154. package/src/layers/court/layers/SOCCER/courtTypes/SOCCER_U19/constants.ts +7 -0
  155. package/src/layers/court/layers/SOCCER/layers/BorderRectLayer.ts +10 -0
  156. package/src/layers/court/layers/SOCCER/layers/{CenterCircleLayer.js → CenterCircleLayer.ts} +2 -4
  157. package/src/layers/court/layers/{BASKETBALL/layers/CenterLineLayer.js → SOCCER/layers/CenterLineLayer.ts} +2 -4
  158. package/src/layers/court/layers/SOCCER/layers/{CenterSpotLayer.js → CenterSpotLayer.ts} +2 -4
  159. package/src/layers/court/layers/SOCCER/layers/{CornerLayer.js → CornerLayer.ts} +3 -4
  160. package/src/layers/court/layers/SOCCER/layers/{PenaltyArcLayer.js → PenaltyArcLayer.ts} +2 -4
  161. package/src/layers/court/layers/SOCCER/layers/{PenaltyAreaLayer.js → PenaltyAreaLayer.ts} +2 -4
  162. package/src/layers/court/layers/SOCCER/layers/{PenaltySpotLayer.js → PenaltySpotLayer.ts} +2 -4
  163. package/src/layers/court/layers/SOCCER/layers/index.ts +19 -0
  164. package/src/layers/court/layers/VOLLEYBALL/constants.ts +5 -0
  165. package/src/layers/court/layers/VOLLEYBALL/courtTypes/VOLLEYBALL_INDOOR/constants.ts +2 -0
  166. package/src/layers/court/layers/VOLLEYBALL/layers/{AttackLineLayer.js → AttackLineLayer.ts} +3 -4
  167. package/src/layers/court/layers/VOLLEYBALL/layers/BorderRectLayer.ts +10 -0
  168. package/src/layers/court/layers/VOLLEYBALL/layers/{CenterLineLayer.js → CenterLineLayer.ts} +2 -4
  169. package/src/layers/court/layers/VOLLEYBALL/layers/{HashMarkLayer.js → HashMarkLayer.ts} +3 -4
  170. package/src/layers/court/layers/VOLLEYBALL/layers/index.ts +6 -0
  171. package/src/layers/line/base/{ActionLineLayer.js → ActionLineLayer.ts} +2 -4
  172. package/src/layers/line/base/{InternalLineLayer.js → InternalLineLayer.ts} +30 -10
  173. package/src/layers/line/index.ts +8 -0
  174. package/src/layers/line/layers/CutLineLayer.ts +7 -0
  175. package/src/layers/line/layers/{DribbleLineLayer.js → DribbleLineLayer.ts} +14 -8
  176. package/src/layers/line/layers/{HandoffLineLayer.js → HandoffLineLayer.ts} +4 -5
  177. package/src/layers/line/layers/PassLineLayer.ts +11 -0
  178. package/src/layers/line/layers/ScreenLineLayer.ts +7 -0
  179. package/src/layers/line/layers/{ShotLineLayer.js → ShotLineLayer.ts} +2 -4
  180. package/src/layers/shape/base/{InternalShapeLayer.js → InternalShapeLayer.ts} +7 -5
  181. package/src/layers/shape/index.ts +28 -0
  182. package/src/layers/shape/layers/{CircleShapeLayer.js → CircleShapeLayer.ts} +2 -4
  183. package/src/layers/shape/layers/{ConeShapeLayer.js → ConeShapeLayer.ts} +2 -4
  184. package/src/layers/shape/layers/{FovShapeLayer.js → FovShapeLayer.ts} +2 -4
  185. package/src/layers/shape/layers/{SquareShapeLayer.js → SquareShapeLayer.ts} +2 -4
  186. package/src/layers/shape/layers/{StraightShapeLayer.js → StraightShapeLayer.ts} +2 -4
  187. package/src/layers/shape/layers/{TriangleShapeLayer.js → TriangleShapeLayer.ts} +2 -4
  188. package/src/layers/shape/layers/{XmarkShapeLayer.js → XmarkShapeLayer.ts} +2 -4
  189. package/src/layers/shape/layers/line/CutLineShapeLayer.ts +11 -0
  190. package/src/layers/shape/layers/line/DribbleLineShapeLayer.ts +26 -0
  191. package/src/layers/shape/layers/line/HandoffLineShapeLayer.ts +11 -0
  192. package/src/layers/shape/layers/line/PassLineShapeLayer.ts +15 -0
  193. package/src/layers/shape/layers/line/ScreenLineShapeLayer.ts +11 -0
  194. package/src/layers/shape/layers/line/base/InternalLineShapeLayer.ts +44 -0
  195. package/src/math/{Bezier.js → Bezier.ts} +48 -46
  196. package/src/math/LineDrawingMath.ts +573 -0
  197. package/src/models/{Animation.js → AnimationModel.ts} +29 -22
  198. package/src/models/Base/InternalFrameModel.ts +23 -0
  199. package/src/models/{Frame.js → FrameModel.ts} +136 -82
  200. package/src/models/{Line.js → LineModel.ts} +26 -14
  201. package/src/models/{Note.js → NoteModel.ts} +12 -11
  202. package/src/models/Play/Options.ts +31 -0
  203. package/src/models/PlayModel.ts +139 -0
  204. package/src/models/{Player.js → PlayerModel.ts} +5 -6
  205. package/src/models/{Shape.js → ShapeModel.ts} +9 -10
  206. package/src/models/ShapeModels/{CircleShape.js → CircleShape.ts} +2 -4
  207. package/src/models/ShapeModels/{ConeShape.js → ConeShape.ts} +2 -4
  208. package/src/models/ShapeModels/{FovShape.js → FovShape.ts} +2 -4
  209. package/src/models/ShapeModels/{LineShape.js → LineShape.ts} +4 -6
  210. package/src/models/ShapeModels/{XMarkShape.js → SquareShape.ts} +2 -4
  211. package/src/models/ShapeModels/{StraightShape.js → StraightShape.ts} +2 -4
  212. package/src/models/ShapeModels/{TriangleShape.js → TriangleShape.ts} +2 -4
  213. package/src/models/ShapeModels/{SquareShape.js → XMarkShape.ts} +2 -4
  214. package/src/models/ShapeModels/index.ts +30 -0
  215. package/src/models/ShapeModels/line/CutLineShape.ts +3 -0
  216. package/src/models/ShapeModels/line/DribbleLineShape.ts +3 -0
  217. package/src/models/ShapeModels/line/HandoffLineShape.ts +3 -0
  218. package/src/models/ShapeModels/line/PassLineShape.ts +3 -0
  219. package/src/models/ShapeModels/line/ScreenLineShape.ts +3 -0
  220. package/src/playerHatsConfig.ts +39 -0
  221. package/src/shapesConfig.ts +8 -0
  222. package/src/traits/{DribbleLineTrait.js → DribbleLineTrait.ts} +12 -10
  223. package/src/traits/{LineDrawOperationsTrait.js → LineDrawOperationsTrait.ts} +12 -9
  224. package/src/types/index.ts +205 -0
  225. package/tsconfig.json +21 -0
  226. package/webpack.config.js +5 -8
  227. package/index.js +0 -17
  228. package/src/config.js +0 -3
  229. package/src/constants.js +0 -51
  230. package/src/helpers/common.js +0 -12
  231. package/src/layers/base/BaseLayer.js +0 -20
  232. package/src/layers/base/InternalBaseLayer.js +0 -22
  233. package/src/layers/court/index.js +0 -64
  234. package/src/layers/court/layers/BASEBALL/constants.js +0 -7
  235. package/src/layers/court/layers/BASEBALL/courtTypes/BASEBALL_HIGH_SCHOOL/constants.js +0 -36
  236. package/src/layers/court/layers/BASKETBALL/constants.js +0 -7
  237. package/src/layers/court/layers/BASKETBALL/courtTypes/BIG3/constants.js +0 -13
  238. package/src/layers/court/layers/BASKETBALL/courtTypes/BIG3/layers/LaneMarkingLayer.js +0 -12
  239. package/src/layers/court/layers/BASKETBALL/courtTypes/FIBA/constants.js +0 -13
  240. package/src/layers/court/layers/BASKETBALL/courtTypes/NBA/constants.js +0 -13
  241. package/src/layers/court/layers/BASKETBALL/courtTypes/NBA/layers/LaneMarkingLayer.js +0 -12
  242. package/src/layers/court/layers/BASKETBALL/courtTypes/NCAAM/constants.js +0 -13
  243. package/src/layers/court/layers/BASKETBALL/courtTypes/NCAAM/layers/LaneMarkingLayer.js +0 -12
  244. package/src/layers/court/layers/BASKETBALL/courtTypes/NCAAW/constants.js +0 -13
  245. package/src/layers/court/layers/BASKETBALL/courtTypes/NCAAW/layers/LaneMarkingLayer.js +0 -12
  246. package/src/layers/court/layers/BASKETBALL/courtTypes/US_HIGH_SCHOOL/constants.js +0 -13
  247. package/src/layers/court/layers/BASKETBALL/courtTypes/US_HIGH_SCHOOL/layers/LaneMarkingLayer.js +0 -12
  248. package/src/layers/court/layers/BASKETBALL/courtTypes/US_JUNIOR_HIGH/constants.js +0 -13
  249. package/src/layers/court/layers/BASKETBALL/courtTypes/US_JUNIOR_HIGH/layers/LaneMarkingLayer.js +0 -12
  250. package/src/layers/court/layers/BASKETBALL/courtTypes/WNBA/constants.js +0 -13
  251. package/src/layers/court/layers/BASKETBALL/courtTypes/WNBA/layers/LaneMarkingLayer.js +0 -12
  252. package/src/layers/court/layers/FOOTBALL/constants.js +0 -7
  253. package/src/layers/court/layers/FOOTBALL/courtTypes/FOOTBALL_HIGH_SCHOOL/constants.js +0 -5
  254. package/src/layers/court/layers/HOCKEY/constants.js +0 -7
  255. package/src/layers/court/layers/HOCKEY/courtTypes/HOCKEY_INTERNATIONAL/constants.js +0 -14
  256. package/src/layers/court/layers/HOCKEY/courtTypes/HOCKEY_NHL/constants.js +0 -14
  257. package/src/layers/court/layers/LACROSSE/constants.js +0 -7
  258. package/src/layers/court/layers/LACROSSE/courtTypes/LACROSSE_US_M/constants.js +0 -6
  259. package/src/layers/court/layers/LACROSSE/courtTypes/LACROSSE_US_W/constants.js +0 -5
  260. package/src/layers/court/layers/SOCCER/constants.js +0 -7
  261. package/src/layers/court/layers/SOCCER/courtTypes/SOCCER_FIFA/constants.js +0 -9
  262. package/src/layers/court/layers/SOCCER/courtTypes/SOCCER_NCAA/constants.js +0 -9
  263. package/src/layers/court/layers/SOCCER/courtTypes/SOCCER_NFHS/constants.js +0 -9
  264. package/src/layers/court/layers/SOCCER/courtTypes/SOCCER_U10/constants.js +0 -9
  265. package/src/layers/court/layers/SOCCER/courtTypes/SOCCER_U12/constants.js +0 -9
  266. package/src/layers/court/layers/SOCCER/courtTypes/SOCCER_U19/constants.js +0 -9
  267. package/src/layers/court/layers/SOCCER/layers/BorderRectLayer.js +0 -12
  268. package/src/layers/court/layers/VOLLEYBALL/constants.js +0 -7
  269. package/src/layers/court/layers/VOLLEYBALL/courtTypes/VOLLEYBALL_INDOOR/constants.js +0 -4
  270. package/src/layers/court/layers/VOLLEYBALL/layers/BorderRectLayer.js +0 -12
  271. package/src/layers/line/index.js +0 -11
  272. package/src/layers/line/layers/CutLineLayer.js +0 -9
  273. package/src/layers/line/layers/PassLineLayer.js +0 -13
  274. package/src/layers/line/layers/ScreenLineLayer.js +0 -9
  275. package/src/layers/shape/index.js +0 -17
  276. package/src/layers/shape/layers/line/CutLineShapeLayer.js +0 -13
  277. package/src/layers/shape/layers/line/DribbleLineShapeLayer.js +0 -20
  278. package/src/layers/shape/layers/line/HandoffLineShapeLayer.js +0 -13
  279. package/src/layers/shape/layers/line/PassLineShapeLayer.js +0 -17
  280. package/src/layers/shape/layers/line/ScreenLineShapeLayer.js +0 -13
  281. package/src/layers/shape/layers/line/base/InternalLineShapeLayer.js +0 -34
  282. package/src/math/LineDrawingMath.js +0 -570
  283. package/src/models/Base/InternalFrameModel.js +0 -20
  284. package/src/models/Play/Options.js +0 -31
  285. package/src/models/Play.js +0 -91
  286. package/src/models/ShapeModels/index.js +0 -18
  287. package/src/models/ShapeModels/line/CutLineShape.js +0 -5
  288. package/src/models/ShapeModels/line/DribbleLineShape.js +0 -5
  289. package/src/models/ShapeModels/line/HandoffLineShape.js +0 -5
  290. package/src/models/ShapeModels/line/PassLineShape.js +0 -5
  291. package/src/models/ShapeModels/line/ScreenLineShape.js +0 -5
  292. package/src/playerHatsConfig.js +0 -29
  293. package/src/shapesConfig.js +0 -6
@@ -0,0 +1,49 @@
1
+ export const SPORT_TYPE_BASKETBALL = 'BASKETBALL';
2
+ export const SPORT_TYPE_VOLLEYBALL = 'VOLLEYBALL';
3
+ export const SPORT_TYPE_FOOTBALL = 'FOOTBALL';
4
+ export const SPORT_TYPE_LACROSSE = 'LACROSSE';
5
+ export const SPORT_TYPE_SOCCER = 'SOCCER';
6
+ export const SPORT_TYPE_HOCKEY = 'HOCKEY';
7
+ export const SPORT_TYPE_BASEBALL = 'BASEBALL';
8
+
9
+ export const COURT_TYPE_BIG3 = 'BIG3';
10
+ export const COURT_TYPE_FIBA = 'FIBA';
11
+ export const COURT_TYPE_NBA = 'NBA';
12
+ export const COURT_TYPE_NCAAM = 'NCAAM';
13
+ export const COURT_TYPE_NCAAW = 'NCAAW';
14
+ export const COURT_TYPE_US_HIGH_SCHOOL = 'US_HIGH_SCHOOL';
15
+ export const COURT_TYPE_US_JUNIOR_HIGH = 'US_JUNIOR_HIGH';
16
+ export const COURT_TYPE_WNBA = 'WNBA';
17
+
18
+ export const COURT_TYPE_FOOTBALL_HIGH_SCHOOL = 'FOOTBALL_HIGH_SCHOOL';
19
+ export const COURT_TYPE_FOOTBALL_HIGH_SCHOOL_LEGACY = 'FOOTBALL';
20
+
21
+ export const COURT_TYPE_VOLLEYBALL_INDOOR = 'VOLLEYBALL_INDOOR';
22
+
23
+ export const COURT_TYPE_LACROSSE_US_M = 'LACROSSE_US_M';
24
+ export const COURT_TYPE_LACROSSE_US_W = 'LACROSSE_US_W';
25
+
26
+ export const COURT_TYPE_SOCCER_FIFA = 'SOCCER_FIFA';
27
+ export const COURT_TYPE_SOCCER_NCAA = 'SOCCER_NCAA';
28
+ export const COURT_TYPE_SOCCER_NFHS = 'SOCCER_NFHS';
29
+ export const COURT_TYPE_SOCCER_U10 = 'SOCCER_U10';
30
+ export const COURT_TYPE_SOCCER_U12 = 'SOCCER_U12';
31
+ export const COURT_TYPE_SOCCER_U19 = 'SOCCER_U19';
32
+
33
+ export const COURT_TYPE_HOCKEY_NHL = 'HOCKEY_NHL';
34
+ export const COURT_TYPE_HOCKEY_INTERNATIONAL = 'HOCKEY_INTERNATIONAL';
35
+
36
+ export const COURT_TYPE_BASEBALL_HIGH_SCHOOL = 'BASEBALL_HIGH_SCHOOL';
37
+
38
+ export const SHAPE_TYPE_CIRCLE = 'CIRCLE';
39
+ export const SHAPE_TYPE_SQUARE = 'SQUARE';
40
+ export const SHAPE_TYPE_TRIANGLE = 'TRIANGLE';
41
+ export const SHAPE_TYPE_FOV = 'FOV';
42
+ export const SHAPE_TYPE_XMARK = 'XMARK';
43
+ export const SHAPE_TYPE_STRAIGHT = 'STRAIGHT';
44
+ export const SHAPE_TYPE_CONE = 'CONE';
45
+ export const SHAPE_TYPE_LINE_CUT = 'LINE.CUT';
46
+ export const SHAPE_TYPE_LINE_SCREEN = 'LINE.SCREEN';
47
+ export const SHAPE_TYPE_LINE_DRIBBLE = 'LINE.DRIBBLE';
48
+ export const SHAPE_TYPE_LINE_PASS = 'LINE.PASS';
49
+ export const SHAPE_TYPE_LINE_HANDOFF = 'LINE.HANDOFF';
@@ -0,0 +1,9 @@
1
+ declare module '*.png' {
2
+ const value: Buffer;
3
+ export = value;
4
+ }
5
+
6
+ declare module '*.svg' {
7
+ const value: Buffer;
8
+ export = value;
9
+ }
@@ -0,0 +1,40 @@
1
+ import { ShapeType } from '../types';
2
+ import { ShapeModels } from '../index';
3
+
4
+ export function animationProgress(globalProgress: number, start: number, end: number) {
5
+ const max = end - start;
6
+ const local = globalProgress - start;
7
+ return (local * 100) / max / 100;
8
+ }
9
+
10
+ export function rotatePoint(x: number, y: number, cX: number, cY: number, degrees: number) {
11
+ return {
12
+ x: (x - cX) * Math.cos((degrees * Math.PI) / 180) - (y - cY) * Math.sin((degrees * Math.PI) / 180) + cX,
13
+ y: (x - cX) * Math.sin((degrees * Math.PI) / 180) + (y - cY) * Math.cos((degrees * Math.PI) / 180) + cY
14
+ };
15
+ }
16
+
17
+ export function transformShapeTypeToImportKey(type: ShapeType): string {
18
+ if (type.indexOf('LINE.') < 0) return `${type.charAt(0).toUpperCase()}${type.slice(1).toLowerCase()}Shape`;
19
+ const typeClean = type.replace('LINE.', '');
20
+ return `${typeClean.charAt(0).toUpperCase()}${typeClean.slice(1).toLowerCase()}LineShape`;
21
+ }
22
+
23
+ export function shapeModelKeyFromImport(shapeModels: typeof ShapeModels, type: ShapeType): keyof typeof ShapeModels {
24
+ return (Object.keys(shapeModels) as (keyof typeof ShapeModels)[]).find(key => {
25
+ const prefix = type.replace('LINE.', '');
26
+ const suffix = type.indexOf('LINE.') >= 0 ? 'LineShape' : 'Shape';
27
+ return key.toLowerCase() === `${prefix}${suffix}`.toLowerCase();
28
+ });
29
+ }
30
+
31
+ export async function loadImage(src: string | Buffer) {
32
+ const img = new Image();
33
+ if (typeof src === 'string') {
34
+ img.src = src;
35
+ } else {
36
+ img.src = 'data:image/jpeg;base64,' + src.toString('base64');
37
+ }
38
+ await img.decode();
39
+ return img;
40
+ }
package/src/index.ts ADDED
@@ -0,0 +1,36 @@
1
+ import PlayModel from './models/PlayModel';
2
+ import FrameModel from './models/FrameModel';
3
+ import AnimationModel from './models/AnimationModel';
4
+ import LineModel from './models/LineModel';
5
+ import PlayerModel from './models/PlayerModel';
6
+ import NoteModel from './models/NoteModel';
7
+ import ShapeModel from './models/ShapeModel';
8
+ import * as ShapeModels from './models/ShapeModels';
9
+ import * as Constants from './constants';
10
+ import * as LineDrawingMath from './math/LineDrawingMath';
11
+ import * as Helpers from './helpers/common';
12
+ import Bezier from './math/Bezier';
13
+
14
+ import {
15
+ courtTypeConstants as CourtTypeConstants,
16
+ sportConstants as SportConstants,
17
+ sportCourtTypeMap as SportCourtTypeMap
18
+ } from './layers/court';
19
+
20
+ export {
21
+ PlayModel,
22
+ FrameModel,
23
+ AnimationModel,
24
+ LineModel,
25
+ PlayerModel,
26
+ NoteModel,
27
+ ShapeModel,
28
+ ShapeModels,
29
+ LineDrawingMath,
30
+ Bezier,
31
+ Constants,
32
+ CourtTypeConstants,
33
+ SportConstants,
34
+ SportCourtTypeMap,
35
+ Helpers
36
+ };
@@ -1,7 +1,7 @@
1
- const BaseLayer = require('./base/BaseLayer');
2
- const { sportLayers, courtTypeLayers } = require('./court');
1
+ import BaseLayer from './base/BaseLayer';
2
+ import { courtTypeLayers, sportLayers } from './court';
3
3
 
4
- class CourtLayer extends BaseLayer {
4
+ export default class CourtLayer extends BaseLayer {
5
5
  get frameWidth() {
6
6
  return this.options.width;
7
7
  }
@@ -35,7 +35,7 @@ class CourtLayer extends BaseLayer {
35
35
 
36
36
  this.setColor();
37
37
 
38
- Object.values(this.courtTypeLayers).forEach(LayerClass => {
38
+ (Object.values(this.courtTypeLayers) as any[]).forEach(LayerClass => {
39
39
  new LayerClass(this).apply();
40
40
  });
41
41
 
@@ -105,5 +105,3 @@ class CourtLayer extends BaseLayer {
105
105
  }
106
106
  }
107
107
  }
108
-
109
- module.exports = CourtLayer;
@@ -1,6 +1,6 @@
1
- const BaseLayer = require('./base/BaseLayer');
1
+ import BaseLayer from './base/BaseLayer';
2
2
 
3
- class LineControlPointLayer extends BaseLayer {
3
+ export default class LineControlPointLayer extends BaseLayer {
4
4
  apply() {
5
5
  if (!this.options.linesDisplay) return;
6
6
 
@@ -29,5 +29,3 @@ class LineControlPointLayer extends BaseLayer {
29
29
  this.ctx.restore();
30
30
  }
31
31
  }
32
-
33
- module.exports = LineControlPointLayer;
@@ -1,9 +1,9 @@
1
- const _ = require('lodash');
2
- const BaseLayer = require('./base/BaseLayer');
3
- const lineLayers = require('./line');
1
+ import _ from 'lodash';
2
+ import BaseLayer from './base/BaseLayer';
3
+ import * as lineLayers from './line';
4
4
 
5
- class LineLayer extends BaseLayer {
6
- get lineWidth() {
5
+ export default class LineLayer extends BaseLayer {
6
+ get lineWidth(): number {
7
7
  return this.courtTypeConstants.LINE_WIDTH;
8
8
  }
9
9
 
@@ -24,5 +24,3 @@ class LineLayer extends BaseLayer {
24
24
  this.ctx.restore();
25
25
  }
26
26
  }
27
-
28
- module.exports = LineLayer;
@@ -1,8 +1,10 @@
1
- const _ = require('lodash');
2
- const BaseLayer = require('./base/BaseLayer');
3
- const Note = require('../models/Note');
1
+ import _ from 'lodash';
2
+ import BaseLayer from './base/BaseLayer';
3
+ import NoteModel from '../models/NoteModel';
4
+
5
+ export default class NoteLayer extends BaseLayer {
6
+ private noteAlpha: number;
4
7
 
5
- class NoteLayer extends BaseLayer {
6
8
  apply() {
7
9
  this.ctx.save();
8
10
 
@@ -28,7 +30,7 @@ class NoteLayer extends BaseLayer {
28
30
  this.ctx.restore();
29
31
  }
30
32
 
31
- setNoteAlpha(note) {
33
+ setNoteAlpha(note: NoteModel) {
32
34
  let alpha = 1;
33
35
  if (this.options.animationGlobalProgress) {
34
36
  alpha = 0;
@@ -59,7 +61,7 @@ class NoteLayer extends BaseLayer {
59
61
  this.noteAlpha = alpha;
60
62
  }
61
63
 
62
- setColor(note) {
64
+ setColor(note: NoteModel) {
63
65
  const { alpha, blue, green, red } = note.color;
64
66
 
65
67
  const r = Math.ceil(red * 255);
@@ -75,12 +77,12 @@ class NoteLayer extends BaseLayer {
75
77
  }
76
78
  }
77
79
 
78
- setFont(note) {
80
+ setFont(note: NoteModel) {
79
81
  this.ctx.font = note.fontComputed;
80
82
  this.ctx.textBaseline = note.textBaseline;
81
83
  }
82
84
 
83
- drawBubble(note, { width, height }) {
85
+ drawBubble(note: NoteModel, { width, height }) {
84
86
  this.ctx.lineWidth = this.courtTypeConstants.COURT_LINE_WIDTH;
85
87
  this.ctx.beginPath();
86
88
  this.ctx.rect(0, 0, width, height);
@@ -90,11 +92,11 @@ class NoteLayer extends BaseLayer {
90
92
  }
91
93
  }
92
94
 
93
- drawText(note, lines) {
95
+ drawText(note: NoteModel, lines) {
94
96
  lines.forEach(({ words }, index) => {
95
97
  this.ctx.save();
96
98
 
97
- this.ctx.translate(Note.NOTE_WRAP_PADDING, Note.NOTE_WRAP_PADDING + note.lineHeight * index);
99
+ this.ctx.translate(NoteModel.NOTE_WRAP_PADDING, NoteModel.NOTE_WRAP_PADDING + note.lineHeight * index);
98
100
 
99
101
  let wordStartX = 0;
100
102
  words.forEach((word, i) => {
@@ -129,12 +131,12 @@ class NoteLayer extends BaseLayer {
129
131
  this.ctx.strokeStyle = `rgba(0, 0, 0, ${this.noteAlpha})`;
130
132
  this.ctx.beginPath();
131
133
  if (note.font.underline) {
132
- this.ctx.moveTo(0, note.fontSize - Note.NOTE_LINE_HEIGHT_OFFSET / 2);
133
- this.ctx.lineTo(wordStartX, note.fontSize - Note.NOTE_LINE_HEIGHT_OFFSET / 2);
134
+ this.ctx.moveTo(0, note.fontSize - NoteModel.NOTE_LINE_HEIGHT_OFFSET / 2);
135
+ this.ctx.lineTo(wordStartX, note.fontSize - NoteModel.NOTE_LINE_HEIGHT_OFFSET / 2);
134
136
  }
135
137
  if (note.font.strikethrough) {
136
- this.ctx.moveTo(0, note.lineHeight / 2 - Note.NOTE_LINE_HEIGHT_OFFSET / 3);
137
- this.ctx.lineTo(wordStartX, note.lineHeight / 2 - Note.NOTE_LINE_HEIGHT_OFFSET / 3);
138
+ this.ctx.moveTo(0, note.lineHeight / 2 - NoteModel.NOTE_LINE_HEIGHT_OFFSET / 3);
139
+ this.ctx.lineTo(wordStartX, note.lineHeight / 2 - NoteModel.NOTE_LINE_HEIGHT_OFFSET / 3);
138
140
  }
139
141
  this.ctx.stroke();
140
142
  }
@@ -143,7 +145,7 @@ class NoteLayer extends BaseLayer {
143
145
  });
144
146
  }
145
147
 
146
- drawPlayerToken(note, x, label) {
148
+ drawPlayerToken(note: NoteModel, x: number, label: string) {
147
149
  this.ctx.save();
148
150
 
149
151
  this.ctx.translate(x + note.playerTokenRadius, 0);
@@ -158,16 +160,14 @@ class NoteLayer extends BaseLayer {
158
160
  const playerFontSize = note.fontSize * 0.8;
159
161
  this.ctx.font = `${playerFontSize}px Arial`;
160
162
  const textX = -this.ctx.measureText(label).width / 2;
161
- const textY = ((note.playerTokenRadius * 2 - playerFontSize) / 2) * (1 + Note.NOTE_LINE_HEIGHT_OFFSET);
163
+ const textY = ((note.playerTokenRadius * 2 - playerFontSize) / 2) * (1 + NoteModel.NOTE_LINE_HEIGHT_OFFSET);
162
164
  this.ctx.fillStyle = `rgba(255, 255, 255, ${this.noteAlpha})`;
163
165
  this.ctx.fillText(label, textX, textY);
164
166
 
165
167
  this.ctx.restore();
166
168
  }
167
169
 
168
- scale(value) {
170
+ scale(value: number) {
169
171
  return value / this.options.scale;
170
172
  }
171
173
  }
172
-
173
- module.exports = NoteLayer;
@@ -1,6 +1,7 @@
1
- const BaseLayer = require('./base/BaseLayer');
1
+ import BaseLayer from './base/BaseLayer';
2
+ import PlayerModel from '../models/PlayerModel';
2
3
 
3
- class PlayerLayer extends BaseLayer {
4
+ export default class PlayerLayer extends BaseLayer {
4
5
  get staticData() {
5
6
  return this.options.staticData;
6
7
  }
@@ -60,7 +61,7 @@ class PlayerLayer extends BaseLayer {
60
61
  this.ctx.restore();
61
62
  }
62
63
 
63
- setPlayerPuckStyle(player) {
64
+ setPlayerPuckStyle(player: PlayerModel) {
64
65
  const { red, green, blue, alpha } = player.color;
65
66
 
66
67
  const isDefaultInputColor = red === 0 && green === 0 && blue === 0 && alpha === 1;
@@ -86,7 +87,7 @@ class PlayerLayer extends BaseLayer {
86
87
  this.ctx.strokeStyle = color;
87
88
  }
88
89
 
89
- drawPlayerPuck(player) {
90
+ drawPlayerPuck(player: PlayerModel) {
90
91
  const { x, y } = player.location;
91
92
  this.ctx.beginPath();
92
93
  this.ctx.arc(x, y, this.radius, 0, Math.PI * 2, true);
@@ -97,7 +98,7 @@ class PlayerLayer extends BaseLayer {
97
98
  this.ctx.fill();
98
99
  }
99
100
 
100
- setPlayerLabel(player) {
101
+ setPlayerLabel(player: PlayerModel) {
101
102
  const { x, y } = player.location;
102
103
  const { alpha } = player.color;
103
104
 
@@ -143,5 +144,3 @@ class PlayerLayer extends BaseLayer {
143
144
  }
144
145
  }
145
146
  }
146
-
147
- module.exports = PlayerLayer;
@@ -1,6 +1,6 @@
1
- const BaseLayer = require('./base/BaseLayer');
1
+ import BaseLayer from './base/BaseLayer';
2
2
 
3
- class ShapeControlPointLayer extends BaseLayer {
3
+ export default class ShapeControlPointLayer extends BaseLayer {
4
4
  apply() {
5
5
  this.ctx.save();
6
6
 
@@ -20,5 +20,3 @@ class ShapeControlPointLayer extends BaseLayer {
20
20
  this.ctx.restore();
21
21
  }
22
22
  }
23
-
24
- module.exports = ShapeControlPointLayer;
@@ -1,8 +1,8 @@
1
- const _ = require('lodash');
2
- const BaseLayer = require('./base/BaseLayer');
3
- const shapeLayers = require('./shape');
1
+ import _ from 'lodash';
2
+ import BaseLayer from './base/BaseLayer';
3
+ import * as shapeLayers from './shape';
4
4
 
5
- class ShapeLayer extends BaseLayer {
5
+ export default class ShapeLayer extends BaseLayer {
6
6
  apply() {
7
7
  this.ctx.save();
8
8
 
@@ -19,5 +19,3 @@ class ShapeLayer extends BaseLayer {
19
19
  this.ctx.restore();
20
20
  }
21
21
  }
22
-
23
- module.exports = ShapeLayer;
@@ -0,0 +1,15 @@
1
+ import { FrameData, FrameDataOptions } from '../../models/FrameModel';
2
+ import { CourtTypeConstants, courtTypeConstants, SportConstants, sportConstants } from '../court';
3
+
4
+ export default class BaseLayer {
5
+ constructor(public ctx: CanvasRenderingContext2D, public playData: FrameData, public options: FrameDataOptions) {}
6
+
7
+ get courtTypeConstants(): SportConstants & CourtTypeConstants {
8
+ if (!sportConstants[this.playData.sport]) throw new Error('unknown sport type constants');
9
+ if (!courtTypeConstants[this.playData.court.type]) throw new Error('unknown court type constants');
10
+ return {
11
+ ...sportConstants[this.playData.sport],
12
+ ...courtTypeConstants[this.playData.court.type]
13
+ };
14
+ }
15
+ }
@@ -0,0 +1,29 @@
1
+ import BaseLayer from './BaseLayer';
2
+ import { FrameData, FrameDataOptions } from '../../models/FrameModel';
3
+ import { CourtTypeConstants, SportConstants } from '../court';
4
+
5
+ export default class InternalBaseLayer {
6
+ protected ctx: CanvasRenderingContext2D;
7
+ protected playData: FrameData;
8
+ protected options: Partial<FrameDataOptions>;
9
+ protected courtTypeConstants: SportConstants & CourtTypeConstants;
10
+
11
+ constructor(parentLayer: BaseLayer) {
12
+ this.ctx = parentLayer.ctx;
13
+ this.playData = parentLayer.playData;
14
+ this.options = parentLayer.options ? parentLayer.options : {};
15
+ this.courtTypeConstants = parentLayer.courtTypeConstants;
16
+ }
17
+
18
+ apply() {
19
+ this.ctx.save();
20
+
21
+ this.drawLogic();
22
+
23
+ this.ctx.restore();
24
+ }
25
+
26
+ drawLogic() {
27
+ // Override this
28
+ }
29
+ }
@@ -1,6 +1,6 @@
1
- const InternalBaseLayer = require('../../base/InternalBaseLayer');
1
+ import InternalBaseLayer from '../../base/InternalBaseLayer';
2
2
 
3
- class InternalCourtLayer extends InternalBaseLayer {
3
+ export default class InternalCourtLayer extends InternalBaseLayer {
4
4
  get courtCenter() {
5
5
  return {
6
6
  x: this.courtTypeConstants.COURT_RECT_WIDTH / 2,
@@ -36,11 +36,9 @@ class InternalCourtLayer extends InternalBaseLayer {
36
36
  this.ctx.translate(0, -Math.abs(verticalTranslationDist));
37
37
  }
38
38
 
39
- setColor(color) {
39
+ setColor(color: string) {
40
40
  const style = this.options.lineColor === 'transparent' ? 'transparent' : color;
41
41
  this.ctx.strokeStyle = style;
42
42
  this.ctx.fillStyle = style;
43
43
  }
44
44
  }
45
-
46
- module.exports = InternalCourtLayer;
@@ -0,0 +1,213 @@
1
+ import { CourtType, SportType } from '../../types';
2
+ import {
3
+ COURT_TYPE_BASEBALL_HIGH_SCHOOL,
4
+ COURT_TYPE_BIG3,
5
+ COURT_TYPE_FIBA,
6
+ COURT_TYPE_FOOTBALL_HIGH_SCHOOL,
7
+ COURT_TYPE_FOOTBALL_HIGH_SCHOOL_LEGACY,
8
+ COURT_TYPE_HOCKEY_INTERNATIONAL,
9
+ COURT_TYPE_HOCKEY_NHL,
10
+ COURT_TYPE_LACROSSE_US_M,
11
+ COURT_TYPE_LACROSSE_US_W,
12
+ COURT_TYPE_NBA,
13
+ COURT_TYPE_NCAAM,
14
+ COURT_TYPE_NCAAW,
15
+ COURT_TYPE_SOCCER_FIFA,
16
+ COURT_TYPE_SOCCER_NCAA,
17
+ COURT_TYPE_SOCCER_NFHS,
18
+ COURT_TYPE_SOCCER_U10,
19
+ COURT_TYPE_SOCCER_U12,
20
+ COURT_TYPE_SOCCER_U19,
21
+ COURT_TYPE_US_HIGH_SCHOOL,
22
+ COURT_TYPE_US_JUNIOR_HIGH,
23
+ COURT_TYPE_VOLLEYBALL_INDOOR,
24
+ COURT_TYPE_WNBA,
25
+ SPORT_TYPE_BASEBALL,
26
+ SPORT_TYPE_BASKETBALL,
27
+ SPORT_TYPE_FOOTBALL,
28
+ SPORT_TYPE_HOCKEY,
29
+ SPORT_TYPE_LACROSSE,
30
+ SPORT_TYPE_SOCCER,
31
+ SPORT_TYPE_VOLLEYBALL
32
+ } from '../../constants';
33
+
34
+ export type SportConstants = {
35
+ COURT_LINE_WIDTH: number;
36
+ PLAYER_TOKEN_RADIUS: number;
37
+ PLAYER_TOKEN_SCALE: number;
38
+ LINE_WIDTH: number;
39
+ LINE_MASKING: boolean;
40
+ };
41
+
42
+ export type CourtTypeConstants = {
43
+ COURT_RECT_WIDTH: number;
44
+ COURT_RECT_HEIGHT: number;
45
+ } & Record<string, any>;
46
+
47
+ import InternalCourtLayer from './base/InternalCourtLayer';
48
+
49
+ import * as BaseballLayers from './layers/BASEBALL/layers';
50
+ import * as BaseballConstants from './layers/BASEBALL/constants';
51
+ import * as BaseballHighSchoolLayers from './layers/BASEBALL/courtTypes/BASEBALL_HIGH_SCHOOL/layers';
52
+ import * as BaseballHighSchoolConstants from './layers/BASEBALL/courtTypes/BASEBALL_HIGH_SCHOOL/constants';
53
+
54
+ import * as BasketballLayers from './layers/BASKETBALL/layers';
55
+ import * as BasketballConstants from './layers/BASKETBALL/constants';
56
+ import * as BasketballBig3Layers from './layers/BASKETBALL/courtTypes/BIG3/layers';
57
+ import * as BasketballBig3Constants from './layers/BASKETBALL/courtTypes/BIG3/constants';
58
+ import * as BasketballFibaLayers from './layers/BASKETBALL/courtTypes/FIBA/layers';
59
+ import * as BasketballFibaConstants from './layers/BASKETBALL/courtTypes/FIBA/constants';
60
+ import * as BasketballNbaLayers from './layers/BASKETBALL/courtTypes/NBA/layers';
61
+ import * as BasketballNbaConstants from './layers/BASKETBALL/courtTypes/NBA/constants';
62
+ import * as BasketballNcaamLayers from './layers/BASKETBALL/courtTypes/NCAAM/layers';
63
+ import * as BasketballNcaamConstants from './layers/BASKETBALL/courtTypes/NCAAM/constants';
64
+ import * as BasketballNcaawLayers from './layers/BASKETBALL/courtTypes/NCAAW/layers';
65
+ import * as BasketballNcaawConstants from './layers/BASKETBALL/courtTypes/NCAAW/constants';
66
+ import * as BasketballUsHsLayers from './layers/BASKETBALL/courtTypes/US_HIGH_SCHOOL/layers';
67
+ import * as BasketballUsHsConstants from './layers/BASKETBALL/courtTypes/US_HIGH_SCHOOL/constants';
68
+ import * as BasketballUsJhLayers from './layers/BASKETBALL/courtTypes/US_JUNIOR_HIGH/layers';
69
+ import * as BasketballUsJhConstants from './layers/BASKETBALL/courtTypes/US_JUNIOR_HIGH/constants';
70
+ import * as BasketballWnbaLayers from './layers/BASKETBALL/courtTypes/WNBA/layers';
71
+ import * as BasketballWnbaConstants from './layers/BASKETBALL/courtTypes/WNBA/constants';
72
+
73
+ import * as FootballLayers from './layers/FOOTBALL/layers';
74
+ import * as FootballConstants from './layers/FOOTBALL/constants';
75
+ import * as FootballHsConstants from './layers/FOOTBALL/courtTypes/FOOTBALL_HIGH_SCHOOL/constants';
76
+
77
+ import * as HockeyLayers from './layers/HOCKEY/layers';
78
+ import * as HockeyConstants from './layers/HOCKEY/constants';
79
+ import * as HockeyNhlLayers from './layers/HOCKEY/courtTypes/HOCKEY_NHL/layers';
80
+ import * as HockeyNhlConstants from './layers/HOCKEY/courtTypes/HOCKEY_NHL/constants';
81
+ import * as HockeyIntLayers from './layers/HOCKEY/courtTypes/HOCKEY_INTERNATIONAL/layers';
82
+ import * as HockeyIntConstants from './layers/HOCKEY/courtTypes/HOCKEY_INTERNATIONAL/constants';
83
+
84
+ import * as LacrosseLayers from './layers/LACROSSE/layers';
85
+ import * as LacrosseConstants from './layers/LACROSSE/constants';
86
+ import * as LacrosseUsMLayers from './layers/LACROSSE/courtTypes/LACROSSE_US_M/layers';
87
+ import * as LacrosseUsMConstants from './layers/LACROSSE/courtTypes/LACROSSE_US_M/constants';
88
+ import * as LacrosseUsWLayers from './layers/LACROSSE/courtTypes/LACROSSE_US_W/layers';
89
+ import * as LacrosseUsWConstants from './layers/LACROSSE/courtTypes/LACROSSE_US_W/constants';
90
+
91
+ import * as SoccerLayers from './layers/SOCCER/layers';
92
+ import * as SoccerConstants from './layers/SOCCER/constants';
93
+ import * as SoccerU19Constants from './layers/SOCCER/courtTypes/SOCCER_U19/constants';
94
+ import * as SoccerFifaConstants from './layers/SOCCER/courtTypes/SOCCER_FIFA/constants';
95
+ import * as SoccerNcaaLayers from './layers/SOCCER/courtTypes/SOCCER_NCAA/layers';
96
+ import * as SoccerNcaaConstants from './layers/SOCCER/courtTypes/SOCCER_NCAA/constants';
97
+ import * as SoccerNfhsLayers from './layers/SOCCER/courtTypes/SOCCER_NFHS/layers';
98
+ import * as SoccerNfhsConstants from './layers/SOCCER/courtTypes/SOCCER_NFHS/constants';
99
+ import * as SoccerU10Layers from './layers/SOCCER/courtTypes/SOCCER_U10/layers';
100
+ import * as SoccerU10Constants from './layers/SOCCER/courtTypes/SOCCER_U10/constants';
101
+ import * as SoccerU12Layers from './layers/SOCCER/courtTypes/SOCCER_U12/layers';
102
+ import * as SoccerU12Constants from './layers/SOCCER/courtTypes/SOCCER_U12/constants';
103
+
104
+ import * as VolleyballLayers from './layers/VOLLEYBALL/layers';
105
+ import * as VolleyballConstants from './layers/VOLLEYBALL/constants';
106
+ import * as VolleyballIndoorConstants from './layers/VOLLEYBALL/courtTypes/VOLLEYBALL_INDOOR/constants';
107
+
108
+ const sportLayers: Record<SportType, Record<string, typeof InternalCourtLayer>> = {
109
+ [SPORT_TYPE_BASEBALL]: BaseballLayers,
110
+ [SPORT_TYPE_BASKETBALL]: BasketballLayers,
111
+ [SPORT_TYPE_FOOTBALL]: FootballLayers,
112
+ [SPORT_TYPE_HOCKEY]: HockeyLayers,
113
+ [SPORT_TYPE_LACROSSE]: LacrosseLayers,
114
+ [SPORT_TYPE_SOCCER]: SoccerLayers,
115
+ [SPORT_TYPE_VOLLEYBALL]: VolleyballLayers
116
+ };
117
+
118
+ const courtTypeLayers: Record<SportType, Partial<Record<CourtType, Record<string, typeof InternalCourtLayer>>>> = {
119
+ [SPORT_TYPE_BASEBALL]: {
120
+ [COURT_TYPE_BASEBALL_HIGH_SCHOOL]: BaseballHighSchoolLayers
121
+ },
122
+ [SPORT_TYPE_BASKETBALL]: {
123
+ [COURT_TYPE_BIG3]: BasketballBig3Layers,
124
+ [COURT_TYPE_FIBA]: BasketballFibaLayers,
125
+ [COURT_TYPE_NBA]: BasketballNbaLayers,
126
+ [COURT_TYPE_NCAAM]: BasketballNcaamLayers,
127
+ [COURT_TYPE_NCAAW]: BasketballNcaawLayers,
128
+ [COURT_TYPE_US_HIGH_SCHOOL]: BasketballUsHsLayers,
129
+ [COURT_TYPE_US_JUNIOR_HIGH]: BasketballUsJhLayers,
130
+ [COURT_TYPE_WNBA]: BasketballWnbaLayers
131
+ },
132
+ [SPORT_TYPE_FOOTBALL]: {},
133
+ [SPORT_TYPE_HOCKEY]: {
134
+ [COURT_TYPE_HOCKEY_NHL]: HockeyNhlLayers,
135
+ [COURT_TYPE_HOCKEY_INTERNATIONAL]: HockeyIntLayers
136
+ },
137
+ [SPORT_TYPE_LACROSSE]: {
138
+ [COURT_TYPE_LACROSSE_US_M]: LacrosseUsMLayers,
139
+ [COURT_TYPE_LACROSSE_US_W]: LacrosseUsWLayers
140
+ },
141
+ [SPORT_TYPE_SOCCER]: {
142
+ [COURT_TYPE_SOCCER_NCAA]: SoccerNcaaLayers,
143
+ [COURT_TYPE_SOCCER_NFHS]: SoccerNfhsLayers,
144
+ [COURT_TYPE_SOCCER_U10]: SoccerU10Layers,
145
+ [COURT_TYPE_SOCCER_U12]: SoccerU12Layers
146
+ },
147
+ [SPORT_TYPE_VOLLEYBALL]: {}
148
+ };
149
+
150
+ const sportConstants: Record<SportType, SportConstants> = {
151
+ [SPORT_TYPE_BASEBALL]: BaseballConstants,
152
+ [SPORT_TYPE_BASKETBALL]: BasketballConstants,
153
+ [SPORT_TYPE_FOOTBALL]: FootballConstants,
154
+ [SPORT_TYPE_HOCKEY]: HockeyConstants,
155
+ [SPORT_TYPE_LACROSSE]: LacrosseConstants,
156
+ [SPORT_TYPE_SOCCER]: SoccerConstants,
157
+ [SPORT_TYPE_VOLLEYBALL]: VolleyballConstants
158
+ };
159
+ const courtTypeConstants: Record<CourtType, CourtTypeConstants> = {
160
+ [COURT_TYPE_BASEBALL_HIGH_SCHOOL]: BaseballHighSchoolConstants,
161
+ [COURT_TYPE_BIG3]: BasketballBig3Constants,
162
+ [COURT_TYPE_FIBA]: BasketballFibaConstants,
163
+ [COURT_TYPE_NBA]: BasketballNbaConstants,
164
+ [COURT_TYPE_NCAAM]: BasketballNcaamConstants,
165
+ [COURT_TYPE_NCAAW]: BasketballNcaawConstants,
166
+ [COURT_TYPE_US_HIGH_SCHOOL]: BasketballUsHsConstants,
167
+ [COURT_TYPE_US_JUNIOR_HIGH]: BasketballUsJhConstants,
168
+ [COURT_TYPE_WNBA]: BasketballWnbaConstants,
169
+ [COURT_TYPE_FOOTBALL_HIGH_SCHOOL_LEGACY]: FootballHsConstants,
170
+ [COURT_TYPE_FOOTBALL_HIGH_SCHOOL]: FootballHsConstants,
171
+ [COURT_TYPE_HOCKEY_NHL]: HockeyNhlConstants,
172
+ [COURT_TYPE_HOCKEY_INTERNATIONAL]: HockeyIntConstants,
173
+ [COURT_TYPE_LACROSSE_US_M]: LacrosseUsMConstants,
174
+ [COURT_TYPE_LACROSSE_US_W]: LacrosseUsWConstants,
175
+ [COURT_TYPE_SOCCER_FIFA]: SoccerFifaConstants,
176
+ [COURT_TYPE_SOCCER_NCAA]: SoccerNcaaConstants,
177
+ [COURT_TYPE_SOCCER_NFHS]: SoccerNfhsConstants,
178
+ [COURT_TYPE_SOCCER_U10]: SoccerU10Constants,
179
+ [COURT_TYPE_SOCCER_U12]: SoccerU12Constants,
180
+ [COURT_TYPE_SOCCER_U19]: SoccerU19Constants,
181
+ [COURT_TYPE_VOLLEYBALL_INDOOR]: VolleyballIndoorConstants
182
+ };
183
+ const sportCourtTypeMap: Record<SportType, { courtTypes: CourtType[] }> = {
184
+ [SPORT_TYPE_BASEBALL]: { courtTypes: [COURT_TYPE_BASEBALL_HIGH_SCHOOL] },
185
+ [SPORT_TYPE_BASKETBALL]: {
186
+ courtTypes: [
187
+ COURT_TYPE_BIG3,
188
+ COURT_TYPE_FIBA,
189
+ COURT_TYPE_NBA,
190
+ COURT_TYPE_NCAAM,
191
+ COURT_TYPE_NCAAW,
192
+ COURT_TYPE_US_HIGH_SCHOOL,
193
+ COURT_TYPE_US_JUNIOR_HIGH,
194
+ COURT_TYPE_WNBA
195
+ ]
196
+ },
197
+ [SPORT_TYPE_FOOTBALL]: { courtTypes: [COURT_TYPE_FOOTBALL_HIGH_SCHOOL] },
198
+ [SPORT_TYPE_HOCKEY]: { courtTypes: [COURT_TYPE_HOCKEY_NHL, COURT_TYPE_HOCKEY_INTERNATIONAL] },
199
+ [SPORT_TYPE_LACROSSE]: { courtTypes: [COURT_TYPE_LACROSSE_US_M, COURT_TYPE_LACROSSE_US_W] },
200
+ [SPORT_TYPE_SOCCER]: {
201
+ courtTypes: [
202
+ COURT_TYPE_SOCCER_FIFA,
203
+ COURT_TYPE_SOCCER_NCAA,
204
+ COURT_TYPE_SOCCER_NFHS,
205
+ COURT_TYPE_SOCCER_U10,
206
+ COURT_TYPE_SOCCER_U12,
207
+ COURT_TYPE_SOCCER_U19
208
+ ]
209
+ },
210
+ [SPORT_TYPE_VOLLEYBALL]: { courtTypes: [COURT_TYPE_VOLLEYBALL_INDOOR] }
211
+ };
212
+
213
+ export { sportLayers, courtTypeLayers, sportConstants, courtTypeConstants, sportCourtTypeMap };
@@ -0,0 +1,5 @@
1
+ export const COURT_LINE_WIDTH = 0.1667;
2
+ export const PLAYER_TOKEN_RADIUS = 1.5;
3
+ export const PLAYER_TOKEN_SCALE = 2;
4
+ export const LINE_WIDTH = 0.55;
5
+ export const LINE_MASKING = false;