1
0
forked from noxious/client

Character mirror

This commit is contained in:
Justus Walter-Helk 2024-05-30 12:55:41 +02:00
parent 220c7a1d9c
commit 838092be50
2 changed files with 74 additions and 35 deletions

View File

@ -1,42 +1,77 @@
<template>
<div>
<div id="characters-wrapper">
<div id="characters">
<h1>Select your character</h1>
<div id="list">
<div v-for="character in characters" :key="character.id">
<input type="radio" :id="character.id" name="character" :value="character.id">
<label :for="character.id">
{{ character.name }}
<img src="/assets/avatar/default/base_right_down.png" />
</label>
</div>
</div>
<div>
<div id="characters-wrapper">
<div id="characters">
<h1>Select your character</h1>
<div id="list">
<div v-for="character in characters" :key="character.id">
<input
type="radio"
:id="character.id"
name="character"
:value="character.id"
v-model="selectedCharacterId"
@change="characterSelected"
/>
<label :for="character.id">
{{ character.name }}
<img src="/assets/avatar/default/base_right_down.png" />
</label>
</div>
</div>
<button>Play</button>
<button @click="onPlayButton">Play</button>
<hr>
<Create />
</div>
<hr />
<Create />
</div>
</div>
</div>
</div>
</template>
<script setup lang="ts">
import { useSocketStore } from '@/stores/socket'
import { ref } from 'vue'
import Create from '@/components/screens/partials/characters/Create.vue'
import { usePlayerStore } from '@/stores/player'
const socket = useSocketStore();
const characters = ref([]);
socket.getConnection.emit('character:list');
const socket = useSocketStore()
const characters = ref([])
const selectedCharacterId = ref<number | null>(null)
socket.getConnection.emit('character:list')
socket.getConnection.on('character:list', (data: any) => {
console.log(data);
characters.value = data;
});
console.log(data)
characters.value = data
})
//Get selected character
const characterSelected = () => {
const selectedCharacter = characters.value.find(
(character) => character.id === selectedCharacterId.value
)
if (selectedCharacter) {
console.log(`Selected character ID: ${selectedCharacterId.value}`)
console.log(`Selected character name: ${selectedCharacter.name}`)
}
}
const onPlayButton = () => {
if (selectedCharacterId.value !== null) {
//Store locally
usePlayerStore().setCharacter(selectedCharacterId.value)
//Send to server
socket.getConnection.emit('character:playselected', {
characterId: selectedCharacterId.value,
playerId: usePlayerStore().player?.id,
playerUsername: usePlayerStore().player?.username
})
} else {
alert('Please select a valid character!')
}
}
</script>
<style lang="scss">
@ -50,9 +85,9 @@ socket.getConnection.on('character:list', (data: any) => {
}
#characters {
background: #FFFFFF;
padding:30px;
color:black;
background: #ffffff;
padding: 30px;
color: black;
}
#list {
@ -66,7 +101,7 @@ socket.getConnection.on('character:list', (data: any) => {
}
// hide the radio buttons
input[type="radio"] {
input[type='radio'] {
display: none;
}
@ -79,9 +114,9 @@ socket.getConnection.on('character:list', (data: any) => {
}
// for selected radio, give bg color
input[type="radio"]:checked + label {
input[type='radio']:checked + label {
background: #ff0000;
padding: 5px;
}
}
</style>
</style>

View File

@ -1,14 +1,18 @@
import { defineStore } from 'pinia';
import { defineStore } from 'pinia'
import Player from '@/engine/Player/Player'
export const usePlayerStore = defineStore('player', {
state: () => ({
player: null as Player | null,
character: null as integer | null //Saving the character ID???
}),
actions: {
setPlayer(player: Player) {
this.player = player;
this.player = player
},
setCharacter(character: integer) {
this.character = character
}
}
});
})