-
Notifications
You must be signed in to change notification settings - Fork 12
/
WeaponComponent.ts
145 lines (130 loc) · 3.67 KB
/
WeaponComponent.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
import { Ped } from '../models';
import { Weapon } from '../weapon';
import { WeaponComponentHash } from './WeaponComponentHash';
import { WeaponHash } from '../hashes';
import { ComponentAttachmentPoint } from './ComponentAttachmentPoint';
import { Game } from '../Game';
import { ComponentDisplayNameByHash } from './ComponentDisplayNameByHash';
import { WeaponComponentHashesByWeaponHash } from './WeaponComponentHashesByWeaponHash';
import { ComponentAttachmentPointByHash } from './ComponentAttachmentPointByHash';
import { WeaponComponentHudStats } from './WeaponComponentHudStats';
/**
* ped weapon component on weapon
*
*/
export class WeaponComponent {
protected readonly owner: Ped;
protected readonly weapon: Weapon;
protected readonly componentHash: WeaponComponentHash;
public constructor(owner: Ped, weapon: Weapon, componentHash: WeaponComponentHash) {
this.owner = owner;
this.weapon = weapon;
this.componentHash = componentHash;
}
/**
* Check WeaponComponent is invalid or not
*
* @constructor
*/
public get IsInvalid(): boolean {
return this.componentHash === WeaponComponentHash.Invalid;
}
/**
* get component hash
*
* @constructor
*/
public get ComponentHash(): WeaponComponentHash {
return this.componentHash;
}
/**
* check ped has weapon component
*
* @constructor
*/
public get Active(): boolean {
return HasPedGotWeaponComponent(this.owner.Handle, this.weapon.Hash, this.componentHash);
}
/**
* give weapon component to ped
*
* @param value
* @constructor
*/
public set Active(value: boolean) {
if (value) {
GiveWeaponComponentToPed(this.owner.Handle, this.weapon.Hash, this.componentHash);
} else {
RemoveWeaponComponentFromPed(this.owner.Handle, this.weapon.Hash, this.componentHash);
}
}
/**
* get component display name / label
*
* @constructor
*/
public get DisplayName(): string {
return WeaponComponent.getComponentDisplayNameFromHash(this.weapon.Hash, this.componentHash);
}
/**
* get component localized name
*
* @constructor
*/
public get LocalizedName(): string {
return Game.getGXTEntry(this.DisplayName);
}
/**
* get component attachment point
*
* @constructor
*/
public get AttachmentPoint(): ComponentAttachmentPoint {
return WeaponComponent.getAttachmentPoint(this.weapon.Hash, this.componentHash);
}
/**
* get component hud stats
*
* @constructor
*/
public get HudStats(): WeaponComponentHudStats {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
return WeaponComponentHudStats.get(this.componentHash)!;
}
/**
* get component display name / label by hash
*
* @param hash
* @param componentHash
* @constructor
*/
public static getComponentDisplayNameFromHash(
hash: WeaponHash,
componentHash: WeaponComponentHash,
): string {
if (!hash) {
return 'WCT_INVALID';
}
return ComponentDisplayNameByHash.get(componentHash) ?? 'WCT_INVALID';
}
/**
* get component attachment point by WeaponHash and WeaponComponentHash
*
* @param weaponHash
* @param componentHash
* @constructor
*/
public static getAttachmentPoint(
weaponHash: WeaponHash,
componentHash: WeaponComponentHash,
): ComponentAttachmentPoint {
const componentHashes = WeaponComponentHashesByWeaponHash.get(weaponHash);
if (!componentHashes) {
return ComponentAttachmentPoint.Invalid;
}
if (componentHashes.every(x => x !== componentHash)) {
return ComponentAttachmentPoint.Invalid;
}
return ComponentAttachmentPointByHash.get(componentHash) ?? ComponentAttachmentPoint.Invalid;
}
}