2024-03-29 08:04:07 -07:00

73 lines
2.1 KiB
TypeScript

import { ChangeDetectorRef, Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { NbDialogService } from '@nebular/theme';
import { Subject, Observable } from 'rxjs';
import { first, takeUntil } from 'rxjs/operators';
import { MD2Service } from '../../../services/MD2/md2.service';
import { MsgBoxService } from '../../../services/msg-box.service';
import { StateService } from '../../../services/state.service';
import { ADIcon } from '../../../ui/alert-dlg/alert-dlg.model';
import { MD2Icon, MobDlgType, MobInfo } from '../massive-darkness2.model';
import { MD2ComponentBase } from '../MD2Base';
import { SpawnMobDlgComponent } from '../mobs/spawn-mob-dlg/spawn-mob-dlg.component';
@Component({
selector: 'md2-boss-fight',
templateUrl: './boss-fight.component.html',
styleUrls: ['./boss-fight.component.scss']
})
export class BossFightComponent extends MD2ComponentBase {
public get boss() {
return this.md2Service.info.boss;
}
constructor(
private msgBoxService: MsgBoxService,
private dlgService: NbDialogService,
public md2Service: MD2Service,
protected stateService: StateService,
protected route: ActivatedRoute,
protected cdRef: ChangeDetectorRef,
) {
super(md2Service, stateService, route, cdRef);
}
ngOnInit(): void {
super.ngOnInit();
this.md2Service.heroAttackingSubject.pipe(takeUntil(this.destroy$)).subscribe(result => {
if (this.md2Service.info.isBossFight) {
this.attack(this.boss.info);
}
});
}
ngOnDestroy() {
this.destroy$.next();
this.destroy$.complete();
}
activate() {
this.boss.activating();
}
WIN() {
}
attack(mob: MobInfo) {
this.dlgService.open(SpawnMobDlgComponent, { context: { title: `Attack ${this.boss.name}`, mode: MobDlgType.BeenAttacked, mob: mob } })
.onClose.pipe(first()).subscribe(mobResult => {
if (mobResult) {
let attackDamage = mobResult.uiWounds;
if (attackDamage) {
this.boss.info.hp -= attackDamage;
this.cdRef.detectChanges();
}
}
});
}
}