Skip to content

Commit

Permalink
Add admin turn to reset category limits
Browse files Browse the repository at this point in the history
  • Loading branch information
HSZemi committed Nov 9, 2023
1 parent 27bdc4e commit 82ce485
Show file tree
Hide file tree
Showing 6 changed files with 79 additions and 0 deletions.
37 changes: 37 additions & 0 deletions src/__tests__/Drafting.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -357,6 +357,43 @@ it('draft with pause', (done) => {
});
});

it('draft with categorylimit reset', (done) => {
Reflect.set(ActListener, "adminTurnDelay", 0);
const preset = new Preset('preset with pause', [Civilisation.AZTECS], [
new Turn(Player.HOST, Action.PICK, Exclusivity.NONEXCLUSIVE),
new Turn(Player.NONE, Action.RESET_CL, Exclusivity.NONEXCLUSIVE),
new Turn(Player.GUEST, Action.PICK, Exclusivity.NONEXCLUSIVE),
], 'presetID', {pick: {default: 1}, ban: {}});
createDraftForPreset(preset).then(value => {
const barrier = new Barrier(2, done);
hostSocket.once('disconnect', () => {
barrier.trigger();
});
clientSocket.once('disconnect', () => {
barrier.trigger();
});

hostEmit('set_role', {name: 'Saladin', role: Player.HOST})
.then(() => guestEmit('set_role', {name: 'Barbarossa', role: Player.GUEST}))
.then(() => guestEmit('ready', {}))
.then(() => hostEmit('ready', {}))
.then(() => hostEmit('act', {
"player": "HOST",
"executingPlayer": "HOST",
"actionType": "pick",
"chosenOptionId": "Aztecs",
"isRandomlyChosen": false,
}))
.then(() => guestEmit('act', {
"player": "GUEST",
"executingPlayer": "GUEST",
"actionType": "pick",
"chosenOptionId": "Aztecs",
"isRandomlyChosen": false,
}));
});
});


it('draft with invalid act', (done) => {
createDraftForPreset(Preset.SIMPLE).then(value => {
Expand Down
1 change: 1 addition & 0 deletions src/constants/Action.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ enum Action {
REVEAL_BANS = 'REVEAL_BANS',
REVEAL_SNIPES = 'REVEAL_SNIPES',
PAUSE = 'PAUSE',
RESET_CL = 'RESET_CL',
}

export default Action;
3 changes: 3 additions & 0 deletions src/constants/ActionType.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ enum ActionType {
STEAL = "steal",
REVEAL = "reveal",
PAUSE = "pause",
RESET_CL = "reset_cl",
NOTHING = "nothing"
}

Expand All @@ -27,6 +28,8 @@ export function actionTypeFromAction(action: Action) {
return ActionType.REVEAL;
case Action.PAUSE:
return ActionType.PAUSE;
case Action.RESET_CL:
return ActionType.RESET_CL;
}
}

Expand Down
1 change: 1 addition & 0 deletions src/models/DraftViews.ts
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,7 @@ class DraftViews {
this.doReveal(ActionType.SNIPE);
break;
case Action.PAUSE:
case Action.RESET_CL:
break;
default:
throw new Error('Illegal/Unknown Action: ' + action);
Expand Down
12 changes: 12 additions & 0 deletions src/models/ValidCivs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ class ValidCivs {

private applyEvent(turn: Turn, event: DraftEvent) {
if (Util.isAdminEvent(event)) {
this.handleAdminEvent(event)
return;
}

Expand Down Expand Up @@ -173,6 +174,17 @@ class ValidCivs {
this.removeAdminPick(event.chosenOptionId);
}

private handleAdminEvent(event: AdminEvent) {
if (event.action === Action.RESET_CL){
this.admin.categoryLimitPick = Util.cloneLimits(this.draft.preset.categoryLimits.pick);
this.admin.categoryLimitBan = Util.cloneLimits(this.draft.preset.categoryLimits.ban);
this.host.categoryLimitPick = Util.cloneLimits(this.draft.preset.categoryLimits.pick);
this.host.categoryLimitBan = Util.cloneLimits(this.draft.preset.categoryLimits.ban);
this.guest.categoryLimitPick = Util.cloneLimits(this.draft.preset.categoryLimits.pick);
this.guest.categoryLimitBan = Util.cloneLimits(this.draft.preset.categoryLimits.ban);
}
}

private handlePick(turn: Turn, event: PlayerEvent) {
if (ValidCivs.isGlobal(turn)) {
this.handleGlobalPick(event);
Expand Down
25 changes: 25 additions & 0 deletions src/util/ActListener.ts
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,31 @@ export class ActListener {
draftsStore.addDraftEvent(draftId, draftEvent);
ActListener.finishDraftIfNoFurtherActions(draftViews, socket, draftsStore, draftId, roomLobby, roomHost, roomGuest, roomSpec, dataDirectory);
}, adminEventCounter * this.adminTurnDelay);
} else if (actionTypeFromAction(expectedAction.action) === ActionType.RESET_CL) {
const draftEvent = new AdminEvent(expectedAction.player, expectedAction.action);
setTimeout(() => {
logger.info('Executing admin event: %s', JSON.stringify(draftEvent), {draftId});
socket.nsp
.in(roomHost)
.emit("adminEvent", {
...expectedAction,
events: draftViews.getHostDraft().events
});
socket.nsp
.in(roomGuest)
.emit("adminEvent", {
...expectedAction,
events: draftViews.getGuestDraft().events
});
socket.nsp
.in(roomSpec)
.emit("adminEvent", {
...expectedAction,
events: draftViews.getSpecDraft().events
});
draftsStore.addDraftEvent(draftId, draftEvent);
ActListener.finishDraftIfNoFurtherActions(draftViews, socket, draftsStore, draftId, roomLobby, roomHost, roomGuest, roomSpec, dataDirectory);
}, adminEventCounter * this.adminTurnDelay);
} else if ([ActionType.PICK, ActionType.BAN, ActionType.STEAL, ActionType.SNIPE].includes(actionTypeFromAction(expectedAction.action))) {
setTimeout(() => {
let draftEvent = new PlayerEvent(expectedAction.player, actionTypeFromAction(expectedAction.action), DraftOption.RANDOM.id, false, Player.NONE);
Expand Down

0 comments on commit 82ce485

Please sign in to comment.