diff --git a/src/App.vue b/src/App.vue index ae028e2..04417b0 100644 --- a/src/App.vue +++ b/src/App.vue @@ -67,8 +67,8 @@ export default class App extends Vue { const player = new Creatures.Player() player.perspective = POV.Second player.side = Side.Heroes - player.equipment.set(Items.EquipmentSlot.MainHand, new Items.Sword()) - player.equipment.set(Items.EquipmentSlot.Head, new Items.Helmet()) + player.equipment[Items.EquipmentSlot.MainHand] = new Items.Sword() + player.equipment[Items.EquipmentSlot.Head] = new Items.Helmet() player.items.push(new Items.HealthPotion()) player.items.push(new Items.Mace()) player.items.push(new Items.Dagger()) diff --git a/src/components/EquipmentView.vue b/src/components/EquipmentView.vue new file mode 100644 index 0000000..b19b15a --- /dev/null +++ b/src/components/EquipmentView.vue @@ -0,0 +1,82 @@ + + + + + + diff --git a/src/components/Profile.vue b/src/components/Profile.vue index 0f7740a..a21311b 100644 --- a/src/components/Profile.vue +++ b/src/components/Profile.vue @@ -10,6 +10,7 @@
+ @@ -19,13 +20,14 @@ 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 + Statblock, ContainerView, ItemView, EquipmentView } }) @@ -59,8 +61,9 @@ export default class Explore extends Vue { grid-template-areas: "exit void" "items stats" + "items equipment" "containers containers"; - grid-template-rows: 100px 1fr 0.25fr; + grid-template-rows: 100px 1fr 1fr 0.25fr; grid-template-columns: 1fr 1fr; width: 100%; height: 100%; @@ -95,6 +98,10 @@ export default class Explore extends Vue { flex-direction: row; } +.character-equipment { + grid-area: equipment; +} + .character-stats { background: #111; grid-area: stats; diff --git a/src/game/creature.ts b/src/game/creature.ts index 6ffdb0b..f9bdb33 100644 --- a/src/game/creature.ts +++ b/src/game/creature.ts @@ -13,8 +13,8 @@ export class Creature extends Vore implements Combatant { get effects (): Array { return (this.statusEffects as Effective[]).concat( - Array.from(this.equipment.values()).flatMap( - item => item.effects + Object.values(this.equipment).filter(item => item !== undefined).flatMap( + item => (item as Equipment).effects ) ) } @@ -25,7 +25,7 @@ export class Creature extends Vore implements Combatant { otherActions: Array = []; side: Side; title = "Lv. 1 Creature"; - equipment: Map = new Map() + equipment: {[key in EquipmentSlot]?: Equipment } = {} ai: AI = new NoAI() constructor (name: Noun, kind: Noun, pronouns: Pronoun, stats: Stats, preyPrefs: Set, predPrefs: Set, mass: number) { @@ -75,11 +75,11 @@ export class Creature extends Vore implements Combatant { } equip (item: Equipment, slot: EquipmentSlot) { - const equipped = this.equipment.get(slot) + const equipped = this.equipment[slot] if (equipped !== undefined) { this.items.push(equipped) } - this.equipment.set(slot, item) + this.equipment[slot] = item } get status (): Array { @@ -110,7 +110,7 @@ export class Creature extends Vore implements Combatant { this.containers.flatMap(container => container.actions), target.otherActions, this.otherContainers.flatMap(container => container.actions), - Array.from(this.equipment.values()).flatMap(item => item.actions), + Object.values(this.equipment).filter(item => item !== undefined).flatMap(item => (item as Equipment).actions), this.items.filter(item => item.kind === ItemKind.Consumable && !item.consumed).flatMap(item => item.actions) ) diff --git a/src/game/maps/town.ts b/src/game/maps/town.ts index 9e5197f..0356be9 100644 --- a/src/game/maps/town.ts +++ b/src/game/maps/town.ts @@ -21,7 +21,7 @@ function makeParty (): Creature[] { } }) fighter.title = "Lv. 6 Fighter" - fighter.equipment.set(Items.EquipmentSlot.MainHand, new Items.Sword()) + fighter.equip(new Items.Sword(), Items.EquipmentSlot.MainHand) const rogue = new Creatures.Human(new ProperNoun('Lidda'), FemalePronouns, { stats: { Toughness: 10, @@ -32,7 +32,7 @@ function makeParty (): Creature[] { } }) rogue.title = "Lv. 5 Rogue" - rogue.equipment.set(Items.EquipmentSlot.MainHand, new Items.Dagger()) + rogue.equip(new Items.Dagger(), Items.EquipmentSlot.MainHand) const wizard = new Creatures.Human(new ProperNoun('Mialee'), FemalePronouns, { stats: { Toughness: 10, @@ -43,7 +43,7 @@ function makeParty (): Creature[] { } }) wizard.title = "Lv. 6 Wizard" - wizard.equipment.set(Items.EquipmentSlot.MainHand, new Items.Wand()) + wizard.equip(new Items.Wand(), Items.EquipmentSlot.MainHand) const cleric = new Creatures.Human(new ProperNoun('Jozan'), MalePronouns, { stats: { Toughness: 15, @@ -54,7 +54,7 @@ function makeParty (): Creature[] { } }) cleric.title = "Lv. 5 Cleric" - cleric.equipment.set(Items.EquipmentSlot.MainHand, new Items.Mace()) + cleric.equip(new Items.Mace(), Items.EquipmentSlot.MainHand) return [fighter, cleric, rogue, wizard] }