diff --git a/src/app/games/massive-darkness2/massive-darkness2.db.model.ts b/src/app/games/massive-darkness2/massive-darkness2.db.model.ts index 6072021..8613a4c 100644 --- a/src/app/games/massive-darkness2/massive-darkness2.db.model.ts +++ b/src/app/games/massive-darkness2/massive-darkness2.db.model.ts @@ -26,6 +26,7 @@ export interface MD2MobInfo { minionImgUrl: string; mobLevelInfos: MD2MobLevelInfo[]; skills: MD2MobSkill[]; + bossFightProfile?: BossFightProfile; } export interface MD2MobLevelInfo { @@ -67,4 +68,30 @@ export interface MD2DiceSet { blue: number | null; green: number | null; black: number | null; +} +export interface BossFightProfile { + mobInfoId: string; + id: string; + prerequisite: string; + objective: string; + specialRules: string; + extraTokenName: string; + extraTokenHtml: string; + extraTokenName2: string; + extraTokenHtml2: string; + phaseBuffs: BossFightPhaseBuff[]; +} + +export interface BossFightPhaseBuff { + id: string; + bossFightProfileId: string; + phase: number; + extraAction: number; + extraAttackDice: MD2DiceSet; + extraDefenceDice: MD2DiceSet; + extraHp: number; + extraTokenCount: number; + extraTokenCount2: number; + enableExtraBuffDescription: boolean; + extraBuffDescription: string; } \ No newline at end of file diff --git a/src/app/games/massive-darkness2/mobs/mob-stand-info/mob-stand-info.component.scss b/src/app/games/massive-darkness2/mobs/mob-stand-info/mob-stand-info.component.scss index b5092fb..1921985 100644 --- a/src/app/games/massive-darkness2/mobs/mob-stand-info/mob-stand-info.component.scss +++ b/src/app/games/massive-darkness2/mobs/mob-stand-info/mob-stand-info.component.scss @@ -32,8 +32,8 @@ // HP and Mana Bars Overlay .hero-stats-overlay { - position: absolute; - bottom: 0; + position: relative; + bottom: 60px; left: 0; right: 0; padding: 0.5rem; @@ -41,9 +41,6 @@ border-radius: 0 0 8px 8px; z-index: 1; width: 95%; - @media (max-height: 450px) and (orientation: landscape) { - padding: 0.35rem; - } } .stat-bar-overlay { diff --git a/src/app/services/MD2/md2.service.ts b/src/app/services/MD2/md2.service.ts index 3ab4e96..b49b556 100644 --- a/src/app/services/MD2/md2.service.ts +++ b/src/app/services/MD2/md2.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@angular/core'; -import { AttackInfo, AttackTarget, CoreGameDarknessPhaseRule, DrawingBag, DrawingItem, HeroClass, IDarknessPhaseRule, MD2HeroInfo, MD2Icon, MD2Rules, MobInfo, MobType, RoundPhase, TreasureItem, TreasureType } from '../../games/massive-darkness2/massive-darkness2.model'; +import { AttackInfo, AttackTarget, CoreGameDarknessPhaseRule, DrawingBag, DrawingItem, HeroClass, IDarknessPhaseRule, MD2EnemyPhaseSpecialInfo, MD2EnemyPhaseSpecialRule, MD2HeroInfo, MD2Icon, MD2Rules, MobInfo, MobType, RoundPhase, TreasureItem, TreasureType } from '../../games/massive-darkness2/massive-darkness2.model'; import { first, map, reduce } from "rxjs/operators"; -import { NbDialogService } from '@nebular/theme'; +import { NbDialogService, NbThemeService } from '@nebular/theme'; import { Subject } from 'rxjs'; import { BossMicheal, BossReaper, IBossFight } from '../../games/massive-darkness2/massive-darkness2.model.boss'; import { ADIcon, MessageBoxConfig } from '../../ui/alert-dlg/alert-dlg.model'; @@ -29,7 +29,7 @@ export class MD2Service { private _highestPlayerLevel: number = 1; private _playerAmount: number = 2; - + public specialRule: MD2EnemyPhaseSpecialInfo; public info: MD2GameInfo; public playerHero: MD2HeroInfo; public mobInfos: MD2MobInfo[] = []; @@ -75,13 +75,15 @@ export class MD2Service { public gameRoomService: GameRoomService, public loginUserService: LoginUserService, public signalRService: SignalRService, - public dlgService: NbDialogService + public dlgService: NbDialogService, + public themeService: NbThemeService ) { this.darknessPhaseRule = new CoreGameDarknessPhaseRule(); this.info = new MD2GameInfo(); this.darknessPhaseRule.addTreasureToken.subscribe(treasureType => { this.addTreasure(treasureType, 1); }); + this.specialRule = new MD2EnemyPhaseSpecialInfo(); } // #endregion Constructors (1) @@ -263,10 +265,28 @@ export class MD2Service { private getAttackInfo(attackInfo: MD2DiceSet): AttackInfo { return new AttackInfo(attackInfo.type as unknown as MD2Icon, attackInfo.yellow, attackInfo.orange, attackInfo.red, attackInfo.black); } - public enemyPhase() { + public enemyPhase(triggerSpecialRule: boolean = true) { //this.msgBoxService + //Draw a special rule + this.enemyPhaseMobs = this.roamingMonsters.concat(this.mobs); + if (this.mobs.length > 0 && triggerSpecialRule) { + let specialRuleDrawingBag = new DrawingBag(this.specialRule.specialRules); + let specialRule = specialRuleDrawingBag.Draw(1)[0]; + this.specialRule.specialRule = specialRule; + if (specialRule.description) { + this.themeService.changeTheme('dark'); + this.msgBoxService.show(specialRule.title, { text: specialRule.description, icon: ADIcon.WARNING }) + .pipe(first()).subscribe(result => { + this.enemyPhase(false); + }); + return; + } else { + this.specialRule.specialRule = null; + } + } + if (this.enemyPhaseMobs.length > 0) { this.enemyPhaseMobs = ArrayUtils.Shuffle(this.enemyPhaseMobs); //this.showEnemyPhaseAction(); @@ -384,10 +404,11 @@ export class MD2Service { this.info.roundPhase++; switch (this.info.roundPhase) { case RoundPhase.HeroPhase: - this.heros.forEach(hero => { - hero.remainActions = 3; - this.broadcastHeroInfoToOwner(hero); - }); + //HeroPhase will be handled in the darkness phase + // this.heros.forEach(hero => { + // hero.remainActions = 3; + // this.broadcastHeroInfoToOwner(hero); + // }); break; case RoundPhase.EnemyPhase: this.enemyPhase(); @@ -397,6 +418,7 @@ export class MD2Service { break; case RoundPhase.DarknessPhase: this.darknessPhase(); + this.themeService.changeTheme('default'); break; default: break; } diff --git a/src/assets/styles/form-controls/_scrollbars.scss b/src/assets/styles/form-controls/_scrollbars.scss index 7422fbb..cb7cdd5 100644 --- a/src/assets/styles/form-controls/_scrollbars.scss +++ b/src/assets/styles/form-controls/_scrollbars.scss @@ -12,6 +12,6 @@ // background: nb-theme(color-primary-200) !important; // } -.label { - color: #736f6f; -} +// .label { +// color: #736f6f; +// }