浏览代码

Allow for several combat scenes to be chosen from

master
Fen Dweller 5 年前
父节点
当前提交
a841cb8a88
共有 3 个文件被更改,包括 41 次插入15 次删除
  1. +27
    -13
      src/App.vue
  2. +10
    -1
      src/components/Header.vue
  3. +4
    -1
      src/game/combat.ts

+ 27
- 13
src/App.vue 查看文件

@@ -1,12 +1,12 @@
<template> <template>
<div id="app"> <div id="app">
<Header version="pre-alpha" />
<Combat :encounter="encounter" />
<Header version="pre-alpha" @selectEncounter="selectEncounter" :encounters="encounters" />
<Combat v-show="$data.encounter === encounter" v-for="(encounter, index) in encounters" :key="'encounter-' + index" :encounter="encounter" />
</div> </div>
</template> </template>


<script lang="ts"> <script lang="ts">
import { Component, Vue, Prop } from 'vue-property-decorator'
import { Component, Vue, Prop, Emit } from 'vue-property-decorator'
import Combat from './components/Combat.vue' import Combat from './components/Combat.vue'
import Header from './components/Header.vue' import Header from './components/Header.vue'
import * as Creatures from '@/game/creatures' import * as Creatures from '@/game/creatures'
@@ -18,14 +18,35 @@ import { Encounter } from './game/combat'
@Component({ @Component({
components: { components: {
Combat, Header Combat, Header
},
data () {
return {
encounter: null,
encounters: null
}
} }
}) })
export default class App extends Vue { export default class App extends Vue {
encounter: Encounter

constructor () { constructor () {
super() super()
}

@Emit('selectEncounter')
selectEncounter (encounter: Encounter) {
this.$data.encounter = encounter
}

created () {
this.$data.encounters = []

this.$data.encounters.push(new Encounter({ name: 'Boss Fight' }, this.makeParty().concat([new Creatures.Withers(), new Creatures.Kenzie()])))
this.$data.encounters.push(new Encounter({ name: 'Cafat' }, this.makeParty().concat([new Creatures.Cafat(), new Creatures.Wolf()])))
this.$data.encounters.push(new Encounter({ name: 'Dragon' }, this.makeParty().concat([new Creatures.Dragon()])))

this.$data.encounter = this.$data.encounters[0]
}


makeParty (): Creature[] {
const fighter = new Creatures.Human(new ProperNoun("Redgar"), MalePronouns, { const fighter = new Creatures.Human(new ProperNoun("Redgar"), MalePronouns, {
stats: { stats: {
Toughness: 20, Toughness: 20,
@@ -71,14 +92,7 @@ export default class App extends Vue {
cleric.title = "Lv. 5 Cleric" cleric.title = "Lv. 5 Cleric"
cleric.items.push(Items.Mace) cleric.items.push(Items.Mace)


const withers = new Creatures.Withers()
const kenzie = new Creatures.Kenzie()
const cafat = new Creatures.Cafat()
const wolf = new Creatures.Wolf()
const dragon = new Creatures.Dragon()
const combatants = [fighter, wizard, rogue, cleric, withers, kenzie, cafat, wolf, dragon]
this.encounter = new Encounter(combatants)
console.log(this.encounter)
return [fighter, cleric, rogue, wizard]
} }
} }
</script> </script>


+ 10
- 1
src/components/Header.vue 查看文件

@@ -3,20 +3,29 @@
<div> <div>
<a href="https://classic.feast.crux.sexy">Old version</a> <a href="https://classic.feast.crux.sexy">Old version</a>
</div> </div>
<div>Version: {{version}}</div>
<div> <div>
<a href="https://discord.gg/2DmtgEM"><i class="fab fa-discord" /></a> <a href="https://discord.gg/2DmtgEM"><i class="fab fa-discord" /></a>
</div> </div>
<div>Version: {{version}}</div>
<div>
<button @click="select(encounter)" v-for="(encounter, index) in encounters" :key="'encounter-'+index">{{encounter.desc.name.toString()}}</button>
</div>
</div> </div>
</template> </template>


<script lang="ts"> <script lang="ts">


import { Component, Vue, Prop } from 'vue-property-decorator' import { Component, Vue, Prop } from 'vue-property-decorator'
import { Encounter } from '@/game/combat'


@Component({}) @Component({})
export default class Header extends Vue { export default class Header extends Vue {
@Prop() version!: string @Prop() version!: string
@Prop() encounters!: Encounter[]

select (encounter: Encounter) {
this.$emit('selectEncounter', encounter)
}
} }


</script> </script>


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

@@ -383,6 +383,9 @@ export abstract class StatusEffect extends Effective implements VisibleStatus {
get bottomRight () { return '' } get bottomRight () { return '' }
} }


export type EncounterDesc = {
name: TextLike;
}
/** /**
* An Encounter describes a fight: who is in it and whose turn it is * An Encounter describes a fight: who is in it and whose turn it is
*/ */
@@ -391,7 +394,7 @@ export class Encounter {
currentMove: Creature currentMove: Creature
turnTime = 100 turnTime = 100


constructor (public combatants: Creature[]) {
constructor (public desc: EncounterDesc, public combatants: Creature[]) {
this.initiatives = new Map() this.initiatives = new Map()


combatants.forEach(combatant => this.initiatives.set(combatant, 0)) combatants.forEach(combatant => this.initiatives.set(combatant, 0))


正在加载...
取消
保存