volleyballsimtypes 0.0.77 → 0.0.79

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.
@@ -1,13 +1,12 @@
1
1
  import * as Sequelize from 'sequelize';
2
2
  import { Model } from 'sequelize';
3
- import { PlayerId, PlayerModel, RallyId, RallyModel, TraitType } from '.';
3
+ import { PlayerId, PlayerModel, RallyId, RallyModel } from '.';
4
4
  export interface EventAttributes {
5
5
  event_id: string;
6
6
  rally_id: string;
7
7
  event_type: EventType;
8
8
  order: number;
9
9
  player_id: string;
10
- active_traits: TraitType[];
11
10
  }
12
11
  export type EventType = 'LIBERO_REPLACEMENT' | 'SUBSTITUTION' | 'SERVE' | 'RECEPTION' | 'SET' | 'SPIKE' | 'BLOCK' | 'SCORE';
13
12
  export type CourtTarget = 'NO_TARGET' | 'OPPONENT_RIGHT_BACK' | 'OPPONENT_MIDDLE_BACK' | 'OPPONENT_LEFT_BACK' | 'OPPONENT_RIGHT_FRONT' | 'OPPONENT_MIDDLE_FRONT' | 'OPPONENT_LEFT_FRONT' | 'TEAM_LEFT_FRONT' | 'TEAM_MIDDLE_FRONT' | 'TEAM_RIGHT_FRONT' | 'TEAM_LEFT_BACK' | 'TEAM_MIDDLE_BACK' | 'TEAM_RIGHT_BACK';
@@ -20,7 +19,6 @@ export declare class EventModel extends Model<EventAttributes, EventCreationAttr
20
19
  event_type: EventType;
21
20
  order: number;
22
21
  player_id: string;
23
- active_traits: TraitType[];
24
22
  player: PlayerModel;
25
23
  getPlayer: Sequelize.BelongsToGetAssociationMixin<PlayerModel>;
26
24
  setPlayer: Sequelize.BelongsToSetAssociationMixin<PlayerModel, PlayerId>;
@@ -33,11 +33,6 @@ class EventModel extends sequelize_1.Model {
33
33
  model: 'Player',
34
34
  key: 'player_id'
35
35
  }
36
- },
37
- active_traits: {
38
- type: sequelize_1.DataTypes.ARRAY(sequelize_1.DataTypes.ENUM('MARKSMAN', 'MOVING_WALL', 'MASTER_MIND', 'METEOR_SERVE', 'VIGOROUS', 'GUARDIAN')),
39
- allowNull: false,
40
- defaultValue: [[]]
41
36
  }
42
37
  }, {
43
38
  sequelize,
@@ -1,5 +1,5 @@
1
1
  import { InPlayEvent, InPlayEventOpts } from './in-play-event';
2
- import { PerformanceStats } from '../player';
2
+ import { PerformanceStats, Trait } from '../player';
3
3
  export declare enum ServeTypeEnum {
4
4
  UNDERHAND = 0,
5
5
  OVERHAND_TOPSPIN = 1,
@@ -22,6 +22,6 @@ export declare class Serve extends InPlayEvent {
22
22
  readonly failure: ServeFailureEnum;
23
23
  readonly type: ServeTypeEnum;
24
24
  constructor({ id, order, score, player, target, failure, type, eventType, modifier, activeTraits }: ServeOpts);
25
- static getScore(stats: PerformanceStats, type: ServeTypeEnum, modifier: number): number;
25
+ static getScore(stats: PerformanceStats, type: ServeTypeEnum, modifier: number, activeTraits: Trait[]): number;
26
26
  }
27
27
  export {};
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Serve = exports.ServeFailureEnum = exports.ServeTypeEnum = void 0;
4
4
  const in_play_event_1 = require("./in-play-event");
5
+ const player_1 = require("../player");
5
6
  var ServeTypeEnum;
6
7
  (function (ServeTypeEnum) {
7
8
  ServeTypeEnum[ServeTypeEnum["UNDERHAND"] = 0] = "UNDERHAND";
@@ -24,8 +25,16 @@ class Serve extends in_play_event_1.InPlayEvent {
24
25
  this.type = type;
25
26
  this.failure = failure;
26
27
  }
27
- static getScore(stats, type, modifier) {
28
- return Serve.calculateScore(stats, 'SERVE', ServeTypeEnum[type]) * modifier;
28
+ static getScore(stats, type, modifier, activeTraits) {
29
+ let score = Serve.calculateScore(stats, 'SERVE', ServeTypeEnum[type]) * modifier;
30
+ for (const trait of activeTraits) {
31
+ switch (true) {
32
+ case trait === player_1.Trait.METEOR_SERVE: {
33
+ score *= player_1.Trait.METEOR_SERVE.modifier;
34
+ }
35
+ }
36
+ }
37
+ return score;
29
38
  }
30
39
  }
31
40
  exports.Serve = Serve;
@@ -45,7 +45,7 @@ const rally_event_1 = require("./rally-event");
45
45
  });
46
46
  // getScore Tests
47
47
  (0, globals_1.test)('Should get the correct score for all Serve types', () => {
48
- (0, globals_1.expect)(serve_1.Serve.getScore(serve.player.stats, serve.type, 1)).toBe(6);
49
- (0, globals_1.expect)(serve_1.Serve.getScore(failed.player.stats, failed.type, 1)).toBe(3);
48
+ (0, globals_1.expect)(serve_1.Serve.getScore(serve.player.stats, serve.type, 1, [])).toBe(6);
49
+ (0, globals_1.expect)(serve_1.Serve.getScore(failed.player.stats, failed.type, 1, [])).toBe(3);
50
50
  });
51
51
  });
