Skip to content

Commit ee837f6

Browse files
committed
Extract PlayerInfo component
1 parent ceb9b41 commit ee837f6

File tree

2 files changed

+44
-29
lines changed

2 files changed

+44
-29
lines changed

src/components/GameBoard.vue

Lines changed: 7 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -13,29 +13,11 @@
1313
:class="{'player-user': info == playerInfos.user, 'player-opponent': info != playerInfos.user}">
1414

1515
<!-- Player information boxes -->
16-
<div class="properties player-info-box">
17-
<h4 style="text-decoration: underline; font-weight: bold;" @click="selectEntity(info)"
18-
:class="{'selected': info.selected, 'targetable': doingAction && targets.indexOf(info.id) !== -1}">{{info.name}}</h4>
19-
<ul style="list-style: none outside none; margin: 0; padding: 0;">
20-
<li v-for="(value, name) in info.properties" :key="name">
21-
<b>{{name | formatResourceName}}</b>: {{value}}
22-
</li>
23-
<li><b>Cards: </b>{{ info.zones.Hand ? info.zones.Hand.length() : "?" }}</li>
24-
</ul>
25-
<!-- Action buttons -->
26-
<div class="player-actions">
27-
<div v-for="action in actions" v-if="action.isPlayer && action.id == info.id" :key="action.action">
28-
<input @click="startAction(action)" v-show="!doingAction" type="button" :value="action.action"
29-
class="btn btn-navbar csh-button"/>
30-
</div>
31-
<div v-show="doingAction && info == playerInfos.user">
32-
<input @click="cancelAction()" type="button" value="Cancel"
33-
class="btn btn-navbar csh-button"/>
34-
<input @click="performAction()" type="button" :value="currentAction ? currentAction.action : '(None)'"
35-
class="btn btn-navbar csh-button"/>
36-
</div>
37-
</div>
38-
</div>
16+
<PlayerInfo :info="info" :currentAction="currentAction"
17+
:actions="actions" :selectEntity="selectEntity" :startAction="startAction" :cancelAction="cancelAction" :performAction="performAction"
18+
:showActions="doingAction && info == playerInfos.user">
19+
20+
</PlayerInfo>
3921

4022
<!-- Player cards -->
4123
<div v-for="(zoneInfo, zoneName) in info.zones" class="zone" :class="'zone-' + zoneName" :key="zoneName">
@@ -59,6 +41,7 @@
5941
<script>
6042
import CardshifterServerAPI from "../server_interface";
6143
import CardModel from "./CardModel"
44+
import PlayerInfo from "./PlayerInfo"
6245
6346
export default {
6447
name: "GameBoard",
@@ -95,6 +78,7 @@ export default {
9578
}
9679
},
9780
components: {
81+
PlayerInfo,
9882
CardModel
9983
},
10084
methods: {
@@ -511,12 +495,6 @@ export default {
511495
},
512496
computed: {
513497
514-
},
515-
filters: {
516-
formatResourceName: function(input) {
517-
input = input.replace(/_/g, ' ');
518-
return input.substring(0, 1).toUpperCase() + input.substring(1).toLowerCase();
519-
}
520498
},
521499
beforeDestroy() {
522500
CardshifterServerAPI.$off("type:resetActions", this.resetActions);

src/components/PlayerInfo.vue

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<template>
2+
<div class="properties player-info-box">
3+
<h4 style="text-decoration: underline; font-weight: bold;" @click="selectEntity(info)"
4+
:class="{'selected': info.selected, 'targetable': currentAction !== null && targets.indexOf(info.id) !== -1}">{{info.name}}</h4>
5+
<ul style="list-style: none outside none; margin: 0; padding: 0;">
6+
<li v-for="(value, name) in info.properties" :key="name">
7+
<b>{{name | formatResourceName}}</b>: {{value}}
8+
</li>
9+
<li><b>Cards: </b>{{ info.zones.Hand ? info.zones.Hand.length() : "?" }}</li>
10+
</ul>
11+
<!-- Action buttons -->
12+
<div class="player-actions">
13+
<div v-for="action in actions" v-if="action.isPlayer && action.id == info.id" :key="action.action">
14+
<input @click="startAction(action)" v-show="currentAction === null" type="button" :value="action.action"
15+
class="btn btn-navbar csh-button"/>
16+
</div>
17+
<div v-show="showActions">
18+
<input @click="cancelAction()" type="button" value="Cancel"
19+
class="btn btn-navbar csh-button"/>
20+
<input @click="performAction()" type="button" :value="currentAction ? currentAction.action : '(None)'"
21+
class="btn btn-navbar csh-button"/>
22+
</div>
23+
</div>
24+
</div>
25+
</template>
26+
<script>
27+
export default {
28+
name: "PlayerInfo",
29+
props: ["info", "actions", "showActions", "currentAction", "selectEntity", "startAction", "cancelAction", "performAction"],
30+
filters: {
31+
formatResourceName: function(input) {
32+
input = input.replace(/_/g, ' ');
33+
return input.substring(0, 1).toUpperCase() + input.substring(1).toLowerCase();
34+
}
35+
}
36+
}
37+
</script>

0 commit comments

Comments
 (0)