60 lines
1.8 KiB
TypeScript
60 lines
1.8 KiB
TypeScript
import { ChangeDetectorRef, Component, NgZone, OnInit } from '@angular/core';
|
|
import { Player, AvalonStage } from '../../../entity/Avalon';
|
|
import { AvalonService } from '../../../services/avalon.service';
|
|
import { MsgBoxService } from '../../../services/msg-box.service';
|
|
import { ADIcon } from '../../../ui/alert-dlg/alert-dlg.model';
|
|
import { AvalonBase } from '../avalonBase';
|
|
|
|
@Component({
|
|
selector: 'avalon-pick-teammate',
|
|
templateUrl: './pick-teammate.component.html',
|
|
styleUrls: ['./pick-teammate.component.scss']
|
|
})
|
|
export class PickTeammateComponent extends AvalonBase implements OnInit {
|
|
|
|
constructor(
|
|
protected cdRef: ChangeDetectorRef,
|
|
protected avalonService: AvalonService,
|
|
private ngZone: NgZone,
|
|
private msgBoxService: MsgBoxService
|
|
) {
|
|
super(cdRef, avalonService);
|
|
}
|
|
|
|
ngOnInit(): void {
|
|
}
|
|
|
|
toggleTeamMate(player: Player, value: boolean) {
|
|
player.goingToQuest = value;
|
|
this.cdRef.detectChanges();
|
|
}
|
|
|
|
public pickTeamMate() {
|
|
let teamSize = this.players.filter(p => p.goingToQuest).length;
|
|
if (teamSize == this.currentQuest.teamSize) {
|
|
this.avalonService.data.stage = AvalonStage.TeamVote;
|
|
this.clearVoteStatus();
|
|
this.broadcastAll();
|
|
this.avalonService.applyCdChange$.next();
|
|
} else {
|
|
this.ngZone.run(_ => {
|
|
this.msgBoxService.show('任務編組錯誤!', { text: `本次任務出場人數為 ${this.currentQuest.teamSize} 人!`, icon: ADIcon.WARNING });
|
|
});
|
|
}
|
|
}
|
|
|
|
public changeLeader(newLeader: Player) {
|
|
let oldLeader = this.players.find(p => p.isLeader);
|
|
if (oldLeader) oldLeader.isLeader = false;
|
|
newLeader.isLeader = true;
|
|
|
|
for (let i = 0; i < this.players.length; i++) {
|
|
const player = this.players[i];
|
|
player.goingToQuest = false;
|
|
}
|
|
this.refreshAllInfo();
|
|
this.cdRef.detectChanges();
|
|
}
|
|
|
|
}
|