diff --git a/src/app/games/massive-darkness2/factorys/roamingMonsters/CoreGame.ts b/src/app/games/massive-darkness2/factorys/roamingMonsters/CoreGame.ts index 54dd76e..0d36c8e 100644 --- a/src/app/games/massive-darkness2/factorys/roamingMonsters/CoreGame.ts +++ b/src/app/games/massive-darkness2/factorys/roamingMonsters/CoreGame.ts @@ -8,99 +8,6 @@ import { MobSkillType } from "../../massive-darkness2.model.boss"; import { MD2DiceSet, MD2MobSkill } from "../../massive-darkness2.db.model"; const MD2_IMG_URL = (id: string = null) => { return `${environment.apiUrl}/Files/Images/MD2/Mobs${(id ? `${encodeURI(id)}` : '')}` } -const CORE_GAME_MOB_LEVEL = [ - - new MobInfo({ - name: 'Andra', level: 1, hp: 5, - - attackInfos: [new AttackInfo(MD2Icon.Melee, 1, 0, 0, 1), new AttackInfo(MD2Icon.Range, 1, 0, 0, 1)], - defenseInfo: { blue: 2, black: 1 } as MD2DiceSet, - }), - new MobInfo({ - name: 'Andra', level: 3, hp: 7, - - attackInfos: [new AttackInfo(MD2Icon.Melee, 1, 1, 0, 1), new AttackInfo(MD2Icon.Range, 1, 1, 0, 1)], - defenseInfo: { blue: 3, black: 1 } as MD2DiceSet, - }), - new MobInfo({ - name: 'Andra', level: 5, hp: 5, - attackInfos: [new AttackInfo(MD2Icon.Melee, 1, 2, 0, 1), new AttackInfo(MD2Icon.Range, 1, 2, 0, 1)], - defenseInfo: { blue: 5, black: 1 } as MD2DiceSet, - }), - - new MobInfo({ - name: 'Ytheria, Undead Queen', level: 1, hp: 4, - attackInfos: [new AttackInfo(MD2Icon.Melee, 1), new AttackInfo(MD2Icon.Range, 2, 0, 0, 1)], - defenseInfo: { blue: 1, black: 1 } as MD2DiceSet, - - }), - new MobInfo({ - name: 'Ytheria, Undead Queen', level: 3, hp: 6, - attackInfos: [new AttackInfo(MD2Icon.Melee, 0, 1), new AttackInfo(MD2Icon.Range, 1, 1, 0, 1)], - defenseInfo: { blue: 2, black: 1 } as MD2DiceSet, - - }), - new MobInfo({ - name: 'Ytheria, Undead Queen', level: 5, hp: 8, - attackInfos: [new AttackInfo(MD2Icon.Melee, 2, 1), new AttackInfo(MD2Icon.Range, 2, 1, 0, 1)], - defenseInfo: { blue: 4, black: 1 } as MD2DiceSet, - }), - - new MobInfo({ - name: 'Lyidan, Incubus Lord', level: 1, hp: 7, - attackInfos: [new AttackInfo(MD2Icon.Melee, 0, 1, 0, 2)], - defenseInfo: { blue: 2, black: 1 } as MD2DiceSet, - }), - new MobInfo({ - name: 'Lyidan, Incubus Lord', level: 3, hp: 10, - attackInfos: [new AttackInfo(MD2Icon.Melee, 0, 2, 0, 1)], - defenseInfo: { blue: 2, black: 1 } as MD2DiceSet, - }), - new MobInfo({ - name: 'Lyidan, Incubus Lord', level: 5, hp: 12, - attackInfos: [new AttackInfo(MD2Icon.Melee, 2, 2, 0, 1)], - defenseInfo: { blue: 4, black: 1 } as MD2DiceSet, - }), - - new MobInfo({ - name: 'The Ghoul', level: 1, hp: 5, - attackInfos: [new AttackInfo(MD2Icon.Melee, 0, 1, 0, 1)], - defenseInfo: { blue: 2, black: 1 } as MD2DiceSet, - }), - new MobInfo({ - name: 'The Ghoul', level: 3, hp: 8, - attackInfos: [new AttackInfo(MD2Icon.Melee, 0, 2, 0, 2)], - defenseInfo: { blue: 3, black: 1 } as MD2DiceSet, - }), - new MobInfo({ - name: 'The Ghoul', level: 5, hp: 10, - attackInfos: [new AttackInfo(MD2Icon.Melee, 0, 3, 0, 3)], - defenseInfo: { blue: 4, black: 1 } as MD2DiceSet, - }), - - - new MobInfo({ - name: 'Balrog', level: 1, hp: 5, - attackInfos: [ - new AttackInfo(MD2Icon.Magic, 0, 1, 0, 2), - ], - defenseInfo: { blue: 2, black: 1 } as MD2DiceSet, - }), - new MobInfo({ - name: 'Balrog', level: 3, hp: 8, - attackInfos: [ - new AttackInfo(MD2Icon.Magic, 0, 2, 0, 2), - ], - defenseInfo: { blue: 3, black: 1 } as MD2DiceSet, - }), - new MobInfo({ - name: 'Balrog', level: 5, hp: 10, - attackInfos: [ - new AttackInfo(MD2Icon.Magic, 0, 3, 0, 2), - ], - defenseInfo: { blue: 4, black: 1 } as MD2DiceSet, - }), -] export abstract class CoreGameRMFactory implements IMobFactory { abstract mobName: string; @@ -192,7 +99,7 @@ export class RMUndeadQueenFactory extends CoreGameRMFactory { } }); } - });; + }); } this.mob.skills = [ diff --git a/src/app/games/massive-darkness2/massive-darkness2.model.ts b/src/app/games/massive-darkness2/massive-darkness2.model.ts index d0be321..a96dd9b 100644 --- a/src/app/games/massive-darkness2/massive-darkness2.model.ts +++ b/src/app/games/massive-darkness2/massive-darkness2.model.ts @@ -377,7 +377,6 @@ export class MobInfo implements IDrawingItem { return 0; } } - public actionSubject: Subject; public activateFunction?: (mob: MobInfo, msgBoxService: MsgBoxService, heros: MD2HeroInfo[]) => void; } export interface MD2HeroProfile { diff --git a/src/app/games/massive-darkness2/mobs/mob-detail-info/mob-combat-info/mob-combat-info.component.html b/src/app/games/massive-darkness2/mobs/mob-detail-info/mob-combat-info/mob-combat-info.component.html index 0b4a71b..64da57e 100644 --- a/src/app/games/massive-darkness2/mobs/mob-detail-info/mob-combat-info/mob-combat-info.component.html +++ b/src/app/games/massive-darkness2/mobs/mob-detail-info/mob-combat-info/mob-combat-info.component.html @@ -21,7 +21,7 @@ -->
-
+
diff --git a/src/app/games/massive-darkness2/mobs/mob-detail-info/mob-combat-info/mob-combat-info.component.ts b/src/app/games/massive-darkness2/mobs/mob-detail-info/mob-combat-info/mob-combat-info.component.ts index 4fbc7b4..b242c70 100644 --- a/src/app/games/massive-darkness2/mobs/mob-detail-info/mob-combat-info/mob-combat-info.component.ts +++ b/src/app/games/massive-darkness2/mobs/mob-detail-info/mob-combat-info/mob-combat-info.component.ts @@ -39,7 +39,8 @@ export class MobCombatInfoComponent implements OnInit { element.uiDisplay = [MobSkillType.Combat, MobSkillType.Defense].includes(element.type); break; case MobDlgType.PreView: - element.uiDisplay = true; + case MobDlgType.Dashboard: + element.uiDisplay = [MobSkillType.Combat, MobSkillType.Attack, MobSkillType.Defense].includes(element.type); break; case MobDlgType.Spawn: element.uiDisplay = false; diff --git a/src/app/games/massive-darkness2/mobs/mob-detail-info/mob-detail-info.component.html b/src/app/games/massive-darkness2/mobs/mob-detail-info/mob-detail-info.component.html index 0026856..d981897 100644 --- a/src/app/games/massive-darkness2/mobs/mob-detail-info/mob-detail-info.component.html +++ b/src/app/games/massive-darkness2/mobs/mob-detail-info/mob-detail-info.component.html @@ -34,11 +34,21 @@ +
+
- - + + +
+
+ + + +
+
diff --git a/src/app/games/massive-darkness2/mobs/mobs.component.ts b/src/app/games/massive-darkness2/mobs/mobs.component.ts index 6abb577..83a706b 100644 --- a/src/app/games/massive-darkness2/mobs/mobs.component.ts +++ b/src/app/games/massive-darkness2/mobs/mobs.component.ts @@ -11,7 +11,6 @@ import { StateService } from '../../../services/state.service'; import { ADButtons, ADIcon } from '../../../ui/alert-dlg/alert-dlg.model'; import { NumberUtils } from '../../../utilities/number-utils'; import { StringUtils } from '../../../utilities/string-utils'; -import { CoreGameRMFactories } from '../factorys/roamingMonsters/CoreGame'; import { DrawingBag, DrawingItem, MD2Icon, MobDlgType, MobInfo, TreasureType } from '../massive-darkness2.model'; import { MD2Base, MD2ComponentBase } from '../MD2Base'; import { SpawnMobDlgComponent } from './spawn-mob-dlg/spawn-mob-dlg.component'; @@ -89,7 +88,7 @@ export class MobsComponent extends MD2ComponentBase implements OnInit { } spawnSpecificMob() { - let mobOptions = this.isRoamingMonster ? CoreGameRMFactories.map(f => new DropDownOption(f.mobName, f.mobName)) : this.md2Service.allMobInfos.map(f => new DropDownOption(f.name, f.name)); + let mobOptions = this.isRoamingMonster ? this.md2Service.allRoamingMonsterInfos.map(f => new DropDownOption(f.name, f.name)) : this.md2Service.allMobInfos.map(f => new DropDownOption(f.name, f.name)); this.msgBoxService.showInputbox('Spawn', '', { inputType: 'dropdown', dropDownOptions: mobOptions, diff --git a/src/app/games/massive-darkness2/mobs/spawn-mob-dlg/spawn-mob-dlg.component.html b/src/app/games/massive-darkness2/mobs/spawn-mob-dlg/spawn-mob-dlg.component.html index f66f757..fa2205f 100644 --- a/src/app/games/massive-darkness2/mobs/spawn-mob-dlg/spawn-mob-dlg.component.html +++ b/src/app/games/massive-darkness2/mobs/spawn-mob-dlg/spawn-mob-dlg.component.html @@ -5,20 +5,21 @@
-
+
+ +
+ +
-
- - -
diff --git a/src/app/games/massive-darkness2/mobs/spawn-mob-dlg/spawn-mob-dlg.component.ts b/src/app/games/massive-darkness2/mobs/spawn-mob-dlg/spawn-mob-dlg.component.ts index 70855b6..da0812a 100644 --- a/src/app/games/massive-darkness2/mobs/spawn-mob-dlg/spawn-mob-dlg.component.ts +++ b/src/app/games/massive-darkness2/mobs/spawn-mob-dlg/spawn-mob-dlg.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectorRef, Component, OnInit } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; import { NbDialogRef } from '@nebular/theme'; -import { first } from 'rxjs/operators'; +import { concatMap, find, defaultIfEmpty, first, map, switchMap } from 'rxjs/operators'; import { FileService } from '../../../../services/file.service'; import { MD2Service } from '../../../../services/MD2/md2.service'; import { MsgBoxService } from '../../../../services/msg-box.service'; @@ -9,6 +9,12 @@ import { StateService } from '../../../../services/state.service'; import { StringUtils } from '../../../../utilities/string-utils'; import { AttackInfo, AttackTarget, AttackType, MD2HeroInfo, MD2Icon, MobDlgType, MobInfo, MobType } from '../../massive-darkness2.model'; import { MD2ComponentBase } from '../../MD2Base'; +import { ADButtons, ADIcon } from '../../../../ui/alert-dlg/alert-dlg.model'; +import { MobSkillType } from '../../massive-darkness2.model.boss'; +import { Observable, from, of } from 'rxjs'; +import { MD2MobSkill } from '../../massive-darkness2.db.model'; + +type SkillResolutionResult = { result: boolean; skill: MD2MobSkill | null }; @Component({ selector: 'ngx-spawn-mob-dlg', @@ -38,16 +44,34 @@ export class SpawnMobDlgComponent extends MD2ComponentBase implements OnInit { ) { super(md2Service, stateService, route, cdRef); } + activeSkill: MD2MobSkill = null;; ngOnInit(): void { //this.mob = new MobInfo(this.mob); if (this.mode == MobDlgType.Spawn && this.mob.type == MobType.Mob) { this.mob.attackInfos = [new AttackInfo(MD2Icon.Melee), new AttackInfo(MD2Icon.Range), new AttackInfo(MD2Icon.Magic)]; } else if (this.mode == MobDlgType.Activating) { - if (this.mob.actionSubject) { - this.mob.actionSubject.pipe(first()).subscribe(result => { - this.actionInfoHtml = result; + if (this.mob.skills) { + + //this.mobActivate(this.mob, this.md2Service.info.heros); + //this.mob.activateFunction(this.mob, this.md2Service.msgBoxService, this.md2Service.info.heros); + this.mobActivate(this.mob, this.md2Service.info.heros).pipe(first()).subscribe(result => { + if (result && result.skill) { + this.activeSkill = result.skill; + //this.actionInfoHtml = `

${result.skill.name}

${result.skill.description}
`; + } + if (this.mob.type == MobType.Mob) { + this.mob.actions = 2; + } else { + if (result && result.skill) { + this.mob.actions = 1; + } else { + this.mob.actions = 2; + this.activeSkill = { name: 'Normal Action', description: '${this.mob.name} Gains 2 Actions.' } as MD2MobSkill; + //this.actionInfoHtml = `${this.mob.name} Gains 2 Actions.`; + } + } + }); - this.mob.activateFunction(this.mob, this.md2Service.msgBoxService, this.md2Service.info.heros); } } this.mob.uiWounds = 0; @@ -55,6 +79,52 @@ export class SpawnMobDlgComponent extends MD2ComponentBase implements OnInit { this.mob.uiFrozenTokens = 0; this.initTitleHtml(); } + + mobActivate(mob: MobInfo, heros: MD2HeroInfo[]): Observable { + switch (mob.type) { + case MobType.Mob: + return of({ result: false, skill: null } as SkillResolutionResult); + case MobType.RoamingMonster: + if (!mob.skills || mob.skills.length === 0) { + return of({ result: false, skill: null } as SkillResolutionResult); + } + + const orderedSkills = mob.skills + .filter(s => [MobSkillType.ConditionalSkill, MobSkillType.OtherWiseSkill].includes(s.type)) + .sort((a, b) => (a.seq ?? Number.MAX_SAFE_INTEGER) - (b.seq ?? Number.MAX_SAFE_INTEGER)); + + if (orderedSkills.length === 0) { + return of({ result: false, skill: null } as SkillResolutionResult); + } + + return from(orderedSkills).pipe( + concatMap(skill => this.resolveSkillPrompt(skill)), + find(resolution => resolution.result === true), + defaultIfEmpty({ result: false, skill: null } as SkillResolutionResult) + ); + case MobType.Boss: + default: + return of({ result: false, skill: null } as SkillResolutionResult); + } + } + + private resolveSkillPrompt(skill: MD2MobSkill): Observable { + if (skill.type === MobSkillType.OtherWiseSkill) { + return of({ result: true, skill } as SkillResolutionResult); + } + + const title = skill.name || 'Resolve Skill?'; + const prompt = skill.skillCondition || skill.description || 'Resolve this skill?'; + + return this.msgBoxService.show(title, { + text: prompt, + icon: ADIcon.QUESTION, + buttons: ADButtons.YesNo + }).pipe( + map(answer => ({ result: !!answer, skill } as SkillResolutionResult)) + ); + } + submit() { if (this.mode == MobDlgType.Spawn) { diff --git a/src/app/services/MD2/md2-init.service.ts b/src/app/services/MD2/md2-init.service.ts index 1858e0d..e72699a 100644 --- a/src/app/services/MD2/md2-init.service.ts +++ b/src/app/services/MD2/md2-init.service.ts @@ -1,6 +1,5 @@ import { Injectable } from '@angular/core'; -import { CoreGameRMFactories } from '../../games/massive-darkness2/factorys/roamingMonsters/CoreGame'; -import { DrawingBag, MobInfo, TreasureItem, TreasureType } from '../../games/massive-darkness2/massive-darkness2.model'; +import { DrawingBag, MobInfo, MobType, TreasureItem, TreasureType } from '../../games/massive-darkness2/massive-darkness2.model'; import { MD2StateService } from './md2-state.service'; import { MD2MobInfoService } from '../../games/massive-darkness2/service/massive-darkness2.service'; import { first } from 'rxjs/operators'; @@ -19,20 +18,10 @@ export class MD2InitService { this.stateService.mobDeck = new DrawingBag(); this.stateService.roamingMobDeck = new DrawingBag(); - this.initCoreGameMobs(); - this.initCoreGameRoamingMonsters(); + this.initCoreGameMobAndRoamingMonsters(); } - private initCoreGameRoamingMonsters() { - CoreGameRMFactories.forEach(factory => { - for (let i = 1; i <= 5; i++) { - this.stateService.roamingMobDeck.AddItem(new MobInfo({ name: factory.mobName, level: i, drawingWeight: 1 })); - i++; - } - }); - - } - private initCoreGameMobs() { + private initCoreGameMobAndRoamingMonsters() { // CoreGameMobFactories.forEach(factory => { // for (let i = 1; i <= 5; i++) { // this.stateService.mobDeck.AddItem(new MobInfo({ name: factory.mobName, level: i, drawingWeight: 1 })); @@ -40,13 +29,20 @@ export class MD2InitService { // } // }); this.mobInfoService.getAll().pipe(first()).subscribe(result => { - this.stateService.mobInfos = result; + this.stateService.mobInfos = result.filter(m => m.type == MobType.Mob); + this.stateService.roamingMobInfos = result.filter(m => m.type == MobType.RoamingMonster); for (let i = 0; i < result.length; i++) { const mobInfo = result[i]; for (let j = 0; j < mobInfo.mobLevelInfos.length; j++) { const levelInfo = mobInfo.mobLevelInfos[j]; - - this.stateService.mobDeck.AddItem(new MobInfo({ name: mobInfo.name, level: levelInfo.level, drawingWeight: 1 })); + switch (mobInfo.type) { + case MobType.Mob: + this.stateService.mobDeck.AddItem(new MobInfo({ name: mobInfo.name, level: levelInfo.level, drawingWeight: 1 })); + break; + case MobType.RoamingMonster: + this.stateService.roamingMobDeck.AddItem(new MobInfo({ name: mobInfo.name, level: levelInfo.level, drawingWeight: 1 })); + break; + } } } diff --git a/src/app/services/MD2/md2-state.service.ts b/src/app/services/MD2/md2-state.service.ts index 5e3e1f7..a69e7d0 100644 --- a/src/app/services/MD2/md2-state.service.ts +++ b/src/app/services/MD2/md2-state.service.ts @@ -15,6 +15,7 @@ export class MD2StateService { public info: MD2GameInfo; public playerHero: MD2HeroInfo; public mobInfos: MD2MobInfo[] = []; + public roamingMobInfos: MD2MobInfo[] = []; public mobDeck: DrawingBag; public roamingMobDeck: DrawingBag; public treasureBag: DrawingBag = new DrawingBag(); diff --git a/src/app/services/MD2/md2.service.ts b/src/app/services/MD2/md2.service.ts index 0478903..7e80815 100644 --- a/src/app/services/MD2/md2.service.ts +++ b/src/app/services/MD2/md2.service.ts @@ -15,11 +15,10 @@ import { SignalRService, SignalRSession, SignalRMessage } from '../signal-r.serv import { MD2StateService } from './md2-state.service'; import { MD2BroadcastService } from './md2-broadcast.service'; import { MD2Logic } from '../../games/massive-darkness2/massive-darkness2.logic'; -import { CoreGameRMFactories } from '../../games/massive-darkness2/factorys/roamingMonsters/CoreGame'; import { MD2InitService } from './md2-init.service'; import { ArrayUtils } from '../../utilities/array-utils'; import { DropDownOption } from '../../entity/dropDownOption'; -import { GameBundle, MD2MobInfo } from '../../games/massive-darkness2/massive-darkness2.db.model'; +import { GameBundle, MD2DiceSet, MD2MobInfo } from '../../games/massive-darkness2/massive-darkness2.db.model'; import { environment } from '../../../environments/environment'; @@ -51,6 +50,9 @@ export class MD2Service { public get mobs() { return this.stateService.info.mobs; } + public get allRoamingMonsterInfos() { + return this.stateService.roamingMobInfos; + } public get allMobInfos() { return this.stateService.mobInfos; } @@ -184,13 +186,10 @@ export class MD2Service { exitingMob.skills = newSpawnMob.skills; } else { if (isRoamingMonster) { - newSpawnMob = CoreGameRMFactories.find(f => f.mobName == newSpawnMob.name).generate(level); - newSpawnMob.hp = newSpawnMob.hpPerHero * this.playerAmount; - newSpawnMob.unitRemainHp = newSpawnMob.hp; - newSpawnMob.mobAmount = 0; + newSpawnMob = this.generateMob(isRoamingMonster, newSpawnMob.name, level); this.roamingMonsters.push(newSpawnMob); } else { - newSpawnMob = this.generateMob(newSpawnMob.name, level); + newSpawnMob = this.generateMob(isRoamingMonster, newSpawnMob.name, level); this.mobs.push(newSpawnMob); } @@ -202,16 +201,12 @@ export class MD2Service { return { exitingMob, mob: newSpawnMob }; } - private generateMob(mobName: string, level: number) { - let dbMobInfo = this.allMobInfos.find(m => m.name == mobName); + private generateMob(isRoamingMonster: boolean, mobName: string, level: number) { + let dbMobInfo = isRoamingMonster ? this.allRoamingMonsterInfos.find(m => m.name == mobName) : this.allMobInfos.find(m => m.name == mobName); let levelInfo = dbMobInfo.mobLevelInfos.find(l => l.level <= level); - let skills = dbMobInfo.skills.filter(s => s.level <= level).sort((a, b) => b.level - a.level); + let skills = dbMobInfo.skills.filter(s => s.level <= level).sort((a, b) => b.seq - a.seq); //Distinct by SkillType and Skill Name, take the one with the highest level - - - - let mobInfo = new MobInfo({ name: dbMobInfo.name, hp: levelInfo.hpPerHero, @@ -219,6 +214,7 @@ export class MD2Service { level: level, rewardTokens: levelInfo.rewardTokens, defenseInfo: levelInfo.defenceInfo, + type: dbMobInfo.type, skills: [] }); @@ -229,18 +225,52 @@ export class MD2Service { } } mobInfo.skills = mobInfo.skills.sort((a, b) => b.seq - a.seq); - - mobInfo.leaderImgUrl = mobInfo.leaderImgUrl || MD2_IMG_URL(`/${GameBundle[dbMobInfo.from]}/Mobs/${mobInfo.name}/Leader.png`); - mobInfo.minionImgUrl = mobInfo.minionImgUrl || MD2_IMG_URL(`/${GameBundle[dbMobInfo.from]}/Mobs/${mobInfo.name}/Minion.png`); - + switch (dbMobInfo.type) { + case MobType.Mob: + mobInfo.leaderImgUrl = mobInfo.leaderImgUrl || MD2_IMG_URL(`/${GameBundle[dbMobInfo.from]}/Mobs/${mobInfo.name}/Leader.png`); + mobInfo.minionImgUrl = mobInfo.minionImgUrl || MD2_IMG_URL(`/${GameBundle[dbMobInfo.from]}/Mobs/${mobInfo.name}/Minion.png`); + break; + case MobType.RoamingMonster: + mobInfo.leaderImgUrl = mobInfo.leaderImgUrl || MD2_IMG_URL(`/${GameBundle[dbMobInfo.from]}/RoamingMonsters/${mobInfo.name}/Stand.png`); + mobInfo.minionImgUrl = null; + break; + case MobType.Boss: + mobInfo.leaderImgUrl = mobInfo.leaderImgUrl || MD2_IMG_URL(`/Boss/${mobInfo.name}-Stand.png`); + mobInfo.minionImgUrl = null; + break; + default: + break; + } mobInfo.fixedCarriedTreasure = []; levelInfo.fixedRareTreasure > 0 && mobInfo.fixedCarriedTreasure.push(new TreasureItem(TreasureType.Rare, levelInfo.fixedRareTreasure)); levelInfo.fixedEpicTreasure > 0 && mobInfo.fixedCarriedTreasure.push(new TreasureItem(TreasureType.Epic, levelInfo.fixedEpicTreasure)); levelInfo.fixedLegendTreasure > 0 && mobInfo.fixedCarriedTreasure.push(new TreasureItem(TreasureType.Legendary, levelInfo.fixedLegendTreasure)); - //Maybe add more mobs later - mobInfo.mobAmount = this.playerAmount + 1; + + + switch (dbMobInfo.type) { + case MobType.Mob: + //Maybe add more mobs later + mobInfo.mobAmount = this.playerAmount + 1; + break; + case MobType.RoamingMonster: + case MobType.Boss: + mobInfo.hp = levelInfo.hpPerHero * this.playerAmount; + mobInfo.unitRemainHp = mobInfo.hp; + mobInfo.mobAmount = 0; + mobInfo.attackInfos = [this.getAttackInfo(levelInfo.attackInfo)]; + let altAttackInfo = levelInfo.alterAttackInfo; + if (altAttackInfo + && (altAttackInfo.black > 0 || altAttackInfo.blue > 0 || altAttackInfo.green > 0 || altAttackInfo.orange > 0 || altAttackInfo.red > 0 || altAttackInfo.yellow > 0) + ) { + mobInfo.attackInfos.push(this.getAttackInfo(altAttackInfo)); + } + break; + } return mobInfo; } + private getAttackInfo(attackInfo: MD2DiceSet): AttackInfo { + return new AttackInfo(attackInfo.type as unknown as MD2Icon, attackInfo.yellow, attackInfo.orange, attackInfo.red, attackInfo.black); + } public enemyPhase() { //this.msgBoxService this.enemyPhaseMobs = this.roamingMonsters.concat(this.mobs);