diff --git a/src/app/games/massive-darkness2/boss-fight/boss-fight.component.html b/src/app/games/massive-darkness2/boss-fight/boss-fight.component.html index 575aee3..ffc8ead 100644 --- a/src/app/games/massive-darkness2/boss-fight/boss-fight.component.html +++ b/src/app/games/massive-darkness2/boss-fight/boss-fight.component.html @@ -3,15 +3,31 @@ {{boss.name}} - +
- + + + + +
+
+
+ + {{boss.info.unitRemainHp}}/{{boss.info.hp}} +
+
+
+
+
+
+
- diff --git a/src/app/games/massive-darkness2/boss-fight/boss-fight.component.scss b/src/app/games/massive-darkness2/boss-fight/boss-fight.component.scss index dd4510a..b87ca22 100644 --- a/src/app/games/massive-darkness2/boss-fight/boss-fight.component.scss +++ b/src/app/games/massive-darkness2/boss-fight/boss-fight.component.scss @@ -2,3 +2,131 @@ nb-card { height: 80vh; //width: 80vw; } +.bossStandImg { + max-height: 67vh; + object-fit: contain; +} +// HP and Mana Bars Overlay +.hero-stats-overlay { + position: absolute; + top: 0; + left: 0; + right: 0; + padding: 0.5rem; + background: linear-gradient(to bottom, rgba(0, 0, 0, 0.7) 0%, rgba(0, 0, 0, 0.5) 70%, transparent 100%); + border-radius: 0 0 8px 8px; + z-index: 2; + width: 95%; + @media (max-height: 450px) and (orientation: landscape) { + padding: 0.35rem; + } +} + +.stat-bar-overlay { + margin-bottom: 0.5rem; + + &:last-child { + margin-bottom: 0; + } + + @media (max-height: 450px) and (orientation: landscape) { + margin-bottom: 0.35rem; + } +} + +.stat-bar-label-overlay { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 0.25rem; + gap: 0.5rem; + + md2-icon { + flex-shrink: 0; + width: 18px; + height: 18px; + } + + .stat-value-overlay { + color: white; + font-size: 0.75rem; + font-weight: 600; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.8); + flex-shrink: 0; + } + + @media (max-height: 450px) and (orientation: landscape) { + margin-bottom: 0.15rem; + gap: 0.3rem; + + md2-icon { + width: 14px; + height: 14px; + } + + .stat-value-overlay { + font-size: 0.65rem; + } + } +} + +.stat-progress-bar-overlay { + width: 100%; + height: 20px; + background: rgba(255, 255, 255, 0.2); + border-radius: 10px; + overflow: hidden; + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.3); + border: 1px solid rgba(255, 255, 255, 0.3); + + @media (max-height: 450px) and (orientation: landscape) { + height: 16px; + border-radius: 8px; + } +} + +.stat-progress-fill-overlay { + height: 100%; + border-radius: 10px; + transition: width 0.5s ease-out; + position: relative; + overflow: hidden; + + @media (max-height: 450px) and (orientation: landscape) { + border-radius: 8px; + } + + &::after { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent); + animation: shimmer 2s infinite; + } + + &.full-stat { + width: 100%; + } +} + +.hp-fill-overlay { + background: linear-gradient(90deg, #ff6b6b, #ee5a6f); + box-shadow: 0 0 8px rgba(238, 90, 111, 0.6); +} + +.mp-fill-overlay { + background: linear-gradient(90deg, #4ecdc4, #44a08d); + box-shadow: 0 0 8px rgba(68, 160, 141, 0.6); +} + +@keyframes shimmer { + 0% { + transform: translateX(-100%); + } + 100% { + transform: translateX(100%); + } +} diff --git a/src/app/games/massive-darkness2/boss-fight/boss-fight.component.ts b/src/app/games/massive-darkness2/boss-fight/boss-fight.component.ts index f422176..c92ebf9 100644 --- a/src/app/games/massive-darkness2/boss-fight/boss-fight.component.ts +++ b/src/app/games/massive-darkness2/boss-fight/boss-fight.component.ts @@ -17,8 +17,8 @@ import { SpawnMobDlgComponent } from '../mobs/spawn-mob-dlg/spawn-mob-dlg.compon styleUrls: ['./boss-fight.component.scss'] }) export class BossFightComponent extends MD2ComponentBase { - - + MobDlgType = MobDlgType; + MD2Icon = MD2Icon; public get boss() { return this.md2Service.info.boss; } @@ -65,8 +65,8 @@ export class BossFightComponent extends MD2ComponentBase { if (mobResult) { let attackDamage = mobResult.uiWounds; if (attackDamage) { - this.boss.info.hp -= attackDamage; - if (this.boss.info.hp <= 0) { + this.boss.info.unitRemainHp -= attackDamage; + if (this.boss.info.unitRemainHp <= 0) { this.WIN(); } this.cdRef.detectChanges(); diff --git a/src/app/games/massive-darkness2/mobs/mob-stand-info/mob-stand-info.component.html b/src/app/games/massive-darkness2/mobs/mob-stand-info/mob-stand-info.component.html index 1565f94..eec9ef4 100644 --- a/src/app/games/massive-darkness2/mobs/mob-stand-info/mob-stand-info.component.html +++ b/src/app/games/massive-darkness2/mobs/mob-stand-info/mob-stand-info.component.html @@ -5,4 +5,18 @@ [ngClass]="{'noMinions': mob.mobAmount==1}" /> +
+ + +
+
+
+ + {{mob.unitRemainHp}}/{{mob.hp}} +
+
+
+
+
+
\ 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 d87bbfc..b5092fb 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 @@ -29,3 +29,128 @@ position: relative; z-index: 1; } + +// HP and Mana Bars Overlay +.hero-stats-overlay { + position: absolute; + bottom: 0; + left: 0; + right: 0; + padding: 0.5rem; + background: linear-gradient(to top, rgba(0, 0, 0, 0.7) 0%, rgba(0, 0, 0, 0.5) 70%, transparent 100%); + border-radius: 0 0 8px 8px; + z-index: 1; + width: 95%; + @media (max-height: 450px) and (orientation: landscape) { + padding: 0.35rem; + } +} + +.stat-bar-overlay { + margin-bottom: 0.5rem; + + &:last-child { + margin-bottom: 0; + } + + @media (max-height: 450px) and (orientation: landscape) { + margin-bottom: 0.35rem; + } +} + +.stat-bar-label-overlay { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 0.25rem; + gap: 0.5rem; + + md2-icon { + flex-shrink: 0; + width: 18px; + height: 18px; + } + + .stat-value-overlay { + color: white; + font-size: 0.75rem; + font-weight: 600; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.8); + flex-shrink: 0; + } + + @media (max-height: 450px) and (orientation: landscape) { + margin-bottom: 0.15rem; + gap: 0.3rem; + + md2-icon { + width: 14px; + height: 14px; + } + + .stat-value-overlay { + font-size: 0.65rem; + } + } +} + +.stat-progress-bar-overlay { + width: 100%; + height: 20px; + background: rgba(255, 255, 255, 0.2); + border-radius: 10px; + overflow: hidden; + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.3); + border: 1px solid rgba(255, 255, 255, 0.3); + + @media (max-height: 450px) and (orientation: landscape) { + height: 16px; + border-radius: 8px; + } +} + +.stat-progress-fill-overlay { + height: 100%; + border-radius: 10px; + transition: width 0.5s ease-out; + position: relative; + overflow: hidden; + + @media (max-height: 450px) and (orientation: landscape) { + border-radius: 8px; + } + + &::after { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent); + animation: shimmer 2s infinite; + } + + &.full-stat { + width: 100%; + } +} + +.hp-fill-overlay { + background: linear-gradient(90deg, #ff6b6b, #ee5a6f); + box-shadow: 0 0 8px rgba(238, 90, 111, 0.6); +} + +.mp-fill-overlay { + background: linear-gradient(90deg, #4ecdc4, #44a08d); + box-shadow: 0 0 8px rgba(68, 160, 141, 0.6); +} + +@keyframes shimmer { + 0% { + transform: translateX(-100%); + } + 100% { + transform: translateX(100%); + } +}