@@ -17,5 +17,5 @@ export declare class Trait {
17
17
  readonly weight: number;
18
18
  private constructor();
19
19
  static getTraits(): Trait[];
20
- static assignTraitsToPlayer(roles: Role[], performanceStats: PerformanceStats): Trait[];
20
+ static assignTraits(roles: Role[], performanceStats: PerformanceStats): Trait[];
21
21
  }
@@ -16,7 +16,7 @@ class Trait {
16
16
  static getTraits() {
17
17
  return [Trait.GUARDIAN, Trait.MARKSMAN, Trait.METEOR_SERVE, Trait.VIGOROUS, Trait.MOVING_WALL, Trait.MASTER_MIND];
18
18
  }
19
- static assignTraitsToPlayer(roles, performanceStats) {
19
+ static assignTraits(roles, performanceStats) {
20
20
  const qualifiedTraits = this.getTraits().filter(trait => {
21
21
  return (trait.roles.length < 1 || trait.roles.some(role => roles.includes(role))) &&
22
22
  stats_1.GeneralStat.calculateScore(performanceStats, trait.stat) >= trait.statThreshold;
@@ -92,7 +92,7 @@ Trait.VIGOROUS = new Trait({
92
92
  stat: stats_1.GeneralStat.PHYSICAL,
93
93
  weight: 1
94
94
  });
95
- // Takes place of the receiver and increases reception score by 25%. Can only trigger in back-row.
95
+ // Takes place of the receiver and increases reception score by 25%, guaranteeing success. Can only trigger in back-row.
96
96
  Trait.GUARDIAN = new Trait({
97
97
  name: 'Guardian',
98
98
  roles: [role_1.Role.DEFENSIVE_SPECIALIST, role_1.Role.LIBERO],
@@ -1,13 +1,12 @@
1
1
  import * as Sequelize from 'sequelize';
2
2
  import { Model } from 'sequelize';
3
- import { PlayerId, PlayerModel, RallyId, RallyModel, TraitType } from '.';
3
+ import { PlayerId, PlayerModel, RallyId, RallyModel } from '.';
4
4
  export interface EventAttributes {
5
5
  event_id: string;
6
6
  rally_id: string;
7
7
  event_type: EventType;
8
8
  order: number;
9
9
  player_id: string;
10
- active_traits: TraitType[];
11
10
  }
12
11
  export type EventType = 'LIBERO_REPLACEMENT' | 'SUBSTITUTION' | 'SERVE' | 'RECEPTION' | 'SET' | 'SPIKE' | 'BLOCK' | 'SCORE';
13
12
  export type CourtTarget = 'NO_TARGET' | 'OPPONENT_RIGHT_BACK' | 'OPPONENT_MIDDLE_BACK' | 'OPPONENT_LEFT_BACK' | 'OPPONENT_RIGHT_FRONT' | 'OPPONENT_MIDDLE_FRONT' | 'OPPONENT_LEFT_FRONT' | 'TEAM_LEFT_FRONT' | 'TEAM_MIDDLE_FRONT' | 'TEAM_RIGHT_FRONT' | 'TEAM_LEFT_BACK' | 'TEAM_MIDDLE_BACK' | 'TEAM_RIGHT_BACK';
@@ -20,7 +19,6 @@ export declare class EventModel extends Model<EventAttributes, EventCreationAttr
20
19
  event_type: EventType;
21
20
  order: number;
22
21
  player_id: string;
23
- active_traits: TraitType[];
24
22
  player: PlayerModel;
25
23
  getPlayer: Sequelize.BelongsToGetAssociationMixin<PlayerModel>;
26
24
  setPlayer: Sequelize.BelongsToSetAssociationMixin<PlayerModel, PlayerId>;
@@ -30,11 +30,6 @@ export class EventModel extends Model {
30
30
  model: 'Player',
31
31
  key: 'player_id'
32
32
  }
33
- },
34
- active_traits: {
35
- type: DataTypes.ARRAY(DataTypes.ENUM('MARKSMAN', 'MOVING_WALL', 'MASTER_MIND', 'METEOR_SERVE', 'VIGOROUS', 'GUARDIAN')),
36
- allowNull: false,
37
- defaultValue: [[]]
38
33
  }
39
34
  }, {
40
35
  sequelize,
@@ -1,5 +1,5 @@
1
1
  import { InPlayEvent, InPlayEventOpts } from './in-play-event';
2
- import { PerformanceStats } from '../player';
2
+ import { PerformanceStats, Trait } from '../player';
3
3
  export declare enum ServeTypeEnum {
4
4
  UNDERHAND = 0,
5
5
  OVERHAND_TOPSPIN = 1,
@@ -22,6 +22,6 @@ export declare class Serve extends InPlayEvent {
22
22
  readonly failure: ServeFailureEnum;
23
23
  readonly type: ServeTypeEnum;
24
24
  constructor({ id, order, score, player, target, failure, type, eventType, modifier, activeTraits }: ServeOpts);
25
- static getScore(stats: PerformanceStats, type: ServeTypeEnum, modifier: number): number;
25
+ static getScore(stats: PerformanceStats, type: ServeTypeEnum, modifier: number, activeTraits: Trait[]): number;
26
26
  }
27
27
  export {};
@@ -1,4 +1,5 @@
1
1
  import { InPlayEvent } from './in-play-event';
2
+ import { Trait } from '../player';
2
3
  export var ServeTypeEnum;
3
4
  (function (ServeTypeEnum) {
4
5
  ServeTypeEnum[ServeTypeEnum["UNDERHAND"] = 0] = "UNDERHAND";
@@ -21,7 +22,15 @@ export class Serve extends InPlayEvent {
21
22
  this.type = type;
22
23
  this.failure = failure;
23
24
  }
24
- static getScore(stats, type, modifier) {
25
- return Serve.calculateScore(stats, 'SERVE', ServeTypeEnum[type]) * modifier;
25
+ static getScore(stats, type, modifier, activeTraits) {
26
+ let score = Serve.calculateScore(stats, 'SERVE', ServeTypeEnum[type]) * modifier;
27
+ for (const trait of activeTraits) {
28
+ switch (true) {
29
+ case trait === Trait.METEOR_SERVE: {
30
+ score *= Trait.METEOR_SERVE.modifier;
31
+ }
32
+ }
33
+ }
34
+ return score;
26
35
  }
27
36
  }
@@ -43,7 +43,7 @@ describe('Serve Test Module', () => {
43
43
  });
44
44
  // getScore Tests
45
45
  test('Should get the correct score for all Serve types', () => {
46
- expect(Serve.getScore(serve.player.stats, serve.type, 1)).toBe(6);
47
- expect(Serve.getScore(failed.player.stats, failed.type, 1)).toBe(3);
46
+ expect(Serve.getScore(serve.player.stats, serve.type, 1, [])).toBe(6);
47
+ expect(Serve.getScore(failed.player.stats, failed.type, 1, [])).toBe(3);
48
48
  });
49
49
  });
@@ -17,5 +17,5 @@ export declare class Trait {
17
17
  readonly weight: number;
18
18
  private constructor();
19
19
  static getTraits(): Trait[];
20
- static assignTraitsToPlayer(roles: Role[], performanceStats: PerformanceStats): Trait[];
20
+ static assignTraits(roles: Role[], performanceStats: PerformanceStats): Trait[];
21
21
  }
@@ -13,7 +13,7 @@ export class Trait {
13
13
  static getTraits() {
14
14
  return [Trait.GUARDIAN, Trait.MARKSMAN, Trait.METEOR_SERVE, Trait.VIGOROUS, Trait.MOVING_WALL, Trait.MASTER_MIND];
15
15
  }
16
- static assignTraitsToPlayer(roles, performanceStats) {
16
+ static assignTraits(roles, performanceStats) {
17
17
  const qualifiedTraits = this.getTraits().filter(trait => {
18
18
  return (trait.roles.length < 1 || trait.roles.some(role => roles.includes(role))) &&
19
19
  GeneralStat.calculateScore(performanceStats, trait.stat) >= trait.statThreshold;
@@ -88,7 +88,7 @@ Trait.VIGOROUS = new Trait({
88
88
  stat: GeneralStat.PHYSICAL,
89
89
  weight: 1
90
90
  });
91
- // Takes place of the receiver and increases reception score by 25%. Can only trigger in back-row.
91
+ // Takes place of the receiver and increases reception score by 25%, guaranteeing success. Can only trigger in back-row.
92
92
  Trait.GUARDIAN = new Trait({
93
93
  name: 'Guardian',
94
94
  roles: [Role.DEFENSIVE_SPECIALIST, Role.LIBERO],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "volleyballsimtypes",
3
- "version": "0.0.77",
3
+ "version": "0.0.79",
4
4
  "description": "vbsim types",
5
5
  "main": "./dist/cjs/src/index.js",
6
6
  "module": "./dist/esm/src/index.js",