From 5ab78d3ca766f981958cc1adc35ca65fbee7557d Mon Sep 17 00:00:00 2001 From: Fen Dweller Date: Fri, 7 Aug 2020 19:48:36 -0400 Subject: [PATCH] Allow items to be unequipped --- src/components/EquipmentView.vue | 101 +++++++++++++++++++++---------- src/components/Profile.vue | 2 +- src/game/creature.ts | 10 ++- 3 files changed, 80 insertions(+), 33 deletions(-) diff --git a/src/components/EquipmentView.vue b/src/components/EquipmentView.vue index b19b15a..8a83090 100644 --- a/src/components/EquipmentView.vue +++ b/src/components/EquipmentView.vue @@ -1,11 +1,6 @@ @@ -28,6 +23,63 @@ import { Item, ItemKindIcons, ItemKind, EquipmentSlot } from '@/game/items' export default class ItemView extends Vue { @Prop({ required: true }) subject!: Creature + + unequip (slot: EquipmentSlot) { + this.subject.unequip(slot) + } + + equipmentClass (slot: EquipmentSlot) { + const classes: string[] = [] + classes.push("equipment-slot") + + if (this.subject.equipment[slot] !== undefined) { + classes.push("equipment-slot-active") + } else { + classes.push("equipment-slot-empty") + } + + return classes.reduce((info: any, cls: string) => { info[cls] = true; return info }, {}) + } + + equipmentCss (slot: EquipmentSlot) { + const css = { + top: "", + left: "" + } + + switch (slot) { + case EquipmentSlot.Head: + css.top = "10%" + css.left = "50%" + break + case EquipmentSlot.Chest: + css.top = "35%" + css.left = "25%" + break + case EquipmentSlot.Arms: + css.top = "35%" + css.left = "75%" + break + case EquipmentSlot.MainHand: + css.top = "60%" + css.left = "15%" + break + case EquipmentSlot.OffHand: + css.top = "60%" + css.left = "85%" + break + case EquipmentSlot.Legs: + css.top = "60%" + css.left = "50%" + break + case EquipmentSlot.Feet: + css.top = "90%" + css.left = "50%" + break + } + + return css + } } @@ -47,36 +99,23 @@ export default class ItemView extends Vue { height: 3rem; border-width: 5px; border-style: outset; - transform: translate(-50%, -50%) - } - - .equipment-head { - top: 10%; - left: 50%; - } - - .equipment-chest { - top: 30%; - left: 50%; - } - - .equipment-main-hand { - top: 20%; - left: 30%; + transform: translate(-50%, -50%); + background: #333; + color: #eee; + margin: 0px; + padding: 0px; } - .equipment-off-hand { - top: 20%; - left: 70%; + .equipment-slot-active:hover { + background: #555; } - .equipment-legs { - top: 60%; - left: 50%; + .equipment-slot-active:active { + background: #555; + border-style: inset; } - .equipment-feet { - top: 80%; - left: 50%; + .equipment-slot-empty { + color: #666; } diff --git a/src/components/Profile.vue b/src/components/Profile.vue index a21311b..ee3a0fb 100644 --- a/src/components/Profile.vue +++ b/src/components/Profile.vue @@ -59,7 +59,7 @@ export default class Explore extends Vue { position: relative; display: grid; grid-template-areas: - "exit void" + "exit stats" "items stats" "items equipment" "containers containers"; diff --git a/src/game/creature.ts b/src/game/creature.ts index f9bdb33..e1d07a5 100644 --- a/src/game/creature.ts +++ b/src/game/creature.ts @@ -77,11 +77,19 @@ export class Creature extends Vore implements Combatant { equip (item: Equipment, slot: EquipmentSlot) { const equipped = this.equipment[slot] if (equipped !== undefined) { - this.items.push(equipped) + this.unequip(slot) } this.equipment[slot] = item } + unequip (slot: EquipmentSlot) { + const item = this.equipment[slot] + if (item !== undefined) { + this.items.push(item) + this.equipment[slot] = undefined + } + } + get status (): Array { const results: Array = []