blob: 5b43c3608957f99b333a802dcd0badcd2e6ac6c7 [file] [log] [blame]
Alex Perry554cec02019-03-23 20:15:12 -07001import {IN_TO_M, FT_TO_M} from './constants';
2
3const CENTER_FIELD_X = 27 * FT_TO_M + 1.125 * IN_TO_M;
4
5const FAR_CARGO_X = CENTER_FIELD_X - 20.875 * IN_TO_M;
6const MID_CARGO_X = FAR_CARGO_X - 21.75 * IN_TO_M;
7const NEAR_CARGO_X = MID_CARGO_X - 21.75 * IN_TO_M;
8const SIDE_CARGO_Y = (24 + 3 + 0.875) * IN_TO_M;
9const SIDE_CARGO_THETA = -Math.PI / 2;
10
11const FACE_CARGO_X = CENTER_FIELD_X - (7 * 12 + 11.75 + 9) * IN_TO_M;
12const FACE_CARGO_Y = (10.875) * IN_TO_M;
13const FACE_CARGO_THETA = 0;
14
15const ROCKET_X = CENTER_FIELD_X - 8 * FT_TO_M;
16const ROCKET_Y = (26 * 12 + 10.5) / 2.0 * IN_TO_M;
17
18const ROCKET_PORT_X = ROCKET_X;
19const ROCKET_PORT_Y = ROCKET_Y - 0.7;
20const ROCKET_PORT_THETA = Math.PI / 2;
21
22const ROCKET_HATCH_X_OFFSET = 14.634 * IN_TO_M;
23const ROCKET_HATCH_Y = ROCKET_PORT_Y + 9.326 * IN_TO_M;
24const ROCKET_NEAR_X = ROCKET_X - ROCKET_HATCH_X_OFFSET;
25const ROCKET_FAR_X = ROCKET_X + ROCKET_HATCH_X_OFFSET;
26const ROCKET_NEAR_THETA = -28.5 * 180 / Math.PI;
27const ROCKET_FAR_THETA = Math.PI - ROCKET_NEAR_THETA;
28
29const HP_Y = ((26 * 12 + 10.5) / 2 - 25.9) * IN_TO_M;
30const HP_THETA = Math.PI;
31
32export function drawField(ctx : CanvasRenderingContext2D) : void {
33 drawTargets(ctx);
34}
35
36function drawHab(ctx : CanvasRenderingContext2D) : void {
37 ctx.fillstyle = 'rgb(100,100,100)';
38 const habLeft = 5 * FT_TO_M;
39 const habWidth = 5 * FT_TO_M;
40 const habTop = -5 * FT_TO_M;
41 const habHeight = 10 * FT_TO_M;
42 ctx.fillRect(habLeft,habTop,habWidth,habHeight);
43}
44
45function drawTargets(ctx : CanvasRenderingContext2D) : void {
46 drawHalfCargo(ctx);
47 drawRocket(ctx);
48 drawHP(ctx);
49 ctx.save();
50
51 ctx.scale(1, -1);
52 drawHalfCargo(ctx);
53 drawRocket(ctx);
54 drawHP(ctx);
55
56 ctx.restore();
57}
58
59function drawHP(ctx : CanvasRenderingContext2D) : void {
60 ctx.save();
61 ctx.translate(0, HP_Y)
62 ctx.rotate(HP_THETA);
63 drawTarget(ctx);
64 ctx.restore();
65}
66
67function drawRocket(ctx : CanvasRenderingContext2D) : void {
68 ctx.save();
69 ctx.translate(ROCKET_PORT_X, ROCKET_PORT_Y)
70 ctx.rotate(ROCKET_PORT_THETA);
71 drawTarget(ctx);
72 ctx.restore();
73
74 ctx.save();
75 ctx.translate(ROCKET_NEAR_X, ROCKET_HATCH_Y)
76 ctx.rotate(ROCKET_NEAR_THETA);
77 drawTarget(ctx);
78 ctx.restore();
79
80 ctx.save();
81 ctx.translate(ROCKET_FAR_X, ROCKET_HATCH_Y)
82 ctx.rotate(ROCKET_FAR_THETA);
83 drawTarget(ctx);
84 ctx.restore();
85}
86
87function drawHalfCargo(ctx : CanvasRenderingContext2D) : void {
88 ctx.save();
89 ctx.translate(FAR_CARGO_X, SIDE_CARGO_Y)
90 ctx.rotate(SIDE_CARGO_THETA);
91 drawTarget(ctx);
92 ctx.restore();
93
94 ctx.save();
95 ctx.translate(MID_CARGO_X, SIDE_CARGO_Y)
96 ctx.rotate(SIDE_CARGO_THETA);
97 drawTarget(ctx);
98 ctx.restore();
99
100 ctx.save();
101 ctx.translate(NEAR_CARGO_X, SIDE_CARGO_Y)
102 ctx.rotate(SIDE_CARGO_THETA);
103 drawTarget(ctx);
104 ctx.restore();
105
106 ctx.save();
107 ctx.translate(FACE_CARGO_X, FACE_CARGO_Y)
108 ctx.rotate(FACE_CARGO_THETA);
109 drawTarget(ctx);
110 ctx.restore();
111}
112
113function drawTarget(ctx : CanvasRenderingContext2D) : void {
114 ctx.moveTo(0, -0.15);
115 ctx.lineTo(0, 0.15);
116 ctx.moveTo(0, 0);
117 ctx.lineTo(-0.15, 0);
118 ctx.closePath();
119 ctx.stroke();
120}