Merge branch 'main' into feat-discard-unwrap
This commit is contained in:
Vendored
+2
-1
@@ -2,5 +2,6 @@
|
||||
"files.exclude": {
|
||||
"**/.nuxt/": true,
|
||||
"**/node_modules": true
|
||||
}
|
||||
},
|
||||
"vue.server.hybridMode": true
|
||||
}
|
||||
@@ -43,20 +43,40 @@ function keyUpHandler(e: KeyboardEvent) {
|
||||
return false
|
||||
}
|
||||
|
||||
function contextMenuHandler(e: MouseEvent) {
|
||||
e.preventDefault()
|
||||
}
|
||||
|
||||
function mouseDownHandler(e: MouseEvent) {
|
||||
if (e.button !== 2) { return }
|
||||
goStore.zoomKeyPressed = true
|
||||
e.preventDefault()
|
||||
return false
|
||||
}
|
||||
|
||||
function mouseUpHandler(e: MouseEvent) {
|
||||
if (e.button !== 2) { return }
|
||||
goStore.zoomKeyPressed = false
|
||||
e.preventDefault()
|
||||
return false
|
||||
}
|
||||
|
||||
function follow_mouse(e: MouseEvent) {
|
||||
goStore.clientMouseX = e.clientX
|
||||
goStore.clientMouseY = e.clientY
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
window.addEventListener("keydown", (keyDownHandler))
|
||||
window.addEventListener("keyup", keyUpHandler)
|
||||
window.addEventListener("contextmenu", contextMenuHandler)
|
||||
window.addEventListener("mousedown", mouseDownHandler)
|
||||
window.addEventListener("mouseup", mouseUpHandler)
|
||||
document.addEventListener("mousemove", follow_mouse)
|
||||
})
|
||||
|
||||
onUnmounted(() => {
|
||||
window.removeEventListener("keydown", (keyDownHandler))
|
||||
window.removeEventListener("keyup", keyUpHandler)
|
||||
window.removeEventListener("contextmenu", contextMenuHandler)
|
||||
window.removeEventListener("mousedown", mouseDownHandler)
|
||||
window.removeEventListener("mouseup", mouseUpHandler)
|
||||
document.removeEventListener("mousemove", follow_mouse)
|
||||
})
|
||||
|
||||
@@ -64,6 +84,7 @@ onDeactivated
|
||||
</script>
|
||||
<template>
|
||||
<div class="root_dom_div">
|
||||
<CardOverlay v-if="goStore.zoomKeyPressed" :card_id="goStore.hoveredCard" />
|
||||
<NuxtPage />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -60,6 +60,7 @@ const isTurn = computed(() => goStore.self && goStore.current_game?.started && (
|
||||
align-items: center;
|
||||
z-index: 2;
|
||||
position: relative;
|
||||
gap: 2px;
|
||||
}
|
||||
|
||||
.separator {
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
<script setup lang="ts">
|
||||
import type { Player } from '~/netcode/Player';
|
||||
|
||||
|
||||
export interface Props {
|
||||
player: Player;
|
||||
}
|
||||
|
||||
const props = defineProps<Props>()
|
||||
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="player-icon-container">
|
||||
<img class="avatar" v-if="props.player.image" :src="props.player.image">
|
||||
<b class="player-name">{{ props.player.username }}</b>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
.player-icon-container {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin: 10px;
|
||||
}
|
||||
|
||||
.avatar {
|
||||
height: 50px;
|
||||
border-radius: 25px;
|
||||
}
|
||||
|
||||
.player-name {
|
||||
font-size: 20px;
|
||||
font-family:'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
||||
margin-left: 10px;
|
||||
|
||||
color: white;
|
||||
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.8);
|
||||
}
|
||||
</style>
|
||||
@@ -92,18 +92,15 @@ const prepare_champion = (target: Card) => run_effect(CardEffects.PREPARE, targe
|
||||
</div>
|
||||
</template>
|
||||
<div id="player_banner">
|
||||
<div class="ready-bubble not-ready" v-if="!props.player.ready && !goStore.current_game?.started">Pas encore prêt...</div>
|
||||
<div class="ready-bubble ready" v-if="props.player.ready && !goStore.current_game?.started">Prêt!</div>
|
||||
<div id="player_info">
|
||||
|
||||
|
||||
<PlayerIcon :player="props.player"></PlayerIcon>
|
||||
</div>
|
||||
<div id="player_stats">
|
||||
<img v-if="props.player.image" :src="props.player.image">
|
||||
<b>{{ props.player.username }}</b>
|
||||
<PlayerStats :player="props.player"></PlayerStats>
|
||||
|
||||
|
||||
|
||||
<PlayerStats v-if="goStore.current_game?.started" :player="props.player"></PlayerStats>
|
||||
</div>
|
||||
<div v-if="props.player.ready && !goStore.current_game?.started">READY</div>
|
||||
</div>
|
||||
<div id="current_player_board">
|
||||
<button @click.stop="damage_team(props.player.team)"
|
||||
@@ -294,4 +291,20 @@ const prepare_champion = (target: Card) => run_effect(CardEffects.PREPARE, targe
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
}
|
||||
|
||||
.ready-bubble {
|
||||
color: white;
|
||||
padding: 0.5em;
|
||||
border-radius: 1em;
|
||||
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
|
||||
margin-bottom: 3%;
|
||||
}
|
||||
|
||||
.ready {
|
||||
background-color: green;
|
||||
}
|
||||
|
||||
.not-ready {
|
||||
background-color: maroon;
|
||||
}
|
||||
</style>
|
||||
|
||||
+33
-33
@@ -25,10 +25,10 @@ const router = useRouter();
|
||||
<p>​</p>
|
||||
<p>Et quoi de mieux pour faire ça que des cartes colorées?</p>
|
||||
<div class="card-row">
|
||||
<CardPreview :card_id="6"></CardPreview>
|
||||
<CardPreview :card_id="19"></CardPreview>
|
||||
<CardPreview :card_id="36"></CardPreview>
|
||||
<CardPreview :card_id="46"></CardPreview>
|
||||
<CardPreview :card_id="6" :tilted="false"></CardPreview>
|
||||
<CardPreview :card_id="19" :tilted="false"></CardPreview>
|
||||
<CardPreview :card_id="36" :tilted="false"></CardPreview>
|
||||
<CardPreview :card_id="46" :tilted="false"></CardPreview>
|
||||
</div>
|
||||
<p>​</p>
|
||||
<hr>
|
||||
@@ -48,7 +48,7 @@ const router = useRouter();
|
||||
<p>Comme c'est un jeu de "deckbuilding", on va expliquer ce qu'est le "deck" et ce qui nous permet de le
|
||||
"build".</p>
|
||||
<div class="card-row">
|
||||
<CardPreview :card_id="undefined"></CardPreview>
|
||||
<CardPreview :card_id="undefined" :tilted="false"></CardPreview>
|
||||
</div>
|
||||
<p>​</p>
|
||||
<p>
|
||||
@@ -76,10 +76,10 @@ const router = useRouter();
|
||||
<li>1x Dégats (2)</li>
|
||||
</ul>
|
||||
<div class="card-row">
|
||||
<CardPreview :card_id="56"></CardPreview>
|
||||
<CardPreview :card_id="59"></CardPreview>
|
||||
<CardPreview :card_id="58"></CardPreview>
|
||||
<CardPreview :card_id="57"></CardPreview>
|
||||
<CardPreview :card_id="56" :tilted="false"></CardPreview>
|
||||
<CardPreview :card_id="59" :tilted="false"></CardPreview>
|
||||
<CardPreview :card_id="58" :tilted="false"></CardPreview>
|
||||
<CardPreview :card_id="57" :tilted="false"></CardPreview>
|
||||
</div>
|
||||
<p>
|
||||
La pioche est formée au hasard: on peut donc avoir une main de départ avec 5 or et 2 dégats, ou 3 or
|
||||
@@ -99,15 +99,15 @@ const router = useRouter();
|
||||
Les cartes sont divisées en 3 catégories: objets, actions et champions.
|
||||
</p>
|
||||
<div class="card-row">
|
||||
<CardPreview :card_id="56"></CardPreview>
|
||||
<CardPreview :card_id="52"></CardPreview>
|
||||
<CardPreview :card_id="43"></CardPreview>
|
||||
<CardPreview :card_id="56" :tilted="false"></CardPreview>
|
||||
<CardPreview :card_id="52" :tilted="false"></CardPreview>
|
||||
<CardPreview :card_id="43" :tilted="false"></CardPreview>
|
||||
</div>
|
||||
<p>​</p>
|
||||
<h3>Objets & actions</h3>
|
||||
<div class="card-row">
|
||||
<CardPreview :card_id="56"></CardPreview>
|
||||
<CardPreview :card_id="52"></CardPreview>
|
||||
<CardPreview :card_id="56" :tilted="false"></CardPreview>
|
||||
<CardPreview :card_id="52" :tilted="false"></CardPreview>
|
||||
</div>
|
||||
<p>
|
||||
Par simplicité, disons que les objets et les actions sont pareil: on les joue, ils font un effet
|
||||
@@ -115,7 +115,7 @@ const router = useRouter();
|
||||
</p>
|
||||
<h3>Champions (& gardes)</h3>
|
||||
<div class="card-row">
|
||||
<CardPreview :card_id="43"></CardPreview>
|
||||
<CardPreview :card_id="43" :tilted="false"></CardPreview>
|
||||
</div>
|
||||
<p>
|
||||
Les champions sont un peu plus complexes: ils restent sur le terrain, et on peut les utiliser à
|
||||
@@ -127,7 +127,7 @@ const router = useRouter();
|
||||
<p>Ces dégats doivent être faits d'un coup. Je ne peux pas faire un peu de dégats pendant un tour, et un
|
||||
peu le tour d'après pour les tuer.</p>
|
||||
<div class="card-row">
|
||||
<CardPreview :card_id="49"></CardPreview>
|
||||
<CardPreview :card_id="49" :tilted="false"></CardPreview>
|
||||
</div>
|
||||
<p>
|
||||
Par ailleurs, certains champions sont des Gardes <img src="/images/champion-shield-guard.png"
|
||||
@@ -150,10 +150,10 @@ const router = useRouter();
|
||||
class="icon_img" draggable="false" /> sert exclusivement à accomplir ce but: acheter des cartes.
|
||||
</p>
|
||||
<div class="card-row">
|
||||
<CardPreview :card_id="6"></CardPreview>
|
||||
<CardPreview :card_id="19"></CardPreview>
|
||||
<CardPreview :card_id="36"></CardPreview>
|
||||
<CardPreview :card_id="46"></CardPreview>
|
||||
<CardPreview :card_id="6" :tilted="false"></CardPreview>
|
||||
<CardPreview :card_id="19" :tilted="false"></CardPreview>
|
||||
<CardPreview :card_id="36" :tilted="false"></CardPreview>
|
||||
<CardPreview :card_id="46" :tilted="false"></CardPreview>
|
||||
</div>
|
||||
<p>
|
||||
Un marché est mis à disposition de tous les joueurs, mettant à disposition 5 cartes (pas ici parce
|
||||
@@ -177,18 +177,18 @@ const router = useRouter();
|
||||
</p>
|
||||
<p>​</p>
|
||||
<div class="card-row">
|
||||
<CardPreview :card_id="13"></CardPreview>
|
||||
<CardPreview :card_id="3"></CardPreview>
|
||||
<CardPreview :card_id="1"></CardPreview>
|
||||
<CardPreview :card_id="13" :tilted="false"></CardPreview>
|
||||
<CardPreview :card_id="3" :tilted="false"></CardPreview>
|
||||
<CardPreview :card_id="1" :tilted="false"></CardPreview>
|
||||
</div>
|
||||
<p>​</p>
|
||||
<p>Les cartes <span style="color: darkgoldenrod">jaunes</span> sont les cartes Empire.</p>
|
||||
<p>Elles font beaucoup de soin, et activent souvent des effets de pioche.</p>
|
||||
<p>​</p>
|
||||
<div class="card-row">
|
||||
<CardPreview :card_id="39"></CardPreview>
|
||||
<CardPreview :card_id="34"></CardPreview>
|
||||
<CardPreview :card_id="40"></CardPreview>
|
||||
<CardPreview :card_id="39" :tilted="false"></CardPreview>
|
||||
<CardPreview :card_id="34" :tilted="false"></CardPreview>
|
||||
<CardPreview :card_id="40" :tilted="false"></CardPreview>
|
||||
</div>
|
||||
<p>​</p>
|
||||
<p>Les cartes <span style="color: red">rouges</span> sont les cartes Necros.</p>
|
||||
@@ -196,18 +196,18 @@ const router = useRouter();
|
||||
</p>
|
||||
<p>​</p>
|
||||
<div class="card-row">
|
||||
<CardPreview :card_id="52"></CardPreview>
|
||||
<CardPreview :card_id="46"></CardPreview>
|
||||
<CardPreview :card_id="47"></CardPreview>
|
||||
<CardPreview :card_id="52" :tilted="false"></CardPreview>
|
||||
<CardPreview :card_id="46" :tilted="false"></CardPreview>
|
||||
<CardPreview :card_id="47" :tilted="false"></CardPreview>
|
||||
</div>
|
||||
<p>​</p>
|
||||
<p>Les cartes <span style="color: darkgreen">vertes</span> sont les cartes Sauvages.</p>
|
||||
<p>Elles font beaucoup de dégats, et forcent vos adversaires à jouer moins de cartes.</p>
|
||||
<p>​</p>
|
||||
<div class="card-row">
|
||||
<CardPreview :card_id="24"></CardPreview>
|
||||
<CardPreview :card_id="25"></CardPreview>
|
||||
<CardPreview :card_id="19"></CardPreview>
|
||||
<CardPreview :card_id="24" :tilted="false"></CardPreview>
|
||||
<CardPreview :card_id="25" :tilted="false"></CardPreview>
|
||||
<CardPreview :card_id="19" :tilted="false"></CardPreview>
|
||||
</div>
|
||||
<p>​</p>
|
||||
<p>Les cartes <span style="color: darkblue">bleues</span> sont les cartes Guilde.</p>
|
||||
@@ -217,7 +217,7 @@ const router = useRouter();
|
||||
<h2>Déclencheurs</h2>
|
||||
<p>Les effets de cartes peuvent se déclencher pour 3 raisons différentes.</p>
|
||||
<div class="card-row">
|
||||
<CardPreview :card_id="14"></CardPreview>
|
||||
<CardPreview :card_id="14" :tilted="false"></CardPreview>
|
||||
</div>
|
||||
<p>Sur cette carte, on peut voir les trois en même temps.</p>
|
||||
<p>La 1ère ligne s'active tout le temps.</p>
|
||||
|
||||
@@ -18,8 +18,6 @@ import goStore, { setReady } from "@/netcode";
|
||||
<GameBoard v-if="goStore.context != 'lobby' && goStore.context != 'login'"></GameBoard>
|
||||
<LobbyView v-if="goStore.context == 'lobby'"></LobbyView>
|
||||
<RulesDisplay v-if="goStore.context == 'rules'"></RulesDisplay>
|
||||
<CardOverlay v-if="goStore.zoomKeyPressed" :card_id="goStore.hoveredCard">
|
||||
</CardOverlay>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user