瀏覽代碼

Let the profile of any creature be shown; display perks

vintage
Fen Dweller 5 年之前
父節點
當前提交
1d7c0d4b99
共有 6 個文件被更改,包括 68 次插入21 次删除
  1. +17
    -5
      src/App.vue
  2. +2
    -2
      src/components/Combat.vue
  3. +1
    -2
      src/components/Explore.vue
  4. +46
    -11
      src/components/Profile.vue
  5. +1
    -0
      src/components/Statblock.vue
  6. +1
    -1
      src/game/combat/perks.ts

+ 17
- 5
src/App.vue 查看文件

@@ -3,7 +3,15 @@
<Header :version="version" />
<div id="main-area">
<transition name="component-fade" mode='out-in'>
<component @profile="$data.profileOn = true" @exit="$data.profileOn = false" @give-in="gameOver()" @leave-combat="$data.world.encounter = null" v-bind:is="mode" :world="$data.world" :encounter="$data.world.encounter" />
<component
@profile="profile"
@exit="$data.profileSubject = null"
@give-in="gameOver()"
@leave-combat="$data.world.encounter = null"
v-bind:is="mode"
:world="$data.world"
:subject="$data.profileSubject"
:encounter="$data.world.encounter" />
</transition>
</div>
</div>
@@ -34,7 +42,7 @@ import { Town } from './game/maps/town'
return {
world: null,
home: null,
profileOn: false,
profileSubject: null,
props: {
Explore: {
world: this
@@ -51,10 +59,10 @@ export default class App extends Vue {
}

get mode () {
if (this.$data.world.encounter !== null) {
return "Combat"
} else if (this.$data.profileOn) {
if (this.$data.profileSubject !== null) {
return "Profile"
} else if (this.$data.world.encounter !== null) {
return "Combat"
} else {
return "Explore"
}
@@ -83,6 +91,10 @@ export default class App extends Vue {
this.$data.world.encounter = null
this.$data.world.player.location = this.$data.home
}

profile (subject: Creature) {
this.$data.profileSubject = subject
}
}
</script>



+ 2
- 2
src/components/Combat.vue 查看文件

@@ -1,11 +1,11 @@
<template>
<div class="combat-layout">
<div @wheel="horizWheelLeft" class="statblock-row left-stats">
<Statblock @selected="scrollParentTo($event)" @select="doSelectLeft(combatant, $event)" class="left-stats" :data-ally="combatant.side === encounter.currentMove.side" :data-destroyed="combatant.destroyed" :data-current-turn="encounter.currentMove === combatant" :data-active="combatant === left && combatant !== encounter.currentMove" :data-active-ally="combatant === right" :data-eaten="combatant.containedIn !== null" :data-dead="combatant.vigors.Health <= 0" v-for="(combatant, index) in combatants.filter(c => c.side == Side.Heroes).slice().reverse()" v-bind:key="'left-stat-' + index" :subject="combatant" :initiative="encounter.initiatives.get(combatant)" />
<Statblock v-on="$listeners" @selected="scrollParentTo($event)" @select="doSelectLeft(combatant, $event)" class="left-stats" :data-ally="combatant.side === encounter.currentMove.side" :data-destroyed="combatant.destroyed" :data-current-turn="encounter.currentMove === combatant" :data-active="combatant === left && combatant !== encounter.currentMove" :data-active-ally="combatant === right" :data-eaten="combatant.containedIn !== null" :data-dead="combatant.vigors.Health <= 0" v-for="(combatant, index) in combatants.filter(c => c.side == Side.Heroes).slice().reverse()" v-bind:key="'left-stat-' + index" :subject="combatant" :initiative="encounter.initiatives.get(combatant)" />
<div class="spacer"></div>
</div>
<div @wheel="horizWheelRight" class="statblock-row right-stats">
<Statblock @selected="scrollParentTo($event)" @select="doSelectRight(combatant, $event)" class="right-stats" :data-ally="combatant.side === encounter.currentMove.side" :data-destroyed="combatant.destroyed" :data-current-turn="encounter.currentMove === combatant" :data-active="combatant === right && combatant !== encounter.currentMove" :data-active-ally="combatant === left" :data-eaten="combatant.containedIn !== null" :data-dead="combatant.vigors.Health <= 0" v-for="(combatant, index) in combatants.filter(c => c.side == Side.Monsters)" v-bind:key="'right-stat-' + index" :subject="combatant" :initiative="encounter.initiatives.get(combatant)" />
<Statblock v-on="$listeners" @selected="scrollParentTo($event)" @select="doSelectRight(combatant, $event)" class="right-stats" :data-ally="combatant.side === encounter.currentMove.side" :data-destroyed="combatant.destroyed" :data-current-turn="encounter.currentMove === combatant" :data-active="combatant === right && combatant !== encounter.currentMove" :data-active-ally="combatant === left" :data-eaten="combatant.containedIn !== null" :data-dead="combatant.vigors.Health <= 0" v-for="(combatant, index) in combatants.filter(c => c.side == Side.Monsters)" v-bind:key="'right-stat-' + index" :subject="combatant" :initiative="encounter.initiatives.get(combatant)" />
<div class="spacer"></div>
</div>
<div class="statblock-separator statblock-separator-left"></div>


+ 1
- 2
src/components/Explore.vue 查看文件

@@ -8,8 +8,7 @@
<p class="worldinfo-date">{{ world.time.format("hh:mm:ss a") }}</p>
</div>
<div class="explore-statblock">
<Statblock :subject="world.player" />
<button class="show-profile" @click="$emit('profile')">Show profile</button>
<Statblock v-on="$listeners" :subject="world.player" />
</div>
<div class="explore-wallet">
<WalletView :subject="world.player" />


+ 46
- 11
src/components/Profile.vue 查看文件

@@ -2,15 +2,27 @@
<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" />
<ItemView @click.native="useItem(item)" :item="item" v-for="(item, index) in subject.items" :key="'item-' + index" />
</div>
<div class="character-containers">
<ContainerView :container="container" v-for="(container, index) in world.player.containers" :key="'explore-container-' + index" />
<ContainerView :container="container" v-for="(container, index) in subject.containers" :key="'explore-container-' + index" />
</div>
<div class="character-stats">
<Statblock :subject="world.player" :initiative="0" />
<Statblock :subject="subject" :initiative="0" />
</div>
<EquipmentView class="character-equipment" :subject="world.player" />
<div class="character-perks">
<h2>Perks</h2>
<div
class="perk"
v-for="(perk,index) in subject.perks"
:key="'perk-' + index"
>
<div class="perk-name">{{ perk.name }}</div>
<div class="perk-desc">{{ perk.desc }}</div>
</div>
</div>

<EquipmentView class="character-equipment" :subject="subject" />
</div>
</template>

@@ -31,20 +43,20 @@ import { Item, ItemKind, Equipment } from '@/game/items'
}
})

export default class Explore extends Vue {
export default class Profile extends Vue {
@Prop()
world!: World
subject!: Creature

useItem (item: Item): void {
switch (item.kind) {
case ItemKind.Key:
break
case ItemKind.Consumable:
item.actions[0].execute(this.world.player, this.world.player)
item.actions[0].execute(this.subject, this.subject)
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)
this.subject.equip(item as Equipment, (item as Equipment).slot)
this.subject.items = this.subject.items.filter(i => item !== i)
break
}
}
@@ -61,10 +73,12 @@ export default class Explore extends Vue {
grid-template-areas:
"exit stats"
"items stats"
"items perks"
"items equipment"
"containers containers";
grid-template-rows: 100px 1fr 1fr 0.25fr;
grid-template-rows: 100px 1fr fit-content(25%) 1fr 0.25fr;
grid-template-columns: 1fr 1fr;
grid-gap: 8px;
width: 100%;
height: 100%;
margin: auto;
@@ -102,10 +116,31 @@ export default class Explore extends Vue {
}

.character-stats {
background: #111;
background: #222;
grid-area: stats;
}

.character-perks {
background: #222;
grid-area: perks;
}

.perk {
text-align: left;
text-indent: 16pt;
margin-left: 16pt;
margin-right: 16pt;
margin-bottom: 8pt;
}

.perk-name {
color: #bbb;
}

.perk-desc {
font-size: 75%;
}

.profile-exit {
grid-area: exit;
width: 100%;


+ 1
- 0
src/components/Statblock.vue 查看文件

@@ -60,6 +60,7 @@
<button @click.stop="subject.perspective = POV.First">1st</button>
<button @click.stop="subject.perspective = POV.Second">2nd</button>
<button @click.stop="subject.perspective = POV.Third">3rd</button>
<button class="show-profile" @click="$emit('profile', subject)">Show profile</button>
</div>
</div>
</template>


+ 1
- 1
src/game/combat/perks.ts 查看文件

@@ -4,7 +4,7 @@ import { Creature } from '../creature'
import { TestCategory } from './tests'

export abstract class Perk extends Effective {
constructor (name: TextLike, desc: TextLike) {
constructor (public name: TextLike, public desc: TextLike) {
super()
}
}


Loading…
取消
儲存