Agregada funcionalidad ignorar oportunidad
This commit is contained in:
parent
9641f03cb3
commit
d342d37b1c
@ -15,6 +15,8 @@ div
|
|||||||
:posicion="1"
|
:posicion="1"
|
||||||
:esTurnoActual="turnoActual === obtClaveMap('1')"
|
:esTurnoActual="turnoActual === obtClaveMap('1')"
|
||||||
:fnDescartarCarta="descartarCarta"
|
:fnDescartarCarta="descartarCarta"
|
||||||
|
:idUsuario="idUsuario"
|
||||||
|
:ws="socket"
|
||||||
)
|
)
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -36,6 +38,7 @@ const manoInicial = {
|
|||||||
cartasReveladas: [],
|
cartasReveladas: [],
|
||||||
descartes: [],
|
descartes: [],
|
||||||
sigCarta: -1,
|
sigCarta: -1,
|
||||||
|
oportunidades: []
|
||||||
};
|
};
|
||||||
|
|
||||||
const obtClave = (obj: any, valor: string): string | undefined => {
|
const obtClave = (obj: any, valor: string): string | undefined => {
|
||||||
@ -83,15 +86,15 @@ export default defineComponent({
|
|||||||
esPantallaCompleta.value = false;
|
esPantallaCompleta.value = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
let socket: WebSocket;
|
let socket = ref<WebSocket | undefined>(undefined);
|
||||||
const map: any = {};
|
const map: any = {};
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
if (!idJuego || !idUsuario) return;
|
if (!idJuego || !idUsuario) return;
|
||||||
|
|
||||||
socket = new WebSocket(`${wsServidor}/juego`);
|
const socketInner = new WebSocket(`${wsServidor}/juego`);
|
||||||
|
|
||||||
socket.addEventListener("open", () => {
|
socketInner.addEventListener("open", () => {
|
||||||
socket.send(JSON.stringify({
|
socketInner.send(JSON.stringify({
|
||||||
operacion: "conectar",
|
operacion: "conectar",
|
||||||
datos: JSON.stringify({
|
datos: JSON.stringify({
|
||||||
idJuego,
|
idJuego,
|
||||||
@ -100,10 +103,11 @@ export default defineComponent({
|
|||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
|
|
||||||
socket.addEventListener("message", (ev) => {
|
socketInner.addEventListener("message", (ev) => {
|
||||||
const info = JSON.parse(ev.data);
|
const info = JSON.parse(ev.data);
|
||||||
switch (info.operacion) {
|
switch (info.operacion) {
|
||||||
case "actualizar_datos": {
|
case "actualizar_datos": {
|
||||||
|
cartaDescartada.value = false;
|
||||||
const d = info.datos;
|
const d = info.datos;
|
||||||
console.log(info.datos);
|
console.log(info.datos);
|
||||||
dora.value = info.datos.dora;
|
dora.value = info.datos.dora;
|
||||||
@ -173,15 +177,17 @@ export default defineComponent({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
socket.value = socketInner;
|
||||||
});
|
});
|
||||||
onUnmounted(() => {
|
onUnmounted(() => {
|
||||||
if (socket) socket.close();
|
if (socket) socket.value!!.close();
|
||||||
});
|
});
|
||||||
|
|
||||||
const descartarCarta = (valorCarta: number) => {
|
const descartarCarta = (valorCarta: number) => {
|
||||||
if (turnoActual.value === obtClave(map, "1") && !cartaDescartada.value) {
|
if (turnoActual.value === obtClave(map, "1") && !cartaDescartada.value) {
|
||||||
cartaDescartada.value = true;
|
cartaDescartada.value = true;
|
||||||
socket.send(JSON.stringify({
|
socket.value!!.send(JSON.stringify({
|
||||||
operacion: "descarte",
|
operacion: "descarte",
|
||||||
datos: JSON.stringify({
|
datos: JSON.stringify({
|
||||||
idJuego,
|
idJuego,
|
||||||
@ -198,6 +204,8 @@ export default defineComponent({
|
|||||||
doraOculto,
|
doraOculto,
|
||||||
turnosDora,
|
turnosDora,
|
||||||
cartasRestantes,
|
cartasRestantes,
|
||||||
|
idUsuario,
|
||||||
|
socket,
|
||||||
mano1,
|
mano1,
|
||||||
mano2,
|
mano2,
|
||||||
mano3,
|
mano3,
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<template lang="pug">
|
<template lang="pug">
|
||||||
div.contenedor-dora
|
div.contenedor-dora
|
||||||
carta(v-for="(c, i) in dora" :valor="c" :escala="0.75" :key="i")
|
carta(v-for="(c, i) in doraCerrado" :valor="c" :escala="0.75" :key="i")
|
||||||
br
|
br
|
||||||
carta(v-for="(c, i) in doraOculto" :valor="c" :escala="0.75" :key="i")
|
carta(v-for="(c, i) in doraAbierto" :valor="c" :escala="0.75" :key="i")
|
||||||
|
|
||||||
//
|
//
|
||||||
</template>
|
</template>
|
||||||
@ -29,11 +29,28 @@ export default defineComponent({
|
|||||||
default: 32
|
default: 32
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
setup() {
|
setup(props) {
|
||||||
const {pH} = useDimensions();
|
const {pH} = useDimensions();
|
||||||
const pHc = computed(() => pH.value + "px");
|
const pHc = computed(() => pH.value + "px");
|
||||||
|
|
||||||
|
const doraCerrado = computed(() => {
|
||||||
|
const narr = [...props.dora];
|
||||||
|
for (let i = narr.length; i < 5; i++) {
|
||||||
|
narr.push(0);
|
||||||
|
}
|
||||||
|
return narr;
|
||||||
|
});
|
||||||
|
const doraAbierto = computed(() => {
|
||||||
|
const narr = [...props.doraOculto];
|
||||||
|
for (let i = narr.length; i < 5; i++) {
|
||||||
|
narr.push(0);
|
||||||
|
}
|
||||||
|
return narr;
|
||||||
|
});
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
doraCerrado,
|
||||||
|
doraAbierto,
|
||||||
pHc
|
pHc
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,8 +10,7 @@ div.cont-cuadrante-2-mano
|
|||||||
| Quad
|
| Quad
|
||||||
div.opcion-mano(v-if="hayWin" :style="{backgroundColor: '#f44336'}")
|
div.opcion-mano(v-if="hayWin" :style="{backgroundColor: '#f44336'}")
|
||||||
| Win
|
| Win
|
||||||
div.opcion-mano(:style="{backgroundColor: '#9E9E9E'}")
|
opcion-ignorar(v-if="hayTri || haySeq || hayQuad || hayWin" :idUsuario="idUsuario" :ws="ws")
|
||||||
| Ignorar
|
|
||||||
div.cuadrante-mano
|
div.cuadrante-mano
|
||||||
carta(v-for="(c, i) in cartas" :valor="c" :movimiento="posiciones[i]" :fnDescartar="descartarCarta" :key="i")
|
carta(v-for="(c, i) in cartas" :valor="c" :movimiento="posiciones[i]" :fnDescartar="descartarCarta" :key="i")
|
||||||
carta(:valor="-1")
|
carta(:valor="-1")
|
||||||
@ -28,7 +27,7 @@ import { useDimensions } from "@/components/useDimensions";
|
|||||||
import carta from "@/components/carta.vue";
|
import carta from "@/components/carta.vue";
|
||||||
import contenedorDescartes from "./contenedor-descartes.vue"
|
import contenedorDescartes from "./contenedor-descartes.vue"
|
||||||
import { Mano } from "@/views/Juego/types/Mano";
|
import { Mano } from "@/views/Juego/types/Mano";
|
||||||
import { Oportunidad } from "@/views/Juego/types/Oportunidad";
|
import opcionIgnorar from "./opciones-mano/opcion-ignorar.vue"
|
||||||
|
|
||||||
const estaOrdenado = (nums: number[]) => {
|
const estaOrdenado = (nums: number[]) => {
|
||||||
for (let i = 0, j = 1; j < nums.length ; i++, j++) {
|
for (let i = 0, j = 1; j < nums.length ; i++, j++) {
|
||||||
@ -41,8 +40,10 @@ const esperar = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)
|
|||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: "mano",
|
name: "mano",
|
||||||
components: {carta, contenedorDescartes},
|
components: {carta, contenedorDescartes, opcionIgnorar},
|
||||||
props: {
|
props: {
|
||||||
|
idUsuario: String,
|
||||||
|
ws: WebSocket,
|
||||||
mano: Object,
|
mano: Object,
|
||||||
posicion: Number,
|
posicion: Number,
|
||||||
esTurnoActual: Boolean,
|
esTurnoActual: Boolean,
|
||||||
@ -130,29 +131,30 @@ export default defineComponent({
|
|||||||
});
|
});
|
||||||
|
|
||||||
const hayTri = computed(() => {
|
const hayTri = computed(() => {
|
||||||
|
console.log(props.mano);
|
||||||
for (const o of (props.mano!! as Mano).oportunidades) {
|
for (const o of (props.mano!! as Mano).oportunidades) {
|
||||||
if (o.nombreOportunidad === "Tri") return true;
|
if (o?.nombreOportunidad === "Tri") return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
const haySeq = computed(() => {
|
const haySeq = computed(() => {
|
||||||
for (const o of props.mano!!.oportunidades) {
|
for (const o of props.mano!!.oportunidades) {
|
||||||
if ((o as unknown as Oportunidad).nombreOportunidad === "Seq") return true;
|
if (o?.nombreOportunidad === "Seq") return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
const hayQuad = computed(() => {
|
const hayQuad = computed(() => {
|
||||||
for (const o of props.mano!!.oportunidades) {
|
for (const o of props.mano!!.oportunidades) {
|
||||||
if ((o as unknown as Oportunidad).nombreOportunidad === "Quad") return true;
|
if (o?.nombreOportunidad === "Quad") return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
const hayWin = computed(() => {
|
const hayWin = computed(() => {
|
||||||
for (const o of props.mano!!.oportunidades) {
|
for (const o of props.mano!!.oportunidades) {
|
||||||
if ((o as unknown as Oportunidad).nombreOportunidad === "Win") return true;
|
if (o?.nombreOportunidad === "Win") return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
71
src/views/Juego/components/opciones-mano/opcion-ignorar.vue
Normal file
71
src/views/Juego/components/opciones-mano/opcion-ignorar.vue
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
<template lang="pug">
|
||||||
|
div.opcion-mano(@click="enviarSolicitudIgnorarOportunidad" :style="{backgroundColor: '#9E9E9E'}")
|
||||||
|
| Ignorar
|
||||||
|
|
||||||
|
//
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import {defineComponent, computed} from "vue";
|
||||||
|
import { useRoute } from "vue-router";
|
||||||
|
import { useDimensions } from "@/components/useDimensions";
|
||||||
|
|
||||||
|
export default defineComponent({
|
||||||
|
name: "opcion-ignorar",
|
||||||
|
props: {
|
||||||
|
idUsuario: {
|
||||||
|
type: String,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
ws: {
|
||||||
|
type: WebSocket,
|
||||||
|
required: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
setup(props) {
|
||||||
|
const route = useRoute();
|
||||||
|
const {pH, phx} = useDimensions();
|
||||||
|
|
||||||
|
const idJuego = route.params.id;
|
||||||
|
|
||||||
|
const enviarSolicitudIgnorarOportunidad = () => {
|
||||||
|
console.log("Pidiendo que se ignore la oportunidad :c");
|
||||||
|
props.ws.send(JSON.stringify({
|
||||||
|
operacion: "ignorar_oportunidad",
|
||||||
|
datos: JSON.stringify({
|
||||||
|
idJuego,
|
||||||
|
idUsuario: props.idUsuario
|
||||||
|
})
|
||||||
|
}));
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
enviarSolicitudIgnorarOportunidad,
|
||||||
|
tamano: computed(() => (pH.value * -0.75) + "px"),
|
||||||
|
phx
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="sass" vars="{tamano, phx}">
|
||||||
|
|
||||||
|
.opcion-mano
|
||||||
|
display: inline-block
|
||||||
|
min-width: 17%
|
||||||
|
font-size: calc(var(--phx) * 3)
|
||||||
|
text-align: center
|
||||||
|
cursor: pointer
|
||||||
|
margin-left: var(--phx)
|
||||||
|
padding: var(--phx) 0
|
||||||
|
color: white
|
||||||
|
font-weight: bold
|
||||||
|
border-radius: calc(var(--phx) * 0.5)
|
||||||
|
box-shadow: 0 0 10px 1px rgba(100, 100, 100, 0.5)
|
||||||
|
transition: transform 100ms
|
||||||
|
&:hover
|
||||||
|
transform: translateY(var(--tamano))
|
||||||
|
|
||||||
|
//
|
||||||
|
</style>
|
22
src/views/Juego/components/opciones-mano/opcion-seq.vue
Normal file
22
src/views/Juego/components/opciones-mano/opcion-seq.vue
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<template lang="pug">
|
||||||
|
div.opcion-mano(v-if="haySeq" :style="{backgroundColor: '#009688'}")
|
||||||
|
| Seq
|
||||||
|
|
||||||
|
//
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import {defineComponent} from "vue";
|
||||||
|
|
||||||
|
export default defineComponent({
|
||||||
|
name: "opcion-seq"
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="sass">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
</style>
|
Loading…
Reference in New Issue
Block a user