forked from nkzw-tech/athena-crisis
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdropLabelsFromActionResponse.tsx
77 lines (75 loc) · 2.14 KB
/
dropLabelsFromActionResponse.tsx
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
import { PlayerIDSet } from '@deities/athena/map/Player.tsx';
import UnknownTypeError from '@deities/hephaestus/UnknownTypeError.tsx';
import { ActionResponse } from '../ActionResponse.tsx';
export default function dropLabelsFromActionResponse(
actionResponse: ActionResponse,
labels: PlayerIDSet | null,
): ActionResponse {
if (!labels?.size) {
return actionResponse;
}
const { type } = actionResponse;
switch (type) {
case 'CreateUnit': {
const { unit } = actionResponse;
return unit.label != null && labels.has(unit.label)
? { ...actionResponse, unit: unit.dropLabel(labels) }
: actionResponse;
}
case 'Spawn':
return {
...actionResponse,
units: actionResponse.units.map((unit) => unit.dropLabel(labels)),
};
case 'AttackBuilding':
case 'Capture':
case 'CreateBuilding': {
const { building } = actionResponse;
return building?.label != null && labels.has(building.label)
? { ...actionResponse, building: building.dropLabel(labels) }
: actionResponse;
}
case 'AttackUnit':
case 'DropUnit':
case 'Heal':
case 'Move':
case 'Rescue':
case 'Sabotage':
case 'BuySkill':
case 'CreateTracks':
case 'Fold':
case 'HiddenTargetAttackBuilding':
case 'HiddenTargetAttackUnit':
case 'Supply':
case 'Unfold':
case 'HiddenDestroyedBuilding':
case 'HiddenSourceAttackBuilding':
case 'HiddenSourceAttackUnit':
case 'ToggleLightning':
case 'HiddenMove':
case 'ActivatePower':
case 'EndTurn':
case 'CharacterMessage':
case 'CompleteBuilding':
case 'CompleteUnit':
case 'MoveUnit':
case 'AttackUnitGameOver':
case 'BeginGame':
case 'BeginTurnGameOver':
case 'CaptureGameOver':
case 'GameEnd':
case 'HiddenFundAdjustment':
case 'Message':
case 'PreviousTurnGameOver':
case 'ReceiveReward':
case 'SecretDiscovered':
case 'OptionalWin':
case 'SetViewer':
case 'Start':
return actionResponse;
default: {
actionResponse satisfies never;
throw new UnknownTypeError('getActionResponseVectors', type);
}
}
}