|
- <template>
- <div class="character-layout">
- <button @click="$emit('exit')" class="profile-exit">Exit</button>
- <div class="character-items">
- <ItemView @click.native="useItem(item)" :item="item" v-for="(item, index) in world.player.items" :key="'item-' + index" />
- </div>
- <div class="character-containers">
- <ContainerView :container="container" v-for="(container, index) in world.player.containers" :key="'explore-container-' + index" />
- </div>
- <div class="character-stats">
- <Statblock :subject="world.player" :initiative="0" />
- </div>
- <EquipmentView class="character-equipment" :subject="world.player" />
- </div>
- </template>
-
- <script lang="ts">
-
- import { Component, Prop, Vue } from 'vue-property-decorator'
- import Statblock from './Statblock.vue'
- import ContainerView from './ContainerView.vue'
- import ItemView from './ItemView.vue'
- import EquipmentView from './EquipmentView.vue'
- import { Creature } from '@/game/creature'
- import { World } from '@/game/world'
- import { LogEntry } from '@/game/interface'
- import { Item, ItemKind, Equipment } from '@/game/items'
- @Component({
- components: {
- Statblock, ContainerView, ItemView, EquipmentView
- }
- })
-
- export default class Explore extends Vue {
- @Prop()
- world!: World
-
- useItem (item: Item): void {
- switch (item.kind) {
- case ItemKind.Key:
- break
- case ItemKind.Consumable:
- item.actions[0].execute(this.world.player, this.world.player)
- break
- case ItemKind.Equipment:
- this.world.player.equip(item as Equipment, (item as Equipment).slot)
- this.world.player.items = this.world.player.items.filter(i => item !== i)
- break
- }
- }
- }
-
- </script>
-
- <style scoped>
-
- .character-layout {
- flex: 10;
- position: relative;
- display: grid;
- grid-template-areas:
- "exit stats"
- "items stats"
- "items equipment"
- "containers containers";
- grid-template-rows: 100px 1fr 1fr 0.25fr;
- grid-template-columns: 1fr 1fr;
- width: 100%;
- height: 100%;
- margin: auto;
- }
-
- .character-items {
- background: #222;
- grid-area: items;
- display: grid;
- grid-template-columns: repeat(auto-fill, minmax(6rem, 1fr));
- grid-template-rows: repeat(10, 1fr);
- justify-items: center;
- align-items: start;
- overflow-x: hidden;
- overflow-y: scroll;
- }
-
- .character-items > .item-view {
- flex: 1 1;
- height: 4rem;
- max-height: 4rem;
- width: 6rem;
- max-width: 6rem;
- }
-
- .character-containers {
- background: #222;
- grid-area: containers;
- display: flex;
- flex-direction: row;
- }
-
- .character-equipment {
- grid-area: equipment;
- }
-
- .character-stats {
- background: #111;
- grid-area: stats;
- }
-
- .profile-exit {
- grid-area: exit;
- width: 100%;
- padding: 4pt;
- flex: 0 1;
- background: #333;
- border-color: #666;
- border-style: outset;
- user-select: none;
- color: #eee;
- font-size: 36px;
- }
-
- .profile-exit:hover {
- background: #444;
- }
-
- .profile-exit:active {
- background: #666;
- border-style: inset;
- }
- </style>
|