volleyballsimtypes 0.0.75 → 0.0.77
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/cjs/src/api/events.d.ts +14 -14
- package/dist/cjs/src/api/index.d.ts +7 -8
- package/dist/cjs/src/api/index.js +21 -3
- package/dist/cjs/src/data/index.d.ts +3 -6
- package/dist/cjs/src/data/index.js +18 -125
- package/dist/cjs/src/data/models/block.d.ts +3 -1
- package/dist/cjs/src/data/models/block.js +8 -7
- package/dist/cjs/src/data/models/event.d.ts +3 -1
- package/dist/cjs/src/data/models/event.js +8 -7
- package/dist/cjs/src/data/models/index.d.ts +32 -64
- package/dist/cjs/src/data/models/index.js +46 -65
- package/dist/cjs/src/data/models/iteration.d.ts +1 -1
- package/dist/cjs/src/data/models/iteration.js +2 -2
- package/dist/cjs/src/data/models/reception.d.ts +3 -1
- package/dist/cjs/src/data/models/reception.js +8 -7
- package/dist/cjs/src/data/models/serve.d.ts +3 -1
- package/dist/cjs/src/data/models/serve.js +8 -7
- package/dist/cjs/src/data/models/set.d.ts +3 -1
- package/dist/cjs/src/data/models/set.js +8 -7
- package/dist/cjs/src/data/models/spike.d.ts +3 -1
- package/dist/cjs/src/data/models/spike.js +8 -7
- package/dist/cjs/src/data/transformers/block.js +16 -14
- package/dist/cjs/src/data/transformers/court-target.d.ts +3 -3
- package/dist/cjs/src/data/transformers/court-target.js +14 -14
- package/dist/cjs/src/data/transformers/event-type.d.ts +3 -3
- package/dist/cjs/src/data/transformers/event-type.js +9 -9
- package/dist/cjs/src/data/transformers/index.d.ts +35 -36
- package/dist/cjs/src/data/transformers/index.js +49 -124
- package/dist/cjs/src/data/transformers/libero-replacement.js +3 -3
- package/dist/cjs/src/data/transformers/rally.js +8 -8
- package/dist/cjs/src/data/transformers/reception.js +15 -13
- package/dist/cjs/src/data/transformers/serve.js +16 -14
- package/dist/cjs/src/data/transformers/set.js +15 -13
- package/dist/cjs/src/data/transformers/spike.js +17 -15
- package/dist/cjs/src/index.d.ts +3 -6
- package/dist/cjs/src/index.js +17 -185
- package/dist/cjs/src/service/event/__stubs__/index.js +7 -6
- package/dist/cjs/src/service/event/block.d.ts +7 -7
- package/dist/cjs/src/service/event/block.js +24 -24
- package/dist/cjs/src/service/event/block.test.js +35 -30
- package/dist/cjs/src/service/event/in-play-event.d.ts +7 -5
- package/dist/cjs/src/service/event/in-play-event.js +6 -5
- package/dist/cjs/src/service/event/libero-replacement.d.ts +4 -4
- package/dist/cjs/src/service/event/libero-replacement.js +8 -8
- package/dist/cjs/src/service/event/libero-replacement.test.js +7 -7
- package/dist/cjs/src/service/event/rally-event.d.ts +3 -3
- package/dist/cjs/src/service/event/rally-event.js +12 -12
- package/dist/cjs/src/service/event/reception.d.ts +8 -8
- package/dist/cjs/src/service/event/reception.js +19 -19
- package/dist/cjs/src/service/event/reception.test.js +17 -15
- package/dist/cjs/src/service/event/score.test.js +2 -2
- package/dist/cjs/src/service/event/serve.d.ts +8 -8
- package/dist/cjs/src/service/event/serve.js +20 -20
- package/dist/cjs/src/service/event/serve.test.js +17 -15
- package/dist/cjs/src/service/event/set.d.ts +8 -8
- package/dist/cjs/src/service/event/set.js +19 -19
- package/dist/cjs/src/service/event/set.test.js +17 -15
- package/dist/cjs/src/service/event/spike.d.ts +8 -8
- package/dist/cjs/src/service/event/spike.js +22 -22
- package/dist/cjs/src/service/event/spike.test.js +23 -20
- package/dist/cjs/src/service/match/{court-target.d.ts → court-target-enum.d.ts} +4 -4
- package/dist/cjs/src/service/match/court-target-enum.js +42 -0
- package/dist/cjs/src/service/match/court-target.test.js +18 -18
- package/dist/cjs/src/service/match/index.d.ts +1 -1
- package/dist/cjs/src/service/match/index.js +1 -1
- package/dist/cjs/src/service/match/rally.js +1 -1
- package/dist/cjs/src/service/match/rally.test.js +2 -2
- package/dist/cjs/src/service/player/role.d.ts +1 -1
- package/dist/cjs/src/service/team/team.d.ts +3 -3
- package/dist/cjs/src/service/team/team.js +6 -6
- package/dist/esm/src/api/events.d.ts +14 -14
- package/dist/esm/src/api/index.d.ts +7 -8
- package/dist/esm/src/api/index.js +7 -2
- package/dist/esm/src/data/index.d.ts +3 -6
- package/dist/esm/src/data/index.js +3 -4
- package/dist/esm/src/data/models/block.d.ts +3 -1
- package/dist/esm/src/data/models/block.js +8 -7
- package/dist/esm/src/data/models/event.d.ts +3 -1
- package/dist/esm/src/data/models/event.js +8 -7
- package/dist/esm/src/data/models/index.d.ts +32 -64
- package/dist/esm/src/data/models/index.js +32 -33
- package/dist/esm/src/data/models/iteration.d.ts +1 -1
- package/dist/esm/src/data/models/iteration.js +2 -2
- package/dist/esm/src/data/models/reception.d.ts +3 -1
- package/dist/esm/src/data/models/reception.js +8 -7
- package/dist/esm/src/data/models/serve.d.ts +3 -1
- package/dist/esm/src/data/models/serve.js +8 -7
- package/dist/esm/src/data/models/set.d.ts +3 -1
- package/dist/esm/src/data/models/set.js +8 -7
- package/dist/esm/src/data/models/spike.d.ts +3 -1
- package/dist/esm/src/data/models/spike.js +8 -7
- package/dist/esm/src/data/transformers/block.js +18 -16
- package/dist/esm/src/data/transformers/court-target.d.ts +3 -3
- package/dist/esm/src/data/transformers/court-target.js +15 -15
- package/dist/esm/src/data/transformers/event-type.d.ts +3 -3
- package/dist/esm/src/data/transformers/event-type.js +10 -10
- package/dist/esm/src/data/transformers/index.d.ts +35 -36
- package/dist/esm/src/data/transformers/index.js +35 -36
- package/dist/esm/src/data/transformers/libero-replacement.js +4 -4
- package/dist/esm/src/data/transformers/rally.js +9 -9
- package/dist/esm/src/data/transformers/reception.js +17 -15
- package/dist/esm/src/data/transformers/serve.js +18 -16
- package/dist/esm/src/data/transformers/set.js +17 -15
- package/dist/esm/src/data/transformers/spike.js +19 -17
- package/dist/esm/src/index.d.ts +3 -6
- package/dist/esm/src/index.js +3 -4
- package/dist/esm/src/service/event/__stubs__/index.js +10 -9
- package/dist/esm/src/service/event/block.d.ts +7 -7
- package/dist/esm/src/service/event/block.js +23 -23
- package/dist/esm/src/service/event/block.test.js +38 -33
- package/dist/esm/src/service/event/in-play-event.d.ts +7 -5
- package/dist/esm/src/service/event/in-play-event.js +6 -5
- package/dist/esm/src/service/event/libero-replacement.d.ts +4 -4
- package/dist/esm/src/service/event/libero-replacement.js +8 -8
- package/dist/esm/src/service/event/libero-replacement.test.js +9 -9
- package/dist/esm/src/service/event/rally-event.d.ts +3 -3
- package/dist/esm/src/service/event/rally-event.js +11 -11
- package/dist/esm/src/service/event/reception.d.ts +8 -8
- package/dist/esm/src/service/event/reception.js +18 -18
- package/dist/esm/src/service/event/reception.test.js +20 -18
- package/dist/esm/src/service/event/score.test.js +3 -3
- package/dist/esm/src/service/event/serve.d.ts +8 -8
- package/dist/esm/src/service/event/serve.js +19 -19
- package/dist/esm/src/service/event/serve.test.js +20 -18
- package/dist/esm/src/service/event/set.d.ts +8 -8
- package/dist/esm/src/service/event/set.js +18 -18
- package/dist/esm/src/service/event/set.test.js +20 -18
- package/dist/esm/src/service/event/spike.d.ts +8 -8
- package/dist/esm/src/service/event/spike.js +21 -21
- package/dist/esm/src/service/event/spike.test.js +26 -23
- package/dist/esm/src/service/match/{court-target.d.ts → court-target-enum.d.ts} +4 -4
- package/dist/esm/src/service/match/court-target-enum.js +39 -0
- package/dist/esm/src/service/match/court-target.test.js +18 -18
- package/dist/esm/src/service/match/index.d.ts +1 -1
- package/dist/esm/src/service/match/index.js +1 -1
- package/dist/esm/src/service/match/rally.js +2 -2
- package/dist/esm/src/service/match/rally.test.js +3 -3
- package/dist/esm/src/service/player/role.d.ts +1 -1
- package/dist/esm/src/service/team/team.d.ts +3 -3
- package/dist/esm/src/service/team/team.js +6 -6
- package/package.json +1 -1
- package/dist/cjs/src/service/match/court-target.js +0 -42
- package/dist/esm/src/service/match/court-target.js +0 -39
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { describe, expect, test } from '@jest/globals';
|
|
2
|
-
import { Serve,
|
|
2
|
+
import { Serve, ServeFailureEnum, ServeTypeEnum } from './serve';
|
|
3
3
|
import { player } from '../player/__stubs__';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { CourtTargetEnum } from '../match';
|
|
5
|
+
import { EventTypeEnum } from './rally-event';
|
|
6
6
|
describe('Serve Test Module', () => {
|
|
7
7
|
let serve;
|
|
8
8
|
let failed;
|
|
@@ -12,31 +12,33 @@ describe('Serve Test Module', () => {
|
|
|
12
12
|
id: '622c36dc-f2d2-44b3-a744-667ea53218b7',
|
|
13
13
|
order: 0,
|
|
14
14
|
player: player,
|
|
15
|
-
target:
|
|
16
|
-
failure:
|
|
17
|
-
type:
|
|
18
|
-
eventType:
|
|
19
|
-
modifier: 1
|
|
15
|
+
target: CourtTargetEnum.OPPONENT_RIGHT_BACK,
|
|
16
|
+
failure: ServeFailureEnum.NO_FAILURE,
|
|
17
|
+
type: ServeTypeEnum.JUMP_TOPSPIN,
|
|
18
|
+
eventType: EventTypeEnum.SERVE,
|
|
19
|
+
modifier: 1,
|
|
20
|
+
activeTraits: []
|
|
20
21
|
});
|
|
21
22
|
failed = new Serve({
|
|
22
23
|
score: 60,
|
|
23
24
|
id: '622c36dc-f2d2-44b3-a744-667ea53218b7',
|
|
24
25
|
order: 0,
|
|
25
26
|
player: player,
|
|
26
|
-
target:
|
|
27
|
-
failure:
|
|
28
|
-
type:
|
|
29
|
-
eventType:
|
|
30
|
-
modifier: 1
|
|
27
|
+
target: CourtTargetEnum.NO_TARGET,
|
|
28
|
+
failure: ServeFailureEnum.NET,
|
|
29
|
+
type: ServeTypeEnum.UNDERHAND,
|
|
30
|
+
eventType: EventTypeEnum.SERVE,
|
|
31
|
+
modifier: 1,
|
|
32
|
+
activeTraits: []
|
|
31
33
|
});
|
|
32
34
|
});
|
|
33
35
|
test('Should instantiate object properly', () => {
|
|
34
|
-
expect(serve.target).toBe(
|
|
35
|
-
expect(serve.type).toBe(
|
|
36
|
-
expect(serve.eventType).toBe(
|
|
36
|
+
expect(serve.target).toBe(CourtTargetEnum.OPPONENT_RIGHT_BACK);
|
|
37
|
+
expect(serve.type).toBe(ServeTypeEnum.JUMP_TOPSPIN);
|
|
38
|
+
expect(serve.eventType).toBe(EventTypeEnum.SERVE);
|
|
37
39
|
expect(serve.player.id).toBe(player.id);
|
|
38
|
-
expect(serve.failure).toBe(
|
|
39
|
-
expect(failed.failure).toBe(
|
|
40
|
+
expect(serve.failure).toBe(ServeFailureEnum.NO_FAILURE);
|
|
41
|
+
expect(failed.failure).toBe(ServeFailureEnum.NET);
|
|
40
42
|
expect(serve.modifier).toBe(1);
|
|
41
43
|
});
|
|
42
44
|
// getScore Tests
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { PerformanceStats } from '../player';
|
|
2
2
|
import { InPlayEvent, InPlayEventOpts } from './in-play-event';
|
|
3
|
-
export declare enum
|
|
3
|
+
export declare enum SetTypeEnum {
|
|
4
4
|
OVERHAND = 0,
|
|
5
5
|
UNDERHAND = 1,
|
|
6
6
|
SPIKE = 2,
|
|
7
7
|
DUMP = 3
|
|
8
8
|
}
|
|
9
|
-
export declare enum
|
|
9
|
+
export declare enum SetFailureEnum {
|
|
10
10
|
NO_FAILURE = 0,
|
|
11
11
|
FAULT = 1,
|
|
12
12
|
MISS = 2,
|
|
@@ -14,13 +14,13 @@ export declare enum SetFailure {
|
|
|
14
14
|
OUT_OF_BOUNDS = 4
|
|
15
15
|
}
|
|
16
16
|
interface SetOpts extends InPlayEventOpts {
|
|
17
|
-
readonly type:
|
|
18
|
-
readonly failure:
|
|
17
|
+
readonly type: SetTypeEnum;
|
|
18
|
+
readonly failure: SetFailureEnum;
|
|
19
19
|
}
|
|
20
20
|
export declare class Set extends InPlayEvent {
|
|
21
|
-
readonly failure:
|
|
22
|
-
readonly type:
|
|
23
|
-
constructor({ id, order, score, player, target, failure, type, eventType, modifier }: SetOpts);
|
|
24
|
-
static getScore(stats: PerformanceStats, type:
|
|
21
|
+
readonly failure: SetFailureEnum;
|
|
22
|
+
readonly type: SetTypeEnum;
|
|
23
|
+
constructor({ id, order, score, player, target, failure, type, eventType, modifier, activeTraits }: SetOpts);
|
|
24
|
+
static getScore(stats: PerformanceStats, type: SetTypeEnum, modifier: number): number;
|
|
25
25
|
}
|
|
26
26
|
export {};
|
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
import { InPlayEvent } from './in-play-event';
|
|
2
|
-
export var
|
|
3
|
-
(function (
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
})(
|
|
9
|
-
export var
|
|
10
|
-
(function (
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
})(
|
|
2
|
+
export var SetTypeEnum;
|
|
3
|
+
(function (SetTypeEnum) {
|
|
4
|
+
SetTypeEnum[SetTypeEnum["OVERHAND"] = 0] = "OVERHAND";
|
|
5
|
+
SetTypeEnum[SetTypeEnum["UNDERHAND"] = 1] = "UNDERHAND";
|
|
6
|
+
SetTypeEnum[SetTypeEnum["SPIKE"] = 2] = "SPIKE";
|
|
7
|
+
SetTypeEnum[SetTypeEnum["DUMP"] = 3] = "DUMP";
|
|
8
|
+
})(SetTypeEnum || (SetTypeEnum = {}));
|
|
9
|
+
export var SetFailureEnum;
|
|
10
|
+
(function (SetFailureEnum) {
|
|
11
|
+
SetFailureEnum[SetFailureEnum["NO_FAILURE"] = 0] = "NO_FAILURE";
|
|
12
|
+
SetFailureEnum[SetFailureEnum["FAULT"] = 1] = "FAULT";
|
|
13
|
+
SetFailureEnum[SetFailureEnum["MISS"] = 2] = "MISS";
|
|
14
|
+
SetFailureEnum[SetFailureEnum["BAD_PASS"] = 3] = "BAD_PASS";
|
|
15
|
+
SetFailureEnum[SetFailureEnum["OUT_OF_BOUNDS"] = 4] = "OUT_OF_BOUNDS";
|
|
16
|
+
})(SetFailureEnum || (SetFailureEnum = {}));
|
|
17
17
|
export class Set extends InPlayEvent {
|
|
18
|
-
constructor({ id, order, score, player, target, failure, type, eventType, modifier }) {
|
|
19
|
-
super({ id, order, score, player, target, eventType, modifier });
|
|
18
|
+
constructor({ id, order, score, player, target, failure, type, eventType, modifier, activeTraits }) {
|
|
19
|
+
super({ id, order, score, player, target, eventType, modifier, activeTraits });
|
|
20
20
|
this.type = type;
|
|
21
21
|
this.failure = failure;
|
|
22
22
|
}
|
|
23
23
|
static getScore(stats, type, modifier) {
|
|
24
|
-
return Set.calculateScore(stats, 'SET',
|
|
24
|
+
return Set.calculateScore(stats, 'SET', SetTypeEnum[type]) * modifier;
|
|
25
25
|
}
|
|
26
26
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { describe, expect, test } from '@jest/globals';
|
|
2
|
-
import { Set,
|
|
2
|
+
import { Set, SetFailureEnum, SetTypeEnum } from './set';
|
|
3
3
|
import { player } from '../player/__stubs__';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { CourtTargetEnum } from '../match';
|
|
5
|
+
import { EventTypeEnum } from './rally-event';
|
|
6
6
|
describe('Set Test Module', () => {
|
|
7
7
|
let set;
|
|
8
8
|
let failed;
|
|
@@ -12,31 +12,33 @@ describe('Set Test Module', () => {
|
|
|
12
12
|
id: '622c36dc-f2d2-44b3-a744-667ea53218b7',
|
|
13
13
|
order: 0,
|
|
14
14
|
player: player,
|
|
15
|
-
target:
|
|
16
|
-
failure:
|
|
17
|
-
type:
|
|
18
|
-
eventType:
|
|
19
|
-
modifier: 1
|
|
15
|
+
target: CourtTargetEnum.OPPONENT_RIGHT_BACK,
|
|
16
|
+
failure: SetFailureEnum.NO_FAILURE,
|
|
17
|
+
type: SetTypeEnum.OVERHAND,
|
|
18
|
+
eventType: EventTypeEnum.SET,
|
|
19
|
+
modifier: 1,
|
|
20
|
+
activeTraits: []
|
|
20
21
|
});
|
|
21
22
|
failed = new Set({
|
|
22
23
|
score: 60,
|
|
23
24
|
id: '622c36dc-f2d2-44b3-a744-667ea53218b7',
|
|
24
25
|
order: 0,
|
|
25
26
|
player: player,
|
|
26
|
-
target:
|
|
27
|
-
failure:
|
|
28
|
-
type:
|
|
29
|
-
eventType:
|
|
30
|
-
modifier: 1
|
|
27
|
+
target: CourtTargetEnum.NO_TARGET,
|
|
28
|
+
failure: SetFailureEnum.OUT_OF_BOUNDS,
|
|
29
|
+
type: SetTypeEnum.DUMP,
|
|
30
|
+
eventType: EventTypeEnum.SET,
|
|
31
|
+
modifier: 1,
|
|
32
|
+
activeTraits: []
|
|
31
33
|
});
|
|
32
34
|
});
|
|
33
35
|
test('Should instantiate object properly', () => {
|
|
34
|
-
expect(set.target).toBe(
|
|
35
|
-
expect(set.type).toBe(
|
|
36
|
-
expect(set.eventType).toBe(
|
|
36
|
+
expect(set.target).toBe(CourtTargetEnum.OPPONENT_RIGHT_BACK);
|
|
37
|
+
expect(set.type).toBe(SetTypeEnum.OVERHAND);
|
|
38
|
+
expect(set.eventType).toBe(EventTypeEnum.SET);
|
|
37
39
|
expect(set.player.id).toBe(player.id);
|
|
38
|
-
expect(set.failure).toBe(
|
|
39
|
-
expect(failed.failure).toBe(
|
|
40
|
+
expect(set.failure).toBe(SetFailureEnum.NO_FAILURE);
|
|
41
|
+
expect(failed.failure).toBe(SetFailureEnum.OUT_OF_BOUNDS);
|
|
40
42
|
expect(set.modifier).toBe(1);
|
|
41
43
|
});
|
|
42
44
|
// getScore Tests
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { InPlayEvent, InPlayEventOpts } from './in-play-event';
|
|
2
2
|
import { Player } from '../player';
|
|
3
|
-
export declare enum
|
|
3
|
+
export declare enum SpikeTypeEnum {
|
|
4
4
|
CROSS_SHOT = 0,
|
|
5
5
|
LINE_SHOT = 1,
|
|
6
6
|
TOOL_SHOT = 2,
|
|
@@ -8,7 +8,7 @@ export declare enum SpikeType {
|
|
|
8
8
|
DOWN_BALL = 4,
|
|
9
9
|
OVERHAND = 5
|
|
10
10
|
}
|
|
11
|
-
export declare enum
|
|
11
|
+
export declare enum SpikeFailureEnum {
|
|
12
12
|
NO_FAILURE = 0,
|
|
13
13
|
FAULT = 1,
|
|
14
14
|
MISS = 2,
|
|
@@ -16,13 +16,13 @@ export declare enum SpikeFailure {
|
|
|
16
16
|
NET = 4
|
|
17
17
|
}
|
|
18
18
|
interface SpikeOpts extends InPlayEventOpts {
|
|
19
|
-
readonly type:
|
|
20
|
-
readonly failure:
|
|
19
|
+
readonly type: SpikeTypeEnum;
|
|
20
|
+
readonly failure: SpikeFailureEnum;
|
|
21
21
|
}
|
|
22
22
|
export declare class Spike extends InPlayEvent {
|
|
23
|
-
readonly failure:
|
|
24
|
-
readonly type:
|
|
25
|
-
constructor({ id, order, score, player, target, failure, type, eventType, modifier }: SpikeOpts);
|
|
26
|
-
static getScore(player: Player, type:
|
|
23
|
+
readonly failure: SpikeFailureEnum;
|
|
24
|
+
readonly type: SpikeTypeEnum;
|
|
25
|
+
constructor({ id, order, score, player, target, failure, type, eventType, modifier, activeTraits }: SpikeOpts);
|
|
26
|
+
static getScore(player: Player, type: SpikeTypeEnum, modifier: number, isBackRow: boolean): number;
|
|
27
27
|
}
|
|
28
28
|
export {};
|
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
import { InPlayEvent } from './in-play-event';
|
|
2
|
-
export var
|
|
3
|
-
(function (
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
})(
|
|
11
|
-
export var
|
|
12
|
-
(function (
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
})(
|
|
2
|
+
export var SpikeTypeEnum;
|
|
3
|
+
(function (SpikeTypeEnum) {
|
|
4
|
+
SpikeTypeEnum[SpikeTypeEnum["CROSS_SHOT"] = 0] = "CROSS_SHOT";
|
|
5
|
+
SpikeTypeEnum[SpikeTypeEnum["LINE_SHOT"] = 1] = "LINE_SHOT";
|
|
6
|
+
SpikeTypeEnum[SpikeTypeEnum["TOOL_SHOT"] = 2] = "TOOL_SHOT";
|
|
7
|
+
SpikeTypeEnum[SpikeTypeEnum["TIP"] = 3] = "TIP";
|
|
8
|
+
SpikeTypeEnum[SpikeTypeEnum["DOWN_BALL"] = 4] = "DOWN_BALL";
|
|
9
|
+
SpikeTypeEnum[SpikeTypeEnum["OVERHAND"] = 5] = "OVERHAND";
|
|
10
|
+
})(SpikeTypeEnum || (SpikeTypeEnum = {}));
|
|
11
|
+
export var SpikeFailureEnum;
|
|
12
|
+
(function (SpikeFailureEnum) {
|
|
13
|
+
SpikeFailureEnum[SpikeFailureEnum["NO_FAILURE"] = 0] = "NO_FAILURE";
|
|
14
|
+
SpikeFailureEnum[SpikeFailureEnum["FAULT"] = 1] = "FAULT";
|
|
15
|
+
SpikeFailureEnum[SpikeFailureEnum["MISS"] = 2] = "MISS";
|
|
16
|
+
SpikeFailureEnum[SpikeFailureEnum["OUT_OF_BOUNDS"] = 3] = "OUT_OF_BOUNDS";
|
|
17
|
+
SpikeFailureEnum[SpikeFailureEnum["NET"] = 4] = "NET";
|
|
18
|
+
})(SpikeFailureEnum || (SpikeFailureEnum = {}));
|
|
19
19
|
export class Spike extends InPlayEvent {
|
|
20
|
-
constructor({ id, order, score, player, target, failure, type, eventType, modifier }) {
|
|
21
|
-
super({ id, order, score, player, target, eventType, modifier });
|
|
20
|
+
constructor({ id, order, score, player, target, failure, type, eventType, modifier, activeTraits }) {
|
|
21
|
+
super({ id, order, score, player, target, eventType, modifier, activeTraits });
|
|
22
22
|
this.type = type;
|
|
23
23
|
this.failure = failure;
|
|
24
24
|
}
|
|
25
25
|
static getScore(player, type, modifier, isBackRow) {
|
|
26
|
-
let score = Spike.calculateScore(player.stats, 'SPIKE',
|
|
27
|
-
if (![
|
|
26
|
+
let score = Spike.calculateScore(player.stats, 'SPIKE', SpikeTypeEnum[type]);
|
|
27
|
+
if (![SpikeTypeEnum.DOWN_BALL, SpikeTypeEnum.OVERHAND, SpikeTypeEnum.TIP].includes(type) && isBackRow) {
|
|
28
28
|
score = score * 0.7 + player.stats.backAttack * 0.3;
|
|
29
29
|
}
|
|
30
30
|
return score * modifier;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { describe, expect, test } from '@jest/globals';
|
|
2
|
-
import { Spike,
|
|
2
|
+
import { Spike, SpikeFailureEnum, SpikeTypeEnum } from './spike';
|
|
3
3
|
import { player } from '../player/__stubs__';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { CourtTargetEnum } from '../match';
|
|
5
|
+
import { EventTypeEnum } from './rally-event';
|
|
6
6
|
import { v4 as uuidv4 } from 'uuid';
|
|
7
7
|
describe('Spike Test Module', () => {
|
|
8
8
|
let spike;
|
|
@@ -13,43 +13,46 @@ describe('Spike Test Module', () => {
|
|
|
13
13
|
id: uuidv4(),
|
|
14
14
|
order: 1,
|
|
15
15
|
player: player,
|
|
16
|
-
target:
|
|
17
|
-
failure:
|
|
18
|
-
type:
|
|
19
|
-
eventType:
|
|
16
|
+
target: CourtTargetEnum.OPPONENT_RIGHT_BACK,
|
|
17
|
+
failure: SpikeFailureEnum.NO_FAILURE,
|
|
18
|
+
type: SpikeTypeEnum.CROSS_SHOT,
|
|
19
|
+
eventType: EventTypeEnum.SPIKE,
|
|
20
20
|
modifier: 1,
|
|
21
|
-
score: Spike.getScore(player,
|
|
21
|
+
score: Spike.getScore(player, SpikeTypeEnum.CROSS_SHOT, 1, false),
|
|
22
|
+
activeTraits: []
|
|
22
23
|
});
|
|
23
24
|
failed = new Spike({
|
|
24
25
|
id: uuidv4(),
|
|
25
26
|
order: 1,
|
|
26
27
|
player: player,
|
|
27
|
-
target:
|
|
28
|
-
failure:
|
|
29
|
-
type:
|
|
30
|
-
eventType:
|
|
28
|
+
target: CourtTargetEnum.NO_TARGET,
|
|
29
|
+
failure: SpikeFailureEnum.OUT_OF_BOUNDS,
|
|
30
|
+
type: SpikeTypeEnum.TIP,
|
|
31
|
+
eventType: EventTypeEnum.SPIKE,
|
|
31
32
|
modifier: 1,
|
|
32
|
-
score: Spike.getScore(player,
|
|
33
|
+
score: Spike.getScore(player, SpikeTypeEnum.TIP, 1, false),
|
|
34
|
+
activeTraits: []
|
|
33
35
|
});
|
|
34
36
|
backAttack = new Spike({
|
|
35
37
|
id: uuidv4(),
|
|
36
38
|
order: 1,
|
|
37
39
|
player: player,
|
|
38
|
-
target:
|
|
39
|
-
failure:
|
|
40
|
-
type:
|
|
41
|
-
eventType:
|
|
40
|
+
target: CourtTargetEnum.OPPONENT_RIGHT_BACK,
|
|
41
|
+
failure: SpikeFailureEnum.NO_FAILURE,
|
|
42
|
+
type: SpikeTypeEnum.CROSS_SHOT,
|
|
43
|
+
eventType: EventTypeEnum.SPIKE,
|
|
42
44
|
modifier: 1,
|
|
43
|
-
score: Spike.getScore(player,
|
|
45
|
+
score: Spike.getScore(player, SpikeTypeEnum.CROSS_SHOT, 1, true),
|
|
46
|
+
activeTraits: []
|
|
44
47
|
});
|
|
45
48
|
});
|
|
46
49
|
test('Should instantiate object properly', () => {
|
|
47
|
-
expect(spike.target).toBe(
|
|
48
|
-
expect(spike.type).toBe(
|
|
49
|
-
expect(spike.eventType).toBe(
|
|
50
|
+
expect(spike.target).toBe(CourtTargetEnum.OPPONENT_RIGHT_BACK);
|
|
51
|
+
expect(spike.type).toBe(SpikeTypeEnum.CROSS_SHOT);
|
|
52
|
+
expect(spike.eventType).toBe(EventTypeEnum.SPIKE);
|
|
50
53
|
expect(spike.player.id).toBe(player.id);
|
|
51
|
-
expect(spike.failure).toBe(
|
|
52
|
-
expect(failed.failure).toBe(
|
|
54
|
+
expect(spike.failure).toBe(SpikeFailureEnum.NO_FAILURE);
|
|
55
|
+
expect(failed.failure).toBe(SpikeFailureEnum.OUT_OF_BOUNDS);
|
|
53
56
|
expect(spike.modifier).toBe(1);
|
|
54
57
|
});
|
|
55
58
|
// getScore Tests
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CourtPosition } from './court-position';
|
|
2
|
-
export declare enum
|
|
2
|
+
export declare enum CourtTargetEnum {
|
|
3
3
|
NO_TARGET = 0,
|
|
4
4
|
OPPONENT_RIGHT_BACK = 7,
|
|
5
5
|
OPPONENT_MIDDLE_BACK = 12,
|
|
@@ -14,8 +14,8 @@ export declare enum CourtTarget {
|
|
|
14
14
|
TEAM_MIDDLE_BACK = 6,
|
|
15
15
|
TEAM_RIGHT_BACK = 1
|
|
16
16
|
}
|
|
17
|
-
export declare namespace
|
|
18
|
-
function getTeamSide():
|
|
19
|
-
function getOpponentSide():
|
|
17
|
+
export declare namespace CourtTargetEnum {
|
|
18
|
+
function getTeamSide(): CourtTargetEnum[];
|
|
19
|
+
function getOpponentSide(): CourtTargetEnum[];
|
|
20
20
|
function getSidePosition(position: number): CourtPosition;
|
|
21
21
|
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export var CourtTargetEnum;
|
|
2
|
+
(function (CourtTargetEnum) {
|
|
3
|
+
CourtTargetEnum[CourtTargetEnum["NO_TARGET"] = 0] = "NO_TARGET";
|
|
4
|
+
CourtTargetEnum[CourtTargetEnum["OPPONENT_RIGHT_BACK"] = 7] = "OPPONENT_RIGHT_BACK";
|
|
5
|
+
CourtTargetEnum[CourtTargetEnum["OPPONENT_MIDDLE_BACK"] = 12] = "OPPONENT_MIDDLE_BACK";
|
|
6
|
+
CourtTargetEnum[CourtTargetEnum["OPPONENT_LEFT_BACK"] = 11] = "OPPONENT_LEFT_BACK";
|
|
7
|
+
CourtTargetEnum[CourtTargetEnum["OPPONENT_RIGHT_FRONT"] = 8] = "OPPONENT_RIGHT_FRONT";
|
|
8
|
+
CourtTargetEnum[CourtTargetEnum["OPPONENT_MIDDLE_FRONT"] = 9] = "OPPONENT_MIDDLE_FRONT";
|
|
9
|
+
CourtTargetEnum[CourtTargetEnum["OPPONENT_LEFT_FRONT"] = 10] = "OPPONENT_LEFT_FRONT";
|
|
10
|
+
// --------------------------------------------------------------------------------
|
|
11
|
+
CourtTargetEnum[CourtTargetEnum["TEAM_LEFT_FRONT"] = 4] = "TEAM_LEFT_FRONT";
|
|
12
|
+
CourtTargetEnum[CourtTargetEnum["TEAM_MIDDLE_FRONT"] = 3] = "TEAM_MIDDLE_FRONT";
|
|
13
|
+
CourtTargetEnum[CourtTargetEnum["TEAM_RIGHT_FRONT"] = 2] = "TEAM_RIGHT_FRONT";
|
|
14
|
+
CourtTargetEnum[CourtTargetEnum["TEAM_LEFT_BACK"] = 5] = "TEAM_LEFT_BACK";
|
|
15
|
+
CourtTargetEnum[CourtTargetEnum["TEAM_MIDDLE_BACK"] = 6] = "TEAM_MIDDLE_BACK";
|
|
16
|
+
CourtTargetEnum[CourtTargetEnum["TEAM_RIGHT_BACK"] = 1] = "TEAM_RIGHT_BACK";
|
|
17
|
+
})(CourtTargetEnum || (CourtTargetEnum = {}));
|
|
18
|
+
// eslint-disable-next-line @typescript-eslint/no-namespace
|
|
19
|
+
(function (CourtTargetEnum) {
|
|
20
|
+
function getTeamSide() {
|
|
21
|
+
return [CourtTargetEnum.TEAM_RIGHT_BACK, CourtTargetEnum.TEAM_RIGHT_FRONT, CourtTargetEnum.TEAM_MIDDLE_FRONT,
|
|
22
|
+
CourtTargetEnum.TEAM_LEFT_FRONT, CourtTargetEnum.TEAM_LEFT_BACK, CourtTargetEnum.TEAM_MIDDLE_BACK];
|
|
23
|
+
}
|
|
24
|
+
CourtTargetEnum.getTeamSide = getTeamSide;
|
|
25
|
+
function getOpponentSide() {
|
|
26
|
+
return [CourtTargetEnum.OPPONENT_RIGHT_BACK, CourtTargetEnum.OPPONENT_RIGHT_FRONT, CourtTargetEnum.OPPONENT_MIDDLE_FRONT,
|
|
27
|
+
CourtTargetEnum.OPPONENT_LEFT_FRONT, CourtTargetEnum.OPPONENT_LEFT_BACK, CourtTargetEnum.OPPONENT_MIDDLE_BACK];
|
|
28
|
+
}
|
|
29
|
+
CourtTargetEnum.getOpponentSide = getOpponentSide;
|
|
30
|
+
function getSidePosition(position) {
|
|
31
|
+
if (position < 1 || position > 12)
|
|
32
|
+
throw new Error('POSITION_INDEX_OUT_OF_BOUNDS');
|
|
33
|
+
if (position > 6)
|
|
34
|
+
return position - 6;
|
|
35
|
+
else
|
|
36
|
+
return position;
|
|
37
|
+
}
|
|
38
|
+
CourtTargetEnum.getSidePosition = getSidePosition;
|
|
39
|
+
})(CourtTargetEnum || (CourtTargetEnum = {}));
|
|
@@ -1,35 +1,35 @@
|
|
|
1
1
|
import { describe, expect, test } from '@jest/globals';
|
|
2
|
-
import {
|
|
2
|
+
import { CourtTargetEnum } from './court-target-enum';
|
|
3
3
|
describe('CourtTarget Test Module', () => {
|
|
4
4
|
// getSidePosition Tests
|
|
5
5
|
test('Should get correct court position', () => {
|
|
6
6
|
for (let i = 1; i < 7; i++) {
|
|
7
|
-
expect(
|
|
8
|
-
expect(
|
|
7
|
+
expect(CourtTargetEnum.getSidePosition(i)).toBe(i);
|
|
8
|
+
expect(CourtTargetEnum.getSidePosition(i + 6)).toBe(i);
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
11
|
test('Should throw Error when position is out of bounds', () => {
|
|
12
|
-
function position() {
|
|
12
|
+
function position() { CourtTargetEnum.getSidePosition(0); }
|
|
13
13
|
expect(position).toThrow(/^POSITION_INDEX_OUT_OF_BOUNDS$/);
|
|
14
14
|
});
|
|
15
15
|
// getTeamSide Tests
|
|
16
16
|
test('Should return team positions', () => {
|
|
17
|
-
const positions =
|
|
18
|
-
expect(positions[0]).toBe(
|
|
19
|
-
expect(positions[1]).toBe(
|
|
20
|
-
expect(positions[2]).toBe(
|
|
21
|
-
expect(positions[3]).toBe(
|
|
22
|
-
expect(positions[4]).toBe(
|
|
23
|
-
expect(positions[5]).toBe(
|
|
17
|
+
const positions = CourtTargetEnum.getTeamSide();
|
|
18
|
+
expect(positions[0]).toBe(CourtTargetEnum.TEAM_RIGHT_BACK);
|
|
19
|
+
expect(positions[1]).toBe(CourtTargetEnum.TEAM_RIGHT_FRONT);
|
|
20
|
+
expect(positions[2]).toBe(CourtTargetEnum.TEAM_MIDDLE_FRONT);
|
|
21
|
+
expect(positions[3]).toBe(CourtTargetEnum.TEAM_LEFT_FRONT);
|
|
22
|
+
expect(positions[4]).toBe(CourtTargetEnum.TEAM_LEFT_BACK);
|
|
23
|
+
expect(positions[5]).toBe(CourtTargetEnum.TEAM_MIDDLE_BACK);
|
|
24
24
|
});
|
|
25
25
|
// getOpponentSide Tests
|
|
26
26
|
test('Should return opponent team positions', () => {
|
|
27
|
-
const positions =
|
|
28
|
-
expect(positions[0]).toBe(
|
|
29
|
-
expect(positions[1]).toBe(
|
|
30
|
-
expect(positions[2]).toBe(
|
|
31
|
-
expect(positions[3]).toBe(
|
|
32
|
-
expect(positions[4]).toBe(
|
|
33
|
-
expect(positions[5]).toBe(
|
|
27
|
+
const positions = CourtTargetEnum.getOpponentSide();
|
|
28
|
+
expect(positions[0]).toBe(CourtTargetEnum.OPPONENT_RIGHT_BACK);
|
|
29
|
+
expect(positions[1]).toBe(CourtTargetEnum.OPPONENT_RIGHT_FRONT);
|
|
30
|
+
expect(positions[2]).toBe(CourtTargetEnum.OPPONENT_MIDDLE_FRONT);
|
|
31
|
+
expect(positions[3]).toBe(CourtTargetEnum.OPPONENT_LEFT_FRONT);
|
|
32
|
+
expect(positions[4]).toBe(CourtTargetEnum.OPPONENT_LEFT_BACK);
|
|
33
|
+
expect(positions[5]).toBe(CourtTargetEnum.OPPONENT_MIDDLE_BACK);
|
|
34
34
|
});
|
|
35
35
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { validateUUID } from '../utils';
|
|
2
|
-
import {
|
|
2
|
+
import { EventTypeEnum } from '../event/rally-event';
|
|
3
3
|
export var RallyState;
|
|
4
4
|
(function (RallyState) {
|
|
5
5
|
RallyState[RallyState["NEW"] = 0] = "NEW";
|
|
@@ -33,7 +33,7 @@ export class Rally {
|
|
|
33
33
|
return this._state;
|
|
34
34
|
}
|
|
35
35
|
get score() {
|
|
36
|
-
return this.events.find(e => e.eventType ===
|
|
36
|
+
return this.events.find(e => e.eventType === EventTypeEnum.SCORE);
|
|
37
37
|
}
|
|
38
38
|
isOver() {
|
|
39
39
|
return this._state === RallyState.FINISHED;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { describe, expect, test } from '@jest/globals';
|
|
2
2
|
import { Rally, RallyState } from './rally';
|
|
3
3
|
import { score, serve } from '../event/__stubs__';
|
|
4
|
-
import {
|
|
4
|
+
import { EventTypeEnum } from '../event/rally-event';
|
|
5
5
|
import { team } from '../team/__stubs__';
|
|
6
6
|
describe('Rally Test Module', () => {
|
|
7
7
|
let rally;
|
|
@@ -44,7 +44,7 @@ describe('Rally Test Module', () => {
|
|
|
44
44
|
test('Should add event to event array', () => {
|
|
45
45
|
expect(rally.events.length).toBe(0);
|
|
46
46
|
rally.addEvent(serve);
|
|
47
|
-
expect(rally.events.at(-1)?.eventType).toBe(
|
|
47
|
+
expect(rally.events.at(-1)?.eventType).toBe(EventTypeEnum.SERVE);
|
|
48
48
|
});
|
|
49
49
|
// isOver Tests
|
|
50
50
|
test('Should return false if rally state is not FINISHED', () => {
|
|
@@ -66,7 +66,7 @@ describe('Rally Test Module', () => {
|
|
|
66
66
|
test('Should return Score if events array contains a Score', () => {
|
|
67
67
|
rally.addEvent(score);
|
|
68
68
|
expect(rally.score).not.toBeUndefined();
|
|
69
|
-
expect(rally.score?.eventType).toBe(
|
|
69
|
+
expect(rally.score?.eventType).toBe(EventTypeEnum.SCORE);
|
|
70
70
|
});
|
|
71
71
|
// RallyState Tests
|
|
72
72
|
test('Should get next state', () => {
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { PerformanceStats } from './performance-stats';
|
|
2
2
|
export declare class Role {
|
|
3
|
-
readonly name: string;
|
|
4
3
|
static readonly SETTER: Role;
|
|
5
4
|
static readonly LIBERO: Role;
|
|
6
5
|
static readonly OUTSIDE_HITTER: Role;
|
|
@@ -8,6 +7,7 @@ export declare class Role {
|
|
|
8
7
|
static readonly MIDDLE_BLOCKER: Role;
|
|
9
8
|
static readonly DEFENSIVE_SPECIALIST: Role;
|
|
10
9
|
private static readonly ROLES;
|
|
10
|
+
readonly name: string;
|
|
11
11
|
private constructor();
|
|
12
12
|
static getRoles(): Role[];
|
|
13
13
|
static calculateScore(stats: PerformanceStats, role: Role): number;
|
|
@@ -20,12 +20,12 @@ export declare class Team {
|
|
|
20
20
|
readonly coach?: Coach;
|
|
21
21
|
readonly league?: League;
|
|
22
22
|
readonly country?: Country;
|
|
23
|
-
private _rating;
|
|
24
23
|
constructor({ id, rating, name, shortName, country, roster, coach, league }: TeamOpts);
|
|
25
|
-
|
|
26
|
-
toString(): string;
|
|
24
|
+
private _rating;
|
|
27
25
|
get rating(): number;
|
|
28
26
|
set rating(value: number);
|
|
27
|
+
isPlayerInRoster(player: Player): boolean;
|
|
28
|
+
toString(): string;
|
|
29
29
|
updateRating(ratingChange: number): void;
|
|
30
30
|
}
|
|
31
31
|
export {};
|
|
@@ -12,18 +12,18 @@ export class Team {
|
|
|
12
12
|
this.country = country;
|
|
13
13
|
this.league = league;
|
|
14
14
|
}
|
|
15
|
-
isPlayerInRoster(player) {
|
|
16
|
-
return this.roster.some(p => p.id === player.id);
|
|
17
|
-
}
|
|
18
|
-
toString() {
|
|
19
|
-
return `${this.name} [${this.shortName}] (${this.country?.name}) ELO=${this._rating}`;
|
|
20
|
-
}
|
|
21
15
|
get rating() {
|
|
22
16
|
return this._rating;
|
|
23
17
|
}
|
|
24
18
|
set rating(value) {
|
|
25
19
|
this._rating = value;
|
|
26
20
|
}
|
|
21
|
+
isPlayerInRoster(player) {
|
|
22
|
+
return this.roster.some(p => p.id === player.id);
|
|
23
|
+
}
|
|
24
|
+
toString() {
|
|
25
|
+
return `${this.name} [${this.shortName}] (${this.country?.name}) ELO=${this._rating}`;
|
|
26
|
+
}
|
|
27
27
|
updateRating(ratingChange) {
|
|
28
28
|
if (Math.abs(ratingChange) > MatchRating.K)
|
|
29
29
|
throw new Error(`INVALID RATING CHANGE: ${ratingChange}`);
|