Feast 2.0!
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 
 

171 строка
3.6 KiB

  1. <template>
  2. <div class="character-layout">
  3. <button @click="$emit('exit')" class="profile-exit">Exit</button>
  4. <div class="character-items">
  5. <ItemView @click.native="useItem(item)" :item="item" v-for="(item, index) in subject.items" :key="'item-' + index" />
  6. </div>
  7. <div class="character-containers">
  8. <ContainerView :container="container" v-for="(container, index) in subject.containers" :key="'explore-container-' + index" />
  9. </div>
  10. <div class="character-stats">
  11. <Statblock :subject="subject" :initiative="0" />
  12. </div>
  13. <div class="character-perks">
  14. <h2>Perks</h2>
  15. <div
  16. class="perk"
  17. v-for="(perk,index) in subject.perks"
  18. :key="'perk-' + index"
  19. >
  20. <div class="perk-name">{{ perk.name }}</div>
  21. <div class="perk-desc">{{ perk.desc }}</div>
  22. </div>
  23. </div>
  24. <EquipmentView class="character-equipment" :world="world" :subject="subject" />
  25. </div>
  26. </template>
  27. <script lang="ts">
  28. import { Component, Prop, Vue } from 'vue-property-decorator'
  29. import Statblock from '@/components/Statblock.vue'
  30. import ContainerView from '@/components/ContainerView.vue'
  31. import ItemView from '@/components/ItemView.vue'
  32. import EquipmentView from '@/components/EquipmentView.vue'
  33. import { Creature } from '@/game/creature'
  34. import { World } from '@/game/world'
  35. import { LogEntry } from '@/game/interface'
  36. import { Item, ItemKind, Equipment } from '@/game/items'
  37. @Component({
  38. components: {
  39. Statblock, ContainerView, ItemView, EquipmentView
  40. }
  41. })
  42. export default class Profile extends Vue {
  43. @Prop()
  44. world!: World
  45. @Prop()
  46. subject!: Creature
  47. useItem (item: Item): void {
  48. if (this.subject.side === this.world.player.side) {
  49. switch (item.kind) {
  50. case ItemKind.Key:
  51. break
  52. case ItemKind.Consumable:
  53. item.actions[0].execute(this.subject, this.subject)
  54. break
  55. case ItemKind.Equipment:
  56. this.subject.equip(item as Equipment, (item as Equipment).slot)
  57. this.subject.items = this.subject.items.filter(i => item !== i)
  58. break
  59. }
  60. }
  61. }
  62. }
  63. </script>
  64. <style scoped>
  65. .character-layout {
  66. flex: 10;
  67. position: relative;
  68. display: grid;
  69. grid-template-areas:
  70. "exit stats"
  71. "items stats"
  72. "items perks"
  73. "items equipment"
  74. "containers containers";
  75. grid-template-rows: 100px 1fr fit-content(25%) 1fr 0.25fr;
  76. grid-template-columns: 1fr 1fr;
  77. grid-gap: 8px;
  78. width: 100%;
  79. height: 100%;
  80. margin: auto;
  81. }
  82. .character-items {
  83. background: #222;
  84. grid-area: items;
  85. display: grid;
  86. grid-template-columns: repeat(auto-fill, minmax(6rem, 1fr));
  87. grid-template-rows: repeat(10, 1fr);
  88. justify-items: center;
  89. align-items: start;
  90. overflow-x: hidden;
  91. overflow-y: scroll;
  92. }
  93. .character-items > .item-view {
  94. flex: 1 1;
  95. height: 4rem;
  96. max-height: 4rem;
  97. width: 6rem;
  98. max-width: 6rem;
  99. }
  100. .character-containers {
  101. background: #222;
  102. grid-area: containers;
  103. display: flex;
  104. flex-direction: row;
  105. }
  106. .character-equipment {
  107. grid-area: equipment;
  108. }
  109. .character-stats {
  110. background: #222;
  111. grid-area: stats;
  112. }
  113. .character-perks {
  114. background: #222;
  115. grid-area: perks;
  116. }
  117. .perk {
  118. text-align: left;
  119. text-indent: 16pt;
  120. margin-left: 16pt;
  121. margin-right: 16pt;
  122. margin-bottom: 8pt;
  123. }
  124. .perk-name {
  125. color: #bbb;
  126. }
  127. .perk-desc {
  128. font-size: 75%;
  129. }
  130. .profile-exit {
  131. grid-area: exit;
  132. width: 100%;
  133. padding: 4pt;
  134. flex: 0 1;
  135. background: #333;
  136. border-color: #666;
  137. border-style: outset;
  138. user-select: none;
  139. color: #eee;
  140. font-size: 36px;
  141. }
  142. .profile-exit:hover {
  143. background: #444;
  144. }
  145. .profile-exit:active {
  146. background: #666;
  147. border-style: inset;
  148. }
  149. </style>