@luceosports/play-rendering 1.13.0 → 1.13.1
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.
- package/dist/play-rendering.js +3 -3
- package/dist/play-rendering.js.map +1 -1
- package/package.json +1 -1
- package/src/layers/CourtLayer.js +7 -3
- package/src/layers/base/BaseLayer.js +7 -2
- package/src/layers/court/base/InternalCourtLayer.js +7 -0
- package/src/layers/court/index.js +24 -9
- package/src/layers/court/layers/BASKETBALL/common/LaneMarkingNBATrait.js +34 -0
- package/src/layers/court/layers/BASKETBALL/common/LaneMarkingNCAATrait.js +30 -0
- package/src/layers/court/layers/BASKETBALL/constants.js +0 -2
- package/src/layers/court/layers/BASKETBALL/courtTypes/BIG3/constants.js +13 -0
- package/src/layers/court/layers/BASKETBALL/{NBA → courtTypes/BIG3}/layers/Big3Layer.js +4 -7
- package/src/layers/court/layers/BASKETBALL/courtTypes/BIG3/layers/LaneMarkingLayer.js +12 -0
- package/src/layers/court/layers/BASKETBALL/courtTypes/FIBA/constants.js +13 -0
- package/src/layers/court/layers/BASKETBALL/courtTypes/FIBA/layers/LaneMarkingLayer.js +38 -0
- package/src/layers/court/layers/BASKETBALL/courtTypes/NBA/constants.js +13 -0
- package/src/layers/court/layers/BASKETBALL/courtTypes/NBA/layers/LaneMarkingLayer.js +12 -0
- package/src/layers/court/layers/BASKETBALL/courtTypes/NCAAM/constants.js +13 -0
- package/src/layers/court/layers/BASKETBALL/courtTypes/NCAAM/layers/LaneMarkingLayer.js +12 -0
- package/src/layers/court/layers/BASKETBALL/courtTypes/NCAAW/constants.js +13 -0
- package/src/layers/court/layers/BASKETBALL/courtTypes/NCAAW/layers/LaneMarkingLayer.js +12 -0
- package/src/layers/court/layers/BASKETBALL/courtTypes/US_HIGH_SCHOOL/constants.js +13 -0
- package/src/layers/court/layers/BASKETBALL/courtTypes/US_HIGH_SCHOOL/layers/LaneMarkingLayer.js +12 -0
- package/src/layers/court/layers/BASKETBALL/courtTypes/US_JUNIOR_HIGH/constants.js +13 -0
- package/src/layers/court/layers/BASKETBALL/courtTypes/US_JUNIOR_HIGH/layers/LaneMarkingLayer.js +12 -0
- package/src/layers/court/layers/BASKETBALL/courtTypes/WNBA/constants.js +13 -0
- package/src/layers/court/layers/BASKETBALL/courtTypes/WNBA/layers/LaneMarkingLayer.js +12 -0
- package/src/layers/court/layers/BASKETBALL/{NBA/layers → layers}/BaseLineMarkingLayer.js +8 -5
- package/src/layers/court/layers/BASKETBALL/{NBA/layers → layers}/BenchAreaLayer.js +6 -4
- package/src/layers/court/layers/BASKETBALL/layers/BorderRectLayer.js +12 -0
- package/src/layers/court/layers/BASKETBALL/layers/CenterCircleLayer.js +21 -0
- package/src/layers/court/layers/BASKETBALL/layers/CenterLineLayer.js +16 -0
- package/src/layers/court/layers/BASKETBALL/{NBA/layers → layers}/FreeThrowLayer.js +5 -3
- package/src/layers/court/layers/BASKETBALL/layers/HoopLayer.js +26 -0
- package/src/layers/court/layers/BASKETBALL/layers/InnerOuterRectLayer.js +24 -0
- package/src/layers/court/layers/BASKETBALL/{NBA/layers → layers}/RestrictedAreaLayer.js +6 -5
- package/src/layers/court/layers/BASKETBALL/layers/ThreePointLineLayer.js +42 -0
- package/src/layers/court/layers/FOOTBALL/{HIGH_SCHOOL_FOOTBALL/constants → courtTypes/HIGH_SCHOOL_FOOTBALL}/constants.js +0 -0
- package/src/layers/court/layers/FOOTBALL/layers/BorderRectLayer.js +12 -0
- package/src/layers/court/layers/FOOTBALL/layers/CenterLineLayer.js +16 -0
- package/src/layers/court/layers/FOOTBALL/{HIGH_SCHOOL_FOOTBALL/layers → layers}/EndZoneLayer.js +3 -4
- package/src/layers/court/layers/FOOTBALL/{HIGH_SCHOOL_FOOTBALL/layers → layers}/FieldNumberLayer.js +4 -5
- package/src/layers/court/layers/FOOTBALL/{HIGH_SCHOOL_FOOTBALL/layers → layers}/HashMarkLayer.js +11 -11
- package/src/layers/court/layers/FOOTBALL/layers/YardLineLayer.js +23 -0
- package/src/models/Play/Options.js +0 -1
- package/src/layers/court/layers/BASKETBALL/NBA/constants/constants.js +0 -1
- package/src/layers/court/layers/BASKETBALL/NBA/constants/index.js +0 -4
- package/src/layers/court/layers/BASKETBALL/NBA/layers/BorderRectLayer.js +0 -13
- package/src/layers/court/layers/BASKETBALL/NBA/layers/CenterCircleLayer.js +0 -19
- package/src/layers/court/layers/BASKETBALL/NBA/layers/CenterLineLayer.js +0 -17
- package/src/layers/court/layers/BASKETBALL/NBA/layers/HoopLayer.js +0 -24
- package/src/layers/court/layers/BASKETBALL/NBA/layers/InnerOuterRectLayer.js +0 -26
- package/src/layers/court/layers/BASKETBALL/NBA/layers/LaneMarkingLayer.js +0 -65
- package/src/layers/court/layers/BASKETBALL/NBA/layers/ThreePointLineLayer.js +0 -35
- package/src/layers/court/layers/FOOTBALL/HIGH_SCHOOL_FOOTBALL/constants/index.js +0 -4
- package/src/layers/court/layers/FOOTBALL/HIGH_SCHOOL_FOOTBALL/layers/BorderRectLayer.js +0 -13
- package/src/layers/court/layers/FOOTBALL/HIGH_SCHOOL_FOOTBALL/layers/CenterLineLayer.js +0 -17
- package/src/layers/court/layers/FOOTBALL/HIGH_SCHOOL_FOOTBALL/layers/YardLineLayer.js +0 -23
package/package.json
CHANGED
package/src/layers/CourtLayer.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const BaseLayer = require('./base/BaseLayer');
|
|
2
|
-
const {
|
|
2
|
+
const { sportLayers, courtTypeLayers } = require('./court');
|
|
3
3
|
|
|
4
4
|
class CourtLayer extends BaseLayer {
|
|
5
5
|
get frameWidth() {
|
|
@@ -15,8 +15,11 @@ class CourtLayer extends BaseLayer {
|
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
get courtTypeLayers() {
|
|
18
|
-
if (!
|
|
19
|
-
return
|
|
18
|
+
if (!sportLayers[this.playData.sport]) throw new Error('unknown sport type layer');
|
|
19
|
+
return {
|
|
20
|
+
...sportLayers[this.playData.sport],
|
|
21
|
+
...((courtTypeLayers[this.playData.sport] || {})[this.playData.court.type] || {})
|
|
22
|
+
};
|
|
20
23
|
}
|
|
21
24
|
|
|
22
25
|
get background() {
|
|
@@ -50,6 +53,7 @@ class CourtLayer extends BaseLayer {
|
|
|
50
53
|
setColor() {
|
|
51
54
|
const courtBorderColor = this.options.lineColor || '#fff';
|
|
52
55
|
this.ctx.strokeStyle = courtBorderColor;
|
|
56
|
+
this.ctx.fillStyle = courtBorderColor;
|
|
53
57
|
}
|
|
54
58
|
|
|
55
59
|
setBackground() {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const { courtTypeConstants } = require('../court');
|
|
1
|
+
const { sportConstants, courtTypeConstants } = require('../court');
|
|
2
2
|
|
|
3
3
|
class BaseLayer {
|
|
4
4
|
constructor(ctx, playData) {
|
|
@@ -8,7 +8,12 @@ class BaseLayer {
|
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
get courtTypeConstants() {
|
|
11
|
-
|
|
11
|
+
if (!sportConstants[this.playData.sport]) throw new Error('unknown sport type constants');
|
|
12
|
+
if (!courtTypeConstants[this.playData.court.type]) throw new Error('unknown court type constants');
|
|
13
|
+
return {
|
|
14
|
+
...sportConstants[this.playData.sport],
|
|
15
|
+
...courtTypeConstants[this.playData.court.type]
|
|
16
|
+
};
|
|
12
17
|
}
|
|
13
18
|
}
|
|
14
19
|
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
const InternalBaseLayer = require('../../base/InternalBaseLayer');
|
|
2
2
|
|
|
3
3
|
class InternalCourtLayer extends InternalBaseLayer {
|
|
4
|
+
get courtCenter() {
|
|
5
|
+
return {
|
|
6
|
+
x: this.courtTypeConstants.COURT_RECT_WIDTH / 2,
|
|
7
|
+
y: this.courtTypeConstants.COURT_RECT_HEIGHT / 2
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
|
|
4
11
|
apply() {
|
|
5
12
|
super.apply();
|
|
6
13
|
|
|
@@ -1,31 +1,46 @@
|
|
|
1
1
|
// require all modules on the path and with the pattern defined
|
|
2
2
|
const req = require.context('./layers/', true, /.js$/);
|
|
3
3
|
|
|
4
|
-
const
|
|
4
|
+
const sportLayers = {};
|
|
5
|
+
const courtTypeLayers = {};
|
|
5
6
|
const sportConstants = {};
|
|
6
7
|
const courtTypeConstants = {};
|
|
7
8
|
|
|
8
9
|
req.keys().forEach(key => {
|
|
9
|
-
if (key.match(
|
|
10
|
+
if (key.match(/layers\//)) {
|
|
10
11
|
return processLayers(key);
|
|
11
12
|
}
|
|
12
13
|
processConstants(key);
|
|
13
14
|
});
|
|
14
15
|
|
|
15
16
|
function processLayers(key) {
|
|
17
|
+
if (key.match(/\/courtTypes\//)) {
|
|
18
|
+
const mPath = key
|
|
19
|
+
.replace('./', '')
|
|
20
|
+
.replace('/courtTypes', '')
|
|
21
|
+
.replace('/layers', '')
|
|
22
|
+
.replace('.js', '');
|
|
23
|
+
const [sportName, courtType, mName] = mPath.split('/');
|
|
24
|
+
if (!courtTypeLayers[sportName]) courtTypeLayers[sportName] = {};
|
|
25
|
+
if (!courtTypeLayers[sportName][courtType]) courtTypeLayers[sportName][courtType] = {};
|
|
26
|
+
courtTypeLayers[sportName][courtType][mName] = req(key);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
16
29
|
const mPath = key
|
|
17
30
|
.replace('./', '')
|
|
18
31
|
.replace('/layers', '')
|
|
19
32
|
.replace('.js', '');
|
|
20
|
-
const [sportName,
|
|
21
|
-
if (!
|
|
22
|
-
|
|
23
|
-
layers[sportName][courtType][mName] = req(key);
|
|
33
|
+
const [sportName, mName] = mPath.split('/');
|
|
34
|
+
if (!sportLayers[sportName]) sportLayers[sportName] = {};
|
|
35
|
+
sportLayers[sportName][mName] = req(key);
|
|
24
36
|
}
|
|
25
37
|
|
|
26
38
|
function processConstants(key) {
|
|
27
|
-
if (key.match(/\/
|
|
28
|
-
const mPath = key
|
|
39
|
+
if (key.match(/\/courtTypes\//)) {
|
|
40
|
+
const mPath = key
|
|
41
|
+
.replace('./', '')
|
|
42
|
+
.replace('/courtTypes', '')
|
|
43
|
+
.replace('/constants.js', '');
|
|
29
44
|
const [, courtType] = mPath.split('/');
|
|
30
45
|
courtTypeConstants[courtType] = req(key);
|
|
31
46
|
return;
|
|
@@ -37,4 +52,4 @@ function processConstants(key) {
|
|
|
37
52
|
}
|
|
38
53
|
}
|
|
39
54
|
|
|
40
|
-
module.exports = {
|
|
55
|
+
module.exports = { sportLayers, courtTypeLayers, sportConstants, courtTypeConstants };
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
const COURT_INNER_MARK_OFFSET = 5;
|
|
2
|
+
|
|
3
|
+
module.exports = {
|
|
4
|
+
drawLogic() {
|
|
5
|
+
const courtMarkingWidth = 0.667;
|
|
6
|
+
const courtOuterRectOffset = this.courtTypeConstants.FREE_THROW_OUTER_WIDTH / 2;
|
|
7
|
+
const courtOuterRectLeftX = this.courtCenter.x - courtOuterRectOffset;
|
|
8
|
+
const courtOuterRectRightX = this.courtCenter.x + courtOuterRectOffset;
|
|
9
|
+
const courtInnerMarkLeftX = this.courtCenter.x - COURT_INNER_MARK_OFFSET;
|
|
10
|
+
const courtInnerMarkRightX = this.courtCenter.x + COURT_INNER_MARK_OFFSET;
|
|
11
|
+
|
|
12
|
+
[7.0, 8.0, 11.0, 14.0].forEach(y => {
|
|
13
|
+
this.ctx.beginPath();
|
|
14
|
+
|
|
15
|
+
this.ctx.moveTo(courtOuterRectLeftX, y);
|
|
16
|
+
this.ctx.lineTo(courtOuterRectLeftX - courtMarkingWidth, y);
|
|
17
|
+
|
|
18
|
+
this.ctx.moveTo(courtOuterRectRightX, y);
|
|
19
|
+
this.ctx.lineTo(courtOuterRectRightX + courtMarkingWidth, y);
|
|
20
|
+
|
|
21
|
+
this.ctx.stroke();
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
this.ctx.beginPath();
|
|
25
|
+
this.ctx.moveTo(courtInnerMarkLeftX, 13.0);
|
|
26
|
+
this.ctx.lineTo(courtInnerMarkLeftX + 0.5, 13.0);
|
|
27
|
+
this.ctx.stroke();
|
|
28
|
+
|
|
29
|
+
this.ctx.beginPath();
|
|
30
|
+
this.ctx.moveTo(courtInnerMarkRightX, 13.0);
|
|
31
|
+
this.ctx.lineTo(courtInnerMarkRightX - 0.5, 13.0);
|
|
32
|
+
this.ctx.stroke();
|
|
33
|
+
}
|
|
34
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
drawLogic() {
|
|
3
|
+
const courtMarkingWidth = 0.667;
|
|
4
|
+
const courtOuterRectOffset = this.courtTypeConstants.FREE_THROW_OUTER_WIDTH / 2;
|
|
5
|
+
const courtOuterRectLeftX = this.courtCenter.x - courtOuterRectOffset;
|
|
6
|
+
const courtOuterRectRightX = this.courtCenter.x + courtOuterRectOffset;
|
|
7
|
+
|
|
8
|
+
[11.0, 14.0, 17.0].forEach(y => {
|
|
9
|
+
this.ctx.beginPath();
|
|
10
|
+
|
|
11
|
+
this.ctx.moveTo(courtOuterRectLeftX, y);
|
|
12
|
+
this.ctx.lineTo(courtOuterRectLeftX - courtMarkingWidth, y);
|
|
13
|
+
|
|
14
|
+
this.ctx.moveTo(courtOuterRectRightX, y);
|
|
15
|
+
this.ctx.lineTo(courtOuterRectRightX + courtMarkingWidth, y);
|
|
16
|
+
|
|
17
|
+
this.ctx.stroke();
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
this.ctx.beginPath();
|
|
21
|
+
this.ctx.rect(courtOuterRectLeftX, 7.0, -1.2, 0.8);
|
|
22
|
+
this.ctx.fill();
|
|
23
|
+
this.ctx.stroke();
|
|
24
|
+
|
|
25
|
+
this.ctx.beginPath();
|
|
26
|
+
this.ctx.rect(courtOuterRectRightX, 7.0, 1.2, 0.8);
|
|
27
|
+
this.ctx.fill();
|
|
28
|
+
this.ctx.stroke();
|
|
29
|
+
}
|
|
30
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
module.exports = Object.freeze({
|
|
2
|
+
COURT_RECT_WIDTH: 50.0,
|
|
3
|
+
COURT_RECT_HEIGHT: 94.0,
|
|
4
|
+
HOOP_CORNER_DISTANCE: 22,
|
|
5
|
+
THREE_POINT_ARC_RADIUS: 23.6762,
|
|
6
|
+
THREE_POINT_ASIN_APPROX: 10.0,
|
|
7
|
+
THREE_POINT_OFFSET_ORIGIN_Y_APPROX: 14.0,
|
|
8
|
+
FREE_THROW_INNER_WIDTH: 12.0,
|
|
9
|
+
FREE_THROW_OUTER_WIDTH: 16.0,
|
|
10
|
+
FREE_THROW_INNER_DASHED_CIRCLE: true,
|
|
11
|
+
CENTER_INNER_CIRCLE: true,
|
|
12
|
+
BENCH_MARKING: true
|
|
13
|
+
});
|
|
@@ -1,20 +1,17 @@
|
|
|
1
|
-
const InternalCourtLayer = require('
|
|
2
|
-
const { COURT_RECT_WIDTH, COURT_LINE_WIDTH } = require('../constants');
|
|
1
|
+
const InternalCourtLayer = require('../../../../../base/InternalCourtLayer');
|
|
3
2
|
|
|
4
3
|
class Big3Layer extends InternalCourtLayer {
|
|
5
4
|
drawLogic() {
|
|
6
|
-
if (!this.options.big3) return;
|
|
7
|
-
|
|
8
5
|
const fontSize = 4;
|
|
9
6
|
const textHorizontalOffset = 1.1;
|
|
10
7
|
const textVerticalOffset = 1.4;
|
|
11
8
|
|
|
12
|
-
const courtHoopCenter = { x:
|
|
9
|
+
const courtHoopCenter = { x: this.courtCenter.x, y: 5.25 };
|
|
13
10
|
const distance = 30;
|
|
14
11
|
const theta = 40;
|
|
15
12
|
const radius = 2;
|
|
16
13
|
|
|
17
|
-
const centerPoint = { x:
|
|
14
|
+
const centerPoint = { x: this.courtCenter.x, y: courtHoopCenter.y + distance };
|
|
18
15
|
const leftPoint = {
|
|
19
16
|
x: courtHoopCenter.x - distance * Math.cos((Math.PI * (90 - theta)) / 180.0),
|
|
20
17
|
y: courtHoopCenter.y + distance * Math.sin((Math.PI * (90 - theta)) / 180.0)
|
|
@@ -26,7 +23,7 @@ class Big3Layer extends InternalCourtLayer {
|
|
|
26
23
|
|
|
27
24
|
const big3 = [leftPoint, centerPoint, rightPoint];
|
|
28
25
|
|
|
29
|
-
this.ctx.lineWidth = COURT_LINE_WIDTH * 3;
|
|
26
|
+
this.ctx.lineWidth = this.courtTypeConstants.COURT_LINE_WIDTH * 3;
|
|
30
27
|
this.ctx.font = `${fontSize}px Helvetica`;
|
|
31
28
|
|
|
32
29
|
big3.forEach(point => {
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const InternalCourtLayer = require('../../../../../base/InternalCourtLayer');
|
|
2
|
+
const LaneMarkingNBATrait = require('../../../common/LaneMarkingNBATrait');
|
|
3
|
+
|
|
4
|
+
class LaneMarkingLayer extends InternalCourtLayer {
|
|
5
|
+
reflection() {
|
|
6
|
+
return true;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
Object.assign(LaneMarkingLayer.prototype, LaneMarkingNBATrait);
|
|
11
|
+
|
|
12
|
+
module.exports = LaneMarkingLayer;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
module.exports = Object.freeze({
|
|
2
|
+
COURT_RECT_WIDTH: 49.21,
|
|
3
|
+
COURT_RECT_HEIGHT: 91.86,
|
|
4
|
+
HOOP_CORNER_DISTANCE: 21.65,
|
|
5
|
+
THREE_POINT_ARC_RADIUS: 22.15,
|
|
6
|
+
THREE_POINT_ASIN_APPROX: 6.0,
|
|
7
|
+
THREE_POINT_OFFSET_ORIGIN_Y_APPROX: 8.0,
|
|
8
|
+
FREE_THROW_INNER_WIDTH: 12.0,
|
|
9
|
+
FREE_THROW_OUTER_WIDTH: 16.08,
|
|
10
|
+
FREE_THROW_INNER_DASHED_CIRCLE: false,
|
|
11
|
+
CENTER_INNER_CIRCLE: false,
|
|
12
|
+
BENCH_MARKING: false
|
|
13
|
+
});
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
const InternalCourtLayer = require('../../../../../base/InternalCourtLayer');
|
|
2
|
+
|
|
3
|
+
class LaneMarkingLayer extends InternalCourtLayer {
|
|
4
|
+
reflection() {
|
|
5
|
+
return true;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
drawLogic() {
|
|
9
|
+
const courtMarkingWidth = 0.333;
|
|
10
|
+
const courtOuterRectOffset = this.courtTypeConstants.FREE_THROW_OUTER_WIDTH / 2;
|
|
11
|
+
const courtOuterRectLeftX = this.courtCenter.x - courtOuterRectOffset;
|
|
12
|
+
const courtOuterRectRightX = this.courtCenter.x + courtOuterRectOffset;
|
|
13
|
+
|
|
14
|
+
[5.9, 13.6, 16.5].forEach(y => {
|
|
15
|
+
this.ctx.beginPath();
|
|
16
|
+
|
|
17
|
+
this.ctx.moveTo(courtOuterRectLeftX, y);
|
|
18
|
+
this.ctx.lineTo(courtOuterRectLeftX - courtMarkingWidth, y);
|
|
19
|
+
|
|
20
|
+
this.ctx.moveTo(courtOuterRectRightX, y);
|
|
21
|
+
this.ctx.lineTo(courtOuterRectRightX + courtMarkingWidth, y);
|
|
22
|
+
|
|
23
|
+
this.ctx.stroke();
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
this.ctx.beginPath();
|
|
27
|
+
this.ctx.rect(courtOuterRectLeftX, 8.8, -courtMarkingWidth, 1.9);
|
|
28
|
+
this.ctx.fill();
|
|
29
|
+
this.ctx.stroke();
|
|
30
|
+
|
|
31
|
+
this.ctx.beginPath();
|
|
32
|
+
this.ctx.rect(courtOuterRectRightX, 8.8, courtMarkingWidth, 1.9);
|
|
33
|
+
this.ctx.fill();
|
|
34
|
+
this.ctx.stroke();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
module.exports = LaneMarkingLayer;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
module.exports = Object.freeze({
|
|
2
|
+
COURT_RECT_WIDTH: 50.0,
|
|
3
|
+
COURT_RECT_HEIGHT: 94.0,
|
|
4
|
+
HOOP_CORNER_DISTANCE: 22,
|
|
5
|
+
THREE_POINT_ARC_RADIUS: 23.6762,
|
|
6
|
+
THREE_POINT_ASIN_APPROX: 10.0,
|
|
7
|
+
THREE_POINT_OFFSET_ORIGIN_Y_APPROX: 14.0,
|
|
8
|
+
FREE_THROW_INNER_WIDTH: 12.0,
|
|
9
|
+
FREE_THROW_OUTER_WIDTH: 16.0,
|
|
10
|
+
FREE_THROW_INNER_DASHED_CIRCLE: true,
|
|
11
|
+
CENTER_INNER_CIRCLE: true,
|
|
12
|
+
BENCH_MARKING: true
|
|
13
|
+
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const InternalCourtLayer = require('../../../../../base/InternalCourtLayer');
|
|
2
|
+
const LaneMarkingNBATrait = require('../../../common/LaneMarkingNBATrait');
|
|
3
|
+
|
|
4
|
+
class LaneMarkingLayer extends InternalCourtLayer {
|
|
5
|
+
reflection() {
|
|
6
|
+
return true;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
Object.assign(LaneMarkingLayer.prototype, LaneMarkingNBATrait);
|
|
11
|
+
|
|
12
|
+
module.exports = LaneMarkingLayer;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
module.exports = Object.freeze({
|
|
2
|
+
COURT_RECT_WIDTH: 50.0,
|
|
3
|
+
COURT_RECT_HEIGHT: 94.0,
|
|
4
|
+
HOOP_CORNER_DISTANCE: 20.75,
|
|
5
|
+
THREE_POINT_ARC_RADIUS: 20.75,
|
|
6
|
+
THREE_POINT_ASIN_APPROX: 2.0,
|
|
7
|
+
THREE_POINT_OFFSET_ORIGIN_Y_APPROX: 6.0,
|
|
8
|
+
FREE_THROW_INNER_WIDTH: 12.0,
|
|
9
|
+
FREE_THROW_OUTER_WIDTH: 12.0,
|
|
10
|
+
FREE_THROW_INNER_DASHED_CIRCLE: false,
|
|
11
|
+
CENTER_INNER_CIRCLE: false,
|
|
12
|
+
BENCH_MARKING: false
|
|
13
|
+
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const InternalCourtLayer = require('../../../../../base/InternalCourtLayer');
|
|
2
|
+
const LaneMarkingNCAATrait = require('../../../common/LaneMarkingNCAATrait');
|
|
3
|
+
|
|
4
|
+
class LaneMarkingLayer extends InternalCourtLayer {
|
|
5
|
+
reflection() {
|
|
6
|
+
return true;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
Object.assign(LaneMarkingLayer.prototype, LaneMarkingNCAATrait);
|
|
11
|
+
|
|
12
|
+
module.exports = LaneMarkingLayer;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
module.exports = Object.freeze({
|
|
2
|
+
COURT_RECT_WIDTH: 50.0,
|
|
3
|
+
COURT_RECT_HEIGHT: 94.0,
|
|
4
|
+
HOOP_CORNER_DISTANCE: 20.75,
|
|
5
|
+
THREE_POINT_ARC_RADIUS: 20.75,
|
|
6
|
+
THREE_POINT_ASIN_APPROX: 2.0,
|
|
7
|
+
THREE_POINT_OFFSET_ORIGIN_Y_APPROX: 6.0,
|
|
8
|
+
FREE_THROW_INNER_WIDTH: 12.0,
|
|
9
|
+
FREE_THROW_OUTER_WIDTH: 12.0,
|
|
10
|
+
FREE_THROW_INNER_DASHED_CIRCLE: false,
|
|
11
|
+
CENTER_INNER_CIRCLE: false,
|
|
12
|
+
BENCH_MARKING: true
|
|
13
|
+
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const InternalCourtLayer = require('../../../../../base/InternalCourtLayer');
|
|
2
|
+
const LaneMarkingNCAATrait = require('../../../common/LaneMarkingNCAATrait');
|
|
3
|
+
|
|
4
|
+
class LaneMarkingLayer extends InternalCourtLayer {
|
|
5
|
+
reflection() {
|
|
6
|
+
return true;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
Object.assign(LaneMarkingLayer.prototype, LaneMarkingNCAATrait);
|
|
11
|
+
|
|
12
|
+
module.exports = LaneMarkingLayer;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
module.exports = Object.freeze({
|
|
2
|
+
COURT_RECT_WIDTH: 50.0,
|
|
3
|
+
COURT_RECT_HEIGHT: 84.0,
|
|
4
|
+
HOOP_CORNER_DISTANCE: 19.75,
|
|
5
|
+
THREE_POINT_ARC_RADIUS: 19.75,
|
|
6
|
+
THREE_POINT_ASIN_APPROX: 2.0,
|
|
7
|
+
THREE_POINT_OFFSET_ORIGIN_Y_APPROX: 6,
|
|
8
|
+
FREE_THROW_INNER_WIDTH: 12.0,
|
|
9
|
+
FREE_THROW_OUTER_WIDTH: 12.0,
|
|
10
|
+
FREE_THROW_INNER_DASHED_CIRCLE: false,
|
|
11
|
+
CENTER_INNER_CIRCLE: false,
|
|
12
|
+
BENCH_MARKING: false
|
|
13
|
+
});
|
package/src/layers/court/layers/BASKETBALL/courtTypes/US_HIGH_SCHOOL/layers/LaneMarkingLayer.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const InternalCourtLayer = require('../../../../../base/InternalCourtLayer');
|
|
2
|
+
const LaneMarkingNCAATrait = require('../../../common/LaneMarkingNCAATrait');
|
|
3
|
+
|
|
4
|
+
class LaneMarkingLayer extends InternalCourtLayer {
|
|
5
|
+
reflection() {
|
|
6
|
+
return true;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
Object.assign(LaneMarkingLayer.prototype, LaneMarkingNCAATrait);
|
|
11
|
+
|
|
12
|
+
module.exports = LaneMarkingLayer;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
module.exports = Object.freeze({
|
|
2
|
+
COURT_RECT_WIDTH: 42.0,
|
|
3
|
+
COURT_RECT_HEIGHT: 74.0,
|
|
4
|
+
HOOP_CORNER_DISTANCE: 19.75,
|
|
5
|
+
THREE_POINT_ARC_RADIUS: 19.75,
|
|
6
|
+
THREE_POINT_ASIN_APPROX: 2.0,
|
|
7
|
+
THREE_POINT_OFFSET_ORIGIN_Y_APPROX: 6,
|
|
8
|
+
FREE_THROW_INNER_WIDTH: 12.0,
|
|
9
|
+
FREE_THROW_OUTER_WIDTH: 12.0,
|
|
10
|
+
FREE_THROW_INNER_DASHED_CIRCLE: false,
|
|
11
|
+
CENTER_INNER_CIRCLE: false,
|
|
12
|
+
BENCH_MARKING: false
|
|
13
|
+
});
|
package/src/layers/court/layers/BASKETBALL/courtTypes/US_JUNIOR_HIGH/layers/LaneMarkingLayer.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const InternalCourtLayer = require('../../../../../base/InternalCourtLayer');
|
|
2
|
+
const LaneMarkingNCAATrait = require('../../../common/LaneMarkingNCAATrait');
|
|
3
|
+
|
|
4
|
+
class LaneMarkingLayer extends InternalCourtLayer {
|
|
5
|
+
reflection() {
|
|
6
|
+
return true;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
Object.assign(LaneMarkingLayer.prototype, LaneMarkingNCAATrait);
|
|
11
|
+
|
|
12
|
+
module.exports = LaneMarkingLayer;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
module.exports = Object.freeze({
|
|
2
|
+
COURT_RECT_WIDTH: 50.0,
|
|
3
|
+
COURT_RECT_HEIGHT: 94.0,
|
|
4
|
+
HOOP_CORNER_DISTANCE: 21.65,
|
|
5
|
+
THREE_POINT_ARC_RADIUS: 22.15,
|
|
6
|
+
THREE_POINT_ASIN_APPROX: 6.0,
|
|
7
|
+
THREE_POINT_OFFSET_ORIGIN_Y_APPROX: 9.0,
|
|
8
|
+
FREE_THROW_INNER_WIDTH: 12.0,
|
|
9
|
+
FREE_THROW_OUTER_WIDTH: 16.0,
|
|
10
|
+
FREE_THROW_INNER_DASHED_CIRCLE: true,
|
|
11
|
+
CENTER_INNER_CIRCLE: true,
|
|
12
|
+
BENCH_MARKING: true
|
|
13
|
+
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const InternalCourtLayer = require('../../../../../base/InternalCourtLayer');
|
|
2
|
+
const LaneMarkingNBATrait = require('../../../common/LaneMarkingNBATrait');
|
|
3
|
+
|
|
4
|
+
class LaneMarkingLayer extends InternalCourtLayer {
|
|
5
|
+
reflection() {
|
|
6
|
+
return true;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
Object.assign(LaneMarkingLayer.prototype, LaneMarkingNBATrait);
|
|
11
|
+
|
|
12
|
+
module.exports = LaneMarkingLayer;
|
|
@@ -1,15 +1,18 @@
|
|
|
1
|
-
const InternalCourtLayer = require('
|
|
1
|
+
const InternalCourtLayer = require('../../../base/InternalCourtLayer');
|
|
2
2
|
|
|
3
|
+
const COURT_BENCH_OFFSET_X = 11;
|
|
3
4
|
class BaseLineMarkingLayer extends InternalCourtLayer {
|
|
4
5
|
reflection() {
|
|
5
6
|
return true;
|
|
6
7
|
}
|
|
7
8
|
|
|
8
9
|
drawLogic() {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const
|
|
12
|
-
const
|
|
10
|
+
if (!this.courtTypeConstants.BENCH_MARKING) return;
|
|
11
|
+
|
|
12
|
+
const benchPartLeftCourtOrigin = { x: this.courtCenter.x - COURT_BENCH_OFFSET_X, y: 0.0 };
|
|
13
|
+
const benchPartLeftCourtTerminus = { x: this.courtCenter.x - COURT_BENCH_OFFSET_X, y: 0.5 };
|
|
14
|
+
const benchPartRightCourtOrigin = { x: this.courtCenter.x + COURT_BENCH_OFFSET_X, y: 0.0 };
|
|
15
|
+
const benchPartRightCourtTerminus = { x: this.courtCenter.x + COURT_BENCH_OFFSET_X, y: 0.5 };
|
|
13
16
|
|
|
14
17
|
this.ctx.beginPath();
|
|
15
18
|
this.ctx.moveTo(benchPartLeftCourtOrigin.x, benchPartLeftCourtOrigin.y);
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
const InternalCourtLayer = require('
|
|
1
|
+
const InternalCourtLayer = require('../../../base/InternalCourtLayer');
|
|
2
|
+
|
|
3
|
+
const BENCH_AREA_OFFSET = 3.0;
|
|
2
4
|
|
|
3
5
|
class BenchAreaLayer extends InternalCourtLayer {
|
|
4
6
|
reflection() {
|
|
@@ -7,9 +9,9 @@ class BenchAreaLayer extends InternalCourtLayer {
|
|
|
7
9
|
|
|
8
10
|
drawLogic() {
|
|
9
11
|
const benchAreaCourtOrigin = { x: 0.0, y: 28.0 };
|
|
10
|
-
const benchAreaCourtTerminus = { x:
|
|
11
|
-
const benchAreaCourtOrigin2 = { x:
|
|
12
|
-
const benchAreaCourtTerminus2 = { x:
|
|
12
|
+
const benchAreaCourtTerminus = { x: BENCH_AREA_OFFSET, y: 28.0 };
|
|
13
|
+
const benchAreaCourtOrigin2 = { x: this.courtTypeConstants.COURT_RECT_WIDTH, y: 28.0 };
|
|
14
|
+
const benchAreaCourtTerminus2 = { x: this.courtTypeConstants.COURT_RECT_WIDTH - BENCH_AREA_OFFSET, y: 28.0 };
|
|
13
15
|
|
|
14
16
|
this.ctx.beginPath();
|
|
15
17
|
this.ctx.moveTo(benchAreaCourtOrigin.x, benchAreaCourtOrigin.y);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const InternalCourtLayer = require('../../../base/InternalCourtLayer');
|
|
2
|
+
|
|
3
|
+
class BorderRectLayer extends InternalCourtLayer {
|
|
4
|
+
drawLogic() {
|
|
5
|
+
this.ctx.beginPath();
|
|
6
|
+
this.ctx.lineWidth = this.courtTypeConstants.COURT_LINE_WIDTH * 2;
|
|
7
|
+
this.ctx.rect(0, 0, this.courtTypeConstants.COURT_RECT_WIDTH, this.courtTypeConstants.COURT_RECT_HEIGHT);
|
|
8
|
+
this.ctx.stroke();
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
module.exports = BorderRectLayer;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
const InternalCourtLayer = require('../../../base/InternalCourtLayer');
|
|
2
|
+
|
|
3
|
+
class CenterCircleLayer extends InternalCourtLayer {
|
|
4
|
+
drawLogic() {
|
|
5
|
+
if (!this.options.showHalfCourtCircle) return;
|
|
6
|
+
|
|
7
|
+
const outerCenterRadius = 6.0;
|
|
8
|
+
const innerCenterRadius = 2.0;
|
|
9
|
+
|
|
10
|
+
this.ctx.beginPath();
|
|
11
|
+
|
|
12
|
+
this.ctx.arc(this.courtCenter.x, this.courtCenter.y, outerCenterRadius, 0, Math.PI * 2, true);
|
|
13
|
+
if (this.courtTypeConstants.CENTER_INNER_CIRCLE) {
|
|
14
|
+
this.ctx.arc(this.courtCenter.x, this.courtCenter.y, innerCenterRadius, 0, Math.PI * 2, true);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
this.ctx.stroke();
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
module.exports = CenterCircleLayer;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
const InternalCourtLayer = require('../../../base/InternalCourtLayer');
|
|
2
|
+
|
|
3
|
+
class CenterLineLayer extends InternalCourtLayer {
|
|
4
|
+
drawLogic() {
|
|
5
|
+
const courtOrigin = { x: 0.0, y: this.courtCenter.y };
|
|
6
|
+
const courtTerminus = { x: this.courtTypeConstants.COURT_RECT_WIDTH, y: this.courtCenter.y };
|
|
7
|
+
|
|
8
|
+
this.ctx.beginPath();
|
|
9
|
+
this.ctx.lineWidth = this.courtTypeConstants.COURT_LINE_WIDTH * 2;
|
|
10
|
+
this.ctx.moveTo(courtOrigin.x, courtOrigin.y);
|
|
11
|
+
this.ctx.lineTo(courtTerminus.x, courtTerminus.y);
|
|
12
|
+
this.ctx.stroke();
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
module.exports = CenterLineLayer;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const InternalCourtLayer = require('
|
|
1
|
+
const InternalCourtLayer = require('../../../base/InternalCourtLayer');
|
|
2
2
|
|
|
3
3
|
class FreeThrowLayer extends InternalCourtLayer {
|
|
4
4
|
reflection() {
|
|
@@ -6,8 +6,8 @@ class FreeThrowLayer extends InternalCourtLayer {
|
|
|
6
6
|
}
|
|
7
7
|
|
|
8
8
|
drawLogic() {
|
|
9
|
-
const freeThrowSemiCircleCenterPoint = { x:
|
|
10
|
-
const freeThrowSemiCircleRadius =
|
|
9
|
+
const freeThrowSemiCircleCenterPoint = { x: this.courtCenter.x, y: 19.0 };
|
|
10
|
+
const freeThrowSemiCircleRadius = this.courtTypeConstants.FREE_THROW_INNER_WIDTH / 2;
|
|
11
11
|
|
|
12
12
|
this.ctx.beginPath();
|
|
13
13
|
this.ctx.arc(
|
|
@@ -20,6 +20,8 @@ class FreeThrowLayer extends InternalCourtLayer {
|
|
|
20
20
|
);
|
|
21
21
|
this.ctx.stroke();
|
|
22
22
|
|
|
23
|
+
if (!this.courtTypeConstants.FREE_THROW_INNER_DASHED_CIRCLE) return;
|
|
24
|
+
|
|
23
25
|
this.ctx.setLineDash([1, 0.5]);
|
|
24
26
|
this.ctx.beginPath();
|
|
25
27
|
this.ctx.arc(
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
const InternalCourtLayer = require('../../../base/InternalCourtLayer');
|
|
2
|
+
|
|
3
|
+
const COURT_HOOP_LINE_OFFSET = 3;
|
|
4
|
+
|
|
5
|
+
class HoopLayer extends InternalCourtLayer {
|
|
6
|
+
reflection() {
|
|
7
|
+
return true;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
drawLogic() {
|
|
11
|
+
const courtHoopRadius = 0.75;
|
|
12
|
+
const courtHoopCenter = { x: this.courtCenter.x, y: 5.25 };
|
|
13
|
+
const courtHoopLineOrigin = { x: courtHoopCenter.x - COURT_HOOP_LINE_OFFSET, y: 4.0 };
|
|
14
|
+
const courtHoopLineTerminus = { x: courtHoopCenter.x + COURT_HOOP_LINE_OFFSET, y: 4.0 };
|
|
15
|
+
|
|
16
|
+
this.ctx.beginPath();
|
|
17
|
+
this.ctx.moveTo(courtHoopLineOrigin.x, courtHoopLineOrigin.y);
|
|
18
|
+
this.ctx.lineTo(courtHoopLineTerminus.x, courtHoopLineTerminus.y);
|
|
19
|
+
this.ctx.stroke();
|
|
20
|
+
this.ctx.beginPath();
|
|
21
|
+
this.ctx.arc(courtHoopCenter.x, courtHoopCenter.y, courtHoopRadius, 0, 2 * Math.PI, true);
|
|
22
|
+
this.ctx.stroke();
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
module.exports = HoopLayer;
|