This commit is contained in:
syuilo
2024-02-03 18:02:00 +09:00
parent 586a458c7a
commit 00bf57d243
5 changed files with 203 additions and 72 deletions

View File

@@ -187,9 +187,13 @@ SPDX-License-Identifier: AGPL-3.0-only
</div>
<div :class="$style.actions" class="_buttons">
<MkButton v-if="engine.state.canRonSource != null" primary gradate @click="ron">Ron</MkButton>
<MkButton v-if="engine.state.canPonSource != null" primary @click="pon">Pon</MkButton>
<MkButton v-if="engine.state.canRonSource != null || engine.state.canPonSource != null" @click="skip">Skip</MkButton>
<MkButton v-if="engine.state.canRon != null" primary gradate @click="ron">Ron</MkButton>
<MkButton v-if="engine.state.canPon != null" primary @click="pon">Pon</MkButton>
<MkButton v-if="engine.state.canCii != null" primary @click="cii">Cii</MkButton>
<MkButton v-if="engine.state.canKan != null" primary @click="kan">Kan</MkButton>
<MkButton v-if="engine.state.canRon != null || engine.state.canPon != null || engine.state.canCii != null || engine.state.canKan != null" @click="skip">Skip</MkButton>
<MkButton v-if="isMyTurn && engine.canAnkan()" @click="ankan">Ankan</MkButton>
<MkButton v-if="isMyTurn && engine.canKakan()" @click="kakan">Kakan</MkButton>
<MkButton v-if="isMyTurn && canHora" primary gradate @click="tsumoHora">Tsumo</MkButton>
<MkButton v-if="isMyTurn && engine.canRiichi()" primary @click="riichi">Riichi</MkButton>
</div>
@@ -197,7 +201,15 @@ SPDX-License-Identifier: AGPL-3.0-only
<div v-if="showKyokuResults" :class="$style.kyokuResult">
<div v-for="(res, house) in kyokuResults" :key="house">
<div v-if="res != null">
<div>{{ house === 'e' ? i18n.ts._mahjong.east : house === 's' ? i18n.ts._mahjong.south : house === 'w' ? i18n.ts._mahjong.west : i18n.ts._mahjong.north }}</div>
<div>
<div>{{ house === 'e' ? i18n.ts._mahjong.east : house === 's' ? i18n.ts._mahjong.south : house === 'w' ? i18n.ts._mahjong.west : i18n.ts._mahjong.north }}</div>
<template v-if="houseToUser(house) != null">
<MkAvatar :user="houseToUser(house)" style="width: 30px; height: 30px;"/>
</template>
<template v-else>
CPU
</template>
</div>
<div v-for="yaku in res.yakus">
<div>{{ i18n.ts._mahjong._yakus[yaku.name] }} {{ yaku.fan }}{{ i18n.ts._mahjong.fan }}</div>
</div>
@@ -333,13 +345,38 @@ if (!props.room.isEnded) {
}
*/
function houseToUser(house: Mahjong.House) {
return room.value.gameState.user1House === house ? room.value.user1 : room.value.gameState.user2House === house ? room.value.user2 : room.value.gameState.user3House === house ? room.value.user3 : room.value.user4;
}
let riichiSelect = false;
let ankanSelect = false;
let kakanSelect = false;
let ciiSelect = false;
function chooseTile(tile: Mahjong.Tile, ev: MouseEvent) {
if (!isMyTurn.value) return;
iTsumoed.value = false;
if (ankanSelect) {
props.connection!.send('ankan', {
tile: tile,
});
ankanSelect = false;
selectableTiles.value = null;
return;
} else if (kakanSelect) {
props.connection!.send('kakan', {
tile: tile,
});
kakanSelect = false;
selectableTiles.value = null;
return;
} else if (ciiSelect) {
return;
}
props.connection!.send('dahai', {
tile: tile,
riichi: riichiSelect,
@@ -357,11 +394,18 @@ function riichi() {
console.log(Mahjong.getTilesForRiichi(engine.value.myHandTiles));
}
function ankan() {
if (!isMyTurn.value) return;
ankanSelect = true;
selectableTiles.value = engine.value.getAnkanableTiles();
}
function kakan() {
if (!isMyTurn.value) return;
props.connection!.send('kakan', {
});
kakanSelect = true;
selectableTiles.value = engine.value.getKakanableTiles();
}
function tsumoHora() {
@@ -381,6 +425,16 @@ function pon() {
});
}
function cii() {
props.connection!.send('cii', {
});
}
function kan() {
props.connection!.send('kan', {
});
}
function skip() {
engine.value.commit_nop(engine.value.myHouse);
triggerRef(engine);
@@ -649,6 +703,7 @@ onUnmounted(() => {
height: 100%;
max-width: 800px;
margin: auto;
padding: 30px;
box-sizing: border-box;
background: #0009;
color: #fff;