spell-table.component.html 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. <div class="spell-box">
  2. <div class="heading-list">
  3. <div>Typ</div>
  4. <div>Name</div>
  5. <div>Stufe</div>
  6. <div>
  7. <div>Bonus/</div>
  8. <div>Save</div>
  9. </div>
  10. <div>Schaden/ Heilung</div>
  11. <div>Reichweite</div>
  12. </div>
  13. <div
  14. id="spells-table"
  15. cdkDropList
  16. class="example-list table-content"
  17. (cdkDropListDropped)="dropSpells($event)"
  18. >
  19. <div
  20. class="example-box"
  21. *ngFor="let spell of spells; let index = index"
  22. cdkDrag
  23. (click)="showFullSpellcard(index)"
  24. >
  25. <!-- Range Icon -->
  26. <ng-container
  27. [ngTemplateOutlet]="distanceIconTemplate"
  28. [ngTemplateOutletContext]="{ spell: spell }"
  29. ></ng-container>
  30. <div class="vertical-line"></div>
  31. <!-- Name -->
  32. <ng-container
  33. [ngTemplateOutlet]="spellNameTemplate"
  34. [ngTemplateOutletContext]="{ spell: spell }"
  35. ></ng-container>
  36. <div class="vertical-line"></div>
  37. <!-- Level -->
  38. <ng-container
  39. [ngTemplateOutlet]="spellLevelTemplate"
  40. [ngTemplateOutletContext]="{ spell: spell }"
  41. ></ng-container>
  42. <div class="vertical-line"></div>
  43. <!-- Attack -->
  44. <ng-container
  45. [ngTemplateOutlet]="spellAttackTemplate"
  46. [ngTemplateOutletContext]="{ spell: spell }"
  47. ></ng-container>
  48. <div class="vertical-line"></div>
  49. <!-- Damage/Heal -->
  50. <ng-container
  51. [ngTemplateOutlet]="spellDamageTemplate"
  52. [ngTemplateOutletContext]="{ spell: spell }"
  53. ></ng-container>
  54. <div class="vertical-line"></div>
  55. <!-- Range -->
  56. <ng-container
  57. [ngTemplateOutlet]="spellRangeTemplate"
  58. [ngTemplateOutletContext]="{ spell: spell }"
  59. ></ng-container>
  60. </div>
  61. </div>
  62. <input
  63. id="typeahead-basic"
  64. type="text"
  65. [class]="showInput ? 'spellInput' : 'spellInput hidden'"
  66. (selectItem)="onSpellSelect($event.item); $event.preventDefault()"
  67. [(ngModel)]="newSpellName"
  68. [ngbTypeahead]="search"
  69. placement="top-start"
  70. placeholder="Name des vorbereiteten Zaubers"
  71. />
  72. <button
  73. [class]="showInput ? 'slide-button cancel-button' : 'slide-button'"
  74. (click)="toggleInput()"
  75. >
  76. @if(showInput){ Abbrechen} @else { Hinzufügen}
  77. </button>
  78. </div>
  79. <!-- Templates -->
  80. <!-- ICON -->
  81. <ng-template #distanceIconTemplate let-spell="spell">
  82. <icon
  83. [size]="'s'"
  84. [type]="'weapon'"
  85. [icon]="spell.isRanged ? 'distance' : 'touch'"
  86. ></icon>
  87. </ng-template>
  88. <!-- NAME -->
  89. <ng-template #spellNameTemplate let-spell="spell">
  90. <div>
  91. <div class="bold">{{ spell.name }}</div>
  92. <div class="bold small">
  93. <span *ngIf="spell.cost === 'action'">A</span>
  94. <span *ngIf="spell.cost === 'bonus'">B</span>
  95. <span *ngIf="spell.cost === 'reaction'">R</span>
  96. <span> | </span>
  97. <span *ngIf="spell.needsConcentration">C | </span>
  98. <span *ngIf="spell.needsVerbal">V </span>
  99. <span *ngIf="spell.needsSomatic">G </span>
  100. <span *ngIf="spell.needsMaterial">M </span>
  101. <div></div>
  102. </div>
  103. </div>
  104. </ng-template>
  105. <!-- Level -->
  106. <ng-template #spellLevelTemplate let-spell="spell">
  107. <div *ngIf="spell.level !== 0" class="bold">{{ spell.level }}</div>
  108. <div *ngIf="spell.level === 0" class="bold">Trick</div>
  109. </ng-template>
  110. <!-- Attack -->
  111. <ng-template #spellAttackTemplate let-spell="spell">
  112. <div>
  113. <div *ngIf="spell.needsSavingThrow">
  114. <div>
  115. {{ attributes[spell.savingThrowAttribute!] }}
  116. </div>
  117. <div>{{ spellSaveDC }}</div>
  118. </div>
  119. <div *ngIf="spell.needsAttackRoll">
  120. <div>{{ spellAttackBonus }}</div>
  121. </div>
  122. <div *ngIf="!spell.needsSavingThrow && !spell.needsAttackRoll">-</div>
  123. </div>
  124. </ng-template>
  125. <!-- Damage/Heal -->
  126. <ng-template #spellDamageTemplate let-spell="spell">
  127. <div>
  128. @if(spell.doesDamage){
  129. <div *ngFor="let damage of spell.damage; let index = index">
  130. <span>{{ damage.diceNumber }} {{ damage.diceType }} </span>
  131. <span>
  132. <icon [size]="'xs'" [type]="'damage'" [icon]="damage.damageType"></icon>
  133. </span>
  134. </div>
  135. } @if(spell.doesHeal){
  136. <div class="heal">
  137. <span>{{ spell.heal.diceNumber }} {{ spell.heal.diceType }} </span>
  138. <span *ngIf="spell.heal.additionalHeal"
  139. >+{{ spell.heal.additionalHeal }}
  140. </span>
  141. <span>
  142. <icon [size]="'xs'" [type]="'damage'" [icon]="'heal'"></icon>
  143. </span>
  144. </div>
  145. }
  146. </div>
  147. </ng-template>
  148. <!-- Range -->
  149. <ng-template #spellRangeTemplate let-spell="spell">
  150. <div class="spell-range">
  151. <div *ngIf="spell.isRanged">{{ spell.range }} ft.</div>
  152. <div *ngIf="!spell.isRanged">5 ft.</div>
  153. <div *ngIf="spell.hasAreaOfEffect">
  154. <span>{{ spell.radius }} ft. {{ areas[spell.areaOfEffectType] }} </span>
  155. </div>
  156. </div>
  157. </ng-template>